Curso-lenguaje-C/curso-juantxi/Ejercicios/0603kmFootingArray.c

227 lines
6.4 KiB
C

#include<stdio.h>
#include<stdlib.h> // Se suele emplear para memoria dinámica
/*
Ejercicio 3:
Miguel quiere controlar cuantos kilómetros ha corrido haciendo footing esta semana.
La semana asumimos tiene siete días.
Almacenará los kilómetros (número real) en un array de siete posiciones.
Al comienzo del programa se le pedirá a Miguel que introduzca cuántos kilómetros
ha recorrido cada día. A continuación se mostrará un menú con las siguientes opciones:
1) Mostrar la información de todos los días y todos los kilómetros recorridos cada día
(mostrar el array)
2) Pedirle a Miguel un día (entre 0 y 6, no puede ser cualquier otro valor,
si se trata de un valor no válido se repetirá le pregunta)
y se mostrarán los kms recorridos ese día.
3) Pedirle a Miguel un número determinado de kilómetros y mostrar cuántos días ha superado
esa cantidad de kms.
4) Mostrar el número de kms recorridos en total durante la semana (suma)
5) Mostrar la media de kms por día durante la semana (media de los números del array)
6) Salir
El menú se repetirá hasta que Miguel decida salir.
*/
#define TAM 8
//prototipos
void opcion2 (int tablaKM[]);
int opcion4(int tablaKM[]);
int main(){
/* Variables */
int tablaKM[TAM];
int i, menu, j, km, k;
int dia=1;
int aviso=0;
int total=0;
float media;
/* KM de la semana */
printf("\n_____________\n\n¡HOLA MIGUEL!\n_____________\n");
printf("\nIntroduce los km de esta semana: \n");
for (i=1; i<TAM; i++){
printf("Día %d: ", i);
scanf("%d", &tablaKM[i]);
}
printf("\n");
do{
/* Elegir opción */
printf("\n+++++++++++++++++\n+\tMENÚ\t+\n+++++++++++++++++\n");
printf("\n1 Mostrar la información de todos los días y todos los kilómetros recorridos cada día.");
printf("\n2 Mostrar los km recorridos un día concreto.");
printf("\n3 Mostrar los días que se han superado x km");
printf("\n4 Mostrar el número de kms recorridos en total durante la semana.");
printf("\n5 Mostrar la media de kms por día durante la semana.");
printf("\n6 Salir\n");
printf("\nIntroduce una opción del 1 al 6: ");
fflush(stdin);
scanf("%d", &menu);
/* Condicional case para seleccionar el número */
switch (menu) {
case 1:
printf("\n##################################################\n");
printf("\nLos km recorridos esta semana son: \n");
printf("L\tM\tX\tJ\tV\tS\tD\n");
for(i=1; i<TAM; i++){
printf("%d\t", tablaKM[i]);
}
printf("\n\n##################################################\n");
break;
case 2:
opcion2(tablaKM); //en la llamada no ponemos tipos, solo nombres
break;
case 3:
printf("\nDime cuantos km quieres saber si has superado: ");
scanf("%d", &km);
printf("\n######################\n");
printf("\nSuperaste los %d km:", km);
dia=1;
for (j=1; j<TAM; j++){
aviso=0; // El flag es mejor cambiarlo justo antes del bucle
if(km<=tablaKM[j]) {
aviso=1;
}
if(aviso==1){
printf("\n - El dia %d con %d km.", dia, tablaKM[j]);
aviso=0;
}
dia=dia+1;
}
printf("\n\n######################\n");
break;
case 4:
total=opcion4(tablaKM);
printf("\n######################\n");
printf("\nEsta semana has hecho %d km.\n\n!ENHORABUENA MIGUEL! ", total);
printf("\n\n######################\n");
break;
case 5:
total=0;
for (k=1; k<TAM; k++){
total=total+tablaKM[k];
}
media=(float)total/7;
printf("\n######################\n");
printf("\nEsta semana tienes %.2f km de media.\n\n!ERES UN CRACK MIGUEL! ", media);
printf("\n\n######################\n");
break;
case 6:
printf("\nAdios Miguel!");
break;
default:
printf("\nNo es un valor correcto\n\n");
}
}while ( menu != 6 );
return 0;
}
//a partir de auqí ponemos otras funciones
void opcion2 (int tablaKM[]){
int busca;
do{
printf("\nDime el día del que quieres saber los km: ");
fflush(stdin);
scanf("%d", &busca);
//busca asegurate que solo puede tener valores entre 1 y 7
if(busca<1 || busca>7){
printf("\nPájaro, ese valor no es correcto, tiene que ser entre 1 y 7 inclusive");
}
}while(busca<1 || busca>7);
printf("\n##################################\n");
switch (busca) {
case 1:
printf("\nEl lunes hiciste %d km \t\t:)\n",tablaKM[busca]);
break;
case 2:
printf("\nEl martes hiciste %d km \t:)\n",tablaKM[busca]);
break;
case 3:
printf("\nEl miércoles hiciste %d km \t:)\n",tablaKM[busca]);
break;
case 4:
printf("\nEl jueves hiciste %d km \t:)\n",tablaKM[busca]);
break;
case 5:
printf("\nEl viernes hiciste %d km \t:)\n",tablaKM[busca]);
break;
case 6:
printf("\nEl sábado hiciste %d km \t:)\n",tablaKM[busca]);
break;
case 7:
printf("\nEl domingo hiciste %d km \t:)\n",tablaKM[busca]);
break;
default:
printf("\nNo es un valor correcto\n\n");
}
printf("\n##################################\n");
}
int opcion4(int tablaKM[]){
int totalKM;
int k;
totalKM=0;
for (k=1; k<TAM; k++){
totalKM=totalKM+tablaKM[k];
}
return totalKM;
}