JoRgE-1987
Programador
Legend
        
Prestigio: 7
Desconectado
Sexo: 
Título universitario: No.
Profesión: Programador
Mensajes: 633
Geek
Lenguajes:Object Pascal Pascal HTML Aprendiendo C++
|
 |
« en: 29/09/2006, 05:05:33 » |
|
#include <stdio.h> float a,b,c; int i; int ingre(float n1, float n2) { printf("%s\n","Ingrese el primer Numero:"); scanf("%f",&n1); printf("%s\n","Ingrese el segundo Numero:"); scanf("%f",&n2); printf("%s\n","Ingreso finalizado"); return 0; } int suma(float n1, float n2) { return (n1 + n2); } int resta(float n1, float n2) { return (n1 - n2); } int mult(float n1, float n2) { return (n1 * n2); } int division(float n1, float n2) { return (n1 / n2); } int main() { a = 1; b = 1; do { system("clear"); printf("%s\n","Ingrese 1 para ingresar los valores"); printf("%s\n","Ingrese 2 para sumar"); printf("%s\n","Ingrese 3 para restar"); printf("%s\n","Ingrese 4 para multiplicar"); printf("%s\n","Ingrese 5 para dividir"); printf("%s\n","Ingrese cualquier otro valor para salir"); printf("%s\n","---------------------------------------"); printf("%s\n","Ingrese el valor deseado:"); scanf("%i",&i); switch(i) { case 1: ingre(a,b); break; case 2: c = suma(a,b); break; case 3: c = resta(a,b); break; case 4: c = mult(a,b); break; case 5: c = division(a,b); break; default: i = 0; break; } printf("%s\n","Resultado:"); printf("%f\n",c); printf("Presione enter para continuar:\n"); getchar(); // system("clear"); } while (i != 0); return 0; } Hace cualquier cosa, no se corta en el getchar, no suma, no resta, no nada. :S:S:S:S::S Que pasa??? Saludos  :D
|
|
|
|
|
En línea
|
|
|
|
Tavo
Technocrat
       
Prestigio: 0
Desconectado
Sexo: 
Título universitario: Ninguno
Profesión: GameDeveloper(GD) y Desarrollador
Mensajes: 144
Lenguajes:Visual Basic Real Basic Python C/C++ Java SQL Bases de datos:SQLite MySQL
|
 |
« Respuesta #1 en: 29/09/2006, 23:04:55 » |
|
Realmente no tenes idea de programacion estructurada. Una variable global esta re-colgada ya que no sirve, por otra parte, es raro, ya que el planteo a simple vista esta bien... (Prova utilizando double en vez de flout)
|
|
|
|
|
En línea
|
|
|
|
CID
Administrador
Legend
   
Prestigio: 22
Desconectado
Sexo: 
Estudiante de: Arte de la informática
Título universitario: Programador
Profesión: Desarrollador
Mensajes: 1136
Lenguajes:Varios Bases de datos:Varios
|
 |
« Respuesta #2 en: 30/09/2006, 00:40:34 » |
|
Bueno Jorge, aca va la solución. Lo primero que encuentro es un error aqui: int ingre(float n1, float n2) { printf("%s\n","Ingrese el primer Numero:"); scanf("%f",&n1); printf("%s\n","Ingrese el segundo Numero:"); scanf("%f",&n2); printf("%s\n","Ingreso finalizado"); return 0; } Las variables n1 y n2 son variables locales de la función, fuera de ella no existen. Ese código solicita dos float y los guarda respectivamente en n1 y n2, pero al finalizar la ejecución de la función, éstos datos se pierden porque la pila interna de tu programa elimina las variables locales de dicha funcion al finalizar. Resumiendo: lo que lees se pierde. Asi que modificandolo por el siguiente código todo deberia andar bien: int ingre(float n1, float n2) { printf("%s\n","Ingrese el primer Numero:"); scanf("%f",&a); printf("%s\n","Ingrese el segundo Numero:"); scanf("%f",&b); printf("%s\n","Ingreso finalizado"); return 0; } Fijate que tenes variables inutiles ahi, te dejo a vos limpiar el código. Otro de los problemas que se presentan al compilar bajo gcc en linux es que system("pause") no funciona, getchar() no funciona como esperamos aunque limpiemos el buffer de salida. La solución es utilizar otra función que a fines practicos sirve (modificar la última parte por esto): printf("%s\n","Resultado:"); printf("%f\n",c); printf("Presione enter para continuar:\n"); __fpurge(stdin); //linux //fflush(stdin); //windows getchar(); } while (i != 0); return 0; }Y por ultimo, un consejo ya que se que recien comenzas. Trata de modularizar sin utilizar variables globales, suelen prestarse para errores si no se controlan bien. Cualquier cosa preguntas. Saludos.
|
|
|
|
|
En línea
|
|
|
|
JoRgE-1987
Programador
Legend
        
