Codificación aprenderaprogramar.com: CU00539F
EJERCICIO Nº1: ENUNCIADO
Transformar en código el pseudocódigo indicado a continuación, relativo al llenado de aceite de un depósito cilíndrico a través de una toma con cierto caudal disponible. Razonar para comprender la lógica del programa.
Nota: considerar que el caudal disponible se encuentra en el archivo caudal.dat. Dicho archivo deberá ser creado e introducir en él el dato necesario antes de ejecutar el programa, de forma que el programa extraiga el dato desde el archivo.
1. Inicio 2. [Q = Caudal disponible en litros / minuto] 3. Leer Q 4. Mostrar “Introduzca el diámetro del depósito, en metros” : Pedir D 5. Mostrar “Introduzca la altura del depósito, en metros” : Pedir H 6. Pi = 3,141593 7. R = D / 2 8. V = Pi * (R ^ 2) * H : Vlitros = V * 1000 9. tminutos = Vlitros / Q 10. Mostrar “El tiempo que transcurrirá hasta el llenado del depósito es de”, tminutos, “minutos” 11. Fin [Pseudocódigo aprenderaprogramar.com] |
EJERCICIO Nº1: SOLUCIÓN
Vamos a suponer que el archivo caudal.dat se encuentra en la unidad de disco C:, y que el valor de caudal disponible en litros por minuto que proporciona es 112. Antes de ejecutar el programa habremos creado este archivo. Tener en cuenta que para especificar la ruta tendremos que poner c:\\caudal.dat usando una doble barra porque \ es un carácter especial que se usa para insertar ciertos códigos de control como cuando escribimos \n y para que se interprete como un carácter de la cadena c:\caudal.dat hemos de escribir el carácter de escape, que es precisamente \, de ahí que se escriba duplicado.
Código:
#include <stdio.h> #include <stdlib.h> #include <math.h> // Ejercicios resueltos de programación en C aprenderaprogramar.com int main() { const double Pi = 3.141592654; double D, R, H, V, Vlitros, tminutos, Q; puts ("Tiempo de llenado para un deposito cilindrico\n"); printf ("Introduzca el diametro del deposito en metros: "); scanf ("%lf", &D); printf ("Introduzca la altura del deposito en metros: "); scanf ("%lf", &H); //Extracción de dato de caudal del archivo FILE* fichero; fichero = fopen("c:\\caudal.dat", "rt"); fscanf (fichero, "%lf", &Q ); fclose(fichero); //Cálculos y resultados printf ("\nDato de caudal extraido de fichero vale: %lf \n", Q); R = D / 2; V = Pi * pow (R, 2) * H; Vlitros = V * 1000; tminutos = Vlitros / Q; printf ("El tiempo que transcurrira hasta el llenado del deposito es de %lf minutos \n", tminutos ); return 0; } |
Si ejecutamos el programa introduciendo como diámetro del depósito 2.44 metros y como altura del depósito 3 metros obtendremos una salida en pantalla como esta:
Tiempo de llenado para un deposito cilindrico Introduzca el diametro del deposito en metros: 2.44 Introduzca la altura del deposito en metros: 3 Dato de caudal extraido de fichero vale: 112.000000 El tiempo que transcurrira hasta el llenado del deposito es de 125.248567 minutos |
EJERCICIO Nº2: ENUNCIADO
Crear un programa que extraiga datos desde un archivo relativos a un conteo de coches que han pasado por una vía durante 24 horas y realice un cálculo de datos estadísticos (horas en las que el tránsito es cero, total de coches que pasaron en el día, número de horas de tránsito cero, hora de máximo tránsito y última hora a la que pasó un coche. Las horas para el usuario del programa van desde la 0 hasta la 23. La hora 0 corresponde a desde las 00:00:00 hasta las 00:59:59).
El archivo con los datos de tránsito por horas deberá ser creado previamente conteniendo una lista de números (24 en total) que se corresponderán con el tránsito en cada hora.
EJERCICIO Nº2: SOLUCIÓN
El código sería el siguiente:
#include <stdio.h> #include <stdlib.h> // Ejercicios resueltos de programación en C aprenderaprogramar.com int main() { int cochesHora[24]; //24 elementos con índices de 0 a 23 int cochesTotal=0; int transitoCero=0; int maxTransito = 0; int horaMaxTran=0;int ultimaHora= 0; int cochesUltima=0; int i=0; puts ("Programa Coches \n"); //Extracción de datos de archivo FILE* fichero; fichero = fopen("c:\\coches1523.dat", "rt"); for (i=0; i<=23; i++) { fscanf (fichero, "%d", &cochesHora[i] ); } fclose(fichero); for (i=0; i<=23; i++) { cochesTotal = cochesTotal + cochesHora[i]; if (cochesHora[i] == 0) { transitoCero = transitoCero + 1; printf ("La hora %d hubo transito cero \n" , i); } if (cochesHora[i] > maxTransito) { maxTransito = cochesHora[i]; horaMaxTran = i; } if (cochesHora[i] > 0) { ultimaHora = i; cochesUltima = cochesHora[i]; } } //Cierre del for printf ("El total de coches que pasaron durante el dia fueron %d \n", cochesTotal); printf ("Las horas de transito cero fueron %d \n", transitoCero); printf ("La hora de maximo transito fue la %d registrandose el paso de %d coches \n", horaMaxTran, maxTransito); printf ("La ultima hora a la que paso un coche fue la %d registrandose el paso de %d coches", ultimaHora, cochesUltima); return 0; } |
Para simular los datos contenidos en el archivo desde el que ha de leer el programa, crearemos un archivo en la ruta C:\coches1523.dat cuyo contenido será (por ejemplo) el siguiente:
Comentarios: es preferible realizar la apertura y cierre una sola vez, fuera del bucle, a proceder a abrir y cerrar el archivo 24 veces disponiendo el código de apertura y cierre dentro del bucle. El resultado de ejecución sería (para los datos indicados de ejemplo) similar a este:
Programa Coches La hora 0 hubo transito cero La hora 1 hubo transito cero El total de coches que pasaron durante el dia fueron 32332 Las horas de transito cero fueron 2 La hora de maximo transito fue la 12 registrandose el paso de 2665 coches La ultima hora a la que paso un coche fue la 23 registrandose el paso de 45 coches Process returned 0 (0x0) execution time : 0.032 s Press any key to continue. |
EJERCICIO
Crea un programa que pida una entrada de teclado y usando un bucle muestre cada una de las letras que componen la entrada. Por ejemplo si se introduce “avena” debe mostrar:
Letra 1: a
Letra 2: v
Letra 3: e
Letra 4: n
Letra 5: a
Para comprobar si tus respuestas son correctas puedes consultar en los foros aprenderaprogramar.com.
Para hacer un comentario o consulta utiliza los foros aprenderaprogramar.com, abiertos a cualquier persona independientemente de su nivel de conocimiento.