Tengo un problema en un programa simple, no entiendo cual es.

Iniciado por Anastacio, 19 Enero 2012, 15:27 PM

0 Miembros y 3 Visitantes están viendo este tema.

Anastacio

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.




You, stop to close my post, you were novice too!!!!!!!!!!!!

satu

#1
Hola

El problema es que restas los números antes de introducirlos. Tú tienes esto

case 2:
          resultado = a-b; //Cuanto valen a y b?? Todavia no les has dado valor
          printf("Resta\n");
          printf("Elija el primer entero\n");
          scanf("%d",&a);
          printf("Elija el segundo entero\n");
          scanf("&d",&b); //Debes sustituir el primer & por %
          printf("Resultado\n%d",resultado);
          getch();
          break;


y debería ser:

case 2:
          printf("Resta\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;


Por cierto, te vendría bien leerte esto

Saludos
Breakbeat como forma de vida

ttzz

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

Xandrete

#3
Cita de: satu en 19 Enero 2012, 15:55 PM
Por cierto, te vendría bien leerte esto

Saludos

Estoy de acuerdo.

Cita de: 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


¿Ases? ¡Ases de las alturas!

[youtube=425,350]http://www.youtube.com/watch?v=ZO6giM9UAv0[/youtube]

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

Saludos

Anastacio

#4
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?
You, stop to close my post, you were novice too!!!!!!!!!!!!

Xandrete

#5
¡Hola!

Cita de: 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??

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.

Cita de: Anastacio en 19 Enero 2012, 20:26 PM
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.

satu

Hola

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


int potencia(int base, int exp)
{
    int i, resul = 1;

    for(i = 0; i < exp; i++)
        resul *= base;

    return resul;
}


O también puedes usar la función pow() que está incluida en math.h que tiene muchas funciones matemáticas.

Saludos
Breakbeat como forma de vida

Xandrete

Cita de: satu en 19 Enero 2012, 20:49 PM
Hola

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


int potencia(int base, int exp)
{
    int i, resul = 1;

    for(i = 0; i < exp; i++)
        resul *= base;

    return resul;
}


O también puedes usar la función pow() que está incluida en math.h 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.

Anastacio

Pero for sale de programacion estructurada. No se podria hacer con programacion estructurada (do while, if then else,etc)?
You, stop to close my post, you were novice too!!!!!!!!!!!!

Xandrete

Cita de: 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)?

¿?

¿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.

for (i = 0; i < algo; ++i) {
    /* codigo */
}


es totalmente lo mismo que

i = 0;
while(i < algo) {
    /* codigo */
    ++i;
}


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í lo explican.