Prestigio: 7
Desconectado
Sexo: 
Título universitario: No.
Profesión: Programador
Mensajes: 633
Geek
Lenguajes:Object Pascal Pascal HTML Aprendiendo C++
|
 |
« Respuesta #3 en: 30/09/2006, 10:06:49 » |
|
Realmente no tenes idea de programacion estructurada. Una variable global esta re-colgada ya que no sirve, por otra parte, es raro, ya que el planteo a simple vista esta bien... (Prova utilizando double en vez de flout)
Bueno, querido compañero de foro Tavo, realmente no voy a responder como lo hiciste vos, asi que ni te voy a faltar el resperto ni nada, pero como una simple cuestion que me gustaria que tengas en cuenta, es que si ves que una persona, no sabe algo, y que si lo pregunta en un foro, es porque obviamente no lo sabe resolver, diciendome textualmente: Realmente no tenes idea de programacion estructurada.
La verdad es que no me estas ayudando mucho con el caso, aparte, como veras, si se programacion estucturada, nada mas que en otro lenguaje, y ahora estoy viendo aprender C, lamentablemente, no soy lo suficientemente inteligente, como para sin tener de donde leer, haberme dado cuenta del error. Me hubiera gustado, si es que en realidad tenias ganas de responder, hubieras dedicado unos 2 minutos mas leyendo, y me hubieras podido dar una respuesta mas util, pero de todas maneras, gracias por leer. Muchas gracias CID, ahora estoy organizando los cambios, y bueno, todos los dias se aprende algo nuevo no? Saludos  :D
|
|
|
|
« Última modificación: 01/09/2008, 11:38:32 por JoRgE-1987 »
|
En línea
|
|
|
|
Tavo
Technocrat
       
Prestigio: 0
Desconectado
Sexo: 
Título universitario: Ninguno
Profesión: GameDeveloper(GD) y Desarrollador
Mensajes: 144
Lenguajes:Visual Basic Real Basic Python C/C++ Java SQL Bases de datos:SQLite MySQL
|
 |
« Respuesta #4 en: 30/09/2006, 13:27:41 » |
|
Yo no lo hice con mala intencion. Si sabes PE la aplicas en todos los lenguajes, no tienen nada que ver. Por otra parte, yo que vos aprenderia C++ antes que C, ya que C te permite hacer cualquier cosa (Si, si, cosas realmente muy feas que otros lenguajes no te lo permiten). Igual, si vos venis de Delphy yo me tiraria al C#, pero bueno. Sobre la calculadora, no seria mas facil hacer una funcion que analice si multiplica, suma, resta y divide, y que ingre la llame?, igual, eso esta bien para el principio, pero igual, no es recomendable hacer funciones de una sentencia si van a ser llamadas pocas veces. (Te muestro una calculadora simple en C++): #include <iostream> using namespace std; int do_calc(int num1, int num2, int calcu){ switch(calcu){ case 1: return num1+num2; case 2: return num1-num2; case 3: return num1*num2; case 4: return num1/num2; } return 0; } int main(){ int num1, num2, calcu; // num1 y num2 son los numeros, mientras calcu la operacion a realizar cout << "Ingrese un numero " << endl; cin >> num1; cin.get(); cout << "Ingrese otro numero " << endl; cin >> num2; cin.get(); cout << "Ingrese la operacion que desea realizar" << endl << "1: Sumar" << endl; cout << "2: Restar" << endl << "3: Multiplicar" << endl << "4: Dividir" << endl; cin >> calcu; cin.get(); cout << "Resultado: " << do_calc(num1, num2, calcu) << endl; cin.get(); return 0; }
|
|
|
|
|
En línea
|
|
|
|
JoRgE-1987
Programador
Legend
        
