Calculadora hecha en C

Iniciado por Caster, 20 Octubre 2012, 18:44 PM

0 Miembros y 1 Visitante están viendo este tema.

Caster

Pues acabo de terminar esta calculadora y queria vuestra opinion, algunas cosas mas que le pueda implementar,si encontrais algun fallo, etc

Aqui os dejo el codigo:

main.c
#include <stdio.h>
#include "funciones.h"

int main() {

int op;

do {

imprimir_menu();


scanf("%d", &op);
while (getchar() != '\n')
;
system("cls");
switch (op) {

case 1:
sumar();
getchar();
break;

case 2:
restar();
getchar();
break;

case 3:
multiplicar();
getchar();
break;

case 4:
dividir();
getchar();
break;

case 5:
potencia();
getchar();
break;

case 6:
raiz_cuadrada();
getchar();
break;

case 7:
seno();
getchar();
break;

case 8:
coseno();
getchar();
break;

case 9:
tangente();
getchar();
break;

case 10:
break;

default:
printf("Ha elejido una opcion incorrecta\n");
break;
}//fin del switch

}while (op != 10);

return 0;
}


funciones.h
#include <math.h> //para potencia y raiz cuadrada

void imprimir_menu(void) {
system("cls"); //limpia la pantalla al volverse a ejecutar el do-while del archivo main.c
printf("Elija una opcion:\n\n");
printf("*********************************\n");
printf("*\t [1] Sumar\t\t*\n");
printf("*\t [2] Restar\t\t*\n");
printf("*\t [3] Multiplicar\t*\n");
printf("*\t [4] Dividir\t\t*\n");
printf("*\t [5] Potencia\t\t*\n");
printf("*\t [6] Raiz cuadrada\t*\n");
printf("*\t [7] Seno\t\t*\n");
printf("*\t [8] Coseno\t\t*\n");
printf("*\t [9] Tangente\t\t*\n");
printf("*\t [10] Salir\t\t*\n");
printf("*********************************\n\n");
return;
}



void sumar(void) {
double num1, num2;
printf("\nIntroduzca los dos numeros a sumar: \n");
scanf("%lf %lf", &num1, &num2);
while (getchar() != '\n')
;
printf("\n%lf", num1 + num2);
return;


}

void restar(void) {
double num1, num2;
printf("\nIntroduzca los dos numeros a restar: \n");
scanf("%lf %lf", &num1, &num2);
while (getchar() != '\n')
;
printf("\n%lf", num1 - num2);
return;


}

void multiplicar(void) {
double num1, num2;
printf("\nIntroduzca los dos numeros a multiplicar: \n");
scanf("%lf %lf", &num1, &num2);
while (getchar() != '\n')
;
printf("\n%lf", num1 * num2);
return;


}

void dividir(void) {
double num1, num2;
printf("\nIntroduzca los dos numeros a dividir: \n");
scanf("%lf %lf", &num1, &num2);
while (getchar() != '\n')
;
printf("\n%lf", num1 / num2);
return;


}

void potencia(void) {
double num1, num2;
printf("\nIntroduzca la base: \n");
scanf("%lf", &num1);
while (getchar() != '\n')
;
printf("Introduzca el exponente: \n");
scanf("%lf", &num2);
while (getchar() != '\n')
;
printf("\n%lf", pow(num1, num2));
return;


}

void raiz_cuadrada(void) {
double num1;
printf("\nIntroduzca el numero: \n");
scanf("%lf", &num1);
while (getchar() != '\n')
;
printf("La raiz cuadrada es: %lf \n", sqrt(num1));

return;


}

void seno(void) {
double num1;
printf("\nIntroduzca el numero: \n");
scanf("%lf", &num1);
while (getchar() != '\n')
;
printf("El seno es: %lf \n", sin(num1));

return;


}

void coseno(void) {
double num1;
printf("\nIntroduzca el numero: \n");
scanf("%lf", &num1);
while (getchar() != '\n')
;
printf("El coseno es: %lf \n", cos(num1));

return;


}

void tangente(void) {
double num1;
printf("\nIntroduzca el numero: \n");
scanf("%lf", &num1);
while (getchar() != '\n')
;
printf("La tangente es: %lf \n", tan(num1));

return;


}

barnix456

hola Caster, muy bueno el tema, yo estoy empezando en C, precisamente en funciones, tengo una duda, perdona si es algo tonta, yo programo en linux, uso C::B quiero ejecuatar tu codigo, pero mi duda, es por que pones un archivo main.c y de funciones.h, como hago para juntarlo, el funciones.h se debe poner en algun lado especifico para que se ha llamado desde el main, o o todo se pone dentro de un mismo archivo, espero entiendas mi duda...! y de nuevo muy bueno  ;D
"No temo a los ordenadores; lo que temo es quedarme sin ellos"

Isaac Asimov

Stakewinner00

Una pregunta, que ventaja representa declarar las funcione mediante un include respecto a ponerlas directamente al código main?

SI el código es corto creo que es más molesto ir cambiando de archivo que ir a buscar la función.

barnix456

CitarUna pregunta, que ventaja representa declarar las funcione mediante un include respecto a ponerlas directamente al código main?

creo que esa era mi pregunta y no la supe hacer, por que no declararlas, llamarlas y que esten dentro del mismo main
"No temo a los ordenadores; lo que temo es quedarme sin ellos"

Isaac Asimov

Stakewinner00

Cita de: barnix456 en  6 Noviembre 2012, 22:05 PM
creo que esa era mi pregunta y no la supe hacer, por que no declararlas, llamarlas y que esten dentro del mismo main

No fue eso, es que no ley el comentario, me surgio la duda y no pare a leer los comentarios  :D

barnix456

si de echo, lo estoy uniendo en un solo main, lo terminare de unir en solo main y vere que tal funciona, aver si lo publico, en la noche...  :D
"No temo a los ordenadores; lo que temo es quedarme sin ellos"

Isaac Asimov

BatchianoISpyxolo

#6
Hay diversos motivos por los que se usan los headers de C o los módulos en general.

Una de las ideas es facilitar la lectura del código, optimizar la depuración del código y hacer más portable el código.

Imaginad que tenéis todas las librerías que uséis escritas en un mismo archivo o_O. Lo que hacéis es incluirlas y así quedan representadas por la directiva #include en vuestro código (el preprocesador luego incluirá el código de esas librerías en el archivo donde se incluyan).

Otra idea es la de encapsulación de código. Una parte interfaz (o pública) y otra parte implementación (o privada). De tal manera que el programador puede elegir qué información es visible para otros usuarios y cuál no.

Los archivos con extensión .h (headers o encabezados) contienen la información pública. Tipos de datos y encabezados de funciones para su posterior acceso. Y los archivos con extensión .c ( c files o archivos c ) contienen la parte privada o de implementación relacionanda con su encabezado.

Por ejemplo, imaginemos que implementamos un árbol binario y cada nodo guarda un entero. Posteriormente nosotros queremos un árbol binario que represente cadenas de caracteres. Pues tan solo yendo al header del árbol binario, podemos modificar ese tipo y todo el código nos servirá para represenar árboles binarios cuyos nodos representan cadenas de caracteres... De esa manera se incentiva la abstracción del código...

¡Saludos!
Puede que desees aprender a programar desde 0: www.espascal.es

barnix456

Muchas gracias por la explicacion..!  ;D
"No temo a los ordenadores; lo que temo es quedarme sin ellos"

Isaac Asimov

barnix456

yo no se mucho, aun estoy aprendiendo a programar en C, y basado en tu codigo, que la verdad no supe que hacer con el .h y el .c, pues decidi unirlo en uno solo, le hice algunos cambios, pero nada significativo, pero igual se los dejo....


#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void sumar(void);
void restar(void);
void multiplicar(void);
void dividir(void);
void potencia(void);
void raiz_cuadrada(void);
void seno(void);
void coseno(void);
void tangente(void);
void main()
{
    int op;

    printf("\t\tElija una opcion:\n\n");
printf("\t*********************************\n");
printf("\t*\t [1] Sumar\t\t*\n");
printf("\t*\t [2] Restar\t\t*\n");
printf("\t*\t [3] Multiplicar\t*\n");
printf("\t*\t [4] Dividir\t\t*\n");
printf("\t*\t [5] Potencia\t\t*\n");
printf("\t*\t [6] Raiz cuadrada\t*\n");
printf("\t*\t [7] Seno\t\t*\n");
printf("\t*\t [8] Coseno\t\t*\n");
printf("\t*\t [9] Tangente\t\t*\n");
printf("\t*\t [10] Salir\t\t*\n");
printf("\t*********************************\n\n");
scanf("%d", &op);

switch (op) {

case 1:
sumar();
getchar();
break;

case 2:
restar();
getchar();
break;

case 3:
multiplicar();
getchar();
break;

case 4:
dividir();
getchar();
break;

case 5:
potencia();
getchar();
break;

case 6:
raiz_cuadrada();
getchar();
break;

case 7:
seno();
getchar();
break;

case 8:
coseno();
getchar();
break;

case 9:
tangente();
getchar();
break;

case 10:
break;

default:
            printf("Ha elejido una opcion incorrecta\n");
            break;
}
}

void sumar(void)
{
    float num1, num2;
printf("\nIntroduzca los dos numeros a sumar: \n");
scanf("%f %f", &num1, &num2);
    printf("\n%.2f", num1 + num2);
return;
}
void restar(void)
{
    float num1, num2;
printf("\nIntroduzca los dos numeros a restar: \n");
scanf("%f %f", &num1, &num2);
printf("\n%.2f", num1 - num2);
return;
}
void multiplicar(void)
{
    float num1, num2;
printf("\nIntroduzca los dos numeros a multiplicar: \n");
scanf("%f %f", &num1, &num2);
printf("\n%.2f", num1 * num2);
return;
}
void dividir(void)
{
    float num1, num2;
printf("\nIntroduzca los dos numeros a dividir: \n");
scanf("%f %f", &num1, &num2);
printf("\n%.2f", num1 / num2);
return;
}
void potencia(void)
{
    float num1, num2;
printf("\nIntroduzca la base: \n");
scanf("%f", &num1);
printf("Introduzca el exponente: \n");
scanf("%f", &num2);
printf("\n%.2f", pow(num1, num2));
return;
}
void raiz_cuadrada(void)
{
    float num1;
printf("\nIntroduzca el numero: \n");
scanf("%f", &num1);
printf("La raiz cuadrada es: %.2f \n", sqrt(num1));
return;
}
void seno(void)
{
    float num1;
printf("\nIntroduzca el numero: \n");
scanf("%f", &num1);
printf("El seno es: %.2f \n", sin(num1));
return;
}
void coseno(void)
{
    float num1;
printf("\nIntroduzca el numero: \n");
scanf("%f", &num1);
printf("El coseno es: %.2f \n", cos(num1));
return;
}
void tangente(void)
{
    float num1;
printf("\nIntroduzca el numero: \n");
scanf("%f", &num1);
printf("La tangente es: %.2f \n", tan(num1));
return;
}
"No temo a los ordenadores; lo que temo es quedarme sin ellos"

Isaac Asimov

Stakewinner00