SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: Ian en Jueves 4 de Noviembre de 2004, 00:41

Título: Ayuda Con Menus..
Publicado por: Ian en Jueves 4 de Noviembre de 2004, 00:41
Hola!!!!!!!!!!!!!

Tengo un problemilla con un programa........, haber, es el siguiente, el programa despliega un menu, de operaciones, osea permite la opcion de eligir si queremos sumar, restar, multiplicar o dividir, lo hace con Switch, entoces estan los cuatro casos, despues de eligir cualquiera de los casos, y realizar la operacion, da la opcion de termina o regrezar al menu (esto lo hace con  While(opc3) ), la cosa es que si regreso al menu y le doy de nuevo, por ejemplo, sumar, me suma el resultado anterior, esto solo pasa cuando repito la misma operacion, +, --.
Hummmmm,  el programa por ahora solo da la opcion de sumar y restar, iva en esto cuando me di cuenta de el problema...........

-> cuando se elige la opcion restar toma todos los numeros como negativos..... 8 D..

Les agradesco si ven algun otro error, algo que sobre, o que haga falta, soy nuevo en esto dela programacion, pero pues ahí voy x D

Este es el .cpp

#include <conio.h>
#include <iomanip.h>
#include <dos.h>
#include <stdio.h>
#include <iostream.h>


int main()
{
  long float  sum, res, mul, div, resul1, resul2, resul3, resul4;
  int  opc1, opc2, opc3=1, i;

  window(1,1,80,25); textbackground(BLACK); clrscr();

    while (opc3==1)
    {
  window(3,1,80-5,6); textbackground(BLUE); textcolor(LIGHTGREEN); clrscr();

  gotoxy(4,2); cprintf("ESTE PROGRAMA DA UN MENU CON LA OPCION DE REALIZAR UNA +, -, *, /");

  gotoxy(15,4); cprintf("PRGRAMADO POR: Nicolas Gomez Martinez");

  window(4,9,37,20); textbackground(BLUE); textcolor(LIGHTGREEN); clrscr();

  gotoxy(15,2);  cprintf("MENU");
  gotoxy(3,4);   cprintf("1. SUMA");
  gotoxy(3,5);   cprintf("2. RESTA");
  gotoxy(3,6);   cprintf("3. MULTIPLICACION");
  gotoxy(3,7);   cprintf("4. DIVICION");

  gotoxy(4,9);   cprintf("¨Que operacion elige? . .  ");
       cscanf("%i", &opc1);


   switch (opc1)
   {
     case 1:

     window(4,9,37,20); textbackground(BLUE); textcolor(LIGHTGREEN); clrscr();
     gotoxy(7,2); cprintf("REALIZANDO SUMA");
     gotoxy(3,5); cprintf("¨Cauntos #ïs deseas sumar?: ");
             cscanf("%i", &opc2);

      for (i=1; i<=opc2; i++)
       {
        window(4,9,37,20); textbackground(BLUE); textcolor(LIGHTGREEN); clrscr();
        gotoxy(3,2); cprintf("Digita numeros menores \n\r  que 999999999");


        gotoxy(4,6);cprintf("Digita un numero: ");
        window(25,14,34,14); textbackground(LIGHTGRAY); textcolor(BLACK); clrscr();
        cscanf("%lf", &sum);
        resul1=resul1+sum;
       }

        window(42,9,80-6,20); textbackground(BLUE); textcolor(LIGHTGREEN); clrscr();
        gotoxy(11,2); cprintf("RESULTADOS");
        gotoxy(3,5); cprintf("La suma es: %lf", resul1);

     delay(2000);

     getch();
     break;

     case 2:

     window(4,9,37,20); textbackground(BLUE); textcolor(LIGHTGREEN); clrscr();
     gotoxy(7,2); cprintf("REALIZANDO RESTA");
     gotoxy(3,5); cprintf("¨Cauntos #ïs deseas restar?: ");
             cscanf("%i", &opc2);

    for (i=1; i<=opc2; i++)
       {
        window(4,9,37,20); textbackground(BLUE); textcolor(LIGHTGREEN); clrscr();
        gotoxy(3,2); cprintf("Digita numeros menores");
        gotoxy(3,3); cprintf("que 999999999");
        gotoxy(3,5); cprintf("Todos los numeos que digites");
        gotoxy(3,6); cprintf("se tomaran como negativos");

        gotoxy(4,8);cprintf("Digita un numero: ");
        window(25,16,34,16); textbackground(LIGHTGRAY); textcolor(BLACK); clrscr();
        cscanf("%lf", &res);
        resul2=resul2-res;

       }

        window(42,9,80-6,20); textbackground(BLUE); textcolor(LIGHTGREEN); clrscr();
        gotoxy(11,2); cprintf("RESULTADOS");
        gotoxy(3,5); cprintf("La resta es: %lf", resul2);

     delay(2000);

     getch();
     break;

   }

   window(3,23,80-5,25); textbackground(RED); textcolor(BLACK); clrscr();
   gotoxy(8,2);
   cprintf("¨Que deseashacer? 1. Ir al MENU   2. Terminar . . . ");

   cscanf("%i", &opc3);
   window(1,1,80,25); textbackground(BLACK); clrscr();
   clrscr();

   }

  //window(42,9,80-5,20); textbackground(BLUE); textcolor(RED); clrscr();

  getch();
  return 0;

}


