INFORMATICA 1 - ACTIVIDAD DE SEGUIMIENTO 2 Objetivos Adquirir las bases necesarias para la resolución de problemas que impliquen el uso de estructuras repetitivas. Emplear estructuras MIENTRAS, PARA y CONDICIONAL en la solución de problemas algorítmicos. Hacer uso de la prueba de escritorio para verificar el funcionamiento correcto de los algoritmos implementados. Reforzar los conceptos teóricos de lógica de programación vistos en clase. Recomendaciones Las sesiones presenciales son un abrebocas de lo que se viene y solo permite introducirlos en el tema. Para realizar este taller se recomienda revisar la documentación presentada en clase, la cual se detalla a continuación: Libro lógica de programación de Efraín Oviedo. (Capítulos 5 y 6). Fundamentos de programación de Luis Joyanes Aguilar. (Capítulo 5). Así mismo, se recomienda revisar (sobre todo los ejemplos resueltos) las siguientes páginas web: http://ayura.udea.edu.co/~jlsanche/index.htm: Mirar los ejemplos de la sección 7. http://sites.google.com/site/tutoriasdeingenieria/algoritmos: Secciones 17 hasta la 22. También en las siguientes URLs se encuentran videos de cursos similares dictados a distancia por la universidad, aquí se colocan los enlaces: Algoritmos Ude@ - Profesor Roberto Florez. http://zonaudearroba.udea.edu.co/showcategoria.html?selector=12&categoria=12: Instrucción casos: Módulo 11, 12. Estructura ciclo: Modulo 13. Instrucción MIENTRAS: Módulos 14, 15. Ciclos anidados: Módulo 16. Instrucción PARA: Módulos 17 y 18. Instrucción REPETIR (o HAGA): Módulo 19. Informatica 1 - Yarumal - Profesores Diego Serna y Sebastian Villa http://zonaudearroba.udea.edu.co/showcategoria.html?selector=25&categoria=25: Estructuras básicas de un algoritmo: http://zonaudearroba.udea.edu.co/video/307 Estructura CASO: http://zonaudearroba.udea.edu.co/video/306 En la fotocopiadora de don Alberto (código 105) se encuentran las copias del profesor Efrain Oviedo. El curso cuenta con monitores cuyo horario de atención puede ser consultado en: http://sites.google.com/site/carloshmendozac/informatica1 Prueba de escritorio 1. Dado el siguiente programa: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 algoritmo (ejercicio1) variables: entero: m, n, a, i INICIO m = 12 b = m%20 a = b-1 PARA i=20,1,-3 HARA SI(a%3 == 0) ENTONCES SI(a%2 == 0) ENTONCES b = b - 1 ESCRIBA(‘x’) SI_NO b = b – 2 ESCRIBA(‘y’) FIN_SI SI_NO a = a – 1 ESCRIBA(‘z’) FIN_SI m = m + i FIN_PARA ESCRIBA(‘Feliz navidad, jo jo jo’) FIN_INICIO fin(ejercicio1) Responda las siguientes preguntas: a. Realice la prueba de escritorio para las variables: i, a, m, n b. ¿Cuántas veces se ejecuta el ciclo? c. ¿Cuál es la salida del programa? 2. Dado el siguiente programa: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 algoritmo (ejercicio2) variables: entero: veces, varcontrol INICIO ESCRIBA(‘Numero de repeticiones que desea: ’) LEA(veces) varcontrol = 1 MIENTRAS(veces <= veces)HAGA ESCRIBA(‘Que fácil es’) varcontrol = varcontrol + 1 FIN_MIENTRAS Responda las siguientes preguntas: ESCRIBA(‘Feliz navidad, jo jo jo’) FIN_INICIO fin(ejercicio2) a. Realizar la prueba de escritorio asumiendo que el usuario ingresa por teclado 10 como valor para la variable veces. b. ¿Cuál es la salida en pantalla del programa? c. ¿Qué sucede si al ingresar la variable veces se le coloca cero o un número negativo? Asuma que el valor ingresado por teclado para la variable veces es 10. d. ¿Qué sucede si varcontrol se inicia en cero? Asuma que el valor ingresado por teclado para la variable veces es 10. e. ¿Qué sucede si cambiamos la expresión de la línea 8 por MIENTRAS (varcontrol<veces) HAGA? Asuma que el valor ingresado por teclado para la variable veces es 10. f. ¿Qué sucede si cambiamos la expresión de la línea 8 por MIENTRAS (varcontrol==veces)? Asuma que el valor ingresado por teclado para la variable veces es 10. g. ¿Qué sucede si cambiamos la expresión de la línea 8 por MIENTRAS (varcontrol>=veces)? Asuma que el valor ingresado por teclado para la variable veces es 10. h. ¿Qué sucede si cambiamos la instrucción 10 por varcontrol = varcontrol - 1? Asuma que el valor ingresado por teclado para la variable veces es 10. i. ¿Qué sucede si cambiamos la instrucción 10 por varcontrol = varcontrol + 2? Asuma que el valor ingresado por teclado para la variable veces es 10. j. ¿Qué sucede si le quitamos movemos la instrucción 10 y la colocamos al mismo nivel de la del MIENTRAS después de este?, ¿Cuál sería la salida del programa? 3. Dadas la siguiente porciones de código realizar la prueba de escritorio para cada caso, llenar una tabla colocando los valores finales de las variables: a. Código 1: entera:i,j,k=10 ... j = k*4 i = 11 MIENTRAS (i < j) HAGA i = i + 4 j = j – i*9 FIN_MIENTRAS b. Código 2: entera:i,j,k=10 ... j = k*4 i = 11 MIENTRAS (i < j) HAGA i = i + 4 j = j – i*9 FIN_MIENTRAS Algoritmos Cada uno de los siguientes algoritmos debe ser codificado a mano tal con el pseudocódigo visto en clase. Así mismo, después de codificar el algoritmo se debe realizar una prueba de escritorio en la cual se verifique el correcto funcionamiento del programa. La codificación en PseInt es opcional y le puede ayudar a verificar el correcto funcionamiento del programa codificado. Si la realiza, añadir un pantallazo que muestre el programa en acción. Problemas con ciclos 1. Construir un sistema que sirva de control para un camión de carga, la idea es preguntar cuántos elementos va a cargar, luego preguntar el peso en gramos de cada elemento a subir. El sistema debe identificar si el peso total a subir es mayor a 10 toneladas, que es la capacidad máxima del vehículo, en cuyo caso, notificar que no se debe ingresar la carga, mostrando en cuánto se pasa con respecto al peso máximo permitido, de lo contrario, decir cuántos kilos más soporta el vehículo. 2. Un supermercado necesita un pequeño sistema que permita a los cajeros llevar la suma de los descuentos que se hacen al pasar la tarjeta de clientes especiales. El sistema funciona para n compras y en cada una de ellas después de darle el precio de la compra, le pregunta al usuario si tiene la tarjeta de cliente, en cuyo caso se necesita saber cuánto lleva la persona con la tarjeta así: sí la persona lleva con la tarjeta hasta un año, el descuento es del 2.2%, más de un año y hasta dos del 4.3% y más de dos años 6.5%. También se desea saber cuántos usuarios pasaron la tarjeta. 3. Dado el día, mes y año de nacimiento de una persona, calcular cuántos días ha vivido hasta una fecha dada en día, mes y año. Tener presente los años bisiestos. 4. Realizar un programa que permita a un usuario, calcular la suma de los números impares comprendidos entre N y M. N debe ser menor que M en caso contrario intercambiarlos. 5. Construir un programa que le permita a un usuario calcular la edad promedio de los invitados a una fiesta. Dado que no se sabe cuántos son los invitados, construir un algoritmo que aplicando el concepto de continuar mientras el usuario lo desee calcule el número de invitados que asistieron. 6. Se leerán por el teclado un grupo de números enteros, el sistema deberá contar cuántos fueron los números leídos en total. La regla para que el sistema siga leyendo números es que cada nuevo número ingresado sea mayor al anterior. Cuando no se cumpla esta condición, terminar y mostrar la información generada. 7. Por definición un número primo es aquel que tiene dos divisores exactos 1 y el mismo. Construir un programa que determine con un mensaje si un número ingresado es primo o no lo es. 8. Hacer un programa que muestre al usuario el número mayor de un conjunto de datos positivos ingresados por teclado. El número de datos es desconocido. 9. Un caminante observa la posición en la que se encuentra (X y Y mediante un GPS) a cada trecho. ¿Cuánto caminó en total y cuál fue el trecho más largo ? 10. Hacer un algoritmo que muestre la siguiente serie. El programa debe solicitar al usuario el número de términos que desea ver: 0, 1, 3, 6, 10, 15,... 11. Hacer un algoritmo que muestre la siguiente serie. El programa debe solicitar al usuario el número de términos que desea ver: 10, 11, 20, 21, 30, 31, 40, 41, 50, 51, 60,... 12. A todos nos ha tocado aprendernos las tablas de multiplicar, estas son la base de muchas operaciones importantes como la división, la potenciación y la radicación. Construir un programa en el cual el usuario ingrese un entero y el sistema le genere la tabla de multiplicar de dicho número (hasta 10). El programa debe permitir el procedimiento cuantas veces lo desee el usuario: El programa debe mostrar una salida como la siguiente: ******************** PROGRAMA DE TABLAS DE MULTIPLICAR ******************** Digite el número positivo(o un número negativo para terminar): >> 2 ============ TABLA DEL 2: 2 * 1 = 2 2 * 2 = 4 2 * 3 = 6 2 * 4 = 8 2 * 5 = 10 2 * 6 = 12 2 * 7 = 14 2 * 8 = 16 2 * 9 = 18 2 * 10 = 20 ============ Digite el número positivo(o un número negativo para terminar): >> 9 TABLA DEL 9: 9 * 1 = 9 9 * 2 = 18 9 * 3 = 27 9 * 4 = 36 9 * 5 = 45 9 * 6 = 54 9 * 7 = 63 9 * 8 = 72 9 * 9 = 81 9 * 10 = 90 Digite el número positivo(o un número negativo para terminar): >> -1 ============ Como dijo un viejo amigo suerte es que le digo. 13. Una empresa extranjera de aviación fumiga cosechas contra una variedad de plagas. Los valores cobrados a los graneros dependen de lo que estos desean fumigar y de cuantas hectáreas se fumigan, de acuerdo a la siguiente distribución: Tipo 1: Fumigación contra malas hierbas: U$10 por hectárea. Tipo 2: Fumigación contra langostas: U$15 por hectárea. Tipo 3: Fumigación contra gusanos: U$20 por hectárea. Tipo 4: Fumigación contra todo lo anterior: U$30 por hectárea. Si el área a fumigar es mayor que 1000 hectáreas, el granero goza de un 5% de descuento. Además, cualquier granjero cuya cuenta sobrepase los 3000 dólares se le descuenta un 10% sobre la cantidad que exceda dicho precio. Si se aplican ambos conceptos, el correspondiente a la superficie se considera primero. Por cada pedido se tiene la siguiente información: Nombre del granjero, tipo de fumigación solicitada (1, 2, 3, 4) y el número de hectáreas a fumigar. Por cada solicitud se debe nombre del granjero y valor a pagar. Nota: Tenga en cuenta que no se sabe el número de solicitudes por lo que se debe solucionar el problema en forma cualitativa. 14. Una gasolinera presta 4 clases de servicios. Por cada servicio que preste se tienen los siguientes datos: Clase de servicio prestado (valores del 1 al 4), jornada en la que se prestó el servicio (M: Mañana, T: Tarde) y valor del servicio. Al finalizar el día se requiere determinar el valor producido por cada clase de servicio, el número de veces que se prestó cada servicio, el servicio que más veces se prestó y si este se prestó más en la mañana o en la tarde. 15. Elaborar un algoritmo que haga el siguiente censo para una empresa de transporte mostrando la siguiente información: Número de vehículos cuyo modelo sea anterior a 1995. Número de vehículos cuyo modelo sea de 1995 o posterior y cuya capacidad sea menor de 35 pasajeros. Numero de buses cuyo modelo sea posterior a 1995 con capacidad mayor de 35 pasajeros. Numero de busetas con capacidad menor de 35 pasajeros. El total de vehículos de la empresa. Por cada vehículo la empresa tiene la siguiente información: Tipo de vehículo (1: Buseta; 2: Bus). Modelo del vehículo. Capacidad del vehículo. 16. Una empresa tiene un numero variable de empleados y de cada uno de ellos posee la siguiente información: Código. Nombres. Número de hijos. Salario por hora. Número de horas trabajadas al mes. La retención por cada empleado se determina así: Para salarios menores de $300000: Si el número de hijos es mayor de 6 no hay retención; si el número de hijos es menor o igual a 6, se le retiene un porcentaje igual a 6 menos el número de hijos dividido por 2. Para salarios mayores o iguales a $300000: Si el número de hijos es menor de 3, se le retiene un 3%; si el número de hijos es mayor o igual a 3 se le retiene un porcentaje igual a 10 dividido por el número de hijos. El subsidio por cada hijo es de $1200. Elaborar un algoritmo que muestre: Código, nombres, devengado, retención, subsidio y total a pagar. 17. Se desea obtener el promedio de N grupos que están en un mismo año escolar, sabiendo que cada grupo puede tener M alumnos, cada alumno puede cursar K materias y en todas las asignaturas se promedian 3 calificaciones. Hacer un algoritmo que calcule el promedio de cada alumno, el promedio de cada grupo y el promedio de los grupos. 18. A lo largo del día un cajero procesa a las personas que llegan a efectuar movimientos bancarios. Estos movimientos son esencialmente consignaciones y retiros. Determinar la cantidad total de dinero obtenido por concepto de consignaciones y retiros en todo el día, lo mismo que un balance que indique si hubo más retiros que consignaciones y la diferencia absoluta. 19. En la elección del candidato estudiantil se presentaron 5 candidatos numerados consecutivamente del 1 al 5. De N estudiantes en la institución, cada elector depositó su voto con el número de su candidato favorito. Al final del escrutinio se desea saber cuántos votos obtuvo cada candidato y el porcentaje de votos de cada participante. 20. Dados N valores, diseñe un algoritmo que haga el siguiente proceso: Si el valor es menor que cero calcular su cubo. Si el valor esta entre 0 y 100 calcular su cuadrado. Si el valor esta entre 101 y 1000 calcular su raíz cuadrada. Referencias http://sites.google.com/site/tutoriasdeingenieria/algoritmos-nuevo-enfoque http://sites.google.com/site/tutoriasdeingenieria/algoritmos/solucionandoalgoritmos-propuestos-y-ejercicios-de-algoritmos-basicos http://ayura.udea.edu.co/~jlsanche/index.htm http://sites.google.com/site/tutoriasdeingenieria/algoritmos https://sites.google.com/site/lexicomobile/ejercicios-propuestos http://ocw.univalle.edu.co/ocw/ingenieria-de-sistemas-telematica-y-afines/fundamentos-deanalisis-y-diseno-de-algoritmos/Course_listing http://www.virtual.unal.edu.co/cursos/sedes/manizales/4060024/html/contenido.html http://www.carlospes.com/curso_de_algoritmos/ http://www.algoritmia.org