Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Anastacio en 19 Enero 2012, 15:27 pm



Título: Tengo un problema en un programa simple, no entiendo cual es.
Publicado por: Anastacio en 19 Enero 2012, 15:27 pm
Hola a todos.

Estoy empezando a programar en C, con Dev C++. Hasta ahora, los programas simples me van bien, ya saben, programa que sume dos numeros, programas con operaciones basicas, etc.

Hace poco, hice este programa, y me parece que tiene un error de logica, porque por X razon la calculadora que hice, la resta no me anda bien, no me deja anotar el segundo entero y me da de resultado un numero negativo alto.

Les dejo el programa y disculpen mi estupidez de novato.


#include <stdio.h>
#include <conio.h>

int main()
{
    int opcion;
    int a;
    int b;
    int resultado;
   printf("Calculadora\n");
   printf("1.Suma\n");
   printf("2.Resta\n");
   printf("3.Multiplicacion\n");
   printf("4.Division\n");
   printf("5.Al cuadrado\n");
   scanf("%d",&opcion);
   
    switch(opcion)
   

   {
      case 1:
          printf("Suma\n");
          printf(" Elija el primer entero\n");
          scanf("%d",&a);
          printf("Elija el segundo entero\n");
          scanf("%d",&b);
          resultado = a+b;
          printf("Resultado\n%d",resultado);
          getch();
          break;
     
      case 2:
           resultado = a-b;
           printf("Resta\n");
           printf("Elija el primer entero\n");
           scanf("%d",&a);
           printf("Elija el segundo entero\n");
           scanf("&d",&b);
           printf("Resultado\n%d",resultado);
           getch();
           break;
           
       case 3:
            printf("Multiplicacion\n");
            printf("Elija el primer entero\n");
            scanf("%d",&a);
            printf("Elija el segundo entero\n");
            scanf("%d",&b);
            resultado = a*b;
            printf("Resultado\n%d",resultado);
            getch();
            break;
           
        case 4:
             printf("Division\n");
             printf("Elija el primer entero\n");     
             scanf("%d",&a);
             printf("Elija el segundo entero\n");
             scanf("%d",&b);
             resultado = a/b;
             printf("Resultado\n%d",resultado);
             getch();
             break;
       
        case 5:
             printf("Al cuadrado\n");
             printf("Elija el numero a potenciar\n");
             scanf("%d",&a);
             resultado = a*a;
             printf("Resultado\n",resultado);
             getch();
             break;
        }
}             
        Muchas gracias.






Título: Re: Tengo un problema en un programa simple, no entiendo cual es.
Publicado por: satu en 19 Enero 2012, 15:55 pm
Hola

El problema es que restas los números antes de introducirlos. Tú tienes esto
Código
  1. case 2:
  2.           resultado = a-b; //Cuanto valen a y b?? Todavia no les has dado valor
  3.           printf("Resta\n");
  4.           printf("Elija el primer entero\n");
  5.           scanf("%d",&a);
  6.           printf("Elija el segundo entero\n");
  7.           scanf("&d",&b); //Debes sustituir el primer & por %
  8.           printf("Resultado\n%d",resultado);
  9.           getch();
  10.           break;
  11.  

y debería ser:
Código
  1. case 2:
  2.           printf("Resta\n");
  3.           printf("Elija el primer entero\n");
  4.           scanf("%d",&a);
  5.           printf("Elija el segundo entero\n");
  6.           scanf("%d",&b);
  7.           resultado = a-b;
  8.           printf("Resultado\n%d",resultado);
  9.           getch();
  10.           break;
  11.  

