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

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Errores con el código de una calculadora simple
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Errores con el código de una calculadora simple  (Leído 4,180 veces)
petrusqui

Desconectado Desconectado

Mensajes: 16



Ver Perfil WWW
Errores con el código de una calculadora simple
« en: 4 Marzo 2012, 22:22 pm »

Buneas =D

Primero presentarme en el foro, soy un adolescente de 16 años donde estoy estudiando bachillarato y ahora y desde siempre me interesa la programación. Pero solo desde unos meses me puse a estudiar en serio y he empezado con c/c++, eso si de libros y tutoriales de internet. Ya conocia este foro pero ahora me regitre porque es el unico donde veo mucha actividad en programación =P

Bueno, con el código del lenguaje tengo dos problemas, uno es que al sumar dos números grandes no los suma bien, como por ejemplo 100000000000000000+100000000000000000, y la verdad no se porque. Y el otro problema que tengo es que no se me ocurre ninguna idea como poder cerrar la aplicación, porque el ultimo trozo del codigo no funciona o no lo he escrito bien =P

Código:
/*Esta aplicación ha sido creada por petrusqui */
/*Calculadora simple que realiza operaciones simples*/
/*A continuación se mostrarán las librerias que usa esta aplicación*/
#include <stdio.h>
#include <stdlib.h>

int main (void) /*A continuación empieza la parte más importante del código*/
{
int operacion_deseada; /*La operacion que el usuario desea hacer*/
char cerrar_ventana; /*Opcion si el usuario desea cerrar la ventana*/
float x; /*Primer número para hacer una operación matemática*/
float y; /*Segundo número para hacer una operación matemática*/
double resultado; /*El resultado de la operación de los dos números anteriores*/

/*Esta es la branca principal de la calcudadora*/
do
{
/*A continuacion se imprime en la pantalla el menu principal de la calculadora*/
printf("\n\tMENU\n");
printf(" -------------------------\n");
printf(" 1. Suma\n");
printf(" 2. Resta\n");
printf(" 3. Multiplicacion\n");
printf(" 4. Division\n");
printf(" 5. Informacion sobre la aplicacion\n");
printf(" 6. Salir\n");
printf("\n");
printf("Escoja una opcion: ");
fflush(stdin);
scanf("%d", &operacion_deseada);

/*A continuación el usuario eligira una un numero y dependiendo del numero realizara una accion u otra*/
switch (operacion_deseada)
{
/*SUMA*/
case 1: printf("Elija el primer numero que desea sumar: ");
scanf("%f", &x);
printf("Elija el segundo numero que desea sumar: ");
scanf("%f", &y);
resultado = x + y;
printf("El resultado de la suma es: %f\n", resultado);
break;
/*Resta*/
case 2: printf("Elija el primer numero que desea restar: ");
scanf("%f", &x);
printf("Elija el segundo numero que desea restar: ");
scanf("%f", &y);
resultado = x - y;
printf("El resultado de la resta es: %f\n", resultado);
break;
/*Multiplicación*/
case 3: printf("Elija el primer numero que desea multiplicar: ");
scanf("%f", &x);
printf("Elija el segundo numero que desea multiplicar: ");
scanf("%f", &y);
resultado = x * y;
printf("El resultado de la multiplicacion es: %f\n", resultado);
break;
/*División*/
case 4: printf("Elija el dividendo de la division: ");
scanf("%f", &x);
printf("Elija el divisor de la division: ");
scanf("%f", &y);
resultado = x / y;
printf("El coeficiente de la division es: %f\n", resultado);
break;
/*Información de la aplicación*/
case 5: printf("\n\tCredito\n");
printf("--------------------------\n");
printf(" Version: 1.1\n");
printf(" Creador: Petrusqui \n");
printf(" Sitio web: http://sobre-todo.es\n");
printf(" \n");
printf("\tInstrucciones\n");
printf("---------------------------\n");
printf(" La aplicacion solo hae operaciones senzillas. \n Para introducir decimales solo hay que añadir un punto, por exemplo 3.14\n");
printf(" Gracias por descargar la aplicacion!\n");
break;
/*Salir*/
case 6: printf("\n");
break;
default: printf("Opcion no valida, cuelve a intentar-lo\n");
break;
}
   /*Pedir al usuario si quiere realizar otra operacion matematica o cerrar la ventana*/
printf("\nQuieres realizar otra operacion (S/N): ");
scanf("%c", &cerrar_ventana);
getchar();
}

while(cerrar_ventana != 'S' && cerrar_ventana != 's');

getchar();
}


¿Una ultima pregunta, como pongo carácteres como "¿" que no pertenecen a ASCII?

Saludos, petrusqui.


« Última modificación: 31 Mayo 2014, 10:27 am por petrusqui » En línea

Sagrini

Desconectado Desconectado

Mensajes: 107


Ver Perfil WWW
Re: Errores con el código de una calculadora simple
« Respuesta #1 en: 4 Marzo 2012, 23:03 pm »

Mmm... detalles:
1. No uses flush (). Lee las chinchetas
2. Declara main () como "int main (int argc, char *argv)". Es lo más correcto.
3. No uses tanto "scanf ()". Busca algo de fgetc (), getchar (), etc...
Luego, eso es porque ocurre un integer overflow. Puedes intentar solucionarlo usando la palabra clave "long" a la hora de declarar x, y y resultado. Y lo otro... mira la tabla ascii. Prueba con:
Código
  1. printf ("%cWhat?\n", 168)


En línea

armizh

Desconectado Desconectado

Mensajes: 187

His brain caught in a hole...


Ver Perfil WWW
Re: Errores con el código de una calculadora simple
« Respuesta #2 en: 4 Marzo 2012, 23:06 pm »

Para escribir el caracter "¿" haces:
Código
  1. printf("&c",(char *)168);
http://es.wikipedia.org/wiki/P%C3%A1gina_de_c%C3%B3digos_850

El problema al sumar los numeros es que 100000000000000000 es igual a 0x5D8A0000, que es un numero de 64 bits, por lo que en un PC de 32 bits no podras sumar.

Si quieres cerrar la ventana podrias probar con retornar EXIT_SUCCESS.
Código
  1. int main()
  2. {
  3.        /*    ...    */
  4.        return EXIT_SUCCES;
  5. }

Con eso se cierra la aplicacion. Tambien puedes retornar 0.

PS: Yo tambien tengo 16 años xd

Saludos
« Última modificación: 4 Marzo 2012, 23:37 pm por Eternal Idol » En línea

Visita mi blog:
http://armizh.10h.us/
Fnx, fork de FreeNOS:
Código
  1. git clone https://github.com/armizh/Fnx
Hamster, Entorno Integrado de Desarrollo C/C++:
Código
  1. git clone https://github.com/armizh/Hamster
Caballo_Alado

Desconectado Desconectado

Mensajes: 42



Ver Perfil
Re: Errores con el código de una calculadora simple
« Respuesta #3 en: 4 Marzo 2012, 23:08 pm »

Código
  1. ...
  2. break;
  3. }
  4.    /*Pedir al usuario si quiere realizar otra operacion matematica o cerrar la ventana*/
  5. printf("\nQuieres realizar otra operacion (S/N): ");
  6.  
  7. }
  8.  
  9. while((cerrar_ventana=getch())==115);

el getch() capta solo un carácter, por ende no tiene sentido incluir la mayúscula pero ta  >:D, para hacer que trabaje solo con s y n has

Código
  1. while((cerrar_ventana=getch())==115 || cerrar_ventana!=110);

(Aunque tampoco tenga sentido lo ultimo e.e)

« Última modificación: 4 Marzo 2012, 23:11 pm por Mr.Brooks » En línea

♫           ♪ "I'm sexy and I know it"     ♪      ♫
Sagrini

Desconectado Desconectado

Mensajes: 107


Ver Perfil WWW
Re: Errores con el código de una calculadora simple
« Respuesta #4 en: 4 Marzo 2012, 23:37 pm »

Se me olvidó contestar a eso jajaja
exit (0); / return 0;
En caso de que estés dentro de otra función que no es main (), usa exit, ya que return vuelve a la función anterior.
Por cierto, &c es incorrecto. es %c

PS: Que mayores jejeje
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Errores con el código de una calculadora simple
« Respuesta #5 en: 4 Marzo 2012, 23:56 pm »

Y el otro problema que tengo es que no se me ocurre ninguna idea como poder cerrar la aplicación, porque el ultimo trozo del codigo no funciona o no lo he escrito bien =P
Es por lo ultimo.

Lo primero que debes hacer es evitar el uso de extensiones como la biblioteca conio de Borland, mas todavía cuando en tu programa su uso no es necesario.

Con "el ultimo trozo del codigo no funciona" supongo te refieres a que el bucle (y por ende la aplicación) no finaliza aun cuando teclees un carácter distinto de 'S' y 's'. Ello se debe a que al utilizar el especificador "%c" este no ignora el espacio blanco y por ello (caso usual) se "traga" el avance de linea introducido después del segundo operando.

Para solucionarlo solo tienes que agregar un espacio antes del especificador "%c", de esta forma:
Código
  1. printf("\nQuieres realizar otra operacion (S/N): ");
  2. scanf(" %c", &cerrar_ventana);

También se puede reducir de forma significativa el programa ya que todas las operaciones son comunes (petición de los operandos, solo varia la operación).

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
petrusqui

Desconectado Desconectado

Mensajes: 16



Ver Perfil WWW
Re: Errores con el código de una calculadora simple
« Respuesta #6 en: 5 Marzo 2012, 22:08 pm »

Mmm... detalles:
1. No uses flush (). Lee las chinchetas
2. Declara main () como "int main (int argc, char *argv)". Es lo más correcto.
3. No uses tanto "scanf ()". Busca algo de fgetc (), getchar (), etc...
Luego, eso es porque ocurre un integer overflow. Puedes intentar solucionarlo usando la palabra clave "long" a la hora de declarar x, y y resultado. Y lo otro... mira la tabla ascii. Prueba con:
Código
  1. printf ("%cWhat?\n", 168)

