elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
29 Mayo 2012, 02:54  


Tema destacado: [Overclocking] Récords de overclock del foro

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse)
| | |-+  Problema con este programa básico
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema con este programa básico  (Leído 268 veces)
Manimecker

Desconectado Desconectado

Mensajes: 47



Ver Perfil
Problema con este programa básico
« en: 21 Octubre 2011, 14:58 »

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.

Código:
(10)-(9)*(18)/(9)+(10)+(11) y así...

Tengo el siguiente código:
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.


« Última modificación: 21 Octubre 2011, 15:08 por Manimecker » En línea
Tzhed\ Kyperf/
Wiki

Desconectado Desconectado

Mensajes: 802


Tzhed > /dev/sda


Ver Perfil WWW
Re: Problema con este programa básico
« Respuesta #1 en: 21 Octubre 2011, 16:11 »

Citar
(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.

Código
#include <stdio.h>
int main()
{
   int numa=0,opt=0,i=0;
   char simba,charop[50][50];
   printf("Inserta un numero entero: ");
   scanf("%d", &numa);
   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): ");
       getchar(); //Recojemos
       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]);
   printf("\n");
}
 

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:
Código
for(i=0;i<3;i++) printf("%s", charop[i]);
   printf("\n");

Código:
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


« Última modificación: 21 Octubre 2011, 16:20 por Tzhed » En línea
Manimecker

Desconectado Desconectado

Mensajes: 47



Ver Perfil
Re: Problema con este programa básico
« Respuesta #2 en: 21 Octubre 2011, 20:39 »

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.
En línea
rir3760


Desconectado Desconectado

Mensajes: 382


Ver Perfil
Re: Problema con este programa básico
« Respuesta #3 en: 22 Octubre 2011, 01:41 »

Un detalle:
Código
printf("Inserta el simbolo / para que divida su valor en 2.\nInserta la opcion (simbolo) deseada (0 para terminar): ");
getchar();
scanf("%c", &simba);
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:
Código
printf("Inserta el simbolo / para que divida su valor en 2.\nInserta la opcion (simbolo) deseada (0 para terminar): ");
scanf(" %c", &simba);
El espacio en " %c" es critico (con el se elimina primero el espacio blanco y solo entonces se lee el caracter).

Un saludo
En línea

The capacity to learn is a gift;
The ability to learn is a skill;
The willingness to learn is a choice.
--
Rebec of Ginaz
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
PROBLEMA EN ESTE PROGRAMA
Programación General
LOKORIP 0 257 Último mensaje 24 Febrero 2005, 15:24
por LOKORIP
Problema con programa basico
Programación C/C++
nahuelveronesi 2 269 Último mensaje 26 Enero 2009, 23:09
por nahuelveronesi
Cual es el problema de este programa? (c++)
Programación C/C++
csmaper 5 792 Último mensaje 27 Julio 2009, 15:46
por Erik#
tengo un problema con este programa.
Programación C/C++
danyhack 9 1,020 Último mensaje 12 Noviembre 2010, 22:29
por flony
Problema con este programa en Pascal.
Programación General
Manimecker 5 1,772 Último mensaje 9 Abril 2011, 13:18
por skapunky
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines