Sie sind auf Seite 1von 39

Programacin I - 1 -

Prctica 1.- Diseo de Programas




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

Inicio
leer (precio_final)
precio_bruto precio_final / (1 + IVA / 100)
impuesto (precio_bruto / 100) * IVA
escribir (impuesto)
Final

Algoritmo en diagrama de flujo






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)

Si (horas_trabajo > HORAS_SEM)
salario_extra (horas_trabajo HORAS_SEM) *
VALOR_HORA_EXTRA * precio_hora
salario_semanal (HORAS_SEM * precio_hora) + salario_extra
Sino
salario_semanal horas_trabajo * precio_hora
FinSi

escribir (salario_semanal)
Final

Algoritmo en diagrama de flujo





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.

n num factorial
5 1 1
5 2 1
5 3 2
5 4 6
5 5 24
5 6 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.

Das könnte Ihnen auch gefallen