Por cierto, te vendría bien leerte esto (https://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html)

Saludos


Título: Re: Tengo un problema en un programa simple, no entiendo cual es.
Publicado por: ttzz en 19 Enero 2012, 16:38 pm
Así es amigo no te anda la resta porque la operación la ases antes. No puedes hacer una resta sin tener parámetros primero pides los valores a y b (como lo muestra satu en la respuesta)y luego ases la operación así como lo hiciste con las demás operaciones de la suma


Título: Re: Tengo un problema en un programa simple, no entiendo cual es.
Publicado por: Xandrete en 19 Enero 2012, 16:51 pm
Por cierto, te vendría bien leerte esto (https://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html)

Saludos

Estoy de acuerdo.

Así es amigo no te anda la resta porque la operación la ases antes. No puedes hacer una resta sin tener parámetros primero pides los valores a y b (como lo muestra satu en la respuesta)y luego ases la operación así como lo hiciste con las demás operaciones de la suma


¿Ases? ¡Ases de las alturas!

ZO6giM9UAv0

Perdona, es que me recordaste la canción  ;)

Saludos


Título: Re: Tengo un problema en un programa simple, no entiendo cual es.
Publicado por: Anastacio en 19 Enero 2012, 19:59 pm
GRACIAS!!!!!!!!!!!!!!!

Os agradezco muchisimo amigos, estoy aprendiendo recien C, y soy bastante retardado.

Tengo un problema, diferente. Con Dev C++, mi compilador, quiero compilarlo, ahora que acomode eso, y trabaja como si fuera la version anterior de mi programita. Es decir, me sigue trabajando mal la resta.

Como hago para actualizarlo, y para que el tarado compilador se de cuenta de que el codigo fuente es diferente al anterior??

EI: juntando mensajes.

Quiero añadir mas y mas cosas a este programa. Estuve carcomiendome el cerebro por horas, pero, como harian para que pueda hacer potencias con cualquier exponente?


Título: Re: Tengo un problema en un programa simple, no entiendo cual es.
Publicado por: Xandrete en 19 Enero 2012, 20:47 pm
¡Hola!

GRACIAS!!!!!!!!!!!!!!!

Os agradezco muchisimo amigos, estoy aprendiendo recien C, y soy bastante retardado.

Tengo un problema, diferente. Con Dev C++, mi compilador, quiero compilarlo, ahora que acomode eso, y trabaja como si fuera la version anterior de mi programita. Es decir, me sigue trabajando mal la resta.

Como hago para actualizarlo, y para que el tarado compilador se de cuenta de que el codigo fuente es diferente al anterior??

Antes que nada, quería aclarar que Dev-C++ no es un compilador, es un IDE. El compilador que usa es el de MinGW, que es un port para Windows del gcc.

¿Has comprobado si al guardar has renombrado el código? Si no es esto, borra todos los ejecutables y todos los ficheros objetos de la carpeta donde esté el código y vuelve a probar. Y asegúrate de que resultado=a-b esté efectivamente después del último scanf.

Quiero añadir mas y mas cosas a este programa. Estuve carcomiendome el cerebro por horas, pero, como harian para que pueda hacer potencias con cualquier exponente?

Depende. Con cualquier exponente, ¿te refieres a que el exponente puede ser real (por ejemplo, 23.16753)? ¿Exponente entero (1,-2,5,0,-10)? ¿O exponente estrictamente natural (1,2,3,4,5,6)? Puedes implementar una función tu mismo que calcule la potencia (hay diferencias dependiendo de cual de los tres casos anteriores consideres), a modo de ejercicio, o puedes usar las funciones de la librería math.h (me parece que la función para las potencias se llamaba pow, mírate la documentación para estar seguro).

Saludos.


Título: Re: Tengo un problema en un programa simple, no entiendo cual es.
Publicado por: satu en 19 Enero 2012, 20:49 pm
Hola

Para hacer potencias con cualquier exponente puedes usar esta función:

Código
  1. int potencia(int base, int exp)
  2. {
  3.    int i, resul = 1;
  4.  
  5.    for(i = 0; i < exp; i++)
  6.        resul *= base;
  7.  
  8.    return resul;
  9. }
  10.  

O también puedes usar la función pow() que está incluida en math.h (http://www.cplusplus.com/reference/clibrary/cmath/) que tiene muchas funciones matemáticas.

Saludos


Título: Re: Tengo un problema en un programa simple, no entiendo cual es.
Publicado por: Xandrete en 19 Enero 2012, 20:57 pm
Hola

Para hacer potencias con cualquier exponente puedes usar esta función:

Código
  1. int potencia(int base, int exp)
  2. {
  3.    int i, resul = 1;
  4.  
  5.    for(i = 0; i < exp; i++)
  6.        resul *= base;
  7.  
  8.    return resul;
  9. }
  10.  

O también puedes usar la función pow() que está incluida en math.h (http://www.cplusplus.com/reference/clibrary/cmath/) que tiene muchas funciones matemáticas.

Saludos

Sip, eso te valdría para potencias naturales. Si quieres potencias enteras o reales, la implementación es distinta.


Título: Re: Tengo un problema en un programa simple, no entiendo cual es.
Publicado por: Anastacio en 19 Enero 2012, 21:27 pm
Pero for sale de programacion estructurada. No se podria hacer con programacion estructurada (do while, if then else,etc)?


Título: Re: Tengo un problema en un programa simple, no entiendo cual es.
Publicado por: Xandrete en 20 Enero 2012, 00:24 am
Pero for sale de programacion estructurada. No se podria hacer con programacion estructurada (do while, if then else,etc)?

¿?

¿Cómo que sale de programación estructurada? Un for no es más que una manera de abreviar un while. Si no te gusta el for, hazlo con un while.

Código
  1. for (i = 0; i < algo; ++i) {
  2.    /* codigo */
  3. }

es totalmente lo mismo que

Código
  1. i = 0;
  2. while(i < algo) {
  3.    /* codigo */
  4.    ++i;
  5. }

Pero vamos, no entiendo por qué dices que sale de programación estructurada. Es más, es recomendable usar bucles for en recorridos (como en este caso). Lo que sí que se aleja del concepto de programación estructurada son los goto, los exit y los return antes del final de una función. Aquí (http://es.wikipedia.org/wiki/Programaci%C3%B3n_estructurada) lo explican.


Título: Re: Tengo un problema en un programa simple, no entiendo cual es.
Publicado por: Anastacio en 20 Enero 2012, 19:33 pm
Código:
i = 0;
while(i < algo) {
    /* codigo */
    ++i;
}

para que es el ++i???


Título: Re: Tengo un problema en un programa simple, no entiendo cual es.
Publicado por: rir3760 en 20 Enero 2012, 19:46 pm
Código:
i = 0;
while(i < algo) {
    /* codigo */
    ++i;
}

para que es el ++i?
Para incrementar el contador (la variable "i") en una unidad.

Un saludo


Título: Re: Tengo un problema en un programa simple, no entiendo cual es.
Publicado por: Anastacio en 20 Enero 2012, 22:15 pm
A, gracias!!!!