elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  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 2,112 veces)
Manimecker

Desconectado Desconectado

Mensajes: 47



Ver Perfil
Problema con este programa básico
« 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.

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

Tengo el siguiente código:
Código
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5.    int N1[50], d2=0, d=1, i=0, d3=0; char S1[50];
  6.    for (int i3=0; i3<50; i3++)
  7.    {
  8.        N1[i3]=0;
  9.        S1[i3]=' ';
  10.    }
  11.    printf("Inserta un numero entero: ");
  12.    scanf("%d", &N1[0]);
  13.  
  14.    while (S1[d2] = '0')
  15.    {
  16.        printf("Inserta el simbolo + para que aumente su valor en 1.\n");
  17.        printf("Inserta el simbolo - para que reduzca su valor en 1. \n");
  18.        printf("Inserta el simbolo * para que multiplique su valor por 2.\n");
  19.        printf("Inserta el simbolo / para que divida su valor en 2.\n");
  20.        printf("Inserta la opcion (simbolo) deseada (0 para terminar): ");
  21.        scanf("%c", &S1[d2]);
  22.        if (S1[d2]=='0')
  23.            break;
  24.        switch (S1[d2])
  25.        {
  26.            case '+' : N1[d]=N1[i]+1; /*CH[d2]='+'*/; break;
  27.            case '-' : N1[d]=N1[i]-1; /*CH[d2]='-'*/; break;
  28.            case '*' : N1[d]=N1[i]*2; /*CH[d2]='*'*/; break;
  29.            case '/' : N1[d]=N1[i]/2; /*CH[d2]='/'*/; break;
  30.            default : break;
  31.        }
  32.        d++; i++; d2++;
  33.    }
  34.    for (int i2=0; i2<d2; i2++)
  35.    {
  36.        if (N1[i2]==0)
  37.            break;
  38.        else
  39.            printf("(%d)%c\n", N1[i2], S1[i2]);
  40.    }
  41. }
  42.  

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 pm por Manimecker » En línea

Slava_TZD
Wiki

Desconectado Desconectado

Mensajes: 1.466

♪ [8675309] ♪


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

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
  1. #include <stdio.h>
  2. int main()
  3. {
  4.    int numa=0,opt=0,i=0;
  5.    char simba,charop[50][50];
  6.    printf("Inserta un numero entero: ");
  7.    scanf("%d", &numa);
  8.    while(i<3) { //El bucle se repetirá 3 veces
  9.        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");
  10.        printf("Inserta el simbolo / para que divida su valor en 2.\nInserta la opcion (simbolo) deseada (0 para terminar): ");
  11.        getchar(); //Recojemos
  12.        scanf("%c", &simba); //Se guarda el operados en simba, en el ejemplo solo vale +
  13.        switch(simba) {
  14.            case '+' :
  15.                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
  16.                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
  17.                numa++; //Se supone que si el usuario introduce + quiere que el numero original se vea aumentado en 1
  18.                i++; //subimos el valor de i para indicar que NO será la "cabeza" xD
  19.                break;
  20.        }
  21.    }
  22.    for(i=0;i<3;i++) printf("%s", charop[i]);
  23.    printf("\n");
  24. }
  25.  

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
  1. for(i=0;i<3;i++) printf("%s", charop[i]);
  2.    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 pm por Tzhed » En línea


The fact is, even if you were to stop bombing us, imprisoning us, torturing us, vilifying us, and usurping our lands, we would continue to hate you because our primary reason for hating you will not cease to exist until you embrace Islam.
Manimecker

Desconectado Desconectado

Mensajes: 47



Ver Perfil
Re: Problema con este programa básico
« Respuesta #2 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.
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


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

Un detalle:
Código
  1. printf("Inserta el simbolo / para que divida su valor en 2.\nInserta la opcion (simbolo) deseada (0 para terminar): ");
  2. 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
  1. printf("Inserta el simbolo / para que divida su valor en 2.\nInserta la opcion (simbolo) deseada (0 para terminar): ");
  2. 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

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
tengo un problema con este programa.
Programación C/C++
Danyel_Casvill 9 4,179 Último mensaje 12 Noviembre 2010, 22:29 pm
por flony
Ayuda en un programa basico
Programación C/C++
JOSE23 3 3,030 Último mensaje 21 Febrero 2011, 19:32 pm
por Pirata LOL
Problema con este programa en Pascal.
Programación General
Manimecker 5 4,673 Último mensaje 9 Abril 2011, 13:18 pm
por skapunky
Optimización programa básico
Java
HelThunder 5 2,510 Último mensaje 4 Noviembre 2013, 16:19 pm
por egyware
Duda programa básico c++
Programación C/C++
thealberteitor 6 2,304 Último mensaje 10 Agosto 2016, 18:29 pm
por thealberteitor
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines