FUNDAMENTOS DE PROGRAMACIÓN CIENTÍFICA
CLASE 1
TEMA: FUNDAMENTOS DE PROGRAMACIÓN –Nivelación-
Taller 1: Algoritmos
Advertencia sobre derechos de autor:
- Los ejercicios de este taller han sido tomados del libro “Fundamentos de
Programación”, de Luis Joyanes Aguilar. Han sido recopilados para facilitar el
acceso al libro texto, sin embargo, se recomienda hacer una revisión del mismo -
Analice los siguientes problemas y solucione cada uno de ellos utilizando:
Análisis del problema, Pseudocódigo, Diagrama de Flujo y Tabla de
seguimiento (prueba de escritorio). Utilice MATLAB para codificarlos.
1. Escribir un algoritmo que lea cuatro números y a continuación, escriba el
mayor de los cuatro
2. Diseñar un algoritmo que lea cuatro variables y calcule e imprima su
producto, su suma y su medida aritmética.
Análisis del Problema
DATOS DE SALIDA: Producto, suma y media
DATOS DE ENTRADA: a,b,c,d
Después de leer los cuatro datos, asignamos a la variable producto la
multiplicación de las cuatro variables de entrada. A la variable suma y a la
variable media le asignamos el resultado de sumar las cuatro variables y
dividirlas entre cuatro. Como el operador suma tiene menos prioridad que
el operador división, será necesario encerrar la suma entre paréntesis.
También podríamos haber dividido directamente la variable suma entre
cuatro
La variable a, b, c, d, producto y suma podrían ser enteras, pero no así la
variable media, ya que la división produce siempre resultados de tipo real.
Diseño del Algoritmo
Algoritmo
Var
Entero: a, b, c, d, producto, suma
Real: media
Inicio
Leer (a, b, c, d)
Producto a* b*c*d
suma a + b +c + d
media (a + b + c + d) / 4
escribir (producto, suma, media)
fin
3. Escribir las siguientes expresiones en forma de expresiones algorítmicas
a. M+4 b. M + N c. Sinx cosy
N P- Q Tang x
d. M+N e. P+ N f. –b + √b2 – 4ac
P - Q P 2a
Q- r
5
a. M / N +4
b. M + N / (P – Q)
c. (sen (x) + cos (x) ) / tan (x)
d. (M + N) / ( P – Q )
e. (M + N / P)/ (Q – R/ 5)
f. ((-B) + raiz2 (B**2-4* A*C))/ (2*A)
4. Realizar un algoritmo que calcule la suma de los enteros entre 1 y 10, es
decir 1 + 2 +3 +…..+10.
Análisis del problema
DATOS DE SALIDA: suma (contiene la suma requerida)
DATOS AUXILIARES: num (será una variable que vaya tomando valores
entre 1 y 10 y se acumulará en suma.)
Hay que ejecutar un bucle que se realice 10 veces. En el se irá
incrementando en 1 la variable num, se acumulará su valor en la variable
suma. Una vez se termine el bucle se visualizará el valor de la variable
suma.
Diseño del algoritmo.
TABLA DE VARIABLES
Entero: suma, num
Inicio
suma 0
num 0
num num +1
sum suma+ num
No num = 10
Escribir suma
Fin
5. Escribir un algoritmo que calcule la superficie de un triangulo en función
de la base y la altura.
6. Se desea calcular independientemente la suma de los números pares en
impares comprendidos entre 1 y 200.
7. Escribir un algoritmo para determinar el máximo común divisor de dos
números enteros por el algoritmo de Euclides.
Análisis del problema
DATOS DE SALIDA: Máximo común divisor (mcd)
DATOS D ENTRADA: Dos números enteros (a y b)
DATOS AUXILIARES: Resto
Para hallar el máximo común divisor de dos números se debe dividir uno
entre otro. Si la división es exacta, es decir el resto es 0, el máximo común
divisor es el divisor. Si no, se deben dividir otra vez los números, pero en este
caso el dividendo será el antiguo divisor y el divisor el resto de la división
anterior. El proceso se repetirá hasta que la división sea exacta.
Para diseñar el algoritmo se debe crear un bucle que se repita mientras
que la división no sea exacta. Dentro del bucle se asignaran nuevos valores
al dividendo y al divisor.
Diseño del algoritmo
Algoritmo
Var
Entero: a,b, resto
Inicio
leer (a,b)
mientras a mod b <> 0 hacer
resto a mod b
a b
b resto
mcd b
fin mientras
escribir (mcd)
fin
8. Realizar un algoritmo que calcule y visualice las potencias de 2 entre 0 y
10
Análisis del problema
Hay que implementar un bucle que se ejecute once veces y dentro de él
ir incrementando una variable que tome valores entre 0 y 10 y que se
llamará núm. También dentro de él se visualizará el resultado de la
operación 2 ^ num.
Diseño del Algoritmo
Entero: num
Inicio
núm 0
Escribir 2^num
num num +1
No
núm > 1
Sí
Fin
9. Leer un caracter y deducir si está situado antes o después de la <<m>>
en orden alfabético.
Análisis del problema
Como dato de salida está el mensaje que nos dice la situación del
carácter con respecto a la <<m>>. Como entrada el propio carácter que
introducimos por teclado. No se necesita ninguna variable auxiliar.
Se debe leer el carácter y compararlo con la <<m>> para ver si es mayor o
menor que otro, y lo hace comparando el código de los dos elementos de
la comparación.
Diseño del algoritmo.
Inicio
leer
caracteres
Si caracter> No
<<m>>
Si No
caracter =<<m>>
Escribir
Escribir Escribir <<menor que m>>
<<mayor que m>> << igual a m>>
Fin
9. Averiguar si una palabra es un palíndromo (un palíndromo es una
palabra que se lee igual de izquierda a derecha que de derecha a
izquierda, como por ejemplo “radar”)
Análisis del problema
DATOS DE SALIDA: El mensaje que nos dice si es no un palíndromo
DATOS DE ENTRADA: Palabra
DATOS AUXILIARES: Cada carácter de la palabra, palabra al revés
Para comprobar si una palabra es un palíndromo, se puede ir formando
una palabra con los caracteres invertidos con respecto a la original y
comprobar si la palabra al revés es igual a la origina. Para obtener esa
palabra al revés, se leerán en sentido inverso los caracteres de la palabra
inicial y se irán juntando sucesivamente hasta llegar al primer carácter.
Diseño del Algoritmo
Inicio
Leer palabra
Leer último carácter
Juntar el carácter
A los anteriores
Leer último carácter
Si ¿Más caracteres?
No
No Si
¿Palabras iguales?
“No es un palíndromo” “Sí es un palíndromo”
Fin
11. Diseñar un algoritmo para determinar si un número n es primo (un
número primo sólo es divisible por el mismo y por la unidad)
Análisis del problema
DATOS DE SALIDA: El mensaje que nos indica si es o no primo
DATOS DE ENTRADA: n
DATOS AUXILIARES: divisor (es el número por el que
Vamos a dividir n para averiguar si es primo).
Una forma de averiguar si un número es primo es por tanteo. Para ello se
divide sucesivamente el número por los números comprendidos entre 2 y n.
Si antes de llegar a n encuentra un divisor exacto, el número no será primo.
Si el primer divisor es n el número será primo.
Por tanto se hará un bucle en el que una variable (divisor) irá
incrementándose en una unidad entre 2 y n. El bucle se ejecutará hasta
que se encuentre un divisor, es decir hasta que n mod divisor=0. Si al salir
del bucle divisor=n, el número será primo.
Diseño del algoritmo
Inicio
Leer n
Poner divisor a 1
N mod No
divisor=0?
Incrementar
Divisor en 1
Si No
Divisor=n
n es primo n no es primo
Fin
12. Leer una serie de número enteros positivos distintos de 0
(El último número de la serie debe ser el -99) obtener el número mayor.
13. Calcular y visualizar la suma y el producto de los números pares
comprendidos entre 20 y 400 ambos inclusive.
14. Leer 500 números enteros y obtener cuántos son positivos
15. Visualizar los múltiplos de 4 comprendidos entre 4 y N, donde N es un
número introducido por teclado.
16. Calcular la nota media por un aluno de una clase de a alumnos. Cada
alumno podrá tener un número n de notas distinto.
17. Dados tres números, deducir cuál es el central.
Análisis del problema
DATOS DE ENTRADA: central (el número central)
DATOS DE SALIDA: A, B y C (los números que vamos a
a comparar)
Se trata de ir comparando los tres números entre sí, utilizando selecciones
de una sola comparación anidadas entre sí, ya que así se ahorran
comparaciones (sólo utilizamos 5). Si se utilizan comparaciones con
operadores lógicos del tipo A<B y B>C, se necesitarían seis estructuras
selectivas por lo que se estarían haciendo dos comparaciones por
selección.
Diseño del algoritmo (con comparaciones dobles)
Algoritmo
Var
Entero: a, b, c, central
Inicio
Leer (a, b, c)
si (a < b) y (b < c) entonces
central b
fin si
si (a < c) y (c < b) entonces
central c
fin si
si (b < a) y (a < c) entonces
central a
fin si
si ( b < c) y ( c < a) entonces
central c
fin si
si (c < a) y a < b) entonces
central a
fin si
si (c < b) y (b < a) entonces
central b
fin si
escribir central
fin.
18. Calcular la raíz cuadrada de un número y escribir su resultado.
Análisis del problema
Como dato de salida se tendrá la raíz y como entrada el número. Lo único
que hay que hacer es asignar a raíz la raíz cuadrada del número, siempre
que en este no sea negativo, ya que en este caso no tendría una solución
real. Se utilizara la función raíz2 si se considera implementada; en caso
contrario, deberá utilizarse la exponenciación.
Diseño del algoritmo.
Algoritmo
Var
entero: n
real: raiz
inicio
leer (n)
si n < 0 entonces
escribir (“no hay solución”)
si_no
raiz n ** (1/2)
escribir (raiz)
fin si
fin
19. Escribir un algoritmo que permita calcular xn, donde:
X puede ser cualquier número real distinto de 0
n puede ser cualquier entero positivo, negativo o nulo
Nota: Suponemos que no está implementando el operador de
exponenciación.
Análisis del problema
DATOS DE SALIDA: potencia (resultado de elevar x a la n)
DATOS DE ENTRADA: X (base de la exponenciación),
n (exponente)
DATOS AUXILIARES: conta(contador que controla el
numero de veces que se multiplica x
por si mismo), solución (será falso si no
hay solución)
Después de introducir x y n, se comprueba n. Si es 0, potencia valdrá 1. Si es
positivo se ha de multiplicar x n veces y ello se hará mediante un bucle en
el que se vaya guardando en la variable producto las sucesivas
multiplicaciones. En el bucle de un contador irá controlando las veces que
se ejecuta el bucle, que finalizará cuando sea igual a n. Si n es negativo,
primero se comprueba que x sea distinto de cero, pues en ese caso no
tendrá solución. En caso contrario se procederá de la misma forma que si
es positivo pero la potencia será
1/ potencia.
Diseño del algoritmo
algoritmo
var
entero: n , conta
real: x, potencia
lógico: solución
inicio
leer (x,n)
solución verdad
si n=0 entonces
potencia 1
si_no
si n>o entonces
potencia 1
conta 0
repetir
potencia potencia * x
conta conta + 1
hasta que conta =n
si_no
si x=0 entonces
escribir (`No hay solución´)
solución falso
si_no
potencia 1
conta 0
repetir
potencia potencia * x
conta conta -1
hasta que conta = n
potencia 1/potencia
fin si
fin si
si solución entonces
escribir (potencia)
fin si
fin.
BIBLIOGRAFÍA
Fundamentos de programación; algoritmos, estructura de datos y objetos.
Luis Joyanes Aguilar. Cuarta Edición. Editorial McGrawHill. Madrid, 2008