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

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


  Mostrar Temas
Páginas: [1]
1  Programación / Programación C/C++ / Varias dudas C++: Volver todas las varibles a 0, alternativa a system("cls");... en: 8 Diciembre 2010, 19:30 pm
Quizás os acordaréis de mi de otro tema... bueno pues como tengo nuevas dudas y he cambiado por completo el sistema de mi calculadora (ahora será versión 2.0)  he decidido crear un nuevo tema.

Sí, estoy trabajando en una calculadora, a ver que os parece:

Código:
#include <stdlib.h>
#include <math.h>
#include <iostream>
using namespace std;

int operacion, opcion[2], i;
float resultado, operando[20];
char operador[20];

int main()
{ // Inicio
int menu[1];
menu[0]=0, menu[1]=1;
while (!menu[0])
      { // while menú principal
      system("cls");
      cout << " \n\bÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ CALCULADORA EUCLIDES ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ\n_______________________________[Version 2.0]____________________________________\n\n elige una opcion:\n\n  0: Operaciones basicas \n\n  1: Potencias y raices \n\n  2: Geometria \n\n  3: Ecuaciones\n\n  4: Salir \n\n ";
      cin>>opcion[0];
      switch(opcion[0])
           { // Switch menú
           case 0:
                 i=1;    
                      while (menu[1]==1)
                      { // while operaciones basicas, para poder repetir con el valor obtenido
                      system("cls");
                      cout<<" \n Elija quantos numeros quiere operar\n\n   ";
                      cin >> opcion[1];
                      system("cls");
                      cout << "\n";       // Ésto es simplemente para la estética  
                      if(i==2) // para que si eliges continuar operando sobre el resultado te lo escriba directamente como operador "1"
                          {
                          cout << " " << resultado << "\n ";
                          cin >> operador[1];    
                          }    
                      for(i; i<=opcion[1]; i++)
                          {    
                          cout << " "; // Estética, un espacio
                          cin >> operando[i];  // Le das el primer número que quieres operar
                          if(i!=opcion[1]) // cuando i sea = a opcion no hará falta pedir signo
                               {                
                               cout << " ";       // estética                  
                               cin >> operador[i];        // pide signo i deberías escribir +,-,* o /
                               }                                                    
                          }
                      if(resultado==0)
                                { // ésto es para que solo se haga la primera vez que operas, si más tarde eliges la opcion "continuar operando sobre el resultado" éste se mantendrá
                                resultado=operando[1];  
                                }                      
                      for(i=1; i<=opcion[1]; i++)
                         { // hace los cálculos
                         switch (operador[i])  
                                {  // switch signo                    
                                case '+':
                                resultado+=operando[i+1];  
                                break;  
                                case '-':
                                resultado-=operando[i+1];
                                break;
                                case '*':
                                resultado*=operando[i+1];
                                break;
                                case '/':
                                resultado/=operando[i+1];
                                break;
                                }  // switch signo                            
                         }  // for calcular
                      system("cls");
                      cout <<"\n";  // estética otra vez
                      for(i=1; i<=opcion[1]; i++)
                         {
                         cout << "  " << operando[i]; // escribe las operaciones que ha hecho
                         if (i!=opcion[1]) // para que la última vez no escriba ningún sigo
                              {
                              cout << "  "<< operador[i];  
                              }
                         }
                      cout << "  =  " << resultado << "\n\n 0: Volver\n 1: Continuar calculando sobre este resultado\n\n  ";
                      cin >> opcion[1];
                      if(!opcion[1]) // vuelve al menú principal
                         {
                         menu[1]=2;
                         }  
                      else
                         {
                         i=2; // así cuando se haga el primer for no te pedirá el operador "1", pues será el resultado que has obtenido antes
                         }
                      } // while operaciones basicas
           break; // case 0, operaciones basicas                                        
           } // Switch menú
      } // while menú principal
} // inicio

Al menu principal no le hagais caso, solo funciona de momento las "operaciones básicas" (aunque todo lo demás lo hice en la versión anterior de la calculadora, solo que ahora estoy cambiando muchísimas cosas, ahora uso cout y cin en vez de printf i scanf etc. así que decidí reescribirlo)

Funciona así:

Te pide cuantos números quieres operar  y entonces escribes, por ejemplo si elegiste 3:

