Algoritmos y Estructura de Datos I
Algoritmos: Programación Estructurada
Especificación Pseudocódigo
Ejercicios resueltos
1. Diseño de Algoritmos
Algoritmo 1: Intercambiar valores.
Análisis
El intercambio de valores, es una rutina básica en ordenamientos y clasificaciones. Así para intercambiar los
valores de dos variables numéricas A y B, se debe usar una variable auxiliar AUX para que de modo temporal
tome uno de los valores dados.
variables: A, B, AUX
El método consiste en asignar la primera de las variables a la variable auxiliar, a continuación se asigna el valor
de la variable B a la primera, y por ultimo se reasigna el valor de la variable auxiliar a la segunda variable.
Pseudocódigo. Diseño del algoritmo.
Algoritmo Intercambio de valores
var
entero: A //primer valor
entero: B //segundo valor
entero: AUX //variable temporal
inicio
leer(A, B)
AUX A
A B
B AUX
escribir(A, B)
fin
Algoritmo 2: Area del triangulo
Análisis.
Algoritmo que calcule el área de un triangulo conociendo sus lados. El área de un triangulo en función de las
longitudes de sus lados es:
_________________
area = √ p(p-a)(p-b)(p-c)
Donde:
p = (a + b + c) / 2
es el semiperímetro y la raíz debe ser positiva (no debe dar un numero imaginario).
Mg. Jorge Medi@NERO A. Pag. 1
Algoritmos y Estructura de Datos I
Para asegurar esto último, use una estructura de selección para controlar la entrada de datos para a, b, y c. Es
decir, que debe cumplirse:
(p > a) y (p > b) y (p > c)
Pseudocódigo. Diseño del algoritmo.
Algoritmo Area_triangulo
var
real: a, b, c, p, area
inicio
escribir(“Ingresa los lados”)
leer(a, b, c)
p ( a + b + c ) / 2
si (p > a) y ( p > b) y ( p > c) entonces
area raizCuadrada(p * (p-a) * (p-b) * (p-c))
escribir(area)
si_no
escribir(“No es un triangulo”)
fin_si
fin
Algoritmo 3: Algoritmo que califica la entrada de números enteros positivos menores o iguales a 10, como
Pares o Impares.
Análisis.
En el rango: 0 < n <=10, se cumple que:
1, 3, 5, 7, y 9 son Impares y
2, 4, 6, 8 y 10 son Pares
Pseudocódigo. Diseño del algoritmo.
Algoritmo Numero_Par_Impar
var
entero: n
inicio
leer(n) //entrada de numero entero
//determinar si esta en el intervalo: <0,10]
segun_sea (n) hacer
1, 3, 5, 7, 9: escribir(‘IMPAR’) //rango de constantes
2, 4, 6, 8,10: escribir(‘PAR’) //rango de constantes
si_no
escribir(‘Fuera de rango: <0,10]’)
fin_segun
fin
Mg. Jorge Medi@NERO A. Pag. 2
Algoritmos y Estructura de Datos I
Terminación de Bucles con datos de entrada.
Algoritmo 4: Algoritmo que calcula el promedio de n calificaciones, de un alumno.
Análisis. El promedio aritmético se obtiene mediante la siguiente expresión:
∑ x
Promedio =
: n
Pseudocódigo. Diseño del algoritmo.
Algoritmo calcula_promedio
var
caracter: entrada
entero: suma, x, n
real : p //promedio
inicio
n ← 0 //inicializar contador
suma ← 0 //inicializar acumulador
escribir(‘Necesita entradas: (s/n) ?’)
leer(entrada) //entrada de numero entero
//determinar si esta en el intervalo: <0,10]
mientras (entrada = ‘S’ o entrada = ‘s’) hacer
escribir(‘Ingrese nota: ’)
leer(x)
suma ← suma + x
n ← n + 1
escribir(‘Necesita entradas: (s/n) ?’)
leer(entrada)
fin_mientras
p ← (suma / n)
escribir(‘Items: ’, n, ‘Suma: ’, suma, ‘Promedio: ’, p)
fin
Algoritmo 5: Algoritmo que convierte Temperaturas Fahrenheit - Celsius.
Análisis. La conversión de Temperaturas se expresa mediante las siguientes expresiones:
ºF = (9/5) ºC + 32 // conversión de Celsius a Fahrenheit
y
ºC = 5/9 (ºF -32) // conversión de Fahrenheit a Celsius
Mg. Jorge Medi@NERO A. Pag. 3
Algoritmos y Estructura de Datos I
Pseudocódigo. Diseño del algoritmo.
Algoritmo convertir_temperaturas
var
entero: opcion //numero de seleccion
real : gradosF, gradosC //entrada de temperaturas
real : gFahrenheit, gCelsius //resultados de calculo
inicio
repetir
escribir(‘Conversion de Temperaturas’)
escribir(‘1.- Convertir ºF a ºC’)
escribir(‘2.- Convertir ºC a ºF’)
escribir(‘3.-Terminar’)
escribir(‘Seleccione opcion: ’)
leer(opcion)
según_sea (opcion) hacer
1: inicio
leer(gradosF)
gradosCelsius = (5/9)*( gradosF – 32)
escribir(‘La temperatura en ºC es: ’, gCelsius)
fin
2: inicio
leer(gradosC)
gradosFahrenheit = (9/5)* gradosC +32
escribir(‘La temperatura en ºF es: ’, gFahrenheit)
fin
fin_segun
hasta_que ( opcion = 3)
fin
Terminación de Bucles con un valor centinela.
Algoritmo 6: Calculo de la media geométrica (M.G.) de n valores.
Análisis
La Media geométrica, se define como un radical cuyo índice nos indica el numero de ítems y
el radicando el producto de los Ítems. Se calcula mediante la siguiente expresión:
n________________________
M.G. = √ X1 . X1 . X1 . X1 … Xn
Pseudocódigo. Diseño del algoritmo.
Algoritmo Calcula_promedio_geometrico
var
entero: item, n //entrada y contador
entero: producto //acumulador
real : mediaG
Mg. Jorge Medi@NERO A. Pag. 4
Algoritmos y Estructura de Datos I
inicio
n ← 0 //inicializar contador
producto ← 1 //inicializar acumulador en uno
escribir(‘Programa: M.G. (Digite -99 para finalizar)’)
escribir(‘Ingrese Item: ’)
leer(item) //entrada de datos a promediar y/o centinela
//validar entrada si es diferente a centinela -99
mientras (item <> -99) hacer
producto ← producto * item //acumular productos
n ← n + 1
leer(item)
fin_mientras
mediaG ← raizEnesima(producto, n)
escribir(‘Items: ’, n, ‘Producto: ’, producto, ‘P.G. = ’, mediaG)
fin
Terminación de Bucles con un valor contador (incremento/decremento).
Algoritmo 7: Sumar lista de números.
Análisis
Se necesita sumar calificaciones de los alumnos de una clase. La técnica a emplear incluye el uso de
contadores (cuantas iteraciones deben realizarse) y acumuladores (suma sucesiva de valores), los contadores
pueden incrementar o decrementar su valor, los acumuladores por lo general se inician en cero, y luego
almacenan sucesivos valores.
Pseudocódigo. Diseño del algoritmo.
Algoritmo suma_calificaciones
var
entero: n, cuenta
real: nota, suma
inicio
leer(n) //numero de calificaciones a suma
cuenta ← n //inicializar contador
suma ← 0 //inicializar acumulador
mientras( cuenta > 0 )hacer
leer(nota)
suma ← suma + nota //acumulador + variable
cuenta ← cuenta -1 //contador ± constante
fin-mientras
escribir(‘La suma de las ’, n, ‘calificaciones es: ’, suma)
fin
Mg. Jorge Medi@NERO A. Pag. 5
Algoritmos y Estructura de Datos I
Estructuras anidadas.
Algoritmo 8: Calcular el valor máximo de una serie de 25 números.
Análisis
Para resolver este problema, necesitamos un contador (cuenta de 1 a 25), para contabilizar los sucesivos
números a leer.
El algoritmo que identifica el valor máximo, será repetido o iterado 25 veces, considerando como primera
acción que el primer numero leído es el valor máximo, e inmediatamente comparado con el subsiguiente
ingresado. Para esto se realizara una primera asignación del primer número a la variable máximo.
leer(numero)
n = 1 //inicializar contador
maximo = numero //inicializar máximo
La siguiente acción del algoritmo será realizar comparaciones sucesivas:
leer un nuevo numero
compararlo con el valor máximo:
- si es inferior o igual, implica que el valor máximo es el antiguo
- si es superior, implica que el valor máximo es el recientemente leído, por lo que este se
convertirá en el nuevo máximo mediante una asignación.
- repetir las acciones anteriores ( n = n + 1 ), hasta que n = 25
Pseudocódigo. Diseño del algoritmo.
Algoritmo valor máximo
var
entero: n, numero, maximo
inicio
leer(numero)
n ← 1 //inicializar contador
maximo ← numero
repetir
n ← n + 1 //incrementar contador (iniciar cuenta)
leer(numero)
si numero > maximo entonces
maximo ← numero
fin-si
hasta_que (n = 25)
escribir(‘Numero mayor o maximo: ’, maximo)
fin
Mg. Jorge Medi@NERO A. Pag. 6
Algoritmos y Estructura de Datos I
Algoritmo 9:
Otras soluciones: Pseudocódigo sustituto del algoritmo 8, usando bucle por contador.
Nota: El algoritmo 4 procesa valores positivos o negativos. Si se desea comparar solo
números positivos, la variable maximo debe inicializarla en ‘0’ (cero).
Algoritmo Otro valor máximo
var
entero: n, numero, maximo
inicio
n ← 0
maximo ← 0 //comparar numeros superiores a cero (positivos)
desde( n ← 1 hasta 25 )hacer
leer(numero)
si( numero > maximo )entonces
maximo ← numero
fin_si
fin_desde
escribir(‘Numero mayor o maximo: ’, maximo)
fin
Mg. Jorge Medi@NERO A. Pag. 7