Les agradesco si me pueden ayudar.................. Help is Tnks
Título: Re: Ayuda Con Menus..
Publicado por: patitofeo en Jueves 4 de Noviembre de 2004, 12:42
:hola:

bueno lo de que te sume el resultado es normal porque no reciclas la variable result1 ni result2.


despues de acabar un bucle, esta variable tendrá el valor que tenia al acabar la iteración anterior.

Debes darle el valor cero al salir de cada iteracion. justo despues de escribir el resultado. Otra opcion es que te crees una función donde la variable result1 o 2 sea local.

                       :alien:

en cuanto a la resta, creo que tienes un problema en el concepto y en la implementacion, no en la programacion.

Una resta no es mas que una suma de números en los que por lo menos uno es negativo. Para restar dos numeros positivos, al primero no le debes cambiar el signo. Debes ir quitando de este número positivo, el resto tb en positivo. No entiendo lo de cambiar de signo. En tu caso estas restando todos los numeros introducidos por el usuario de 0 que es el valor que tiene result2 inicialmente.


Espero haberte ayudado por lo menos un poquito
Título: Re: Ayuda Con Menus..
Publicado por: RadicalEd en Jueves 4 de Noviembre de 2004, 16:50
Declara variables locales dentro de cada opcion, por fa tambien utiliza funciones en vez de hacerlo todo en el mismo bloque, harias mas robusto tu programa por ultimo colocal los resul#=0, cada vez que empieces la opcion, entiendes osea
Código: Text
  1.  
  2. switch (opc1)
  3. {
  4. case 1:
  5. resul1=0;
  6. window(4,9,37,20); textbackground(BLUE); textcolor(LIGHTGREEN); clrscr();
  7. gotoxy(7,2); cprintf(&#34;REALIZANDO SUMA&#34;);
  8. gotoxy(3,5); cprintf(&#34;¨Cauntos #ïs deseas sumar?: &#34;);
  9. cscanf(&#34;%i&#34;, &opc2);
  10.  
  11. for (i=1; i&#60;=opc2; i++)
  12. {
  13. window(4,9,37,20); textbackground(BLUE); textcolor(LIGHTGREEN); clrscr();
  14. gotoxy(3,2); cprintf(&#34;Digita numeros menores &#092;n&#092;r que 999999999&#34;);
  15.  
  16.  
  17. gotoxy(4,6);cprintf(&#34;Digita un numero: &#34;);
  18. window(25,14,34,14); textbackground(LIGHTGRAY); textcolor(BLACK); clrscr();
  19. cscanf(&#34;%lf&#34;, &sum);
  20. resul1=resul1+sum;
  21. }
  22.  
  23.  
Asi cada vez que empieces otra vez el programa tendras tu variable limpia.
Ojala te sirva
Chao
Título: Re: Ayuda Con Menus..
Publicado por: Ian en Viernes 5 de Noviembre de 2004, 02:52
Creo que me queda claro........

Tnk´s xD