1. fflush() ya lo he quitado, como lo vi en el libro pensaba que era lo correcto. Gracias por el aviso.
2. ¿Si declaro int main (void) puede provocar algun error?
3. Gracias por el consejo, ¿pero si uso siempre la misma función puede pasar algo?
4. Muchisimas gracisa, aqui has resuelto mi problema con la suma de los dos numeros =D y tambien lo de los accentos :)

Para escribir el caracter "¿" haces:
Código
  1. printf("&c",(char *)168);
http://es.wikipedia.org/wiki/P%C3%A1gina_de_c%C3%B3digos_850

El problema al sumar los numeros es que 100000000000000000 es igual a 0x5D8A0000, que es un numero de 64 bits, por lo que en un PC de 32 bits no podras sumar.

Si quieres cerrar la ventana podrias probar con retornar EXIT_SUCCESS.
Código
  1. int main()
  2. {
  3.        /*    ...    */
  4.        return EXIT_SUCCES;
  5. }

Con eso se cierra la aplicacion. Tambien puedes retornar 0.

PS: Yo tambien tengo 16 años xd

Saludos

Gracias por lo de los carácteres me ha ayudado muchsíssimo =D Por cierto mi PC es de 64 bits, creo que el problema fue por no poner el long double, diria. Y al final para cerrar la ventana he pusto return 0;


Código
  1. ...
  2. break;
  3. }
  4.    /*Pedir al usuario si quiere realizar otra operacion matematica o cerrar la ventana*/
  5. printf("\nQuieres realizar otra operacion (S/N): ");
  6.  
  7. }
  8.  
  9. while((cerrar_ventana=getch())==115);

el getch() capta solo un carácter, por ende no tiene sentido incluir la mayúscula pero ta  >:D, para hacer que trabaje solo con s y n has

Código
  1. while((cerrar_ventana=getch())==115 || cerrar_ventana!=110);

(Aunque tampoco tenga sentido lo ultimo e.e)



Es por si el usuario pone "S" que no se le cierre la ventana, ya que c++ es case sensitive, aunque gracias por la ayuda =D

Se me olvidó contestar a eso jajaja
exit (0); / return 0;
En caso de que estés dentro de otra función que no es main (), usa exit, ya que return vuelve a la función anterior.
Por cierto, &c es incorrecto. es %c

PS: Que mayores jejeje

Gracias,  me has ayudado mucho, ya se cierra la ventana =D Y en el código estaba escrito con %c

Es por lo ultimo.

Lo primero que debes hacer es evitar el uso de extensiones como la biblioteca conio de Borland, mas todavía cuando en tu programa su uso no es necesario.

Con "el ultimo trozo del codigo no funciona" supongo te refieres a que el bucle (y por ende la aplicación) no finaliza aun cuando teclees un carácter distinto de 'S' y 's'. Ello se debe a que al utilizar el especificador "%c" este no ignora el espacio blanco y por ello (caso usual) se "traga" el avance de linea introducido después del segundo operando.

Para solucionarlo solo tienes que agregar un espacio antes del especificador "%c", de esta forma:
Código
  1. printf("\nQuieres realizar otra operacion (S/N): ");
  2. scanf(" %c", &cerrar_ventana);

También se puede reducir de forma significativa el programa ya que todas las operaciones son comunes (petición de los operandos, solo varia la operación).

Un saludo

Gracias por la sugerenci, todavia no tengo dominado todas las bibliotecas =P Y tuviste razon tenia que poner un espacio, muchissimas gracias por cierto Esto del c++ tampoco es tan fácil...
Sobre lo de reducir el código lo pense, pero ya que no tengo interfaz gráfica pense en dar un poco más de belleza al castellano =P


GRACIAS A TODOS
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Errores con el código de una calculadora simple
« Respuesta #7 en: 6 Marzo 2012, 02:46 am »

2. ¿Si declaro int main (void) puede provocar algun error?
No.

Si defines la función principal como "int main(void) ..." o "int main(int argc, char *argv[]) ..." el compilador debe aceptarla si o si. Con otras definiciones no hay (y ese es el problema) garantías.

Algunos compiladores se quejan mediante un mensaje de advertencia si defines la función principal en la segunda forma sin utilizar, después, los argumentos en el programa (lo cual es correcto en el sentido de tener variables declaradas pero sin uso).

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
[Video-tuto] Creando una simple calculadora [By SilverMagics]
Programación Visual Basic
invisible_hack 7 2,467 Último mensaje 10 Diciembre 2007, 05:43 am
por sempus
[batch] calculadora simple!
Scripting
The Shadow 0 4,573 Último mensaje 16 Febrero 2008, 00:56 am
por The Shadow
Calculadora simple [VB]
Programación Visual Basic
glas 1 2,076 Último mensaje 14 Octubre 2010, 06:23 am
por BlackZeroX
[Ayuda] Calculadora simple en C
Programación C/C++
maxotux 5 3,198 Último mensaje 13 Mayo 2012, 03:53 am
por maxotux
Ayuda calculadora simple en PHP(solucionado)
PHP
Senior++ 2 3,492 Último mensaje 16 Noviembre 2013, 18:20 pm
por Senior++
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines