Ejercicios "amistosos"
ALGORITMOS
Introducción,
Seudocódigo, Estructura Secuencial,
Estructura
Selectiva
y Estructura Iterativa.
____________________________________________________
Introducción
Formular y resolver problemas constituye una
actividad esencial de la vida del ser humano.
No se trata de almacenar en memoria problemas y sus correspondientes soluciones, sino
de desarrollar una capacidad para hacer frente con éxito a situaciones
nuevas o desconocidas en la vida del hombre. Ante situaciones nuevas, el
que no sabe buscar soluciones se sentirá confuso y angustiado y entonces
no buscará una estrategia, dará una primera solución para poner punto
final a su agonía. El que sabe buscar soluciones, selecciona la estrategia
que le parece más cercana a la requerida y hace una hábil adaptación que
se ajusta a la nueva demanda.
Los grandes problemas se pueden subdividir en problemas más simples para
solucionarlos, utilizando la filosofía de "dividir para conquistar".
Se parte del principio de que es más fácil solucionar varios problemas
simples (subproblemas) como parte de un todo que seguir una idea
de "todo o nada".
_______________________________________________________________
Desarrollar la capacidad de formular y resolver problemas nos prepara para
enfrentar situaciones desconocidas.
_______________________________________________________________
Se puede afirmar que todo problema consta de las siguientes partes:
Datos, Operaciones y Objetivo (solución)
Una metodología para análisis de problemas incluye las siguientes etapas:
1. Definición y análisis del problema
|
2. Diseño de la solución (Algoritmo)
|
3. Verificación de la solución
|
Especificación de un Problema
Partimos del hecho de que un programador no puede resolver un problema que
no entiende. Por esta razón, la primera etapa en todo proceso de
desarrollo de software consiste en tratar de entender el problema que
tiene el cliente, y expresar toda la información que él suministre, de
manera que cualquier otra persona del equipo de desarrollo pueda entender
sin dificultad lo que espera el cliente de la solución. Esta etapa se
denomina análisis y la salida de esta etapa la denominamos la
especificación del problema.
Esto se aplica también a cualquier disciplina, a otras áreas que comparten
problemáticas similares. Por ejemplo, considere el caso de un ingeniero
civil que se enfrenta al problema de construir una carretera. Lo primero
que él debe hacer es tratar de entender y especificar el problema que le
plantean. Para eso debe tratar de identificar al menos tres aspectos del
problema: <1> los requerimientos del usuario (punto de origen
y punto destino de la carretera, número de carriles que debe tener, tipo
de tráfico), <2> El mundo en el que debe resolverse el problema
(tipo de terreno, temperatura), y <3> las restricciones y
condiciones que plantea el cliente (presupuesto máximo, que los pendientes
no sobrepasen el 5%). Sería una pérdida de tiempo y de recursos para el
ingeniero civil, intentar construir la carretera si no
ha entendido y definido claramente los tres puntos antes mencionados. Y
más que tiempo y recursos, habrá perdido algo muy importante en una
profesión de servicio como es la ingeniería, que es la confianza del
cliente.
En general, todos los problemas se pueden dividir en estos tres aspectos.
En el caso de la programación de computadores, un requerimiento funcional
hace referencia a un servicio que el programa debe proveer al usuario. Si
usted va a escribir un programa para una empresa, no le es suficiente
entender la funcionalidad que éste debe tener, sino que debe entender
también algunas cosas de la estructura y
funcionamiento de la empresa. Si hay un requerimiento funcional de
calcular el salario de un empleado, la descripción del problema debe
incluir las normas de la empresa para calcular un salario.
_______________________________________________________________
En el campo de las Ciencias de la Computación,
la solución de problemas se describe mediante el diseño de
procedimientos llamados Algoritmos, los cuales posteriormente se
implementan como programas en el computador (utilizando lenguajes de
programación como C++, Java, PHP, Perl, Ruby, Delphi, Visual FoxPro...)
_______________________________________________________________
El algoritmo es un conjunto de
pasos o acciones que nos permiten alcanzar un resultado o resolver un
problema en términos de:
1. Las acciones a ejecutarse, y
2. El orden en el cual se deben ejecutar esas acciones.
La solución del problema a través de éste
conjunto de pasos o acciones ordenadas, se logra con un algoritmo, el cual
se divide
en tres secciones (bloques):
1. ENTRADA (datos de entrada)
|
2. PROCESO (operaciones)
|
3. SALIDA (resultados)
|
Los algoritmos se pueden clasificar en computacionales y no
computacionales.
Es importante aclarar que el computador es un medio y no es el fin en la
solución de problemas. En otras palabras, no es el computador el que
soluciona los problemas, somos nosotros quienes lo hacemos y de alguna
manera le contamos cómo es el asunto para que él, con su velocidad y
exactitud, trabaje con muchísimos datos.
En algoritmia, la Lógica para solución de problemas se puede
representar mediante las siguientes herramientas de programación:
<> Algoritmo
<> Diagrama de flujo (DFD)
<> Seudocódigo
Conceptos básicos de Programación
a) Identificadores
b) Declaración de Variables\Constantes
c) Tipos de Datos
- Numéricos
: Entero
: Real
- Alfanuméricos
: Caracter
: Cadena
- Lógicos o Booleanos
d) Operadores
- Aritméticos
- Relacionales
- Lógicos
e) Instrucción de Asignación
f) Instrucciones de Entrada\Salida
g) Estructuras de Control de Flujo (Secuencial, Selectiva, Iterativa).
Ejercicios
Escribir un algoritmo para cada uno de los siguientes casos:
1) Llamar a un amigo(a) desde un teléfono celular público
2) Determinar cuántas letras "e" hay en un texto dado
3) Calcular la edad promedio entre las edades de sus tres mejores
amiga(o)s
4) Determinar el número más pequeño de tres números diferentes
5) Usted va a comprar un artículo en la tienda del barrio; según
el costo del producto y la cantidad de dinero que usted paga, calcule el
cambio (o las 'devueltas') que el tendero debe entregarle (Asuma que el
pago es mayor al precio del artículo).
Ejemplo de CLASE y ALGORITMO
ANÁLISIS DEL PROBLEMA Nr. 5
Datos de entrada
cospro: Costo del producto
pago : Pago realizado por el cliente
Datos de salida
camb : Valor devuelto al cliente
________________________________________________________________________________
La siguiente es la forma de representar gráficamente una
Clase: Un rectángulo dividido en tres secciones.
Nombre de la Clase |
Datos o Atributos |
Operaciones o Métodos |
Compra_Tienda |
cospro pago
camb |
leer( ) calcular_camb( )
mostrar( ) |
________________________________________________________________________________
SOLUCIÓN ALGORÍTMICA
Algoritmo Compra_Tienda
INICIO
1. Crear el objeto Cambio
2. Leer cospro y pago
3. Hacer la operación (camb = pago - cospro)
4. Mostrar camb
FIN
____________________________________________________
Seudocódigo
El seudocódigo es un lenguaje artificial e informal para codificar los
algoritmos. Esta versión es la más parecida a un programa de computador. (El color azul corresponde a
todos los símbolos y palabras reservadas de nuestro lenguaje informal de
programación).
clase Compra_Tienda
{
privado:
cospro, pago, camb : real
publico:
Cambio( ) { cospro= pago=camb=0
}
leer( )
{ leer
(cospro, pago)
}
calcular_camb( ) { camb = pago - cospro
}
mostrar(
) { mostrar
(camb)
}
}
INICIO
1. Compra_Tienda Cambio
2. Cambio.leer( )
3. Cambio.calcular_camb( )
4. Cambio.mostrar( )
FIN
Descargar, analizar los
siguientes algoritmos y codificarlos con orientación a Objetos:
Area de un rectángulo
Area de un círculo
Velocidad de un carro
Después de presentar la
solución de problemas a través del algoritmo y su
correspondiente Diagrama de Flujo, ahora se modelará la solución
de un problema hasta escribir el programa en el lenguaje
denominado seudocódigo. * Un cliente compró una
camioneta en ColombiAutos. El vendedor le ofreció un
descuento del 3% y también calculó el porcentaje del IVA. Determinar e
imprimir el valor neto pagado por el cliente. Lo
primero, hacer un buen análisis del problema y especificarlo a través de
un MODELO DE DATOS:
Nombre del dato |
Identificador |
Tipo |
Var\Const |
Entra\Sale |
Restricciones |
Valor del vehículo |
vlr_veh |
R |
V |
E |
>0 |
Porcentaje del IVA |
por_iva |
E |
V |
E |
>0 |
Porcentaje del descto. |
por_des |
R |
C |
E |
= .03 |
Valor neto a pagar |
vlr_net |
R |
V |
S |
|
Segundo,
describir los pasos lógicos de la solución en un algoritmo:
Algoritmo Vehiculo
INICIO
Conocer el valor del vehículo
Conocer el porcentaje del IVA y del descuento
Calcular el iva (valor del vehículo x porcentaje del IVA)
Calcular el descuento (valor del vehículo x 0.03)
Calcular el valor neto a pagar (valor vehículo + iva - descuento)
Mostrar el valor neto a pagar
FIN
_________
INICIO
_________
↓
______________
Leer
vlr_veh, por_iva
______________
↓
___________________________________________
vlr_net = vlr_veh + (vlr_veh * por_iva - vlr_veh * 0.03)
___________________________________________
↓
______________
imprimir
vlr_net
______________
↓
_________
FIN
_________
A
continuación, una solución del problema en lenguaje SEUDOCÓDIGO.
Programa Venta_vehiculo
// Un primer programa escrito en seudocódigo
// Autor : Usted
// Fecha : 09/09/2006
Var
// declaración de variables
vlr_veh, vlr_net : Real
por_iva
: Entero
Const //
declaración de constantes
por_des = 0.03
INICIO
escribir("ColombiAutos Ltda.")
//ENTRADA
escribir("Valor del vehículo : $")
leer(vlr_veh)
escribir("Porcentaje del IVA ?")
leer(por_iva)
//PROCESO
vlr_net = vlr_veh
+ (vlr_veh
* (por_iva/100)
- vlr_veh * por_des)
//SALIDA
escribir("Valor pagado por el cliente
-> $", vlr_net)
FIN // fin del programa Diseñar
la clase y escribir el anterior seudocódigo con orientación a Objetos:
____________________________________________________
Estructura Secuencial
Como
lo sugiere su nombre, en una estructura secuencial las instrucciones se
ejecutan en el mismo orden en que están escritas. Una secuencia de
instrucciones son pasos sucesivos, uno seguido de otro. Descargar, analizar los
siguientes algoritmos y codificarlos con orientación a Objetos:
Costo de un vidrio
Costo total de balones
Ladrillos para una pared
- Escribir un Seudocódigo para solucionar c/u de los siguientes problemas simples de computación:
* Giovanni compró un terreno en Argentina. La extensión del terreno está
especificada en Acres. Leer la extensión del campo en Acres y calcular e
imprimir su extensión en Hectáreas. (1 Acre = 4047 metros cuadrados. 1
Hectárea = 10000 metros cuadrados).
Algoritmo Terreno
// Otro ejemplo en lenguaje de seudocódigo
// Autor : Otra vez Usted
// Fecha : 14/10/2003
Var // declaración de variables
ext_acres, ext_hecta : Real
Const // declaración de constantes
Acre1 = 4047
Hect1 = 10000
Inicio
escribir ("Digite la extensión del terreno en Acres : ")
leer(ext_acres) // entrada de datos
ext_hecta = (ext_acres * Acre1) / Hect1 // Proceso
escribir ("Extensión del terreno en hectáreas = ", ext_hecta)
// salida de datos
Fin
// A continuación, la solución en seudocódigo orientado a objetos:
clase Terreno
{
privado:
ext_acres, ext_hecta : real
publico:
Terreno( ) { ext_acres= ext_hecta=0
}
leer( )
{ mostrar
("Digite la extensión del terreno en Acres : ")
leer (ext_acres)
}
calcular_ext_hecta( ) { ext_hecta = (ext_acres
* 4047) / 10000
}
mostrar(
) { mostrar
("Extensión del terreno en hectáreas = ", ext_hecta)
}
}
INICIO
1. Terreno Lote
2. Lote.leer( )
3. Lote.calcular_ext_hecta( )
4. Lote.mostrar( )
FIN
_________________________________________________
-
Calcular e imprimir el área de un
trapecio.
-
Solucionar el problema que tienen en una bomba de gasolina 'TERPEL'. Los surtidores de la gasolinera registran el combustible en galones, pero el precio de la gasolina está fijado en litros. Calcular e imprimir el valor que se le debe cobrar al cliente.
(1 galón tiene 3.785 litros).
-
Las tarifas de un transporte
intermunicipal se incrementaron en un 10%. Diseñar un seudocódigo
para calcular e imprimir el valor actual de un pasaje a
Chaparral-Tolima.
-
Si un poste de alumbrado público, de 14
m de altura, proyecta una sombra de 7 m, ¿cuál será la sombra
proyectada por una persona?
-
En N días 5 programadores
desarrollan una aplicación. ¿En cuántos días podrían desarrollar
el mismo software 8 programadores?
-
Un buque de la Armada, de N
marineros, tiene víveres para 2 meses. Si queremos que los víveres
duren 10 días más, ¿cuántos marineros habría que dejar en la base
naval?
-
Calcular e imprimir el número de segundos que hay en un determinado número de dias.
-
Leer por teclado el radio y la altura de un cilindro y calcular e imprimir el área y su volumen.
-
Desde un globo se deja caer un objeto.
Diseñe un seudocódigo para calcular e imprimir su distancia y
velocidad al cabo de un tiempo t.
-
Leer la cédula, nombre, sexo, horas trabajadas y valor de la hora de un trabajador y deducir e imprimir su salario neto aplicando una bonificación del
5% y un aporte del 7% a la EPS.
-
Convertir una cantidad de pulgadas a centímetros. Imprimir los dos valores.
-
Leer por teclado tres números enteros y calcular e imprimir: a) Su producto, b) Resta, c) División cociente del primero por el segundo, d) División residuo del primero por el tercero, e) raíz cuadrada del segundo y f) la media aritmética de los tres números.
-
Leer la longitud de los catetos de un triángulo rectángulo y determinar e imprimir su hipotenusa.
-
Don David es el dueño de una Casa de Cambio y necesita un programa que permita leer por teclado una cantidad expresada en dólares y convertir e imprimir esa cantidad en pesos
colombianos.
-
En una copa de ron hay 8 onzas. Convertir una cantidad de onzas en copas e imprimir los dos valores.
-
Un comerciante compra CD's a N
pe$os. ¿A qué precio debe venderlos para ganar el 20% del costo?
-
Leer por teclado las tres notas de un alumno de
Lógica Computacional y calcular e imprimir su definitiva correspondiente al primer 60%. Los porcentajes de las notas son 15, 20 y 25, respectivamente.
-
Laura Lucía debe pagar un interés del
4% mensual por los N millones de pesos que le prestó la
"Corporación SINFONDOS". Escriba un seudocódigo para
determinar e imprimir el valor mensual de interés que ella debe
pagar.
____________________________________________________
Estructura Selectiva
Las estructuras lógicas selectivas se encuentran
en la solución algorítmica de casi todo tipo de problemas. Las utilizamos
cuando en el desarrollo de la solución de un problema debemos tomar
una decisión, para establecer un proceso o señalar un camino
alternativo a seguir.
En un diagrama de flujo, la toma de decisión se expresa con un rombo y se
basa en la evaluación de una o más condiciones que nos señalarán como
alternativa o consecuencia, la rama o el camino a seguir.
Hay situaciones en las que la toma de decisiones se realiza en forma de
cascada. Es decir, se toma una decisión, se marca la rama correspondiente
a seguir, se vuelve a tomar otra decisión y así sucesivamente. Para
solucionar el problema debemos aplicar prácticamente un árbol de decisión.
Las estructuras algorítmicas selectivas que se utilizan para la toma de
decisiones lógicas se pueden clasificar así:
- Estructura selectiva simple (SI
ENTONCES)
- Estructura selectiva doble
(SI ENTONCES / SINO)
- Estructura selectiva múltiple (SI
MÚLTIPLE: SI / SINO / SI...)
- Estructura selectiva múltiple abreviada (EN CASO
DE)
Todas estas estructuras se pueden combinar.
Descargar, analizar los siguientes algoritmos y
codificarlos con orientación a Objetos:
Número mayor
Lanzamiento de moneda
Conversión de días
- Codificar los siguientes algoritmos
computacionales aplicando estructuras SELECTIVAS o CONDICIONALES:
Escriba un programa (seudocódigo) que lea la
edad de una persona y determine si puede votar o no en las próximas
elecciones.
Algoritmo Votacion
Var edad : Entero
Inicio
escribir("Por favor, digite su
edad => ")
leer(edad)
si
(edad
>= 18)
// condicional
escribir("Puedes votar en las próximas elecciones...")
sino
escribir("Eres menor de edad... y no puedes votar!!!")
fsi
// fin del condicional
escribir("Hasta pronto!")
Fin
// A continuación, la solución en seudocódigo orientado a objetos:
clase Edad_voto
{
privado:
edad : entero
publico:
Edad_voto( ) { edad=0
}
leer( )
{ mostrar
("Por favor, digite su edad : ")
leer (edad)
}
mostrar(
) {
si
(edad
>= 18)
mostrar("Puedes votar en las próximas elecciones...")
sino
mostrar("Eres menor de edad... y no puedes votar!!!")
fsi
}
INICIO
1. Edad_voto Edavot
2. Edavot.leer( )
3. Edavot.mostrar( )
FIN
_________________________________________________
-
Calcular el valor del peaje a pagar por
un vehículo en la vía Ibagué - Alvarado. Los automóviles pagan un
valor de $3500; los camiones pagan $5000; los buses pagan $4000 más un
porcentaje del 1% por cada pasajero. El tiquete de
cobro del peaje a generar debe contener: Nombre del tipo de vehículo, Nro. de pasajeros y valor del peaje.
-
Dados dos números enteros, determinar si
un número es divisor del otro.
-
Un taxista trabaja en la empresa
"PengüiTAXI" en la cual le asignan 3 rutas: Ruta A
con un valor de $3000, Ruta B con valor $5000 y Ruta C
con valor $7000. Además, debe cobrar un recargo de $500 si
está trabajando entre las 20:00 y las 05:00. Si es festivo, hay
un recargo de $100. ¿Cuánto debe pagar un usuario que tome el
servicio?
-
Determinar e imprimir si un número
entero X es positivo, negativo o cero.
-
Calcular las raíces reales, de ser
posible, de una ecuación de segundo grado: (ax² + bx + c = 0)
-
Determinar si un año es bisiesto. Un año
es bisiesto si es múltiplo de 4 (por ejemplo, 1984). Los años múltiplos
de 100 no son bisiestos, salvo si ellos son también múltiplos de 400
(2000 es bisiesto, 1800 no lo es).
-
Determinar e imprimir si un número
entero X es par, impar o nulo.
-
Examinar el valor de una variable
real llamada HORA y visualizar distintos mensajes a diferentes
horas del día: a) "Buenos dias", b) "Buenas
tardes", c) "Buenas noches".
-
Examinar el valor de una variable
real llamada TEMP y visualizar uno de los siguientes mensajes:
a) "Hielo", si el valor de TEMP es menor que 0, b)
"Agua", si el valor de TEMP se encuentra entre 0 y 100, c)
"Vapor", si el valor de TEMP es mayor que 100.
-
Hallar la solución de una ecuación de
la forma: ax + b = 0.
-
Calcular e imprimir el área de un círculo,
rectángulo o triángulo. Utilice una escalera si-sino-si.
-
Leer los tres lados de una figura y
determinar si es un triángulo. En caso afirmativo, calcular e
imprimir el área según sus lados.
-
Leer por teclado tres números diferentes
y determinar cuál es el número mayor.
-
El costo de las llamadas internacionales
depende de la zona geográfica en la que se encuentre el país
destino, y del número de minutos hablados. En la siguiente tabla se
presenta el costo por minuto en cada zona, a la cual se le ha asociado
un código o clave.
CLAVE |
ZONA |
PRECIO |
12 |
América del Norte |
2 |
14 |
América Central |
2.2 |
18 |
América del Sur |
4.6 |
19 |
Europa |
3.7 |
23 |
Asia |
6 |
25 |
Africa |
6 |
27 |
Oceanía |
5 |
Escriba un seudocódigo para calcular e imprimir el costo total
de una llamada.
____________________________________________________
Estructura Iterativa
En los algoritmos es muy común encontrar
operaciones que se deben ejecutar un número repetido de veces. Aunque
las instrucciones son las mismas, los datos sobre los que se opera
varían. El conjunto de instrucciones que se ejecuta reiteradamente se
llama ciclo o bucle.
Todo ciclo debe terminar de ejecutarse luego de un número finito
de veces, por lo que en cada iteración se requiere evaluar las
condiciones necesarias para decidir si debe seguir ejecutándose o debe
detenerse. En todo ciclo, siempre debe existir una condición de parada o
fin de ciclo.
Por lo general, los lenguajes de programación contienen las siguientes
estructuras algorítmicas repetitivas:
- Estructura repetitiva mientras
(while)
- Estructura repetitiva hacer mientras (do
while)
- Estructura repetitiva para
(for)
Todas estas estructuras también se pueden combinar.
Descargar, analizar los siguientes algoritmos y
codificarlos con orientación a Objetos:
Alumnos admitidos (ciclo Mientras)
Alumnos admitidos (ciclo Para)
Suma de números positivos
Suma de edades
Suma de sueldos
Compra de productos
Cuántas mujeres y hombres
- Codificar los siguientes problemas de computación
en Lenguaje Seudocódigo, utilizando estructuras ITERATIVAS o REPETITIVAS:
Escriba un programa (seudocódigo) para leer la
estatura de los N jugadores del Deportes Tolima y determinar e imprimir
cuál es la estatura promedio del equipo.
Algoritmo Promedio
Var
estat, sume, prome :
Real
n,
conte
: Entero
Inicio
sume = 0
escribir("¿Cuántos jugadores tiene el equipo? => ")
leer(n)
escribir("Digite la
estatura de los ", n, " futbolistas: ")
conte = 1
mientras
(conte < =
n) hacer
// ciclo
leer(estat)
sume = sume + estat
conte = conte + 1
fmientras // fin del
ciclo
prome = sume / n
escribir("La
estatura promedio del equipo es: ", prome)
Fin
_________________________________________________
-
Calcular e imprimir los valores que toma
la ecuación Y = X² + 4X + 3 cuando X va de 1 a 7.
-
Leer por teclado N números enteros y
calcular e imprimir la media de los números pares y la media de los
impares. Utilizar un ciclo Mientras.
-
Leer el valor de N pensiones. Si el valor
de la pensión es superior a 4 salarios mínimos, se debe calcular el
IVA correspondiente. Determinar y visualizar el valor total del
impuesto a las pensiones.
-
Leer por teclado 27 números enteros y
determinar e imprimir cuántos números son primos.
-
Construir un ciclo indeterminado para
calcular e imprimir el tiempo de conducción dada la distancia y la
velocidad media.
-
Generar e imprimir las tablas de
multiplicar.
-
Leer por teclado 24 números reales que
representan las temperaturas tomadas en Ibagué en un período de 24
horas. Imprimir la temperatura promedio y las temperaturas más alta y
más baja del día.
-
Adriana Marcela es la
propietaria del almacén de artículos deportivos "SportPengüin" y
necesita un programa para determinar cuántos balones de fútbol-5 y
cuántos uniformes y guayos para niños (calzado ≤ 30) se
vendieron al final del mes. Implementar un ciclo indeterminado e
imprimir también el valor general de venta$.
-
La empresa "TOLModels"
desea seleccionar para un evento local a un grupo de personas que
cumplan los siguientes requisitos: Mujeres con edad
igual o superior a 17 años e inferior a 20 años, con un peso menor a
55 kg y estatura entre 1.70 y 1.75 m. Hombres con
edad entre los 18 y 21 años y con estatura superior a 1.75 m. a)
Cuántas mujeres fueron seleccionadas, b)
Porcentaje de hombres seleccionados, c)
Estatura promedio de todos los aspirantes, y d)
Peso de la mujer más joven seleccionada.
-
Una aplicación interesante de las
computadoras, es dibujar gráficos de barra (a veces llamados
"histogramas"). Escriba un programa que lea 10 números
(cada uno de ellos entre 1 y 30). Para cada uno de los números leídos,
su programa deberá imprimir una línea, conteniendo dicho número en
asteriscos adyacentes. Por ejemplo, si se lee por teclado el número 8, el programa deberá imprimir
********.
 |