Grado en Ingeniera Informtica Programacin I Departamento de Informtica y Automtica Universidad de Salamanca (v1314) Prctica 1 DISEO DE PROGRAMAS
Objetivo de la prctica ............................................................................................................................................1 El ordenador en la resolucin de problemas .........................................................................................................2 Fases en la creacin de un programa....................................................................................................................2 1. Anlisis del problema ......................................................................................................................................3 2. Diseo y verificacin del algoritmo.................................................................................................................4 3. Codificacin en un lenguaje de programacin................................................................................................7 4. Compilacin y enlazado ..................................................................................................................................8 5. Pruebas y depuracin....................................................................................................................................10 6. Documentacin..............................................................................................................................................13 EJERCICIOS RESUELTOS................................................................................................................................14 Ejercicio 1.- Impuesto Valor Aadido ...............................................................................................................14 Ejercicio 2.- Salario semanal ............................................................................................................................16 Ejercicio 3.- Factorial .......................................................................................................................................18 Ejercicio 4.- Nmeros primos............................................................................................................................22 Ejercicio 5.- Suma de 50 nmeros de teclado ...................................................................................................24 Ejercicio 6.- El mayor de 100 nmeros .............................................................................................................29 Ejercicio 7.- Diferencia de sumas de positivos y negativos...............................................................................32 EJERCICIOS PROPUESTOS.............................................................................................................................36 Ejercicio 8.- Analizar el resultado.....................................................................................................................36 Ejercicio 9- rea y volumen de un cilindro.......................................................................................................36 Ejercicio 10.- Suma de la serie aritmtica 3, 6, 9, 99...................................................................................36 Ejercicio 11.- Las primeras potencias de 2 .......................................................................................................37 Ejercicio 12.- Producto mediante sumas...........................................................................................................37 Ejercicio 13.- Nmeros de Armstrong ...............................................................................................................37 Ejercicio 14.- Algoritmo de Euclides (mcd) ......................................................................................................37 Ejercicio 15.- Media de la suma de una serie de nmeros positivos.................................................................37 Ejercicio 16.- Incrementos y decrementos hasta cruce .....................................................................................38 Ejercicio 17.- Suma de los pares entre dos lmites dados .................................................................................38 Ejercicio 18.- Contar ceros ...............................................................................................................................38 Ejercicio 19.- Sumar trminos hasta superar lmite..........................................................................................39 Ejercicio 20.- El valor de la suma de n trminos ..........................................................................................39
Objetivo de la prctica
El desarrollo de programas de ordenador, con independencia de su tamao y complejidad, conlleva un proceso que involucra diferentes mtodos de desarrollo y diversas herramientas que de alguna forma automatizan y apoyan la creacin de dichos programas. En esta prctica se van a introducir los conceptos bsicos necesarios para entender este proceso de creacin de programas, ubicando la fase de implementacin (tambin denominada programacin o codificacin) dentro de un conjunto de etapas a realizar.
Se introducir tambin el concepto de algoritmo, y las tcnicas y herramientas para su diseo que facilitan su posterior implementacin en el lenguaje de programacin elegido.
Programacin I - 2 - Prctica 1.- Diseo de Programas
Grado en Ingeniera Informtica Programacin I Departamento de Informtica y Automtica Universidad de Salamanca (v1314) El ordenador en la resolucin de problemas
El ordenador es muy til para la resolucin de problemas que impliquen procesos repetitivos, clculos complicados o manejen grandes cantidades de datos. En todos estos casos supera con creces la capacidad del hombre. El computador por s mismo no es capaz de analizar un problema y dar una solucin. Esta tarea la realiza el programador, el cual, una vez que ha resuelto el problema, describe al computador de forma clara e inteligible para l los pasos a seguir para resolver el problema: el programa.
Fases en la creacin de un programa 1
El proceso de diseo de un programa de ordenador se caracteriza por ser un proceso creativo, en el que no va a existir un conjunto completo de reglas que indiquen como crearlo, debindose recurrir en muchas ocasiones a la experiencia del propio desarrollador. De todas formas, en el caso de problemas no muy complejos, podemos enumerar las siguientes fases o pasos que debern cumplimentarse.
Fase de definicin: Analizamos el problema a resolver. 1. Anlisis del problema. 2. Diseo y verificacin del algoritmo. Fase de desarrollo: Creamos el/los programas y la documentacin asociada a ellos. 3. Codificacin en un lenguaje de programacin. 4. Compilacin y enlazado. 5. Pruebas y depuracin. 6. Documentacin.
Aunque estos pasos se han enunciado de forma secuencial, existen interacciones y realimentaciones entre ellos, tal y como refleja en la figura 1.
A parte de lo que es la resolucin del problema, pero incluida dentro del llamado ciclo de vida de software 2 podemos incluir adems la Fase de mantenimiento, la cual se centra en el cambio que va asociado a la correccin de errores, a las adaptaciones requeridas por la evolucin del programa, a las modificaciones debidas a los cambios de los requisitos dirigidos a reforzar o ampliar el sistema software. La fase de mantenimiento vuelve a aplicar los pasos de las fases de definicin y de desarrollo, pero en el contexto del software ya existente.
1 El proceso de creacin de un programa abarca desde la descripcin inicial del problema hasta el propio desarrollo del programa de ordenador que lo resuelva. 2 Perodo de tiempo que comienza cuando se concibe un producto software y finaliza cuando el producto pierde su utilidad.
Programacin I - 3 - Prctica 1.- Diseo de Programas
Grado en Ingeniera Informtica Programacin I Departamento de Informtica y Automtica Universidad de Salamanca (v1314) Detallamos a continuacin cada una de las fases.
1. Anlisis del problema Se especifica cules son los requisitos a los que debe dar solucin el programa a realizar. El objetivo es determinar qu ha de hacer el programa.
En esta fase se estudiar el problema para conocer de forma clara los siguientes aspectos: a) Los datos de entrada que necesitamos para solucionar el problema. b) El tratamiento que van a sufrir esos datos para obtener la solucin al problema, identificndose los mtodos, frmulas o clculos tiles. c) Los resultados o datos de salida que nos proporcionarn la solucin al problema.
Figura 1. Fases en la resolucin de problemas con un ordenador.
Programacin I - 4 - Prctica 1.- Diseo de Programas
Grado en Ingeniera Informtica Programacin I Departamento de Informtica y Automtica Universidad de Salamanca (v1314) 2. Diseo y verificacin del algoritmo Se detalla la secuencia de pasos (algoritmo) a seguir para la resolucin del problema. El objetivo es determinar como har el programa la tarea solicitada. Se pasa de tener el centro de atencin en el qu hacer, propio del anlisis, a tenerlo en el cmo hacerlo, propio del diseo.
Algoritmo Es una secuencia de pasos a seguir para llevar a cabo la resolucin de un problema. Debe de cumplir: Ser definido: Debe estar compuesto por un conjunto de acciones especificadas rigurosamente y sin ambigedad. Siguiendo el algoritmo dos veces con los mismos datos de entrada, deben obtenerse los mismos datos de salida. Ser preciso: Debe estar compuesto por una secuencia finita de operaciones, quedando perfectamente definido el orden en que se deben realizar las mismas. Ser finito: Debe acabar en un nmero finito de pasos.
Uno de los mtodos ms utilizados para el diseo de algoritmos es el denominado "divide y vencers". Consiste en dividir un problema complejo en subproblemas y a su vez stos en otros de nivel ms bajo hasta obtener subproblemas fciles de solucionar e implementar (refinamiento sucesivo). Este mtodo se conoce como diseo descendente, top-down o modular.
Los algoritmos deben ser independientes tanto del lenguaje de programacin (medio para expresar el algoritmo) como de la computadora (procesador para ejecutarlo) en que se implementen posteriormente.
Para representar los algoritmos podemos utilizar bsicamente dos mtodos: Mtodos informales, como puede ser narrarlo en lenguaje natural. Describiramos el algoritmo como si contramos a otra persona de forma coloquial los pasos a seguir para la resolucin del problema. Sin embargo, el lenguaje natural es a menudo ambiguo y el algoritmo debe estar bien definido.
Mtodos formales, entre los que destacamos: Pseudocdigo: consiste en redactar el algoritmo en un pseudolenguaje intermedio entre el natural del programador y el lenguaje de programacin seleccionado, utilizando como medio bsico de expresin la lengua nativa del programador. No es estndar. No existen unas reglas fijas para su creacin, siendo una mezcla de lenguaje natural, smbolos, trminos y otras caractersticas comnmente utilizadas en los lenguajes de programacin de alto nivel como por ejemplo Pascal APL.
Programacin I - 5 - Prctica 1.- Diseo de Programas
Grado en Ingeniera Informtica Programacin I Departamento de Informtica y Automtica Universidad de Salamanca (v1314)
Diagramas: son mtodos grficos. Los ms extendidos son los Diagramas de flujo o flowchart. El algoritmo se representa por una serie de smbolos normalizados 3 que representan cada accin (ver figuras 2 y 3). Los smbolos estn unidos por unas flechas que indican el orden en que se realizan las acciones del algoritmo.
Para verificar el algoritmo se toma una serie de entradas de datos representativas (valores normales, valores extremos e incluso valores incorrectos) y se realiza un seguimiento manual del algoritmo para comprobar que su secuencia de pasos produce el resultado esperado para esos datos de entrada.
3 Por el Instituto Norteamericano de Normalizacin (ANSI).
Programacin I - 6 - Prctica 1.- Diseo de Programas
Grado en Ingeniera Informtica Programacin I Departamento de Informtica y Automtica Universidad de Salamanca (v1314)
Figura 2. Smbolos estndar para diagramas de flujo (ANSI/ISO).
Programacin I - 7 - Prctica 1.- Diseo de Programas
Grado en Ingeniera Informtica Programacin I Departamento de Informtica y Automtica Universidad de Salamanca (v1314)
Figura 3. Smbolos estndar para diagramas de flujo (ANSI/ISO) Smbolos secundarios.
3. Codificacin en un lenguaje de programacin El algoritmo diseando se escribe en el lenguaje de programacin elegido. El objetivo es elaborar el programa.
Utilizando un editor de textos se genera un fichero en disco llamado programa fuente, el cual est constituido por una serie de sentencias escritas en algn lenguaje de programacin determinado. Esta actividad se denomina programacin propiamente dicha.
Programacin I - 8 - Prctica 1.- Diseo de Programas
Grado en Ingeniera Informtica Programacin I Departamento de Informtica y Automtica Universidad de Salamanca (v1314) 4. Compilacin y enlazado Ya que el ordenador slo entiende cdigo mquina, el programa fuente no es directamente interpretable por la computadora, por lo que debe de sufrir un proceso de traduccin.
Estos traductores son de dos tipos: compiladores e intrpretes.
Un intrprete toma el programa fuente sentencia a sentencia (de una en una), la analiza y la interpreta producindose su ejecucin. Toma una sentencia del programa fuente cada vez, la analiza e interpreta, ejecutndola inmediatamente, y as sucesivamente.
Un intrprete tiene las siguientes caractersticas: Cada vez que se desee ejecutar un programa, hay que volver a traducirlo. La traduccin se realiza justo antes de la ejecucin. Por tener que ir traduciendo cada sentencia antes de ejecutarla, la ejecucin es ms lenta que en el caso de un programa compilado. Se utilizan mucho menos que los compiladores.
Un compilador traduce el programa fuente a lenguaje mquina, generando el denominado programa objeto. Este programa objeto puede almacenarse en disco para ser utilizado posteriormente sin necesidad de volverlo a compilar el programa fuente.
Un compilador slo traduce el programa, no lo ejecuta.
Se requiere un compilador diferente para cada lenguaje de programacin y para cada arquitectura, pudiendo existir diferentes compiladores para un mismo lenguaje y una misma arquitectura.
El compilador realiza bsicamente dos tareas:
1. Anlisis del programa fuente, para comprobar que se usan palabras vlidas del lenguaje de programacin (anlisis lxico), las expresiones e instrucciones estn bien construidas (anlisis sintctico) y no se ha cometido ningn error de significado, como puede ser intentar sumar nmeros con letras (anlisis semntico).
En el caso de que alguno de los anteriores anlisis no se supere correctamente, pueden producirse dos tipos de situaciones en tiempo de compilacin:
Programacin I - 9 - Prctica 1.- Diseo de Programas
Grado en Ingeniera Informtica Programacin I Departamento de Informtica y Automtica Universidad de Salamanca (v1314) Errores: El proceso de compilacin no contina, y el propio compilador indica el lugar del programa y el tipo de error detectado. Normalmente el compilador genera la relacin completa de los errores encontrados. Si existen errores, deber modificarse de nuevo el programa fuente y volver a compilarlo 4 .
Advertencias o warnings: Son indicaciones sobre algn aspecto concreto de la traduccin del cdigo fuente que podra ser susceptible de producir un error, sin que necesariamente lo sea. En otras palabras, nos est advirtiendo cuidado!, esto puede ser un error, revsalo. Son informativos. No provocan la interrupcin del proceso de compilacin, por lo que llega a generarse programa objeto. El compilador indica el lugar del programa y el tipo de warning detectado. Si existen warnings, es conveniente revisarlos y evitarlos.
2. Generacin y optimizacin de cdigo para generar el programa objeto. El resultado de la compilacin es el programa objeto; ya es cdigo mquina pero no es todava directamente ejecutable. Despus de la compilacin de todos los ficheros fuentes en que puede haberse dividido el programa, deber utilizarse un montador, enlazador o linker para obtener finalmente el programa ejecutable.
En general, en un programa fuente se suele invocar a mdulos que son proporcionados por la misma herramienta de desarrollo o por otros desarrolladores, y que resuelven problemas concretos. El cdigo mquina correspondiente a estos mdulos debe ser vinculado con los ficheros objeto generados por la compilacin, de manera que el resultado final sea un nico fichero ejecutable. Esta tarea es la que realiza el enlazador.
En la figura 4 se presenta de forma esquemtica las etapas por las que se pasa para obtener un programa ejecutable a partir de un programa escrito en varios ficheros fuente.
4 Muchas veces al corregir ciertos errores de compilacin, el nmero de ellos que se genera en una segunda compilacin aumenta en lugar de disminuir. Esto es debido a que ciertos errores primeramente detectados enmascaraban otros que salen en posteriores compilaciones.
Programacin I - 10 - Prctica 1.- Diseo de Programas
Grado en Ingeniera Informtica Programacin I Departamento de Informtica y Automtica Universidad de Salamanca (v1314)
Figura 4. Generacin del programa ejecutable desde el programa fuente.
5. Pruebas y depuracin La depuracin de un programa es el proceso de encontrar los errores de programa y corregir o eliminarlos (depurarlos). Al llegar a esta fase, en la que tenemos un buen algoritmo y lo hemos codificado en un lenguaje de programacin, no podemos garantizar que el programa resuelva correctamente el problema planteado.
Hay dos tipos de errores que se producen en tiempo de ejecucin (tambin llamados bugs en la jerga informtica): Errores de ejecucin: el programa "se para" (aborta) repentinamente sin llegar al final. Algunos errores tpicos son ocasionados por intentos de dividir por cero, races cuadradas de nmeros negativos, intentos de apertura de archivos inexistentes o acceso a perifricos no conectados, etc. La solucin para ellos es normalmente incluir ms cdigo en el programa que realice ciertas validaciones y verificaciones antes de intentar realizar la operacin que produce el error. Errores lgicos: el programa se ejecuta hasta el final pero aportando unos resultados incorrectos. Son errores a veces muy difciles de detectar. Suelen venir producidos por un mal diseo de la lgica del algoritmo, o bien por equivocaciones
Programacin I - 11 - Prctica 1.- Diseo de Programas
Grado en Ingeniera Informtica Programacin I Departamento de Informtica y Automtica Universidad de Salamanca (v1314) en que ha incurrido el programador al transcribir el algoritmo a programa. La solucin para ellos suele ser una revisin del programa codificado confrontndolo con el algoritmo, y si este no fuera el problema se pasar a la revisin del algoritmo y en su caso, si es necesario, su rediseo.
Para depurar un programa realizado con un compilador es muy recomendable ejecutar dicho programa bajo el control de un programa especial denominado depurador o debugger 5 .
Un depurador es una herramienta software que suelen incorporar todos los entornos de desarrollo, y que es capaz de cargar y ejecutar de forma controlada nuestro programa. Permite la ejecucin paso a paso (instruccin a instruccin), evaluacin de expresiones, examen de contenido de variables, registros de la UCP, etc. Generalmente, cuando se realiza la compilacin, se debe indicar al compilador, mediante la correspondiente opcin, que debe generar cdigo para ejecutar con depurador.
5 La traduccin estricta del ingls de trmino debug es desinfectar o matar chinches. En los primeros tiempos de la informtica, una polilla colocada sobre un contacto electromecnico del ordenador Mark II ocasion un error en el programa que ejecutaba esta mquina. A partir de entonces, se asocia el trmino debug al hecho de corregir errores en un programa.
Programacin I - 12 - Prctica 1.- Diseo de Programas
Grado en Ingeniera Informtica Programacin I Departamento de Informtica y Automtica Universidad de Salamanca (v1314)
Figura 5. Tipos de errores en un programa.
Programacin I - 13 - Prctica 1.- Diseo de Programas
Grado en Ingeniera Informtica Programacin I Departamento de Informtica y Automtica Universidad de Salamanca (v1314) 6. Documentacin Existen dos tipos de documentacin: La documentacin tcnica para el mantenimiento del programa, para que cualquier programador ajeno entienda qu hace el programa y cmo lo hace. Esta, a su vez, puede dividirse en interna y externa. La documentacin para el usuario final que manejar y utilizar el programa.
La documentacin tcnica externa se realizar en ficheros distintos al programa fuente. Debe incluir: El anlisis y diseo del algoritmo del programa. Diagramas de flujo y pseudocdigo. Especificacin de los formatos de los datos de entrada y salida del programa. Explicacin de cualquier frmula o clculo y expresin compleja del programa. Todas las consideraciones oportunas que deba conocer cualquier programador que necesite modificar posteriormente el programa.
La documentacin tcnica interna se incluye en el cdigo del programa fuente mediante: Una cabecera de programa, formada con comentarios que reflejen al menos una breve descripcin, el nombre del programador, fecha versin y nombre programadores ha incluido modificaciones en el programa. Nombres significativos para describir los identificadores. Comentarios significativos que ayudan a la comprensin del cdigo y que expliquen partes complejas o confusas del algoritmo. Claro estilo y formato: una sentencia por lnea, sangrado, lneas en blanco para separar bloques de sentencias relacionadas, etc...
En la documentacin para el usuario final deber especificarse claramente: La finalidad del programa. Instrucciones para su instalacin y ejecucin. Las restricciones de uso del programa. Los datos de entrada al programa, su formato y la obligatoriedad o no de los mismos. Los datos de salida del programa y su formato. Los nombres y formatos de los ficheros de entrada y/o salida, si el programa los tiene. Los mensajes de error que puede emitir el programa (ante datos incoherentes de entrada, por ejemplo), aclarando el motivo de los mismos y la accin a realizar en su caso.
Programacin I - 14 - Prctica 1.- Diseo de Programas
Grado en Ingeniera Informtica Programacin I Departamento de Informtica y Automtica Universidad de Salamanca (v1314) EJERCICIOS RESUELTOS
Ejercicio 1.- Impuesto Valor Aadido Supongamos que el Impuesto sobre el Valor Aadido (IVA) con el que se gravan los vehculos en Espaa es del 16%. Dado un coche cuyo valor para el comprador sea de Precio final, cul es la cantidad que percibe el Estado en concepto de este impuesto?.
Realizar un anlisis y algoritmo que haga las preguntas oportunas y responda a la cuestin formulada.
Ayuda: El ejercicio puede resolverse con una estructura secuencial.
Anlisis Datos de entrada: Precio final del vehculo. Tipo real. Se leer de teclado.
Datos constantes: El porcentaje de IVA. Tipo real. Valor 16.
Datos de salida: El impuesto que grava el precio final del vehculo. Tipo real. Se mostrar en pantalla.
Definicin del problema:
Precio final = Precio bruto + Impuesto (ecuacin 1)
Precio bruto donde Impuesto = ------------------ * IVA (ecuacin 2) 100 Sustituyendo la ecuacin 2 en la ecuacin 1 y despejando, obtenemos Precio bruto en funcin del Precio final y del IVA, uno dato de entrada y el otro una constante. Precio final Precio bruto = -------------------- (ecuacin 3) (1 + IVA /100)
Y conocido Precio bruto, a travs de la ecuacin 2 puede obtenerse el Impuesto.
Programacin I - 15 - Prctica 1.- Diseo de Programas
Grado en Ingeniera Informtica Programacin I Departamento de Informtica y Automtica Universidad de Salamanca (v1314) Algoritmo en pseudocdigo Algoritmo impuesto_valor_aadido Constantes real IVA = 16 Variables real precio_final // Entrada real precio_bruto // Interna de trabajo real impuesto // Salida
Programacin I - 16 - Prctica 1.- Diseo de Programas
Grado en Ingeniera Informtica Programacin I Departamento de Informtica y Automtica Universidad de Salamanca (v1314)
Ejercicio 2.- Salario semanal Realizar el anlisis y el algoritmo del siguiente problema. Se desea calcular el salario semanal de los empleados de una empresa, sabiendo que ste se calcula en base a las horas semanales trabajadas y a un precio especificado por hora (ambos sern datos de entrada). Si el trabajador sobrepasa las 40 horas semanales, las horas extraordinarias se pagarn a razn de 1,5 veces la hora ordinaria.
Ayuda: El ejercicio puede resolverse con una estructura alternativa doble.
Anlisis Datos de entrada: horas trabajo: Horas de trabajo semanales. Tipo real. Se leer de teclado. precio hora: Precio de la hora de trabajo. Tipo real. Se leer de teclado.
Datos constantes: Lmite de horas de trabajo semanales para considerar horas extras (HORAS_SEM). Tipo entero. Valor 40. Valor hora extra sobre hora normal (VALOR_HORA_EXTRA). Tipo real. Valor 1,5.
Datos de salida: salario semanal. Tipo real. Se mostrar en pantalla.
Definicin del problema: Deberemos comprobar si el trabajador sobrepasa las 40 horas de trabajo semanal (HORAS_SEM). Si no las sobrepasa su sueldo ser salario semanal = horas trabajo * precio hora
Si las sobrepasara su sueldo ser salario extra = (horas trabajo HORAS_SEM) * VALOR_HORA_EXTRA * precio hora salario semanal = HORAS_SEM * precio hora + salario extra
Algoritmo en pseudocdigo Algoritmo salario_semanal Constantes HORAS_SEM = 40 VALOR_HORA_EXTRA = 1.5 Variables real horas_trabajo, precio_hora // Entrada real salario_extra // Intermedia de trabajo real salario_semanal // Salida
Programacin I - 17 - Prctica 1.- Diseo de Programas
Grado en Ingeniera Informtica Programacin I Departamento de Informtica y Automtica Universidad de Salamanca (v1314) Inicio leer (horas_trabajo, precio_hora)
Programacin I - 18 - Prctica 1.- Diseo de Programas
Grado en Ingeniera Informtica Programacin I Departamento de Informtica y Automtica Universidad de Salamanca (v1314)
Ejercicio 3.- Factorial Realizar un anlisis y un algoritmo que permita la realizacin de un programa que calcule el factorial de un nmero entero mayor que 0, que se recibir por teclado.
Ayuda: El ejercicio puede resolverse con una estructura repetitiva mientras o desde.
Anlisis Datos de entrada: Nmero (n) a calcular su factorial. Tipo entero. Se leer de teclado.
Datos de salida: Factorial. Tipo real (el rango de los enteros puede que no sea suficiente). Se mostrar en pantalla.
Definicin del problema: El factorial de n ser factorial(n) = n * (n-1) * (n-2) * (n-3) * ... * 3 * 2 * 1
Algoritmo en pseudocdigo Algoritmo calculo_factorial Variables entero n // Entrada. Nmero a calcular el factorial entero num // Intermedia de trabajo real factorial // Salida Inicio leer (n)
factorial 1 num n
Mientras (num > 1) factorial factorial * num num num - 1 FinMientras
escribir (factorial) Final
Programacin I - 19 - Prctica 1.- Diseo de Programas
Grado en Ingeniera Informtica Programacin I Departamento de Informtica y Automtica Universidad de Salamanca (v1314) Algoritmo en diagrama de flujo
Verificacin del algoritmo. Traza del algoritmo. Sabemos que el factorial de 5 es 120. Podemos comprobar el algoritmo con el valor 5 de entrada y obtendremos la siguiente tabla de traza, que demuestra que el algoritmo es correcto.
n num factorial 5 5 1 5 4 5 5 3 20 5 2 60 5 1 120
Para este algoritmo podra haberse utilizado tambin una estructura repetitiva desde.
Programacin I - 20 - Prctica 1.- Diseo de Programas
Grado en Ingeniera Informtica Programacin I Departamento de Informtica y Automtica Universidad de Salamanca (v1314) Algoritmo en pseudocdigo versin desde Algoritmo calculo_factorial Variables entero n // Entrada. Nmero a calcular el factorial entero num // Intermedia de trabajo real factorial // Salida Inicio leer (n)
factorial 1 Desde num 1 hasta n con incremento 1 factorial factorial * num FinDesde
escribir (factorial) Final
Programacin I - 21 - Prctica 1.- Diseo de Programas
Grado en Ingeniera Informtica Programacin I Departamento de Informtica y Automtica Universidad de Salamanca (v1314) Algoritmo en diagrama de flujo versin desde
Verificacin del algoritmo. Traza del algoritmo. Vamos a verificar el algoritmo con el mismo dato de prueba: factorial de 5 es 120.
Programacin I - 22 - Prctica 1.- Diseo de Programas
Grado en Ingeniera Informtica Programacin I Departamento de Informtica y Automtica Universidad de Salamanca (v1314)
Ejercicio 4.- Nmeros primos Realizar el anlisis y el algoritmo que resuelva el siguiente problema. Se desea determinar si un nmero natural mayor que 1 es primo.
Ayuda: El ejercicio puede resolverse con una estructura repetitiva mientras.
Anlisis Datos de entrada: Nmero a analizar (num). Valor de tipo entero. Se leer de teclado. Deber ser mayor que 1.
Datos de salida: Se mostrar en pantalla un literal indicando si el nmero es primo o no.
Definicin del problema: Un nmero es primo si slo tiene como divisores a l mismo y la unidad. Por ejemplo 1, 2, 3, 5, 7, 11... son primos, 4, 6, 8, 9, 10... no lo son.
El nmero a investigar, se ir dividiendo sucesivamente por los nmeros naturales mayores que 1, terminando bien cuando alguna de estas divisiones nos de resto cero (en cuyo caso hemos encontrado un divisor, por lo que NO ser primo), o bien cuando lleguemos a dividir el nmero a investigar por l mismo, en cuyo caso por no haber encontrado ningn divisor, SI ser primo.
Algoritmo en pseudocdigo Algoritmo verificacin_primo Variables entero num // Entrada. Nmero a investigar entero x // Interna de trabajo. Divisor que se va incrementando entero resto // Interna de trabajo. Resto de las divisiones Inicio leer (num) x 2 resto num mod x // mod representa el operador que obtiene el // resto entero de una divisin Mientras ( (resto <> 0) and (x < num) ) x x + 1 resto num mod x FinMientras
Programacin I - 23 - Prctica 1.- Diseo de Programas
Grado en Ingeniera Informtica Programacin I Departamento de Informtica y Automtica Universidad de Salamanca (v1314)
Si (x = num) escribir ("El nmero es primo") Sino escribir ("El nmero no es primo") FinSi Final
Algoritmo en diagrama de flujo
Programacin I - 24 - Prctica 1.- Diseo de Programas
Grado en Ingeniera Informtica Programacin I Departamento de Informtica y Automtica Universidad de Salamanca (v1314) Verificacin del algoritmo. Traza del algoritmo. Para num = 9, el resultado debe de ser, Es primo.
num x resto 9 2 1 9 3 0 x <> num El nmero NO es primo
Para num = 7, el resultado debe de ser, No es primo.
num x resto 7 2 1 7 3 1 7 4 3 7 5 2 7 6 1 7 7 0 x = num El nmero es primo
Para num = 2, el resultado debe de ser, Es primo.
num x resto 2 2 0 x = num El nmero es primo
Ejercicio 5.- Suma de 50 nmeros de teclado Realizar un anlisis y algoritmo que permita leer 50 nmeros enteros de teclado y obtener su suma.
Ayuda: El ejercicio puede resolverse con una estructura repetitiva mientras o desde.
Anlisis Datos de entrada: Nmeros enteros a tratar. Se leern de teclado. Como no es necesario disponer simultneamente de todos ellos en memoria, se utilizar una sola variable para almacenar nicamente un nmero de entrada cada vez.
Datos constantes: El lmite 50 que indica el enunciado. Tipo entero. Lo denominaremos N.
Datos de salida: La suma. Tipo real (el rango de los enteros puede que no sea suficiente). Se mostrar en pantalla.
Programacin I - 25 - Prctica 1.- Diseo de Programas
Grado en Ingeniera Informtica Programacin I Departamento de Informtica y Automtica Universidad de Salamanca (v1314)
Definicin del problema: Mediante un bucle iremos leyendo sucesivamente nmeros de teclado. Tras cada lectura, se incrementar un contador para llevar la cuenta de los nmeros que se van introduciendo, y un acumulador para almacenar las sucesivas sumas.
Algoritmo en pseudocdigo
En la primera versin del algoritmo, la variable contador que controla el bucle, se ha iniciado a 1, y dentro del cuerpo del bucle tomar consecutivamente los valores 2, 3, ... 49, 50, 51, por lo que indica en el algoritmo el siguiente nmero a leer. La condicin de permanencia en el bucle es por tanto (contador <= N). Cuando contador toma el valor 51 salimos del bucle, pues ya habremos ledo los 50 nmeros. En la segunda versin, se ha iniciado a 0, y dentro del cuerpo del bucle tomar consecutivamente los valores 0, 1, 2, 3, ... 48, 49, 50 por lo que indicar cuantos nmeros llevo ledos. La condicin de permanencia en el bucle es por tanto (contador < N). Cuando contador toma el valor 50 salimos del bucle, pues ya habremos ledo los 50 nmeros.
Normalmente las variables contador se inician a 0 1, dependiendo del diseo del algoritmo. En funcin del valor de inicio y de final, se deber escoger el operador relacional adecuado para la condicin de control del bucle.
Algoritmo en diagrama de flujo primera versin
Algoritmo suma_numeros (1) Constantes entero N = 50 Variables entero numero entero contador // contador real suma // acumulador Inicio suma 0 contador 1
Mientras (contador <= N) leer(numero) suma suma + numero contador contador + 1 FinMientras
escribir(suma) Algoritmo suma_numeros (2) Constantes entero N = 50 Variables entero numero entero contador // contador real suma // acumulador Inicio suma 0 contador 0
Mientras (contador < N) leer(numero) suma suma + numero contador contador + 1 FinMientras
escribir(suma)
Programacin I - 26 - Prctica 1.- Diseo de Programas
Grado en Ingeniera Informtica Programacin I Departamento de Informtica y Automtica Universidad de Salamanca (v1314)
No se dibuja el diagrama de flujo de la segunda versin del algoritmo, pues es una vez visto el diagrama de la primara versin, es inmediata y obvia su obtencin.
Programacin I - 27 - Prctica 1.- Diseo de Programas
Grado en Ingeniera Informtica Programacin I Departamento de Informtica y Automtica Universidad de Salamanca (v1314) La primera versin del algoritmo puede fcilmente reescribirse utilizado una estructura repetitiva desde.
Algoritmo en pseudocdigo versin desde
Algoritmo suma_numeros (3) Constantes entero N = 50 Variables entero numero, contador real suma Inicio suma 0 contador 1
Desde contador 1 hasta N con incremento 1 leer(numero) suma suma + numero FinDesde
escribir(suma) Final
Programacin I - 28 - Prctica 1.- Diseo de Programas
Grado en Ingeniera Informtica Programacin I Departamento de Informtica y Automtica Universidad de Salamanca (v1314) Algoritmo en diagrama de flujo versin desde
Obsrvese que el diagrama de flujo es el mismo que el de la versin mientras.
Programacin I - 29 - Prctica 1.- Diseo de Programas
Grado en Ingeniera Informtica Programacin I Departamento de Informtica y Automtica Universidad de Salamanca (v1314)
Ejercicio 6.- El mayor de 100 nmeros Realizar un anlisis y algoritmo que lea 100 nmeros enteros y calcule el mayor.
Ayuda: El ejercicio puede resolverse con una estructura repetitiva desde.
Anlisis Datos de entrada: Nmeros enteros a tratar. Se leern de teclado. Como no es necesario disponer simultneamente de todos ellos en memoria, se utilizar una sola variable para almacenar nicamente un nmero de entrada cada vez.
Datos constantes: El lmite 100 que indica el enunciado. Tipo entero. Lo denominaremos N.
Datos de salida: El mayor de los nmeros introducidos. Tipo entero. Se mostrar en pantalla.
Definicin del problema: En una variable entera mayor llevaremos en cada momento el mayor de los nmeros ledos hasta el momento. El valor mayor siempre debe de ser un elemento de la coleccin, por lo que se lee el primer nmero de la coleccin y se asigna como el mayor hasta ese momento.
Mediante un bucle iremos leyendo sucesivamente el resto de nmeros de teclado. En cada iteracin se comparar el nmero ledo con el mayor hasta ese momento, y si es el caso, se asignar el nmero ledo como el nuevo mayor.
Algoritmo en pseudocdigo Algoritmo mayor _de_100 Variables entero numero, contador, mayor Constantes entero N = 100 Inicio contador 1 leer (numero) mayor numero
Programacin I - 30 - Prctica 1.- Diseo de Programas
Grado en Ingeniera Informtica Programacin I Departamento de Informtica y Automtica Universidad de Salamanca (v1314)
Desde contador 2 hasta N con incremento 1 leer (numero)
Si (numero > mayor) mayor numero FinSi FinDesde
escribir (mayor) Final
Se observa en el algoritmo que: Como el valor mayor siempre debe de ser un elemento de la coleccin, la primera lectura se realiza fuera del bucle, y el valor ledo se asigna como el mayor hasta ese momento. Mediante un bucle desde vamos leyendo sucesivamente el resto de nmeros de teclado. El bucle desde estar controlado por un contador que comenzar en 2 (el primer nmero ya se ha ledo fuera del bucle), e incrementndose de 1 en 1, realizar la ltima iteracin cuando alcance el valor 100. En el cuerpo del bucle se compara cada lectura con el mayor hasta ese momento, y si procede, se asigna la lectura como el nuevo mayor.
Programacin I - 31 - Prctica 1.- Diseo de Programas
Grado en Ingeniera Informtica Programacin I Departamento de Informtica y Automtica Universidad de Salamanca (v1314) Algoritmo en diagrama de flujo
Programacin I - 32 - Prctica 1.- Diseo de Programas
Grado en Ingeniera Informtica Programacin I Departamento de Informtica y Automtica Universidad de Salamanca (v1314)
Ejercicio 7.- Diferencia de sumas de positivos y negativos Disear el anlisis y algoritmo que lea de teclado una serie de nmeros enteros positivos y negativos. La lectura debe de terminar cuando se introduzca el cero. El algoritmo deber presentar en pantalla los siguientes resultados: Cuantos nmeros positivos se han introducido. Cuantos nmeros negativos se han introducido. La suma de los nmeros positivos. La suma de los nmeros negativos. Cual de las dos sumas es mayor Cual es la diferencia de las sumas.
Ayuda: El ejercicio puede resolverse con una estructura repetitiva mientras anidando estructuras alternativas dobles.
Anlisis Datos de entrada: Nmeros enteros a tratar. Se leern de teclado. Como no es necesario disponer simultneamente de todos ellos en memoria, se utilizar una sola variable para almacenar nicamente un nmero de entrada cada vez.
Datos de salida: Cuantos nmeros positivos se han introducido. Tipo entero. Cuantos nmeros negativos se han introducido. Tipo entero. La suma de los nmeros positivos. Tipo entero. La suma de los nmeros negativos. Tipo entero. Cual de las dos sumas es mayor. Tipo cadena de caracteres. Ser un mensaje. Cual es la diferencia de las sumas. Tipo entero. Todos ellos se mostrarn en pantalla.
Definicin del problema: Utilizaremos un bucle para leer sucesivamente los nmeros de teclado, y acumular la lectura en los contadores y acumuladores correspondientes. El bucle se controlar mediante una condicin de permanencia lectura distinto de cero. Finalmente se compararn los acumuladores suma para determinar cual es mayor y su diferencia.
Programacin I - 33 - Prctica 1.- Diseo de Programas
Grado en Ingeniera Informtica Programacin I Departamento de Informtica y Automtica Universidad de Salamanca (v1314) Algoritmo en pseudocdigo Algoritmo mayor _de_100 Variables entero numero // Entrada entero numpos // Cuantos nmeros positivos se han introducido entero numneg // Cuantos nmeros negativos se han introducido entero sumapos // La suma de los nmeros positivos entero sumaneg // La suma de los nmeros negativos entero diferencia // Diferencia de suma de positivos y negativos Inicio entero numpos 0 entero numneg 0 entero sumapos 0 entero sumaneg 0
leer (numero) Mientras numero < > 0 Si (numero > 0) numpos numpos + 1 sumpos sumpos + numero Sino numneg numneg + 1 sumneg sumneg numero // para que sumneg sea siempre positiva FinSi
leer (numero) FinMientras
diferencia numpos sumneg
Si (sumpos = sumneg) escribir (Las dos sumas son iguales) Sino Si (sumpos > sumneg) escribir (La suma de positivos es la mayor. Diferencia: , diferencia) Sino escribir (La suma de negativos es la mayor. Diferencia: , diferencia) FinSi FinSi Final
Programacin I - 34 - Prctica 1.- Diseo de Programas
Grado en Ingeniera Informtica Programacin I Departamento de Informtica y Automtica Universidad de Salamanca (v1314) En el algoritmo se observa que: Se utiliza un bucle mientras para leer sucesivamente los nmeros de teclado. La primera lectura se realizar fuera del bucle mientras, y se entrar en el mismo slo si el nmero ledo es distinto de cero. El tratamiento del cuerpo del bucle ser acumular en los contadores y acumuladores correspondientes. La ltima sentencia del cuerpo del bucle ser de nuevo una lectura. De esta forma, mediante la condicin del bucle mientras garantizamos que slo se tratar el nmero ledo si ste es distinto de cero.
Programacin I - 35 - Prctica 1.- Diseo de Programas
Grado en Ingeniera Informtica Programacin I Departamento de Informtica y Automtica Universidad de Salamanca (v1314) Algoritmo en diagrama de flujo
Programacin I - 36 - Prctica 1.- Diseo de Programas
Grado en Ingeniera Informtica Programacin I Departamento de Informtica y Automtica Universidad de Salamanca (v1314) EJERCICIOS PROPUESTOS
Ejercicio 8.- Analizar el resultado Qu resultado producir el siguiente algoritmo? Variables entero nx, doble Inicio leer (nx) doble nx * 2 escribir (nx) escribir (doble) Final
Ejercicio 9- rea y volumen de un cilindro Disear el anlisis y algoritmo que determine el rea y volumen de un cilindro cuyas dimensiones radio y altura se leen de teclado. Escribir dicho algoritmo en pseudocdigo y diagrama de flujo.
Ayuda: El ejercicio puede resolverse con una estructura secuencial.
Ejercicio 10.- Suma de la serie aritmtica 3, 6, 9, 99 Disear el anlisis y algoritmo que imprima en pantalla y sume la serie aritmtica siguiente: 3, 6, 9, ... 99.
Ayuda: El ejercicio puede resolverse con una estructura repetitiva mientras o desde.
Programacin I - 37 - Prctica 1.- Diseo de Programas
Grado en Ingeniera Informtica Programacin I Departamento de Informtica y Automtica Universidad de Salamanca (v1314)
Ejercicio 11.- Las primeras potencias de 2 Disear el anlisis y algoritmo que calcule y visualice las m primeras potencias de 2, es decir, 2, 4, 8, ... (hasta m trminos) m ser un dato que se definir como constante que parametrizar el algoritmo. Escribir dicho algoritmo en pseudocdigo y diagrama de flujo.
Ayuda: El ejercicio puede resolverse con una estructura repetitiva mientras o desde.
Ejercicio 12.- Producto mediante sumas Disear el anlisis y algoritmo que calcule el producto de dos nmeros enteros mediante sumas. El algoritmo solicitar la introduccin de los dos nmeros enteros y calcular su producto sumando el primer factor consigo mismo tantas veces como indique el segundo.
Ayuda: El ejercicio puede resolverse con una estructura repetitiva desde.
Ejercicio 13.- Nmeros de Armstrong Disear el anlisis y algoritmo que muestre por pantalla los nmeros de Armstrong, comprendidos desde el 1, y un lmite que se solicitar por pantalla. Un nmero es de Armstrong si la suma de los dgitos que lo componen al cubo es igual al nmero. Por ejemplo el 153, ya que 1 3 + 5 3 + 3 3 = 1 + 125 + 27 = 153.
Ayuda: El ejercicio puede resolverse con una estructura repetitiva desde.
Ejercicio 14.- Algoritmo de Euclides (mcd) El mximo comn divisor de dos nmeros enteros positivos es el mayor de todos los nmeros enteros que divide a los dos primeros. Disear el anlisis y algoritmo que calcule el mximo comn divisor de dos nmeros enteros positivos que se introducirn por teclado.
Ayuda: Puede implementarse para calcular el mcd, el algoritmo de Euclides. En ese caso, el ejercicio puede resolverse con una estructura repetitiva repetir mientras.
Ejercicio 15.- Media de la suma de una serie de nmeros positivos
Programacin I - 38 - Prctica 1.- Diseo de Programas
Grado en Ingeniera Informtica Programacin I Departamento de Informtica y Automtica Universidad de Salamanca (v1314) Disear el anlisis y algoritmo que lea de teclado una serie de nmeros enteros positivos y los presente en pantalla. El algoritmo deber terminar cuando se introduzca un valor negativo o cero, y deber presentar la media de los nmeros introducidos.
Ayuda: El ejercicio puede resolverse con una estructura repetitiva mientras.
Ejercicio 16.- Incrementos y decrementos hasta cruce Disear el anlisis y algoritmo que solicite dos nmeros naturales por teclado y muestre por pantalla los sucesivos resultados de incrementar el menor y decrementar el mayor, hasta que el menor supere al mayor Por ejemplo, si introducimos el 1 y el 10, el resultado en pantalla debe ser 1 10 2 9 3 8 4 7 5 6
Ayuda: El ejercicio puede resolverse con una estructura repetitiva mientras.
Ejercicio 17.- Suma de los pares entre dos lmites dados Disear el anlisis y algoritmo que lea de teclado dos nmeros enteros. El primero deber ser mayor que el segundo. En caso contrario terminar sin hacer nada. El algoritmo deber presentar en pantalla la suma de los nmeros pares comprendidos entre ambos lmites introducidos.
Ayuda: El ejercicio puede resolverse con una estructura repetitiva desde.
Ejercicio 18.- Contar ceros Disear el anlisis y algoritmo que lea de teclado 20 nmeros enteros, positivos, negativos o cero. El algoritmo deber presentar en pantalla el nmero de ceros que se hayan introducido.
Ayuda: El ejercicio puede resolverse con una estructura repetitiva desde.
Programacin I - 39 - Prctica 1.- Diseo de Programas
Grado en Ingeniera Informtica Programacin I Departamento de Informtica y Automtica Universidad de Salamanca (v1314)
Ejercicio 19.- Sumar trminos hasta superar lmite Disear el anlisis y algoritmo que calcule cuantos trminos de la serie 1 + 1 / 2 + 1 / 3 + + 1 / n
deben se sumarse para superar un lmite que se introducir por teclado.
Ayuda: El ejercicio puede resolverse con una estructura repetitiva mientras.
Ejercicio 20.- El valor de la suma de n trminos Disear el anlisis y algoritmo que calcule el valor de la suma de los n primeros trminos de la serie 1 + 1 / 2 + 1 / 3 + + 1 / n
El valor de n se leer de teclado.
Ayuda: El ejercicio puede resolverse con una estructura repetitiva desde.