Calculadora hecha en C

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

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

BatchianoISpyxolo

#10
@barnix456, bueno tú has insertado todo el código en un mismo archivo y funciona. Pero claro, si tienes programas de 10-20 mil líneas, la cosa se complica.

La idea sería:

funciones.h


/* Tipos de datos */

/* Encabezados de funciones públicas */

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);


funciones.c


/* includes */

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

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;
}



main.c
#include <stdio.h>
#include <stdlib.h>
#include "funciones.h" // <- debe estar en el mismo dir o especificar ruta completa

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;
}
}


La idea ahora sería compilar funciones.c como objeto. Es decir generar un fichero compilado, aunque no ejecutable.
Usando gcc sería:
gcc -c funciones.c -o funciones.o

Lo siguiente, compilar main.c junto con funciones.h como objeto:
Usando gcc sería:
gcc -c main.c funciones.h -o main.o

Finalmente deberíamos generar el ejecutable final compilando los dos archivos objeto (funciones.o y main.o):
Usando gcc sería:
gcc main.o funciones.o -o ejecutable (En Windows .exe)

Para agilizar la compilación en módulos se diseñan archivos makefile de tal manera que solo con ejecutar make, compilamos todo nuestro programa.
Puede que desees aprender a programar desde 0: www.espascal.es

Caster

El dividir el programa en varios archivos es solo cuestion de comodidad, es costoso escribir muchas lineas en el mismo archivo, asi si divido el programa, a la hora de volver a tocar el codigo, cambiar cosas, depurarlo, etc me es mucho mas facil y comodo, y si dejo un tiempo el codigo apartado y quiero volver a verlo, conayuda de algunos coments y tenerlo dividido en archivo se hace mas rapido volver a entender el codigo.

Saludos

barnix456

@BatchianoISpyxolo muchas gracias por la explicacion, la verdad como estoy empezando en esto, no sabia eso de dividir los programas en ese tipo de cosas, y eso de los makefiles tampoco... eso se ve muy interesante, y aparte es mas practico... :) ahora, interante compilarlo de esa manera, una pregunta, para compilarlo de esa manera, asi por aparte, tiene que ser afuerza en la terminal, o tambien desde algun ide??

"No temo a los ordenadores; lo que temo es quedarme sin ellos"

Isaac Asimov

0xDani

Cita de: barnix456 en  9 Noviembre 2012, 19:46 PM
@BatchianoISpyxolo muchas gracias por la explicacion, la verdad como estoy empezando en esto, no sabia eso de dividir los programas en ese tipo de cosas, y eso de los makefiles tampoco... eso se ve muy interesante, y aparte es mas practico... :) ahora, interante compilarlo de esa manera, una pregunta, para compilarlo de esa manera, asi por aparte, tiene que ser afuerza en la terminal, o tambien desde algun ide??



No le temas a la terminal, no se come a nadie  :P
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM

barnix456

jajaja buen punto, la verdad, tengo que empezar a meterle mano...!!
"No temo a los ordenadores; lo que temo es quedarme sin ellos"

Isaac Asimov