Título: Problema con este programa básico
Publicado por: Manimecker en 21 Octubre 2011, 14:58 pm
Tengo el siguiente problema. Necesito crear un programa que reciba un número del usuario, y que después pida diferentes signos para ir cambiando eventualmente el primer número. Y que al final se muestre de la siguiente manera: Si el símbolo es -, al valor se le resta 1. Si el símbolo es +, al valor se le agrega 1. Si el símbolo es /, al valor se divide entre 2. Si el símbolo es *, al valor se multiplica por 2. (10)-(9)*(18)/(9)+(10)+(11) y así... Tengo el siguiente código: #include <stdio.h> int main() { int N1[50], d2=0, d=1, i=0, d3=0; char S1[50]; for (int i3=0; i3<50; i3++) { N1[i3]=0; S1[i3]=' '; } printf("Inserta un numero entero: "); scanf("%d", &N1[0]); while (S1[d2] = '0') { printf("Inserta el simbolo + para que aumente su valor en 1.\n"); printf("Inserta el simbolo - para que reduzca su valor en 1. \n"); printf("Inserta el simbolo * para que multiplique su valor por 2.\n"); printf("Inserta el simbolo / para que divida su valor en 2.\n"); printf("Inserta la opcion (simbolo) deseada (0 para terminar): "); scanf("%c", &S1[d2]); if (S1[d2]=='0') break; switch (S1[d2]) { case '+' : N1[d]=N1[i]+1; /*CH[d2]='+'*/; break; case '-' : N1[d]=N1[i]-1; /*CH[d2]='-'*/; break; case '*' : N1[d]=N1[i]*2; /*CH[d2]='*'*/; break; case '/' : N1[d]=N1[i]/2; /*CH[d2]='/'*/; break; default : break; } d++; i++; d2++; } for (int i2=0; i2<d2; i2++) { if (N1[i2]==0) break; else printf("(%d)%c\n", N1[i2], S1[i2]); } }
Sin embargo, no logro descubir el error, además de que el primer bucle while se repite antes de que me deje escribir algo. Muchas gracias de antemano.
Título: Re: Problema con este programa básico
Publicado por: Slava_TZD en 21 Octubre 2011, 16:11 pm
(10)-(9)*(18)/(9)+(10)+(11) y así... No me he detenido mucho al leer tu código, hay cosas que no entiendo o que las veo "complicadas" (que se pueden hacer las sencillo). Mira este ejemplo que he hecho a partir de tu código. #include <stdio.h> int main() { int numa=0,opt=0,i=0; char simba,charop[50][50]; printf("Inserta un numero entero: "); while(i<3) { //El bucle se repetirá 3 veces printf("Inserta el simbolo + para que aumente su valor en 1.\nInserta el simbolo - para que reduzca su valor en 1.\nInserta el simbolo * para que multiplique su valor por 2.\n"); printf("Inserta el simbolo / para que divida su valor en 2.\nInserta la opcion (simbolo) deseada (0 para terminar): "); scanf("%c", &simba ); //Se guarda el operados en simba, en el ejemplo solo vale + switch(simba) { case '+' : if(i ==0) sprintf(charop [0], "(%d)+(%d)", numa , numa +1); //Si es la "cabeza" del string se debe mostrar el primer numero y el resultado de sumarle 1 else sprintf(charop [i ], "+(%d)", numa +1); //Por el contrario si no es la cabeza, empezamos con + y luego el resultado de sumarle 1 al último numero numa++; //Se supone que si el usuario introduce + quiere que el numero original se vea aumentado en 1 i++; //subimos el valor de i para indicar que NO será la "cabeza" xD break; } } for(i =0;i <3;i ++) printf("%s", charop [i ]); }
Ya se que no es lo que pedías, es un ejemplo funcional de algo parecido. Luego simplemente tendrías que imprimir el array recursivamente así por ejemplo: for(i =0;i <3;i ++) printf("%s", charop [i ]);
Inserta un numero entero: 1 Inserta el simbolo + para que aumente su valor en 1. Inserta el simbolo - para que reduzca su valor en 1. Inserta el simbolo * para que multiplique su valor por 2. Inserta el simbolo / para que divida su valor en 2. Inserta la opcion (simbolo) deseada (0 para terminar): + Inserta el simbolo + para que aumente su valor en 1. Inserta el simbolo - para que reduzca su valor en 1. Inserta el simbolo * para que multiplique su valor por 2. Inserta el simbolo / para que divida su valor en 2. Inserta la opcion (simbolo) deseada (0 para terminar): + Inserta el simbolo + para que aumente su valor en 1. Inserta el simbolo - para que reduzca su valor en 1. Inserta el simbolo * para que multiplique su valor por 2. Inserta el simbolo / para que divida su valor en 2. Inserta la opcion (simbolo) deseada (0 para terminar): + (1)+(2)+(3)+(4) Saludos, suerte y buen finde. PD: Trata de comentar el código, para que quien lo lea no tenga que pensar xq rayos sumas esto a aquello o se lo quitas a lo otro...etc xD
Título: Re: Problema con este programa básico
Publicado por: Manimecker en 21 Octubre 2011, 20:39 pm
Muchísimas gracias por tus comentarios, me haz solucionado el problemón que tenía con mi programa.
El problema es que yo tiendo a crear los códigos de una manera complicada, y nunca pienso que puede ser muy simple. Debo seguir practicando y pensar lógicamente en el problema y en su solución.
Muchísimas gracias, además de que no conocía el sprintf, y parece ser una buena solución.
Título: Re: Problema con este programa básico
Publicado por: rir3760 en 22 Octubre 2011, 01:41 am
Un detalle: printf("Inserta el simbolo / para que divida su valor en 2.\nInserta la opcion (simbolo) deseada (0 para terminar): ");
Cuando se utiliza el especificador "%c" este no descarta el espacio blanco previo (de ahi la llamada a getchar). Para eliminar el espacio blanco y leer un unico caracter se puede utilizar: printf("Inserta el simbolo / para que divida su valor en 2.\nInserta la opcion (simbolo) deseada (0 para terminar): ");
El espacio en " %c" es critico (con el se elimina primero el espacio blanco y solo entonces se lee el caracter). Un saludo
|