105 - 15 / 2 i así te funcionaría, aunque tienes que apretar intro cada vez que escribes algo obviamente (sino no tengo ni idea de como hacerlo, pero supongo que será dificilísimo para mi nivel jajajaja)

Pero si calculas varias veces sin cerrar la calculadora una vez vuelves a calcular hay errores y empiezan a salir cosas raras, no sé muy bien porque pero se sulocionaría seguramente si supiera como igualar todas las variables a 0 a ver, podría hacerlo una por una pero me parece que tiene que haber alguna forma más rápida de "resetearlas" todas y esa es mi primera y más importante pregunta.

También he decidido dejar de usar
Código:
system("pause"); 
y lo reemplazaré por
Código:
getchar();

Pero no conozco por ahora ninguna alternativa a
Código:
 system("cls");
Existe alguna? Puedo seguir usándolo y no me causará problemas?

Y bueno aparte de eso echadle un vistazo a ver que tendría que cambiar o que no os convence...

Pero lo que más me interesa saber es lo de devolver a las variables el valor "0" sin hacerlo manualmente

De antemano, gracias.
2  Programación / Programación C/C++ / Empezando con C++... en: 30 Noviembre 2010, 23:23 pm
Saludos! Este es mi primer mensaje

Pues bien, tengo 15 años y empecé a programar en un curso el verano pasado (nada serio, unicamente para aprender porque siempre me ha gustado el tema) y claro, ahora he estado haciendo algunos programas por mi cuenta... ya he encontrado buenas paginas para seguir adelante (la verdad es que es algo dificil aprender de internet para mí hahaha) entonces para mí estaría genial que me ayudarais con mis dudas ^^

He estado trabajando en una calculadora bastante completa...

Aquí la función de sumar, mi nivel es más o menos éste (no se hacer mucho más aparte de lo utilizado aquí xD) No pongo la calculadora completa obviamente porque es muy larga

Citar
void suma(void)
{
system("cls");
for(i=2;i<=opcion;i++) // utilizo la variable "opcion" para que el usuario elige cuantos numeros quiere operar
{  // for
                     if(i==2)
                     {
                     printf("\n Introduce el primer sumando       ");
                     scanf("%f", &a[1]);
                     printf("\n Introduce el segundo sumando      ");
                     scanf("%f", &a[2]);
                     }
                     if(i==3)
                     {
                     printf("\n Introduce el tercer sumando       ");
                     scanf("%f", &a[3]);
                     }
                     if(i==4)
                     {
                     printf("\n Introduce el cuarto sumando       ");
                     scanf("%f", &a[4]);
                     }
                      if(i==5)
                     {
                     printf("\n Introduce el quinto sumando       ");
                     scanf("%f", &a[5]);
                     }            // end if i=5
} // end for
system("cls");
printf("\n %f", a[1]); // pongo éste aqui y no dentro del for para que no aparezca el signo de "+" detrás del primer número
for(i=1;i<opcion;i++)
{ // for para mostrar suma, para que aparezca así: num1 + num2 (+ los demás elegidos hasta 5)
printf(" + %f", a[i+1]);
a[1]=a[1]+a[i+1];    /* esto no estoy seguro de que esté bien, funciona pero no me acaba de gustar el "a[1]=a[1]" , en vez de poder decir que le sume a a[1] lo demás sin más... me gustaria algo que hiciera "a[1] + 2" y sumara al valor de a[1] 2 unidades no sé... */
}
printf(" = %f\n\n", a[1]);  // el resultado          
system("pause");
} // fin suma


He explicado con comentarios más o menos que hace cada cosa para haceros una idea... esa es una de mis dudas

Luego como os dije he estado intentando aprender por internet y he tenido problemas

Código:
#include <iostream>
 
using namespace std;
 
int main()
{
    cout << "Hello world!" << endl;
    return 0;
}

Así es... ¡el programa más sencillo! Curiosmaente es perfecto porque están ahí acumuladas muchas de las cosas que no entiendo... vayamos por partes

using namespace std; (que es esto?)

    cout << "Hello world!" << endl; (no es lo mismo usar un printf, que diferencia hay??)

return 0; (esto que hace, que vuelve a la linia 0? Lo he compilado y quitarlo/ponerlo no cambiaba nada!

y... ¿porque no hay un system("pause"); en muchos codigos que leo? En mi ordenador almenos un programa como el anterior si no hay un system("pause") no da tiempo para leerlo ni de lejos xD


Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines