En este ejercicio hay que crear un programa que muestre en un menú todos los ejercicios realizados anteriormente para poder visualizarlos. Para la realización de este ejercicio voy a crear funciones en archivos externos para luego llamarlas en el archivo principal.
Se necesitan tres archivos:
– main.c -> es el archivo principal en el que va el menú.
– ejercicios.c -> es del tipo source file, en este se crean las funciones de los ejercicios.
– ejercicios.h -> es del tipo header file, en este definen las funciones que se van a utilizar en el principal. Este archivo tiene que estar incluido en main.c.
—————main.c—————
[code lang=»c»]
#include <stdio.h> #include "ejercicios.h" main() { int menu; char fin; do { printf("\nMostrar los ejercicios anteriores"); printf("\n1. Ejercicio 2 del manual."); printf("\n2. Ejercicio 1 del manual."); printf("\n3. Ejericio caracteres ASCII desde el 1 hasta el 164."); printf("\n4. Ejericio caracteres ASCII desde el 32 hasta el 164."); printf("\n5. Ejericio pasar un numero decimal a hexadecimal y octal."); printf("\n6. Ejericio ecuacion de 2º."); printf("\n7. Ejericio unsigned short."); printf("\n8. Ejericio division entera y real."); printf("\n9. Ejericio conversor de metro a pulgadas."); printf("\n10. Ejericio conversor de dolar a euro."); printf("\n11. Ejericio de post y pre incremento."); printf("\n12. Ejericio minicalculadora."); printf("\n13. Ejericio 5 manual."); printf("\n14. Ejericio 4 manual."); printf("\n15. Ejericio 3 manual."); printf("\n16. Ejericio union, struc, enum."); printf("\n17. Ejericio adivinar."); printf("\n18. Ejericio generar numero aleatorio."); printf("\n19. Ejericio tabla de multiplicar."); printf("\n20. Ejericio tabla de multiplicar con menu."); printf("\n21. Ejericio ecuacion de segundo grado con comprobacion de errores."); printf("\nPulsa 0 para salir del programa."); printf("\n\nIntroduce el numero de ejercicio a mostrar: "); scanf("%d", &menu); while (getchar() != '\n'); switch (menu) { case 1: printf("Ejercicio 2 del manual.\n"); ejer2_manual(); break; case 2: printf("Ejericio 1 del manual.\n"); ejer1_manual(); break; case 3: printf("Ejericio caracteres ASCII desde el 1 hasta el 164.\n"); ASCII_1_164(); break; case 4: printf("Ejericio caracteres ASCII desde el 32 hasta el 164.\n"); ASCII_32_164(); break; case 5: printf("Ejericio pasar un numero decimal a hexadecimal y octal.\n"); dec_oct_hex(); break; case 6: printf("Ejericio ecuacion de 2º.\n"); ecuacion(); break; case 7: printf("Ejericio unsigned short.\n"); uns_short(); break; case 8: printf("Ejericio division entera y real.\n"); div_entera_real(); break; case 9: printf("Ejericio conversor de metro a pulgadas.\n"); metros_pulgadas(); break; case 10: printf("Ejericio conversor de dolar a euro.\n"); USD_euros(); break; case 11: printf("Ejericio de post y pre incremento.\n"); post_pre_incremento(); break; case 12: printf("Ejericio minicalculadora.\n"); minicalculadora(); break; case 13: printf("Ejericio 5 manual.\n"); ejer5_manual(); break; case 14: printf("Ejericio 4 manual.\n"); ejer4_manual(); break; case 15: printf("Ejericio 3 manual.\n"); ejer3_manual(); break; case 16: printf("Ejericio union, struc, enum.\n"); union_struc_enum(); break; case 17: printf("Ejericio adivinar.\n"); adivinar(); break; case 18: printf("Ejericio generar numero aleatorio.\n"); random(); break; case 19: printf("Ejericio tabla de multiplicar.\n"); tabla_multiplicar(); break; case 20: printf("Ejericio tabla de multiplicar con menu.\n"); tabla_multiplicar_menu(); break; case 21: printf("Ejericio ecuacion de segundo grado con comprobacion de errores.\n"); ecuacion_comp_errores(); break; case 0: printf("\nVa a salir del programa."); printf("\n¿Estas seguro? s/n..."); scanf("%c", &fin); if (fin == 's') return; break; default: printf("\n\nNo ha introducido un numero valido."); break; } while (getchar() != '\n'); printf("\nPulse una tecla para continuar: "); getchar(); } while (1); return; }
[/code]
—————ejercicios.c—————
[code lang=»c»]
#include <stdio.h> #include <math.h> #include <limits.h> #include <float.h> #include <stdlib.h> #include <time.h> int ejer2_manual() { char car; printf("Escriba un caracter: "); car = getchar(); printf("\nEl caracter introducido es %c.\n", car); return 0; } int ejer1_manual() { printf("Primer programa\n"); return 0; } int ASCII_1_164(void) { int i; printf("Los Caracteres ASCII son: \n"); for (i = 1; i <= 164; i++) { printf("%c %d \t", i, i); } return 0; } int ASCII_32_164(void) { int i; printf("Los Caracteres ASCII son: \n"); for (i = 32; i <= 164; i++) { if (i < 97 || i > 122) printf("%c %d \t", i, i); } return 0; } int dec_oct_hex(void) { int decimal; printf("\nIntroduce un número entero: "); scanf("%d", &decimal); printf("\n%d en hexadecimal es %X y en octal %o", decimal, decimal, decimal); return 0; } int ecuacion(void) { float a, b, c, x1, x2; printf("\nIntroduce el valor para a:"); scanf("%f", &a); printf("\nIntroduce el valor para b:"); scanf("%f", &b); printf("\nIntroduce el valor para c:"); scanf("%f", &c); x1 = (-b + sqrt(b * b - 4 * a * c)) / 2 * a; x2 = (-b - sqrt(b * b - 4 * a * c)) / 2 * a; printf("\n%fx^2 + %fx + %f = 0 --> Solución 1: %f Solución 2: %f", a, b, c, x1, x2); return 0; } int uns_short(void) { unsigned short int i = 65534; i += 3; printf("\ni es un unsigned short int y después de sumar 65534 + 3 en i hay %d", i); printf("\n[El valor máximo a almacenar en un unsigned short int es %d]", USHRT_MAX); printf("\nHabría que utilizar un tipo superior, un int (sistemas 32 bits) o un long"); return 0; } int div_entera_real(void) { float f1 = 5 / 2, f2 = 5.0 / 2.0; printf("\nEl valor de f1 es %f (5/2 da como resultado 3 por ser 5 y 2 números enteros --> división entera)", f1); printf("\nEl valor de f2 es %f (5.0/2.0 ambos son números reales --> división real)", f2); return 0; } int metros_pulgadas(void) { float metros; printf("\nMetros: "); scanf("%f", &metros); printf("\n%f metros son %.5f pulgadas", metros, metros * 39.3700787); return 0; } int USD_euros(void) { float usd, tipocambio = 0.765641; printf("\nUSD: "); scanf("%f", &usd); printf("\nEn euros es: %.2f E", usd * tipocambio); return 0; } int post_pre_incremento(void) { int a = 30, b = 11; printf("\nEl contenido de la variable a es %d", ++a); printf("\nEl contenido de la variable a es %d", a++); printf("\nEl contenido de la variable a es %d", a); a = b++; printf("\nEl contenido de a es %d", a); a = ++b; printf("\nEl contenido de a es %d", a); return 0; } int minicalculadora(void) { float a, b; printf("\nIntroduce a: "); scanf("%f", &a); printf("\nIntroduce b: "); scanf("%f", &b); printf("\n%f + %f = %f", a, b, a + b); printf("\n%f - %f = %f", a, b, a - b); printf("\n%f * %f = %f", a, b, a * b); printf("\n%f : %f = %f (división real)", a, b, a / b); printf("\n%f : %f = %d (división entera)", a, b, (int) a / (int) b); printf("\nResto de la división entera de %f : %f es %d", a, b, (int) a % (int) b); return 0; } int ejer5_manual() { char nombre[20]; printf("Hola, me llamo Ordenador, y tu?\n"); scanf("%s", &nombre[0]); printf("Me alegro de conocerte %s\n", nombre); return 0; } int ejer4_manual() { char a; short int b; int c; long int d; unsigned char e; unsigned short int f; unsigned int g; unsigned long int h; float i; double j; long double k; printf("Longitud de cada uno de los tipos basicos \n\n"); printf("La longitud de char a= %d\n", sizeof (a)); printf("La longitud de short int b= %d\n", sizeof (b)); printf("La longitud de int c= %d\n", sizeof (c)); printf("La longitud de long int d= %d\n", sizeof (d)); printf("La longitud de unsigned char e= %d\n", sizeof (e)); printf("La longitud de unsigned short int f= %d\n", sizeof (f)); printf("La longitud de unsigned int g= %d\n", sizeof (g)); printf("La longitud de unsigned long int h= %d\n", sizeof (h)); printf("La longitud de float i= %d\n", sizeof (i)); printf("La longitud de double j= %d\n", sizeof (j)); printf("La longitud de long double k= %d\n", sizeof (k)); printf("\nValores minimos y maximos de cada uno de los tipos\n\n"); printf("Minimo y maximo de char a= %d\t\t%d\n", CHAR_MIN, CHAR_MAX); printf("Minimo y maximo de short int b=%d\t\t%d\n", SHRT_MIN, SHRT_MAX); printf("Minimo y maximo de int c= %d\t\t%d\n", INT_MIN, INT_MAX); printf("Minimo y maximo de long int d=%d\t\t%d\n", LONG_MIN, LONG_MAX); printf("Maximo de unsigned char e= %d\n", UCHAR_MAX); printf("Maximo de unsigned short int f= %d\n", USHRT_MAX); printf("Maximo de unsigned int g= %d\n", UINT_MAX); printf("Maximo de unsigned long int h= %d\n", ULONG_MAX); printf("Minimo y maximo de float i= %d\t\t%d\n", FLT_MIN, FLT_MAX); printf("Minimo y maximo de double j= %d\t\t%d\n", DBL_MIN, DBL_MAX); printf("Minimo y maximo de long double k=%d\t\t%d\n", LDBL_MIN, LDBL_MAX); return 0; } #define N 3 ejer3_manual() { struct agenda { char nombre[25]; char telefono[10]; int edad; }; struct agenda amigos[N] = { {"Pepe", "913472314", 18}, {"Juan", "915547623", 19}, {"Rosa", "917456778", 21}}; int i, clave; do { printf("\nIntroduzca la clave (0 para terminar): "); scanf("%d", &clave); } while (clave != 1234 && clave != 0); if (clave == 0) { printf("\nPrograma terminado - usuario ha pulsado cero"); } else { for (i = 0; i < N; ++i) { printf("\nAmigo %s\t telefono %s\t edad %d", amigos[i].nombre, amigos[i].telefono, amigos[i].edad); } printf("\n"); } return 0; } int union_struc_enum(void) { enum diasSemana { LUNES = 1, MARTES = 2, MIERCOLES = 3, JUEVES = 4, VIERNES = 5, SABADO = 6, DOMINGO = 7 }; // empezando en 1 enum diasSemana hoy = MIERCOLES; // Struct - ver ejercicio 3 manual UCM union dato { int i; char ch; }; union dato midato; printf("\nhoy es %d", hoy); midato.i = 6200; printf("\nmi dato contiene un entero: %d [si pregunto por el char %c]", midato.i, midato.ch); midato.ch = 'A'; printf("\nahora mi dato contiene un caracter: %c [si pregunto por el int %d]", midato.ch, midato.i); return 0; } int adivinar () { int secreto,numero,numeromaximo,opcion,intentos=0; clock_t t_ini, t_fin; double secs; /* Inicializar generador de números aleatorios*/ srand (time(NULL)); do{ printf ("\n ADIVINA UN NÚMERO \n ----- MENÚ ----"); printf ("\n1 .- El número a adivinar estará entre 0 y 10"); printf ("\n2 .- El número a adivinar estará entre 0 y un número que indique"); printf ("\n3 .- Finalizar el juego"); printf ("\nElige la opcion deseada: "); scanf ("%d",&opcion); switch (opcion){ case 1: numeromaximo = 10; break; case 2: printf ("\nIndique el valor máximo a adivinar: "); scanf ("%d",&numeromaximo); break; case 3: printf ("\n Juego finalizado"); return 0; break; default: printf ("\nOpción no válida."); continue; } printf ("\nEmpieza el juego - adivina un número entre 1 y %d",numeromaximo); /* generar el número secreto: */ secreto = rand() % numeromaximo + 1; t_ini = clock(); do { // Bucle del juego printf ("\nUn número:"); scanf ("%d",&numero); intentos++; if (secreto == numero) { printf ("\nMUY BIEN, LO HAS ADIVINADO [En %d intentos]",intentos); break; } if (secreto >= numero) { printf ("\nTe has quedado corto!!!"); } else { printf ("\nTe has pasado!!!!"); } } while (1); t_fin = clock(); secs = (double)(t_fin - t_ini) / CLOCKS_PER_SEC; printf("\nTiempo empleado: %.16g milisegundos\n", secs * 1000.0); }while (1); return 0; } int generar_random (void){ int numero,i; // Inicialización generador de números aleatorios srand (time (NULL)); printf ("\n GENERACIÓN DE NÚMEROS ALEATORIOS"); do { printf ("\nUn número aleatorio: %d",rand() % 50); // un número aleatorio entre 0 y 49 printf ("\nOtro número aleatorio (s/n)? "); }while (getchar() != 'n'); return 0; } int tabla_multiplicar_menu (void){ int numero,i; do { printf ("\nIntroduce un número entero: "); scanf ("%d",&numero); printf ("\nLa tabla del %d es: ",numero); for (i=0;i<=10;i++){ printf ("\n%3d x %3d = %3d",numero, i , numero * i); } printf ("\nQuieres calcular otro número (n para salir, cualquier otra tecla para continuar)"); }while (getchar() != 'n'); return 0; } int tabla_multiplicar (void){ int numero,i; printf ("\nIntroduce un número entero: "); scanf ("%d",&numero); printf ("\nLa tabla del %d es: ",numero); for (i=0;i<=10;i++){ printf ("\n%3d x %3d = %3d",numero, i , numero * i); } return 0; } int ecuacion_comp_errores (void) { float a, b, c, x1, x2; printf ("\nIntroduce el valor para a:"); scanf ("%f",&a); printf ("\nIntroduce el valor para b:"); scanf ("%f",&b); printf ("\nIntroduce el valor para c:"); scanf ("%f",&c); if (2*a == 0) { printf ("\nError - división por cero."); return -1; } if ((b*b-4*a*c)<0) { printf ("\nError - no es posible calcular raiz cuadrada de un número negativo."); return -1; } x1 = (-b+sqrt(b*b-4*a*c))/2*a; x2 = (-b-sqrt(b*b-4*a*c))/2*a; printf ("\n%fx^2 + %fx + %f = 0 --> Solución 1: %f Solución 2: %f",a,b,c,x1,x2); return 0; }
[/code]
—————ejercicios.h—————
[code lang=»c»]
#ifndef EJERCICIOS_H #define EJERCICIOS_H int ejer2_manual(); int ejer1_manual(); int ASCII_1_164(void); int ASCII_32_164(void); int dec_oct_hex(void); int ecuacion(void); int uns_short(void); int div_entera_real(void); int metros_pulgadas(void); int USD_euros(void); int post_pre_incremento(void); int minicalculadora(void); int ejer5_manual(); int ejer4_manual(); ejer3_manual(); int union_struc_enum(void); int adivinar (); int generar_random (void); int tabla_multiplicar_menu (void); int tabla_multiplicar (void); int ecuacion_comp_errores (void); #ifdef __cplusplus extern "C" { #endif #ifdef __cplusplus } #endif #endif /* EJERCICIOS_H */
[/code]