olicitado: Ejercicios 02: Soluciones estructuradas en C M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com edfrancom@ipn.mx @edfrancom edgardoadrianfrancom Estructuras de datos (Prof. Edgardo A. Franco) 1
Contenido Problema 01 Planteamiento Diagrama de flujo Problema 02 Planteamiento Diagrama de flujo Problema 03 Planteamiento Pseudocódigo Problema 04 Planteamiento Pseudocódigo Simulando el tiempo Ejercicios 02: Soluciones estructuradas en C 2
Problema 01 Se necesita realizar un programa que calcule el sueldo neto de un trabajador, el programa recibirá el sueldo base del empleado y le descontará el impuesto sobre la renta según la siguiente tabla: Rangos del sueldo base Descuento de impuesto $0.00 - $1000.00 5% del sueldo base $1001.00 - $5000.00 15% del sueldo base >$5000.00 30% del sueldo base 3
Problema 01 (Diagrama de flujo) Diagrama de flujo que da solución al problema 01 4
Problema 02 Dados tres números enteros de entrada a, b y c, mostrarlos a la salida ordenados de forma descendente. E.g. si la entrada es: a=6, b=5, y c=90; La salida será: 90, 6, 5. E.g. si la entrada es: a=60, b=50, y c=9; La salida será: 60, 50, 9. 5
Diagrama de flujo que da solución al problema 02 6
Problema 03 Realizar un programa que calcule el cubo de una serie de números positivos introducidos uno a uno, si se introduce un número negativo se deberá terminar el programa. 7
Problema 03 (Pseudocódigo) procedimiento Cubo numero Entrada() mientras numero>=0 hacer cubo=numero*numero*numero Salida() cubo numero Entrada() fin mientras fin procedimiento Pseudocódigo que da solución al problema 03 8
Problema 04 Realizar un programa que muestre la serie de Fibonacci hasta el termino n, el cual es recibido al inicio y debe ser mayor a 2. Al mostrar la serie se deberá mostrar termino a termino a la salida con un retraso de 0.5 segundos. Recordar que los dos primeros números de la serie son 0 y 1. El resto se calcula como la suma de los dos números inmediatos que le preceden. E.g. 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 9
Problema 04 (Pseudocódigo) procedimiento Fibonacci repetir n Entrada() hasta que (n>2) primero 0 Salida() primero EsperarMedioSegundo() segundo 1 Salida() segundo EsperarMedioSegundo() elemento 3 repetir siguiente primero+segundo Salida() siguiente EsperarMedioSegundo() primero segundo segundo siguiente elemento elemento+1 hasta que(elemento>n) fin procedimiento Pseudocódigo que da solución al problema 04 10
Simulando el tiempo El lenguaje ANSI C no incluye librerías estándar con funciones para retrasos de tiempo. El compilador MinGW actualmente usado, incluye una librería no estándar llamada <windows.h>, esta incluye a la función Sleep, la cual recibe como parámetro el número de milisegundos que el programa duerme antes de continuar su ejecución. Si se desea obtener los mismo resultados en Linux se deberá de utilizar la función sleep(), sin la librería <windows.h>. 11
Simulando el tiempo El siguiente código solo funciona bajo Windows y compilando con MinGW. <windows.h> no pertenece a la biblioteca estándar de C. #include<stdio.h> #include<windows.h> int main(void) { short i=0; while(i<100) { printf("\n%d",i); Sleep(500); //Esperar 500 milisegundos i++; } } 12
Ejercicios 02: Soluciones estructuradas en C Problema 01: Escribir un programa que determine si un año es bisiesto. Una año es bisiesto si el múltiplo de 4. (E.g. 1984. Los años múltiplos de 100 no son bisiestos, salvo si ellos son también múltiplos de 400 (2000 es bisiesto, 1800 no lo es). Problema 02: Realizar un programa que convierta una cantidad de metros dada en su equivalente en Pies, Yardas y Millas. Problema 03: Realizar un programa, que calcule la máxima área de un terreno rectangular de lados 100-2x y x respectivamente, para valores de x entre 10 y 300. Problema 04: Realizar un programa que reciba un número de segundos mayor a 30 y menor a 120, durante el número de segundos dado el programa estará mostrando la palabra "hola" cada 2 segundos, mostrando la palabra "soñando" cada 3 segundos y mostrando los segundos restantes cada 5 segundos. 13
Problema 05: Realizar un temporizador capaz de recibir al inicio minutos, segundos y centésimas de segundo, una vez dados estos valores deberá de mostrarse en pantalla su valor hasta llegar a cero. Al llegar a cero deberá mostrar el mensaje fin del tiempo así como sonar una alarma que indique que se a acabado el tiempo y posteriormente terminará su ejecución. Problema 06: Realizar un programa que convierta un número dado de segundos en el equivalente de minutos y segundos. Problema 07: Realizar un programa para calcular la longitud de la circunferencia y el área de un círculo, para un radio introducido. Problema 08: Realizar un programa que obtenga 100 términos de una serie numérica de dos en dos a partir de un número dado; deberá de haber un tiempo de retraso de 1 segundo entre cada numero de la serie a la salida. Problema 09: Realizar un programa que imprima la suma de los 100 primeros números a partir de un número dado. 14
Problema 10: Realizar un programa que reciba un número entero mayor a 0 y menor a 10. El número recibido, será el número de minutos que se deberá contar en forma regresiva hasta llegar a 0 segundos, se debe mostrar en todo momento los minutos y segundos faltantes para llegar a cero. Finalmente cuando el contador regresivo llegue a cero segundos, se debe mostrar el mensaje Se terminó el tiempo. Problema 11: Realizar un programa que calcule el factorial de un número dado. Problema 12 Realizar un programa para calcular la suma de los números primos menores o iguales a un numero dado. Problema 13: Realizar un programa para calcular los grados F y R a partir de un número de C dado. Problema 14: Realizar un programa capaz de saludar al usuario un número de veces dado. Problema 15: Realizar un programa capaz de mostrar la serie 1, 1, 2, 4, 7, 11, 18, 36, 65,..., hasta un elemento n dado. 15 Los dos primeros términos son arbitrarios (el segundo impar). A partir del tercero, si el término anterior es impar, se obtiene sumando los dos términos anteriores; si es par, sumando los tres términos anteriores.
Problema 16: Realizar un programa que reciba un número x a partir del cual calcula: σ x+10 i=x i 2. Problema 17: Realizar un programa que al recibir un número decimal obtenga su representación en hexadecimal. Problema 18: Realizar un programa que al recibir un número decimal obtenga su representación en binario. Problema 19: Realizar un programa capaz de recibir un número y determinar si este es primo no. Problema 20: Realizar un programa capaz de recibir las horas trabajadas de un empleado y la paga por hora para calcular el sueldo semanal de un empleado. Cuando la horas de trabajo exceden de 40 se consideran horas extra; las primeras 8 se pagan al doble; si las horas extra exceden de 8 se pagan las primeras 8 al doble de lo que se pagan las horas normales y el resto al triple. Problema 21: Realizar un programa capaz de leer una lista de calificaciones (0.00-10.00) y calcular el promedio, el número de aprobados y el número de reprobados; el final de la lista de calificaciones será si se introduce un número menor a cero.os términos son arbitrarios (el segundo impar). A partir del tercero, si el término anterior es impar, se obtiene sumando los dos términos anteriores; si es par, sumando los tres términos anteriores. 16
Problema 22: Realizar un programa que muestre la multiplicación de los dos números mayores de una serie de números positivos, suponiendo que los datos se leen uno a uno. Un valor de cero como entrada indicará que se ha alcanzado el final de la serie de números positivos. Problema 23: Realizar un programa que calcule la distancia entre dos puntos de un plano 2D. Problema 24: Realizar un programa que calcule la distancia entre dos puntos de un plano 3D. Problema 25: Se necesita crear un programa que le permita a una máquina expendedora devolver el cambio con las 3 denominaciones de monedas posibles con las que cuenta. Al inicio del programa se deberán las cantidades de monedas que tiene de $10, $5, $2 y $1. Posteriormente el programa estará recibiendo el cambio a devolver hasta que se llegue a un Error. Si el cambio a devolver no se puede completar se deberá de mostrar como salida Error y el programa termina. Los dos primeros términos son arbitrarios (el segundo impar). A partir del tercero, si el término anterior es impar, se obtiene sumando los dos términos anteriores; si es par, sumando los tres términos anteriores. 17
Ejercicios 02: Soluciones estructuradas en C Realizar para cada uno de los problemas anteriores una solución estructurada, construyendo su diagrama de flujo y pseudocódigo, finalmente codifique su solución en un programa debidamente documentado en lenguaje C. Observaciones 1. Reportar el texto del ejercicio, su algoritmo en diagrama de flujo y pseudocódigo, el código en C (con colores) y las pruebas de sus programas. 2. Incluir al reporte las capturas de pantalla y explicaciones de funcionamiento de cada programa construido. 3. El reporte es individual y tiene portada, índice y encabezados de pagina con número de pagina, titulo y nombre del alumno. 4. Enviar vía Web en un archivo comprimido (ZIP, RAR o TAR), reporte y códigos de C de cada problema. *Se entregará antes del día Miércoles 30 de Marzo de 2016 (23:59:59 hora limite). Grupo Contraseña 1CV8 algoritmia1cv8 18