Prestigio: 7
Desconectado
Sexo: 
Título universitario: No.
Profesión: Programador
Mensajes: 633
Geek
Lenguajes:Object Pascal Pascal HTML Aprendiendo C++
|
 |
« Respuesta #5 en: 30/09/2006, 13:54:38 » |
|
Epa epa, vamos de a poco dijo el señor Jack, espera a que me funcione la calculadora simple que estoy haciendo, y me pongo a jugar con el codigo que pusiste vos. Son muchas cosas para un solo dia, XD. Saludos  :D
|
|
|
|
|
En línea
|
|
|
|
JoRgE-1987
Programador
Legend
        
Prestigio: 7
Desconectado
Sexo: 
Título universitario: No.
Profesión: Programador
Mensajes: 633
Geek
Lenguajes:Object Pascal Pascal HTML Aprendiendo C++
|
 |
« Respuesta #6 en: 30/09/2006, 14:15:15 » |
|
Aca esta la version final, que funciona perfectamente (creo). Una vez que ya la tenga mas clara, paso a mostrales, o a preguntarles nuevas cosas. Quizas esto le sirva a alguien que quiere comenzar. //Calculadora en C //Compilada en GCC sobre Ubuntu 6.06 LTS //gcc -o calculadora.ejecutable calculadora.c //Programada por: Jorge Abreu //Colaboraciones: CID #include <stdio.h> float a,b,c; int i; int ingre() { printf("%s\n","Ingrese el primer Numero:"); scanf("%f",&a); printf("%s\n","Ingrese el segundo Numero:"); scanf("%f",&b); printf("%s\n","Ingreso finalizado"); return 0; } int suma(float n1, float n2) { return (n1 + n2); } int resta(float n1, float n2) { return (n1 - n2); } int mult(float n1, float n2) { return (n1 * n2); } int division(float n1, float n2) { return (n1 / n2); } int resultado(float n1) { printf("%s\n","Resultado:"); printf("%f\n",n1); printf("Presione enter para continuar:\n"); __fpurge(stdin); //linux //fflush(stdin); //windows getchar(); return (0); } int main() { a = 1; b = 1; do { system("clear"); printf("%s\n","Ingrese 1 para ingresar los valores"); printf("%s\n","Ingrese 2 para sumar"); printf("%s\n","Ingrese 3 para restar"); printf("%s\n","Ingrese 4 para multiplicar"); printf("%s\n","Ingrese 5 para dividir"); printf("%s\n","Ingrese cualquier otro valor para salir"); printf("%s\n","---------------------------------------"); printf("%s\n","Ingrese el valor deseado:"); scanf("%i",&i); switch(i) { case 1: ingre(); break; case 2: {c = suma(a,b);resultado(c); break;} case 3: {c = resta(a,b);resultado(c); break;} case 4: {c = mult(a,b);resultado(c); break;} case 5: {c = division(a,b);resultado(c); break;} default: i = 0; break; } // system("clear"); } while (i != 0); return 0; } Saludos  :D
|
|
|
|
|
En línea
|
|
|
|
xlarsx
Guru
 
Prestigio: 0
Desconectado
Título universitario: Mecatrónica
Profesión: Programador
Mensajes: 3
Lenguajes:C, C++, J2SE, JSP Bases de datos:MS SQL Server
|
 |
« Respuesta #7 en: 20/05/2008, 23:09:06 » |
|
Eso es seguro, cualquier cosa puede ser hecha con ANSI C , aquí otra versión de la misma calculadora básica: #include <stdio.h>
int main() { int num1, num2; char operador; float resultado; printf("Ingrese operacion\n"); scanf("%i %c %i", &num1, &operador, &num2); switch(operador) { case '+': resultado = num1 + num2; break; case '-': resultado = num1 - num2; break; case '*': resultado = num1 * num2; break; case '/': resultado = num1 / num2; break; default: printf("Operador incorrecto"); return 0; break; }
printf("%i %c %i = %.2f", num1, operador, num2, resultado);
return 0;
} Esperando sea de utilidad, Saludos
|
|
|
|
|
En línea
|
|
|
|
|
Foros del Club
|
|
|
|
|
|
En línea
|
|
|
|
|