Está en la página 1de 7

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