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]