Tema destacado: Grupo de acebook de elhacker.net
Autor
|
Tema: Mis Programas/Basicos (Leído 77,580 veces)
|
TheMaker
Desconectado
Mensajes: 513
|
Hola  Yo tambien me he interesado un poquito en C++ soy nueva como muchos, no dispongo mas que de tutoriales del mar de internet, y de un buen amigo desarrollador se Sane y otro del Amsn, y de ustedes claro  ando aprendiendo, igual que el resto lo mio es super basico, he aqui una calculadorita que hice  Pero bueno algo es algo. #include <iostream> using std:: cout ; using std:: cin ; using std:: endl; int d, e, f, g;
int main() { while(1) { cout << "Que quieres hacer??\n" ; cout << "1 - Sumar\n" ; cout << "2 - Restar\n" ; cout << "3 - Multiplicar\n" ; cout << "4 - Dividir\n"; cout << "5 - Salir\n" ; cout << "Escribe el numero de las opciones disponibles y pulsa Enter\n" ; cin >> d ; if ( d == 5 ) break ; cout << "Introduce el primer numero \n" ; cin >> e ; cout << "Introduce el segundo numero \n" ; cin >> f ; switch(d) { case 1 : cout << "El numero es " << ( e + f ) << endl ; break ; case 2 : cout << "El numero es " << ( e - f ) << endl ; break ; case 3 : cout << "El numero es " << ( e * f ) << endl ; break ; case 4 : cout << "El numero es " << ( static_cast<float>(e) / f) << endl ; break ; return 0; } } }
Otra forma de hacerlo mas limpio supongo yo... #include <iostream>
using std:: cin;
int main() { int a, b, c ; do { printf("Especifique que quiere hacer \n"); printf("1 - Sumar, 2 - Restar, 3 - Multiplicar, 4 - Dividir, 5-Salir \n"); cin >> c ; if ( c == 5 ) break ; printf("Inserte el primer numero \n"); cin >> a ; printf("Inserte el segundo numero \n") ; cin >> b ; if ( c == 1 ) { printf("El resultado es %i\n", ( a + b ));} if ( c == 2 ) { printf("El resultado es %i\n", ( a - b ));} if ( c == 3 ) { printf("El resultado es %i\n", ( a * b ));} if ( c == 4 ) { printf("El resultado es %i\n", ( a / b ));} return 0; } while(1) ; }
No está mal pero te en ecuenta que estas usando la funcion break, eso hace que tu programa no entre dentro de la programacion estructurado don break solo se puede usar con switch, funcionar funciona pero a mucha gente (profesores) no le gusta muxo
|
|
|
|
|
En línea
|
Gibe money please or I report you
|
|
|
^Tifa^
Desconectado
Mensajes: 2.802
|
Hola TheMaker, si te refieres a los 'break' de los case, esos por obligacion tienen que estar ahi, de lo contrario se imprimirian todos los case juntos ya que el compilador no sabria donde comienza o donde termina la sentencia... y mi objetivo no es que se impriman todas las lineas juntas a la vez, sino que se imprima solo la que yo le indique.... para eso son los break en los case.
Como mi caso no poseo ningun profesor o instructor, pero reconozco que cada gente tiene su formilla de programar, y sus exhigencias diferentes, lo cual considero... no porke a mi amigo le guste usar option explicit en VB o use strict en Perl quiera decir que si yo no lo use, mi codigo este mal, aunque a la vista de el a lo mejor si, son manias de desarrolladores.... pero la forma correcta de los case es usar break.
|
|
|
|
|
En línea
|
|
|
|
(*<>*) HaCKinG_SkrIP
Desconectado
Mensajes: 207
|
Hola TheMaker, si te refieres a los 'break' de los case, esos por obligacion tienen que estar ahi, de lo contrario se imprimirian todos los case juntos ya que el compilador no sabria donde comienza o donde termina la sentencia... y mi objetivo no es que se impriman todas las lineas juntas a la vez, sino que se imprima solo la que yo le indique.... para eso son los break en los case.
Como mi caso no poseo ningun profesor o instructor, pero reconozco que cada gente tiene su formilla de programar, y sus exhigencias diferentes, lo cual considero... no porke a mi amigo le guste usar option explicit en VB o use strict en Perl quiera decir que si yo no lo use, mi codigo este mal, aunque a la vista de el a lo mejor si, son manias de desarrolladores.... pero la forma correcta de los case es usar break.
Me imagino que se refería a los breaks fuera del switch. Los que no "cierran" un switch sino un "if" o otros.
|
|
|
|
« Última modificación: 1 Noviembre 2007, 00:11 por (*<>*) HaCKinG_SkrIP »
|
En línea
|
|
|
|
^Tifa^
Desconectado
Mensajes: 2.802
|
Hola TheMaker si te refieres al 'break' del if  lo considero todavia valido, ya que existe un bucle while donde el break es considerado acceptable. Porque la opcion break? porque esta opcion: while (c != 5) No solia funcionar, y me quedaba dentro del bucle infinito de while, mas yo se que los break rompen los bucles, pero en el casito expuesto arriba con while, inmediatamente yo seleccionase otra opcion que no fuera '5' el jamas iba a dejarme salir del bucle y mi objetivo no era ese. En este caso reconozco que aunque break sea una chapuza, como si hubiera utilizado un goto, no es tan engorroso sobretodo porque por alguna razon existen en los lenguajes de programacion, y cada programador es libre de elegir su manera de programar, esta mal por parte de tus profesores querer imponerte la manera como ellos consideran que esta bien a programar, la proxima vez especificale que si ellos fuesen tan buenos programando estarian trabajando para Microsoft o una empresa como Dell, IBM, HP y no estarian dando clases en una universidad o un colegio.
|
|
|
|
|
En línea
|
|
|
|
(*<>*) HaCKinG_SkrIP
Desconectado
Mensajes: 207
|
Hola TheMaker si te refieres al 'break' del if  lo considero todavia valido, ya que existe un bucle while donde el break es considerado acceptable. Porque la opcion break? porque esta opcion: while (c != 5) No solia funcionar, y me quedaba dentro del bucle infinito de while, mas yo se que los break rompen los bucles, pero en el casito expuesto arriba con while, inmediatamente yo seleccionase otra opcion que no fuera '5' el jamas iba a dejarme salir del bucle y mi objetivo no era ese. En este caso reconozco que aunque break sea una chapuza, como si hubiera utilizado un goto, no es tan engorroso sobretodo porque por alguna razon existen en los lenguajes de programacion, y cada programador es libre de elegir su manera de programar, esta mal por parte de tus profesores querer imponerte la manera como ellos consideran que esta bien a programar, la proxima vez especificale que si ellos fuesen tan buenos programando estarian trabajando para Microsoft o una empresa como Dell, IBM, HP y no estarian dando clases en una universidad o un colegio. Lo del tema de los breaks y el goto, pues no sé exactamente pq a los profesores y demás no les gusta, pero debe haber alguna buena razón ya que es algo generalizado. A mí también me prohiben los breaks fuera de contexto y los goto. En tu situación yo hubiea utilizado un Do{} While(d!=x), siendo x determinado por un if anterior. if((d==1)||(d==2)||(.... Puede que sea algo engorroso, y seguramente hayan mejores formas. Si se me ocurre algo después ya lo pondré, ya que tendré que "entrenar" para no usar breaks...
|
|
|
|
|
En línea
|
|
|
|
^Tifa^
Desconectado
Mensajes: 2.802
|
La razon es tan ridicula como el que la apoya....
Segun he leido sobre goto y breaks que no deben utilizarse si eres un master guru en C++ ya que ambas sentencias son usadas para salir de apuros de manera rapida, pero que segun si eres un guru en C++ debes saber salir de apuros de la forma mas complicada y no utilizando estas sentencias porque como guru de C++ que eres, debes Guriar tu codigo tambien.....
Y yo digo algo, o al menos pretendo pensarlo asi, si los desarrolladores que crearon el lenguaje C++ incluyeron el goto y el break.... es porque ellos entendieron que hay momentos que se necesitan dichas sentencias de lo contrario jamas la hubieran incluido, y si ellos que crearon el lenguaje la incluyen por ser acceptables.... quien puede declararse super Guru para decirme a mi que no puedo utilizar dichas herramientas??????
En fin... no tiene logica.
|
|
|
|
|
En línea
|
|
|
|
(*<>*) HaCKinG_SkrIP
Desconectado
Mensajes: 207
|
La razon es tan ridicula como el que la apoya....
Segun he leido sobre goto y breaks que no deben utilizarse si eres un master guru en C++ ya que ambas sentencias son usadas para salir de apuros de manera rapida, pero que segun si eres un guru en C++ debes saber salir de apuros de la forma mas complicada y no utilizando estas sentencias porque como guru de C++ que eres, debes Guriar tu codigo tambien.....
Y yo digo algo, o al menos pretendo pensarlo asi, si los desarrolladores que crearon el lenguaje C++ incluyeron el goto y el break.... es porque ellos entendieron que hay momentos que se necesitan dichas sentencias de lo contrario jamas la hubieran incluido, y si ellos que crearon el lenguaje la incluyen por ser acceptables.... quien puede declararse super Guru para decirme a mi que no puedo utilizar dichas herramientas??????
En fin... no tiene logica.
Quizás hasat un super master o Gurú se puede encontrar con una situación muy complicada. Además, más vale prevenir que curar. Es como si una persona super sana que nunca se pone enferma. Para que quier desarollar unos medicamentos? Pues por si se dá el caso de acer enfermo. Pero hay que evitar utilizarlos mientras se pueda, para no coger la mala costumbre, y solo utilizarlos CUANDO SEA ESTRICTAMENTE NECESARIO. Eso sí, cada uno es libre de programar como quiera. Bueno, en mi caso no, pq me prohiben usar breaks y gotos...
|
|
|
|
|
En línea
|
|
|
|
|
|
TheMaker
Desconectado
Mensajes: 513
|
Ojo yo tamb lo veo un poco tonteria, pero supongo que si nos lo dicen y le dan tanto importancia a que no los usemos sera por algo. Además de por lo que tengo entendido la sentencia goto no es muy segura y dificulta mucho la lectura de un codigo fuente
|
|
|
|
|
En línea
|
Gibe money please or I report you
|
|
|
TheMaker
Desconectado
Mensajes: 513
|
weno siguiendo con el tema, esta calculadora la hice cuando estab en 3 de eso y tenia 15 años y tmb usaba goto ajaja, aunke en mi caso con un simple do while se habria solucionado el tner k usar el goto #include<stdio.h>
#include<conio.h>
#include<math.c>
int main(){
principio:
printf("\n1 Sumar\n2 Restar\n3 Multiplicar\n4 Dividir\n5 Raiz\n\n\nQue operacion desea hacer?\n");
int a;
scanf("%i",&a);
if (a==1){
printf("\noperando 1\n");
int b;
scanf("%i",&b);
printf("\noperando 2\n");
int c;
scanf("%i",&c);
printf("\n%i y %i suman %i",b,c,b+c);
getch();
}
else if (a==2){
printf("\noperando 1\n");
int b;
scanf("%i",&b);
printf("\noperando 2\n");
int c;
scanf("%i",&c);
printf("\n%i menos %i es %i",b,c,b-c);
getch();
}
else if (a==3){
printf("\noperando 1\n");
int b;
scanf("%i",&b);
printf("\noperando 2\n");
int c;
scanf("%i",&c);
printf("\n%i por %i = %i",b,c,b*c);
getch();
}
else if (a==4){
printf("\noperando 1\n");
int b;
scanf("%i",&b);
printf("\noperando 2\n");
int c;
scanf("%i",&c);
printf("\n%i entre %i = %i",b,c,b/c);
getch();
}
else {
printf("\nHas introducido un numero incorrecto. Por favor introduce un numero valido\n\n\n");
goto principio;
}
}
Evidentemente se debria haber exo mejor con un switch.
|
|
|
|
« Última modificación: 4 Noviembre 2007, 15:51 por TheMaker »
|
En línea
|
Gibe money please or I report you
|
|
|
^Tifa^
Desconectado
Mensajes: 2.802
|
A lo mejor goto es inseguro y muchos break tambien, sobretodo porke los break sino cumplimos lo que nos piden y por ejemplo un usuario hace Ctrl-Z viene el bucle infinito Pero mi pregunta es, si goto y break son tan deficientes o no se cuales sean sus definiciones reales, porque razon se crearon o se agregaron a los lenguajes de programacion???? Esa es la parte que deseo que me respondan los gurus que dicen que no usemos estas 2 sentencias porque? si estan ahi y existen por una razon porke no usarlas??
|
|
|
|
|
En línea
|
|
|
|
|
Eternal Idol
|
Pero mi pregunta es, si goto y break son tan deficientes o no se cuales sean sus definiciones reales, porque razon se crearon o se agregaron a los lenguajes de programacion???? Esa es la parte que deseo que me respondan los gurus que dicen que no usemos estas 2 sentencias porque? si estan ahi y existen por una razon porke no usarlas?? Me parece que el punto no es el uso sino el abuso.
|
|
|
|
|
En línea
|
 La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
TheMaker
Desconectado
Mensajes: 513
|
Weno otro miniprograma: Metes un numero y te devuelve sus divisores positivos #include <iostream> #include <cmath> using namespace std;
int main(){ int numero; cin>>numero; numero=abs(numero); for(int i=1;i<=numero;i++){ if(numero%i==0) cout<<i<<" "; } cout<<endl; system("pause"); }
|
|
|
|
|
En línea
|
Gibe money please or I report you
|
|
|
(*<>*) HaCKinG_SkrIP
Desconectado
Mensajes: 207
|
Weno otro miniprograma: Metes un numero y te devuelve sus divisores positivos #include <iostream> #include <cmath> using namespace std;
int main(){ int numero; cin>>numero; numero=abs(numero); for(int i=1;i<=numero;i++){ if(numero%i==0) cout<<i<<" "; } cout<<endl; system("pause"); } Como puedo observar hay muchas formas de escribir lo mismo en C. El programa que ha escrito Maker, hay algunas partes que no las acabo de entender. Yo lo haría así (Según el ANSI): #include <stdio.h>
void main() { int num, i, cont, div; /*El contador es opcional*/ do { printf("introduzca un numero entero positivo no nulo:\n"); scanf("%d", &num); if(num<1) printf("Valor no válido"); }while(num<1); /*para evitar valores no válidos*/
printf("El numero 1 y %d son divisores, puesto que cualquier entero positivo no\n nulo es divisible por uno y el mismo\n",num); for(i=2, cont=2; i<num ;i++) { if(num%i==0) { printf("El divisor num.%d es %d\n", cont, i); cont++; } } printf("\nEl numero %d tiene %d divisores enteros positivos\n", num, cont); }
Más sencillo de hacer, pero con algún detalle, como el contador y el do while para evitar números negativos. Para un novatillo esta bien, no?
|
|
|
|
|
En línea
|
|
|
|
TheMaker
Desconectado
Mensajes: 513
|
Weno yo lo k hago paar evitar los numbers negativos es hacerles el valor absoluto, y weno m suele pasar la gente no estinde mis codigos aunk creo kel anterior esta claro dime cual es la linea k no comprendes
|
|
|
|
|
En línea
|
Gibe money please or I report you
|
|
|
|
|