SlideShare una empresa de Scribd logo
1 de 43
Descargar para leer sin conexión
1
Algoritmos y Solución de Problemas
Autor: Ing. Nelson Prado.
Índice
UNIDAD 1: .......................................................... 1
1.1. INTRODUCCIÓN................................. 1
1.2. ALGORITMOS Y SOLUCIÓN DE
PROBLEMAS................................................... 2
1.3. METODOLOGÍA PARA RESOLVER
PROBLEMAS................................................... 2
1.4. ETAPAS DEL CICLO DE
PROGRAMACIÓN DE COMPUTADORES.... 3
1.5. ALGORITMOS..................................... 4
1.6. REPRESENTAR ALGORITMOS......... 5
UNIDAD 2: .......................................................... 6
2.1. VARIABLES, CONSTANTES E
IDENTIFICADORES. ...................................... 6
2.2. DATOS Y TIPOS DE DATOS.............. 6
2.3. VARIABLES ........................................ 7
2.4. OPERACIONES.................................... 7
2.5. ASIGNAR VALORES A LAS
VARIABLES.................................................... 9
2.6. TIPOS DE VARIABLES MÁS
UTILIZADOS................................................... 9
UNIDAD 3: ........................................................ 11
3.1. DIAGRAMAS DE FLUJO PARA
REPRESENTAR ALGORITMOS .................. 11
3.2. PSEUDOCÓDIGO PARA
REPRESENTAR ALGORITMOS .................. 12
UNIDAD 4: ........................................................ 13
4.1. PROCESOS......................................... 13
4.2. ESTRUCTURA SECUENCIAL.......... 13
4.3. ESTRUCTURA CONDICIONAL ....... 14
4.4. ESTRUCTURA ITERATIVA
(REPETICIÓN)............................................... 17
Estructura Para (Desde - Hasta)................... 19
Ejercicios .................................................... 20
Estructura Mientras ..................................... 20
Estructura Repetir........................................ 21
UNIDAD 5: ........................................................ 22
5.1. ARREGLOS........................................ 22
5.2. CARGAR UN ARREGLO .................. 22
5.3. IMPRIMIR UN ARREGLO ................ 23
5.4. PROCESANDO UN ARREGLO......... 23
5.5. ARREGLOS BIDIMENSIONALES.... 24
UNIDAD 6: ........................................................ 27
6.1. FUNCIONES Y PROCEDIMIENTOS.27
6.2. FUNCIONES ...................................... 27
6.3. ÁMBITO DE LAS VARIABLES........ 30
6.4. PROCEDIMIENTOS........................... 30
UNIDAD 1:
1.1. INTRODUCCIÓN.
Los matemáticos hindúes, árabes y europeos fueron los
primeros que desarrollaron técnicas de cálculo escrito.
El matemático árabe Al'Khwarizmi , alrededor del año
830 DC, escribe un libro de Aritmética, traducido al latín
como Algoritmi de numero Indorum, donde introduce el
sistema numérico indio (sólo conocido por los árabes
unos 50 años antes) y los métodos para calcular con él.
De esta versión latina proviene la palabra Algoritmo.
Por algoritmo se entiende "una lista de instrucciones
donde se especifica una sucesión de operaciones
necesarias para resolver cualquier problema de un tipo
dado". Los algoritmos son modos de resolución de
problemas, cabe aclarar que no sólo son aplicables a la
actividad intelectual, sino también a todo tipo de
problemas relacionados con actividades cotidianas. El
algoritmo es de carácter general y puede aplicarse a
cualquier operación matemática o a cualquier problema.
La formulación de algoritmos fue uno de los más
grandes adelantos dentro de la ciencia matemática ya
que a partir de ello se pudieron resolver infinidad de
problemas.
Landa, matemático ruso, quien ha investigado mucho al
respecto nos dice que "la ciencia matemática, en el
proceso de su desarrollo, ha tratado de encontrar los
algoritmos óptimos más generales para resolver los
problemas que permitan la solución uniforme de clases
más amplias de problemas de una manera, es decir,
empleando siempre el mismo sistema de operación. Los
algoritmos, para llegar a ser tales deben reunir ciertas
características. Una de ellas es que los pasos que deben
seguirse deben estar estrictamente descritos, cada acción
debe ser precisa, y debe ser general, es decir, que pueda
ser aplicable a todos los elementos de una misma clase.
Por ejemplo en el caso del algoritmo de una
multiplicación, no sólo se realizará el procedimiento de
resolución parte para la multiplicación de 4 x 4, sino que
el mismo algoritmo podrá aplicarse a cualquier
multiplicación. La última de estas características será la
resolución, en otras palabras, esto quiere decir que el
algoritmo deberá llegar a un resultado específico.
Es de gran importancia aclarar que los algoritmos en si
mismos no resuelven problemas, se resuelven gracias al
producto de ejercer las operaciones dictadas por el
algoritmo, se puede decir que es por el planteamiento
mismo. La realización de algoritmos es natural e innata
2
en el hombre y en la mayoría de los casos es de tipo
inconsciente, en otras palabras, las personas suelen
resolver problemas sin tener que recurrir a la aplicación
de cierto algoritmo. No obstante al encontrarse con
problemas de un grado de dificultad mayor es necesario
detenerse a analizar y pensar en la solución de éste.
1.2. ALGORITMOS Y SOLUCIÓN DE
PROBLEMAS
La razón principal por las que personas aprenden
lenguajes y técnicas de programación es para utilizar la
computadora como una herramienta para resolver
problemas.
La resolución de problemas exige al menos los
siguientes pasos:
• Definición y análisis del problema.
• Diseño del algoritmo.
• Transformación del algoritmo en un programa.
• Ejecución y validación del programa.
Los primeros dos pasos definen lo que es un sistema de
procesamiento de información.
Un sistema que transforma datos brutos en información
organizada, significativa y útil.
Para poder entender lo que es un sistema de
procesamiento debemos diferenciar las palabras datos e
información:
• Datos se refiere a la representación de algún hecho,
concepto o entidad real (por ejemplo palabras
escritas, habladas, números y dibujos).
• Información implícita datos procesados y
organizados.
Figura. 1.1 Sistema de Procesamiento de Información.
Los componentes de un sistema de proceso de
información son: entrada, salida y procesador.
Ejemplo de sistemas: Un termostato que controla la
temperatura. La entrada es la temperatura media. La
salida es una señal que controla la caldera del aire
acondicionado.
1.3. METODOLOGÍA PARA RESOLVER
PROBLEMAS
Figura 1.2: Pasos para resolver problemas
matemáticos.
Todos los días nos enfrentamos a problemas. Desde
nuestro punto de vista un problema es una oportunidad.
En la mayoría de los textos se recomiendan los
siguientes procedimientos para solucionar problemas:
1. COMPRENDER EL PROBLEMA.
• Leer el problema varias veces.
• ¿Qué datos me dan en el enunciado del problema?
• ¿Cuál es la pregunta que me da el problema?
• ¿Qué debo lograr?
• ¿Cuál es la incógnita del problema?
• Organizar la información.
• Agrupar los datos en categorías.
• Trazar una figura o diagrama.
2. HACER EL PLAN.
• Escoger y decidir las operaciones a efectuar.
• Eliminar los datos inútiles.
• Descomponer el problema en otros más pequeños.
3. EJECUTAR EL PLAN (Resolver).
• Ejecutar en detalle cada operación.
• Simplificar antes de calcular.
• Realizar un dibujo o diagrama.
4. ANALIZAR LA SOLUCIÓN (Revisar).
• Dar una respuesta completa.
• Hallar el mismo resultado de otra manera.
• Verificar por apreciación que la respuesta es
adecuada.
3
Ejemplo 1.1
En un juego, el ganador obtiene una ficha roja; el
segundo, una ficha azul; y el tercero, una amarilla. Al
final de varias rondas, el puntaje se calcula de la
siguiente manera: Al triple de la cantidad de fichas rojas
se adicionan las fichas azules y se descuenta el doble de
las fichas amarillas. Si Andrés llegó 3 veces en primer
lugar, 4 veces de último y 6 veces de intermedio, ¿Qué
puntaje obtuvo?
Solución:
COMPRENDE
• Leer detenidamente el problema.
• ¿Cuántos colores de fichas se reparten?
• ¿Cuántas fichas rojas, azules y amarillas obtuvo
Andrés?
• ¿Qué pregunta el problema?
PLANEA
• Para hallar el puntaje que obtiene Andrés por sus
llegadas de primero, calcular el triple de la
cantidad de fichas rojas.
• Para hallar el puntaje por sus llegadas en segundo
lugar, contar la cantidad de fichas azules.
• Para hallar el puntaje que pierde por sus llegadas
en último lugar, calcular el doble de la cantidad de
fichas amarillas.
• Para hallar el puntaje total, calcular la suma de los
puntajes por las fichas rojas y azules, restarle los
puntos de las fichas amarillas.
RESUELVE
• Por tres fichas rojas: 3 x 3 = 9 puntos.
• Por seis fichas azules: 6 = 6 puntos.
• Por cuatro fichas amarillas: 4 x 2 = 8 puntos.
• Para obtener el puntaje final de Andrés, sumar los
puntos obtenidos con las fichas rojas y azules (9 +
6 = 15 puntos) y de este resultado restar los puntos
representados por las fichas amarillas (15 – 8 = 7
puntos).
REVISA
• El puntaje que obtuvo Andrés es 7 puntos.
• Verificar las operaciones y comparar los cálculos
con la solución estimada.
Ejercicios
Debes tener en cuenta (y anotar) las actividades que
realizas para resolver estos problemas y clasificarlas en
cada una de las cuatro etapas vistas: comprender,
planear, resolver y revisar.
1.1.Se tienen dos cubetas de 5 y 4 litros
respectivamente. Las mismas no están graduadas
con medidas. Sí se tiene disponible toda el agua
necesaria. ¿Cómo lograría poner dos litros de agua
en una de las dos?
1.2.En un curso de un colegio, la materia de educación
física se divide en dos grupos de estudiantes:
Natación, con 136 y Fútbol, con 204. Si hay 25
estudiantes que estudian Natación y Fútbol, ¿cuántos
estudiantes tiene el curso? Para resolver este
problema, debes tener conocimientos sobre
conjuntos (representación, clasificación e
intersección). Es buena idea que construyas una
tabla para organizar la información y un diagrama
para representar los datos.
1.3.Orlando compró 15 metros de tela para mandar a
fabricar una cortina, a $26 el metro. Para colgarla
necesita 28 aros de madera cuyo valor es de $1 cada
uno. El riel y demás accesorios cuestan $30. Si la
modista cobra $5 por cada metro de tela
confeccionado y la instalación vale $15 ¿Cuánto es
el costo total de la cortina instalada? Debes tener
conocimientos sobre sumas y multiplicaciones.
1.4.El “peso neto” indicado en la envoltura de un jabón
de baño es de 140 gramos y el “peso neto” indicado
en otro jabón es de 80 gramos. El primero vale $0.90
y el segundo $0.65. ¿Cuál de los dos es más
costoso? Debes tener conocimientos sobre sistemas
de medidas (peso) y divisiones.
1.4. ETAPAS DEL CICLO DE
PROGRAMACIÓN DE COMPUTADORES
Muchos expertos en programación afirman que para
elaborar en un computador procedimientos que realicen
determinadas tareas, se deben seguir cuatro fases o
etapas.
Estas fases concuerdan con los procedimientos para
solucionar problemas, vistos anteriormente:
1. Analizar el problema (Entender el problema)
2. Diseñar un algoritmo (Trazar un plan)
3. Traducir el algoritmo a un lenguaje de programación
(Ejecutar el plan)
4. Depurar el programa (Revisar)
Como puedes apreciar, hay una semejanza entre los
métodos utilizados para solucionar problemas y las
cuatro fases para solucionar problemas con ayuda del
computador en otras áreas del conocimiento.
4
1.5. ALGORITMOS
En la naturaleza hay muchos procesos que puedes
considerar como Algoritmos ya que tienen
procedimientos y reglas. Incluso, muchas veces no
somos conscientes de ellos.
Por ejemplo, el proceso digestivo es un concepto de
algoritmo con el que convivimos a diario sin que haga
falta una definición precisa de este proceso. El hecho de
que conozcas cómo funciona el sistema digestivo, no
implica que los alimentos que consumas te alimenten
más o menos.
La familiaridad de lo que sucede día a día nos impide
ver muchos algoritmos que pasan a nuestro alrededor.
Procesos, rutinas o biorritmos naturales como la
gestación, las estaciones, la circulación sanguínea, los
ciclos cósmicos, etc., son algoritmos naturales que
generalmente pasan desapercibidos.
Ejemplo 1.2
Un procedimiento que realizamos varias veces al día
consiste en lavarnos los dientes. Veamos la forma de
expresar este procedimiento como un Algoritmo:
1. Tomar la crema dental.
2. Destapar la crema dental.
3. Tomar el cepillo de dientes.
4. Aplicar crema dental al cepillo.
5. Tapar la crema dental.
6. Abrir la llave del lavamanos.
7. Remojar el cepillo con la crema dental.
8. Cerrar la llave del lavamanos.
9. Frotar los dientes con el cepillo.
10. Abrir la llave del lavamanos.
11. Enjuagarse la boca.
12. Enjuagar el cepillo.
13. Cerrar la llave del lavamanos.
14. Secarse la cara y las manos con una toalla.
Ejemplo 1.3
Veamos que algo tan común como los pasos para
cambiar una bombilla (foco) se pueden expresar en
forma de Algoritmo:
1. Ubicar una escalera o un banco debajo de la
bombilla fundida.
2. Tomar una bombilla nueva.
3. Subir por la escalera o al banco.
4. Girar la bombilla fundida hacia la izquierda hasta
soltarla.
5. Enroscar la bombilla nueva hacia la derecha en el
plafón hasta apretarla.
6. Bajar de la escalera o del banco.
7. Fin.
Ejercicio
1. Discutir en parejas el ejemplo de la bombilla y
proponer algunas mejoras. Luego, un voluntario
debe pasar al tablero y escribir un Algoritmo con
participación de toda la clase.
Los Algoritmos permiten describir claramente una serie
de instrucciones que debe realizar el computador para
lograr un resultado previsible. Vale la pena recordar que
un procedimiento de computador consiste de una serie
de instrucciones muy precisas y escritas en un lenguaje
de programación que el computador entienda.
En resumen, un Algoritmo es una serie ordenada de
instrucciones, pasos o procesos que llevan a la solución
de un determinado problema. Los hay tan sencillos y
cotidianos como seguir la receta del médico, abrir una
puerta, lavarse las manos, etc.; hasta los que conducen a
la solución de problemas muy complejos.
El concepto de algoritmo, aunque similar y obviamente
relacionado, no debe confundirse con el concepto de
programa. Mientras el primero es la especificación de un
conjunto de pasos (operaciones, instrucciones,
órdenes,...) orientados a la resolución de un problema, el
segundo es ese conjunto de operaciones especificadas en
un determinado lenguaje de programación y para un
computador concreto, susceptible de ser ejecutado (o
compilado o interpretado). Un algoritmo, estrictamente
hablando, no puede ejecutarse hasta que se implementa,
ya sea en un lenguaje de programación, en un circuito
eléctrico, en un aparato mecánico, usando papel y lápiz,
o en algún otro modelo de computación.
Las características fundamentales de un algoritmo son:
• Debe ser preciso e indicar el orden de realización
de cada paso.
• Debe estar definido. Si se sigue el algoritmo dos
veces, se debe obtener el mismo resultado cada vez.
• Debe ser finito. Si se sigue un algoritmo, se debe
terminar en algún momento.
Cuando el procesador es una computadora, el algoritmo
se expresa por medio de un programa. Cada paso esta
expresado por medio de una instrucción.
5
Ejemplo 1.4
Consideremos algo más complejo como el algoritmo de
Euclides para hallar el Máximo Común Divisor (MCD)
de dos números enteros positivos dados. Obsérvese que
no se especifica cuáles son los dos números, pero si se
establece claramente una restricción: deben ser enteros y
positivos.
ALGORITMO
1. Paso 1: Inicio.
2. Paso 2: Leer los dos números (“a” y “b”). Avanzar
al paso 3.
3. Paso 3: Comparar “a” y “b” para determinar cuál es
mayor. Avanzar al paso 4.
4. Paso 4: Si “a” y “b” son iguales, entonces ambos son
el resultado esperado y termina el algoritmo. En
caso contrario, avanzar al paso 5.
5. Paso 5: Si “a” es menor que “b”, se deben
intercambiar sus valores. Avanzar al paso 6; si “a”
no es menor que “b”, avanzar al paso 6.
6. Paso 6: realizar la operación “a” menos “b”, asignar
el valor de “b” a “a” y asignar el valor de la resta a
“b”. Ir al paso 3.
Ejercicio
A diferencia de los seres humanos que realizan
actividades sin detenerse a pensar en los pasos que
deben seguir, los computadores son muy ordenados y
necesitan que quien los programa les especifique cada
uno de los pasos que debe realizar y el orden lógico de
ejecución.
Numerar en orden lógico los pasos siguientes (para
pescar):
___ El pez se traga el anzuelo.
___ Enrollar el sedal.
___ Tirar el sedal al agua.
___ Llevar el pescado a casa.
___ Quitar el Anzuelo de la boca del pescado.
___ Poner carnada al anzuelo.
___ Sacar el pescado del agua.
1.6. REPRESENTAR ALGORITMOS
Los Algoritmos se puede expresar de muchas maneras,
pero en este curso se tratarán solo dos formas:
Pseudocódigo y Diagrama de Flujo.
En Pseudocódigo la secuencia de instrucciones se
representa por medio de palabras en forma de frases o
proposiciones, mientras que en un Diagrama de Flujo
se representa por medio de gráficos.
Ejemplo 1.5
Diseñar un algoritmo (pseudocódigo) para hallar el área
de un triángulo rectángulo cuya Base mide 3 cm, la
Altura 4 cm y la Hipotenusa 5 cm.
Solución:
ANÁLISIS DEL PROBLEMA
Formular el problema: Ya se encuentra claramente
planteado.
Resultados esperados: El área de un triángulo
rectángulo.
Datos disponibles: Base, Altura, Hipotenusa, tipo de
triángulo. La incógnita es el área y todos los valores son
constantes. El valor de la hipotenusa se puede omitir.
Debes preguntarte si tus conocimientos actuales de
matemáticas te permiten resolver este problema; de no
ser así, debes plantear una estrategia para obtener los
conocimientos requeridos.
Determinar las restricciones: Utilizar las medidas
dadas.
Procesos necesarios: Guardar en dos variables (BASE y
ALTURA) los valores de Base y Altura; Guardar en una
constante (DIV) el divisor 2; aplicar la fórmula
BASE*ALTURA/DIV y guardar el resultado en la
variable AREA; comunicar el resultado (AREA).
ALGORITMO EN PSEUDOCÓDIGO
Paso 1: Inicio
Paso 2: Asignar el número 2 a la constante "div"
Paso 3: Asignar el número 3 a la constante “base”
Paso 4: Asignar el número 4 a la constante “altura”
Paso 5: Guardar en la variable "área" el resultado de
base*altura/div
Paso 6: Imprimir el valor de la variable "área"
Paso 7: Final
Ejercicios
Elabora un algoritmo para cada uno de los siguientes
problemas:
1.5.Escribir un algoritmo para la preparación de un
ceviche de camaron que conste de 5 a 10 acciones
principales.
1.6.¿Qué requisitos debe cumplir un algoritmo bien
elaborado?
1.7.Los ingredientes para 4 personas del “pastel de
manzana danés” son los indicados en el cuadro
adjunto. Realizar un algoritmo que calcule los
ingredientes para un número variable de personas
que se lee por teclado.
6
1.8.Desarrollar un algoritmo para cambiar un neumático
desinflado. Supóngase que se dispone de una rueda
de repuesto y de gato.
1.9.Hallar el perímetro de un cuadrado cuyo lado mide 5
cm.
1.10. Hallar el perímetro de un círculo cuyo radio
mide 2 cm.
1.11. Hallar el área de un cuadrado cuyo lado mide 5
cm.
1.12. Hallar uno de los lados de un rectángulo cuya
área es de 15 cm2 y uno de sus lados mide 3 cm.
1.13. Hallar el área y el perímetro de un círculo cuyo
radio mide 2 cm.
1.14. Hallar el área de un pentágono regular de 6 cm
de lado y con 4 cm de apotema.
UNIDAD 2:
2.1. VARIABLES, CONSTANTES E
IDENTIFICADORES.
En programación, las Variables son espacios de trabajo
reservados para guardar datos (valores). El valor de una
Variable puede cambiar en algún paso del Algoritmo o
permanecer invariable; por lo tanto, el valor que
contiene una variable es el del último dato asignado a
esta.
Ejemplo 2.1
En el siguiente diagrama de flujo, "AREA" es un
ejemplo de Variable; en el paso 5 se guardó en ella el
resultado de multiplicar "BASE" por "ALTURA" y en el
paso 6 se utilizó nuevamente para guardar el valor de
dividir su propio contenido ("AREA") entre la Constante
"DIV".
Figura 2.1: Algoritmo para calcular el área de
cualquier triángulo rectángulo.
- Constantes: Tienen un valor fijo que se le da cuando
se define la constante y que ya no puede ser
modificado durante la ejecución.
- Variables: El valor puede cambiar durante la
ejecución del algoritmo, pero nunca varia su nombre
y su tipo.
2.2. DATOS Y TIPOS DE DATOS
Las cosas se definen en la computadora mediante datos,
los algoritmos que vamos a diseñar van operar sobre
esos datos. A nivel de la máquina los datos se
representan como una serie de bits (dígito 1 ó 0). Los
tipos de datos que vamos a manejar a lo largo del curso
son: numéricos y carácter (también llamados
alfanuméricos), existen además, los datos de tipo lógicos
que solo pueden tener uno de dos valores: verdadero o
falso.
Los datos numéricos pueden ser de varias clases:
enteros, enteros largos, de doble precisión, de simple
precisión, de coma flotante, reales; cuya definición
depende del lenguaje de programación utilizado.
Los datos de tipo carácter o alfanuméricos están
compuestos por el conjunto finito y ordenado de
caracteres que la computadora reconoce:
• Caracteres alfabéticos : A,B,C,.......Z ; a,b,c,.......z
• Caracteres numéricos : 0,1,2, ......9 (que no son
números)
• Caracteres especiales : +, /, *, ?,%,$, #, !,
,ä,¦,{},~,etc.
7
Una cadena o string es una sucesión de caracteres que se
encuentran delimitados por comillas (" "). La longitud de
la cadena es la cantidad de caracteres que la forma,
incluyendo los espacios que son un carácter más. Así:
• "Quito, Pichincha" es una cadena de longitud 18.
• "Miércoles 7 de Marzo de 2008" es una cadena de
longitud 28 (el 7 y el 2001 no son números)
• "123456" es una cadena de longitud 6, no es el
número 123.456 sobre "123456" no se puede
realizar ninguna operación aritmética como sumar,
restar, etc., ya que se trata de una cadena
alfanumérica. Ejemplo de este tipo son: cedula,
pasaporte, teléfonos.
2.3. VARIABLES
Cuando representamos datos, numéricos o
alfanuméricos, debemos darles un nombre.
Una variable es un nombre que representa el valor de un
dato.
En esencia, una variable es una zona o posición de
memoria en la computadora donde se almacena
información. En un algoritmo y también en un programa
se pueden crear tantas variables como queramos. Así
tenemos:
• A = 50: Variable tipo numérica A cuyo valor es 50.
• Ciudad = "Guayaquil": Variable alfanumérica o de
tipo carácter Ciudad, cuyo valor es "Guayaquil"
• X = C + B: Variable numérica X cuyo valor es la
suma de los valores de las variables numéricas C y
B. Es una variable calculada.
Ten en cuenta que las operaciones que se pueden realizar
con dos o más variables exigen que éstas sean del mismo
tipo. No podemos "sumar", por ejemplo una variable
alfanumérica a otra numérica y viceversa como por
ejemplo:
• FechaNueva="1 de Junio de 1.971" + 5 Esto no
se puede hacer !!
Nombres de las variables constantes
A continuación encontrarás una serie de reglas para
asignar nombres (identificadores) a variables, constantes
y procedimientos:
• Los nombres pueden estar formados por una
combinación de letras y números (saldoMes, salario,
fecha2, baseTriángulo, etc).
• El primer carácter de un nombre debe ser una letra.
• La mayoría de los lenguajes de programación
diferencian las letras mayúsculas de las minúsculas.
• Con solo leer los nombres se puede entender lo que
contienen. Deben ser muy descriptivos; no utilizar
abreviaturas, a menos que se justifique plenamente.
• Es conveniente utilizar una sola palabra para
nombrar páginas, controles, variables, etc.
• No utilizar caracteres reservados (%, +, /, >, etc).
• Se debe tener en cuenta que algunos lenguajes de
programación no admiten las tildes.
• No utilizar palabras reservadas por los lenguajes de
programación.
• Los nombres de procedimientos, variables y
constantes deben empezar con minúscula. Ejemplo,
fecha, suma, etc. Si es un nombre compuesto por
varias palabras, cada una de las palabras (con
excepción de la primera) deben empezar con
mayúscula. Ejemplo: fechaInicial, baseTriángulo,
etc.
El tipo de nombre que se asigne a variables, constantes y
procedimientos es muy importante. Cuando dejas de
trabajar en un proyecto por varios días, es más fácil para
ti retomar la actividad si los nombres describen muy
bien el contenido de variables, constantes y
procedimientos.
Ejemplos de nombres válidos de variables
• fechaNueva.
• c1.
• totalPersonas.
• contador_Maletas.
• cantidad_de_Alumnos.
• pedido_Almacen.
Algunos lenguajes de programación exigen la
declaración de las variables que se van a utilizar en todo
el programa; es decir, que al comenzar el programa se
debe decir que nombre tiene, de que tipo es (numérica o
alfanumérica) y un valor inicial. Como aquí no estamos
tratando con ningún lenguaje, la declaración de las
variables puede omitirse.
Las variables también pueden inicializarse; darles un
valor inicial. Por defecto, todas las variables para las que
no especifiquemos un valor inicial, valen cero si son de
tipo numérica y nulo (nulo no es cero ni espacio en
blanco; es nulo) si son de tipo carácter.
2.4. OPERACIONES
8
Las variables se pueden procesar utilizando operaciones
apropiadas para su tipo. Los operadores son de 4 clases:
• Relacionales.
• Aritméticos.
• Alfanuméricos.
• Lógicos.
Los operadores relacionales se utilizan para formar
expresiones que al ser evaluadas producen un valor de
tipo lógico: verdadero o falso. Ellos son:
Signo Operador
> Mayor que
< Menor que
= Igual a
<= Menor o igual
que
>= Mayor o igual
que
<> Distinto
Ejemplos:
Ejemplo Resultado
25 <= 25 Verdadero
25 <> 25 Falso
25 <> 4 Verdadero
50 <= 100 Verdadero
500 >= 1 Verdadero
1 = 6 Falso
Cuando se comparan caracteres alfanuméricos se hace
uno a uno, comenzando por la izquierda hacia la
derecha.
Si las variables son de diferente longitud, pero
exactamente iguales, se considera que la de menor
longitud es menor.
Los datos alfanuméricos son iguales si y solo si tienen la
misma longitud y los mismos componentes.
Las letras minúsculas son mayores que las mayúsculas y
cualquier carácter numérico es menor que cualquier letra
mayúscula o minúscula; Así:
carácter numérico < mayúsculas < minúsculas.
Ejemplos:
Comparación Resultado
"A" < "B" Verdadero
"AAAA" >
"AAA"
Verdadero
"B" > "AAAA" Verdadero
"C" < "c" Verdadero
"2" < "12" Falso
Estas comparaciones se realizan utilizando el valor
ASCII de cada carácter.
Para tratar los números se utilizan los operadores
aritméticos:
Signo Significado
+ Suma
- Resta
* Multiplicación
/ División
^ Potenciación
MOD Resto de la división entera
El único operador alfanumérico se utiliza para unir o
concatenar datos de este tipo:
Signo Significado
+ Concatenación
Ejemplos:
Expresión Resultado
"Pseudo" + "código" "Pseudocódigo"
"3" + "4567" "34567"
"Hola " + "que tal ?" "Hola que tal ?"
Los operadores lógicos combinan sus operandos de
acuerdo con las reglas del álgebra de Boole para
producir un nuevo valor que se convierte en el valor de
la expresión, puede ser verdadero o falso.
Signo Significado
OR Suma lógica (O)
AND Producto lógico (Y)
NOT Negación (NO)
Ejemplos:
Expresión Resultado
Verdad AND Falso Falso
NOT Falso Verdad
Verdad OR Falso Verdad
Por ejemplo, la expresión: (12 + 5) OR (7 + 3) = 10 es
verdadera (se cumple una y Verdad OR Falso es
Verdad).
La expresión (12 * 5) AND (3 + 2) = 60 es falsa
(verdad AND falso = Falso).
9
¿Cómo se evalúan los operadores? La prioridad de los
operadores es:
• Paréntesis
• Potencias
• Productos y Divisiones
• Sumas y restas
• Concatenación
• Relacionales
• Lógicos
2.5. ASIGNAR VALORES A LAS VARIABLES
La operación de dar valor a una variable se llama
asignación. La asignación vamos a representarla con el
símbolo ; una flecha apuntando a la izquierda. No
utilizaremos en signo = ya que el operador de asignación
varía de acuerdo con el lenguaje de programación
utilizado. El formato general de una asignación es:
nombre de la variable expresión.
La flecha se sustituye en los lenguajes de programación
por = (basic); : = (pascal). Pero para evitar
ambigüedades en el algoritmo utilizaremos la flecha para
la asignación y el símbolo = para indicar igualdad. He
aquí algunos ejemplos:
• a 100: significa que a la variable a se le ha
asignado el valor 100, ahora A vale 100.
• suma 5+10: asigna el valor 15 a la variable suma
a través de una asignación aritmética.
• x z + v: asigna el valor de la suma de las
variables z y v a la variable x. El resultado depende
de los valores que se asignen a x y a z.
Toda asignación es destructiva. Esto quiere decir que el
valor que tuviera antes la variable se pierde y se
reemplaza por el nuevo valor que asignamos, así cuando
se ejecuta esta secuencia:
• edad 25.
• edad 100.
• edad 77.
El valor final que toma edad será 77 pues los valores 25
y 100 han sido destruidos.
2.6.TIPOS DE VARIABLES MÁS UTILIZADOS
Contador
Un contador es una variable destinada a contener valores
que se van incrementando o decrementando cada vez
que se ejecuta la acción que lo contiene. El incremento o
decremento es llamado paso de contador y es siempre
constante.
Por ejemplo; el marcador de un partido de fútbol, cada
vez que un equipo anota un gol, aumenta su marcador en
una unidad.
En las carrera de automóviles, cada vez que un vehículo
pasa por la línea de meta, se incrementa en una unidad el
número de vueltas dadas al circuito, o bien se
decrementa en una unidad el número de vueltas que
quedan por realizar.
Aunque el incremento es siempre constante, el paso de
contador no necesariamente puede ser la unidad como en
los ejemplos que se han dado más arriba; también puede
incrementarse o decrementarse a de dos, tres, cuatro,....
n; es decir, puede ser cualquier número que conserva el
mismo valor durante todo el programa.
La sintaxis de una variable contador es:
variable variable + constante (al incrementar)
variable variable - constante (al decrementar)
Ejemplos:
• gol_local gol_local + 1.
• vueltas vueltas + 1.
• faltan faltan – 1.
• de_cinco de_cinco + 5.
• c c + 1.
• x x – 3.
Observación: Cuando una variable aparece a ambos
lados del símbolo de asignación, conviene inicializarlas
a cero.
Acumulador o Sumador
Es una variable que nos permite guardar un valor que se
incrementa o decrementa en forma NO constante durante
el proceso. En un momento determinado tendrá un valor
y al siguiente tendrá otro valor igual o distinto. Por
ejemplo; cuando realizamos un depósito en el banco, la
cantidad depositada cada vez no es siempre la misma;
unas veces será una cantidad y otras veces distinta. Lo
mismo ocurre cuando realizamos algún retiro, pero
decrementando la cantidad total.
La sintaxis es:
10
acumulador acumulador + variable (al incrementar)
acumulador acumulador - variable (al decrementar)
acumulador es la variable en la que se almacena el
resultado.
variable contiene el número que estamos incrementando
o decrementando
Ejemplos:
• saldo saldo + entrega.
• saldo saldo – retiro.
• suma suma + numero.
• sumaEdades sumaEdades + edad.
Halle el valor de A:
A (3*2^5 mod 1 + 8*(3-5) < (2+8-1 mod 1)
A (3*32 mod 1 + (-16)) < 10
A -16 < 10
A Verdadero
Ejemplo
Escribir un algoritmo que intercambie el valor de dos
variables.
Si se tienen, por ejemplo a = 5 y b = 10, se quiere
intercambiar el valor de las variables, así:
a = 10; b = 5.
No podemos asignar directamente el valor de una a la
otra porque uno de los valores se destruiría; de modo
que esto no se puede hacer:
a b (el valor de a se pierde y quedaría a = 10 ; b =
10) .
La solución consiste en asignar el valor de una de las
variables a otra variable auxiliar.
inicio
leer A,B
Auxiliar A
A B
B Auxiliar
imprimir A,B
fin
Ejercicios
2.1. ¿Cuáles de los siguientes nombres de Variables
NO son validos y por qué?
a) números.
b) Numero X.
c) 7
d) A(45+
e) VII
f) 7mesas.
g) sieteMesas
2.2. Halle el valor de A:
A A o (3+5*8) < 3 y ((-6/3 div 4)*2 < 2)
2.3. Halle el valor de B:
B 3 mod 2 div 3
2.4. Halle el valor de C:
C (-B*2 <> 8*3 mod 4) y (‘A’>’B’)
2.5. Dadas las siguientes declaraciones de variables
siguientes y los valores iniciales indicados:
VAR
Z color, lima, marron, amarillo, rojo, naranja
R negro, blanco, verde, azul, morado, crayon
Evaluar el valor final de las variables después de
ejecutar de forma independiente las sentencias de
asignación siguientes. Nota: suponer que las
incompatibilidades de tipos se resuelven implícitamente
e indicar dónde se producen.
a) blanco = color * 2.5 / morado
b) verde = color / morado
c) naranja = color*(-12) DIV rojo
d) azul = (color + marron) / (crayon + 0.3)
e) lima = rojo DIV color + rojo MOD color - 356
f) morado = marron / rojo * color
2.6. Indicar el tipo de cada una de las siguientes
constantes:
a) 534 b) 534.0 c) -534 d) ’534’
e) -45.3x10
4
f) 17x10
7
g) -45.6x10
-3
h) ’fin del
ejercicio’
2.7. Indicar el resultado y el tipo de las siguientes
expresiones:
a) 5^2+3 b) 6+19-0.3 c) 3.0^3+1
d) 1/4+2 e) 29.0/2+4 f) 3/6.0 - 7
2.8. Calcular el valor de cada una de las siguientes
expresiones enteras:
a) 5*6-3*2 b) -2^3 c) (26+3*4)/4
d) 3+2*(18-4^2) e) 2^2*3 f) 8-30/6
11
2.9. Escribir las siguientes expresiones matemáticas en
forma de expresiones de computación:
2.10. Evaluar las siguientes expresiones booleanas
escribiendo el árbol de precedencia. Los valores
de las variables son A=TRUE, B=TRUE,
C=FALSE, D=FALSE.
a) C OR NOT A AND B
b) NOT (A OR C) OR B AND NOT C
c) NOT(NOT(NOT(A AND C OR D)))
d) NOT (5<3) AND A OR NOT (D OR C)
e) A AND NOT (D OR NOT C AND A) OR
NOT (NOT C OR B)
2.11. Encuéntrese el valor de la variable RESULT
después de la ejecución de las siguientes
secuencias de operaciones (suponer que todas las
variables son reales):
a) RESULT ← 3.0*5
b) X ← 2.0
Y ← 3.0
RESULT ← X^Y-X
c) RESULT ← 4
X ← 2
RESULT ← RESULT*X
2.12. ¿Qué valor se obtiene en las variables A, B y C
después de la ejecución de las siguientes
instrucciones?
A ← 3
B ← 20
C ← A+B
B ← A+B
A ← B
2.13. Supóngase que I y J son variables enteras cuyos
valores son 6 y 12 respectivamente. ¿Cuáles de las
siguientes condiciones son verdaderas?
a) (2*I) ≤ J
b) (2*I-1) < J
c) (I > 0) y (I ≤ 10)
d) (I > 25) o ((I < 50) y (J < 50))
e) (I < 4) o (J > 5)
f) no (I > 6)
UNIDAD 3:
3.1. DIAGRAMAS DE FLUJO PARA
REPRESENTAR ALGORITMOS
Diagrama de Flujo
Conjunto de símbolos estándar en los cuales se
encuentran escritos los pasos del algoritmo, dichos
símbolos se encuentran unidos por medio de flechas,
denominadas líneas de flujo, que indican la secuencia en
que se deben de ejecutar.
Los siguientes son los principales símbolos para elaborar
Diagramas de Flujo:
12
Reglas básicas para elaborar Diagramas de Flujo:
• Poner un encabezado que incluya un título que
identifique la función del algoritmo; el nombre del
autor; y la fecha de elaboración.
• Sólo se pueden utilizar los símbolos anteriores.
• Los diagramas se deben dibujar de arriba hacía abajo
y de izquierda a derecha.
• La ejecución del programa siempre empieza en la
parte superior del diagrama.
• Los símbolos de “Inicio” y “Final” deben aparecer
solo una vez.
• La dirección del flujo se debe representar por medio
de flechas (líneas de flujo).
• Todas las líneas de flujo deben llegar a un símbolo o
a otra línea.
• Una línea de flujo recta nunca debe cruzar a otra.
• Cuando dos líneas de flujo se crucen, una de ellas
debe incluir una línea arqueada en el sitio donde
cruza a la otra.
• Las bifurcaciones y ciclos se deben dibujar
procurando una cierta simetría.
• Cada rombo de decisión debe tener al menos dos
líneas de salida (una para SI y otra para NO).
• Las acciones y decisiones se deben describir
utilizando el menor numero de palabras posible; sin
que resulten confusas.
• Todo el Diagrama debe ser claro, ordenado y fácil
de recorrer.
Actividad 1.6
1. Hallar el perímetro de un cuadrado cuyo lado mide 5
cm.
2. Hallar el perímetro de un círculo cuyo radio mide 2
cm.
3. Hallar el área de un cuadrado cuyo lado mide 5 cm.
4. Hallar uno de los lados de un rectángulo cuya área
es de 15 cm2 y uno de sus lados mide 3 cm.
5. Hallar el área y el perímetro de un círculo cuyo radio
mide 2 cm.
6. Hallar el área de un pentágono regular de 6 cm de
lado y con 4 cm de apotema.
3.2. PSEUDOCÓDIGO PARA REPRESENTAR
ALGORITMOS
Pseudocódigo: lenguaje de especificación de algoritmo
que utiliza para representar las acciones palabras
reservadas en ingles, las cuales son similares a las de los
lenguajes de programación, tales como start, end, if-
then-else, while-wend, repeat-until, etc. (o su
equivalente en español)
Este nació como un lenguaje similar al inglés y era un
medio de representar básicamente las estructuras de
control de programación estructurada.
El pseudocódigo no puede ser ejecutado por una
computadora. Una ventaja del pseudocódigo es que
puede ser traducido fácilmente a lenguajes de
programación.
La escritura del pseudocódigo exige normalmente la
indentación (sangría en el margen izquierdo) o en su
defecto, numeración jerárquica.
Ejercicios:
Realice los ejercicios, utilizando Diagramas de Flujo
y Pseudocdigo.
3.1.Escribir un algoritmo que calcule y saque por
pantalla, las horas, minutos y segundos de un tiempo
expresado sólo en segundos introducido por teclado.
3.2.Escribe un algoritmo que calcule la altura desde la
que cae un objeto que tarda t segundos en llegar al
suelo. El tiempo lo introduce el usuario por teclado.
Use la fórmula:
13
3.3.Escribe un algoritmo que lea por teclado una
temperatura en grados Fahrenheit y la convierta a
grados centígrados según la fórmula:
3.4.Realizar un algoritmo para intercambiar los valores
de dos variables.
3.5.Escribir un algoritmo para leer un valor entero,
doblarlo, multiplicarlo por 25 y visualizar el
resultado.
3.6.Diseñar un algoritmo que lea los dos catetos de un
triángulo rectángulo y calcule la hipotenusa.
3.7.Diseñar un algoritmo que lea cuatro calificaciones
de un alumno y calcule la calificación promedio.
UNIDAD 4:
4.1. PROCESOS
Se llama procesos a todas las instrucciones contenidas
en un algoritmo para:
• Declarar variables y constantes.
• Asignar valores iniciales a variables y constantes.
• Leer datos que suministra el usuario por medio del
teclado o del ratón (mouse).
• Realizar operaciones matemáticas (aplicar
fórmulas).
• Reportar o mostrar contenidos de variables y
constantes.
• Mostrar en pantalla resultados de procedimientos
activados por el programa.
4.2.ESTRUCTURA SECUENCIAL
Un Algoritmo está compuesto por instrucciones de
diferentes tipos, organizadas secuencialmente, en forma
de estructuras de control. De estas estructuras de control,
las más comunes son las siguientes:
• Secuencial.
• Iterativa (repetición).
• Condicional (decisión, selección).
Una estructura de control se define como un esquema
que permite representar ideas de manera simplificada y
que bajo condiciones normales, es constante.
Figura 4.1: Modelo de estructura secuencial.
La estructura de control secuencial es la más sencilla.
También se la conoce como estructura lineal. Se
compone de instrucciones que deben ejecutarse en forma
consecutiva, una tras otra, siguiendo una línea de flujo.
Solamente los problemas muy sencillos pueden
resolverse haciendo uso únicamente de esta estructura.
Una estructura de control secuencial puede contener
cualquiera de las siguientes instrucciones:
• Declaración variables
• Asignación de valores
• Entrada de datos
• Procesamiento de datos (operaciones)
• Reporte de resultados
Ejercicios
4.1.Diseñar un algoritmo que lea la cantidad de lluvia en
pulgadas e imprima su equivalente en milímetros
sabiendo que 25.5 mm = 1 pulgada.
4.2.Diseñar un algoritmo que lea el nombre y el apellido
de una persona en ese orden e imprima el apellido
seguido del nombre.
4.3.El costo de un automóvil para el comprador es la
suma total del costo del vehículo, del porcentaje de
ganancia del vendedor (12%) y de los impuestos
estatales y locales aplicables (6%). Diseñar un
algoritmo que lea el costo del automóvil e imprima
el costo para el comprador.
4.4.La calificación final de un estudiante viene dada por
tres aspectos del trabajo anual: nota de laboratorio
que cuenta un 30% del total, nota de examen parcial
que cuenta un 20% del total y nota de examen final
que cuenta el 50% restante. Diseñar un algoritmo
14
que lea el nombre del estudiante, la nota de
laboratorio, la nota del examen parcial y la nota del
examen final e imprima el tanto por ciento
correspondiente a cada una de las notas así como la
calificación final.
4.5.Realizar un algoritmo para calcular la longitud de
una circunferencia y el área del círculo con un radio
leído desde teclado. El algoritmo debe detectar
entradas no válidas.
4.6.Leer dos números y mostrar el producto de ellos.
4.7.Leer las longitudes de un rectángulo y calcular la
superficie y el perímetro.
4.8.Convierta de doláres a euros.
4.9.Un negocio de deportes hace un 25 % de descuento
en pelotas de fútbol y de béisbol. Se requiere escribir
un programa que le permita a un empleado ingresar
los precios originales de las pelotas. El programa
deberá usar esta entrada de datos para calcular el
precio rebajado. La salida del programa deberá
mostrar, en líneas separadas, el precio original y el
precio con descuento.
4.10. Efectuar un programa que lea los valores de 3
resistencias electrónicas (en Ohmios, W) conectadas
en paralelo y muestre en pantalla el valor global de
las 3. El valor global es calculado por la siguiente
ecuación: 1 / (1/R1 + 1/R2 + 1/R3).
4.11. ¿Dada la duracion en minutos de una llamada
calcular el costo,considerando?
-Hasta tres minutos el costo es 0.50
-Por encima de tres minutos es 0.50 más
0.1*cada minuto adicional a los tres primeros
4.12. Realizar un algoritmo que permita ingresar una
frase y la descomponga esta en sus palabras
imprimiéndolas al revés. Ejem.
CIUDAD CHICLAYO
DADUIC OYALCIHC
4.3.ESTRUCTURA CONDICIONAL
La estructura condicional se utiliza para indicarle al
computador que debe evaluar una condición y, a partir
del resultado, ejecutar el bloque de instrucciones
correspondiente. La forma más común está compuesta
por una proposición que se evalúa y dos bloques de
instrucciones que se ejecutan, uno cuando la condición
es verdadera (selección simple y doble) y otro cuando
ésta es falsa (únicamente en la selección doble).
Por su parte, un bloque de instrucciones puede contener
una o varias instrucciones que se ejecutan una detrás de
otra. La estructura condicional tiene dos variantes:
• Selección simple.
• Selección Múltiple.
Las estructuras condicionales simple y múltiple evalúan
una proposición (condición) que devuelve como
resultado únicamente dos valores posibles y excluyentes:
verdadero o falso.
Selección simple
La estructura condicional de selección simple ejecuta un
bloque de instrucciones cuando la proposición
(condición) es verdadera; si esta es falsa, no hace nada.
El formato de la estructura de selección es:
si <condición> entonces
instrucción 1
instrucción 2
...................
instrucción n
si-no
instrucción a
instrucción b
...................
instrucción z
fin-si
Por ejemplo, Cuando realizamos una llamada telefónica:
Si {señal de ocupado} entonces
Colgar el teléfono
si - no
Iniciar la conversación
fin – si
En este caso, la condición es {señal de ocupado}, que
puede ser verdadera o falsa. Si es verdadera, entonces
debemos colgar el teléfono y si no, podemos realizar la
conversación.
15
Ejemplo:
Si a = 5 entonces
imprimir"A es 5"
si - no
imprimir "A no es igual a 5"
fin - si
También puede obviarse el si - no cuando no nos
interesa ejecutar un bloque de instrucciones en caso de
que la condición no se cumpla.
Si {condición} entonces
instrucción 1
instrucción 2
.........
instrucción n
fin – si
Por ejemplo:
Si {hoy es Miércoles} entonces
Comprar entradas para el cine
fin - si
Ejemplo:
Introducir un número por teclado y determinar si es
positivo o negativo.
Para saber si un número es positivo o negativo, debemos
saber si es menor o mayor a cero. Si es mayor, el
número es positivo y si es menor resulta negativo.
Utilizamos Si... para evaluar como es el número con
respecto a cero y mostramos los mensajes
correspondientes en cada caso. Así:
inicio
leer numero
Si numero < 0 entonces
imprimir "El número es negativo"
si-no
imprimir "El número es positivo"
fin-si
fin
Ejemplo. Dados dos números, establecer cuál es mayor.
Comenzamos leyendo ambos números, que en el
ejemplo se llamarán NumeroA y NumeroB. Luego
debemos comparar como es uno contra el otro (puede ser
NumeroA contra NumeroB o bien comparar NumeroB
contra NumeroA):
inicio
leer numeroA, numeroB
Si numeroA < numeroB entonces
imprimir "El mayor es:", numeroB
si-no
imprimir "El mayor es:", numeroA
fin-si
fin
En este ejemplo, ¿qué pasaría si los números fueran
iguales? Hagamos la prueba.
Luego de leer los números, por ejemplo: numeroA=100
y numeroB=100 se ejecutan las instrucciones:
Si numeroA < numeroB entonces
imprimir "El mayor es:", numeroB
El resultado de la condición
Por lo tanto, al ser falsa la condición, se ejecuta la
instrucción imprimir "El mayor es:", numeroA.
Por tanto, el algoritmo ofrecerá una solución incorrecta
cuando los números son iguales. Para solucionar esto,
tenemos que prever el caso de que los números sean
iguales, utilizando condiciones anidadas.
inicio
leer numeroA, numeroB
Si numeroA < numeroB entonces
imprimir "El mayor es:", numeroB
si-no
Si numeroA > numeroB entonces
imprimir "El mayor es:", numeroA
si-no
imprimir "Los números son iguales"
fin-si
fin-si
fin
Esta solución contiene dos estructuras de repetición, una
dentro de la otra (anidada). En caso de ser necesario
podemos anidar tantas estructuras de selección como sea
necesario. El algoritmo averigua si A es menor a B, si no
lo es, tenemos otras dos posibilidades: que sea menor o
igual, esto es lo que determina la estructura anidada.
Otro ejemplo de estructuras de repetición anidadas,
consiste en dado un número del 1 al 7, establecer al día
de la semana.
inicio
leer numero
Si numero=1 entonces
imprimir "Domingo"
16
si-no
Si numero=2 entonces
imprimir="Lunes"
si-no
Si numero=3
imprimir "Martes"
si-no
Si numero=4 entonces
imprimir "Miercoles"
si-no
Si Numero=5 entonces
imprimir "Jueves"
si-no
Si numero=6 entonces
imprimir "Viernes"
si-no
Si numero=7 entonces
imprimir "Sábado"
si-no
imprimir "El número
debe estar entre 1 y 7"
fin-si
fin-si
fin-si
fin-si
fin-si
fin-si
fin-si
fin
Notarás que tenemos varios Si...entonces anidados, ya
que si el número ingreso no es 1, tenemos que preguntar
si es 2 ó 3 ó 4...etc. El último Si...entonces es para
verificar que el número ingresado no es 1, 2, 3, 4, 5, 6 ó
7; sino cualquier otro que no nos interesa.
Repasa los algoritmos anteriores.
Resulta bastante tedioso anidar un montón de Si ...
entonces, como en el ejemplo del día de la semana.
Cuando queramos o necesitemos hacer numerosas
comparaciones podemos usar otra estructura de
selección llamada Según Sea. El formato de estructura
de selección Según sea es:
Según sea <variable>
Caso = <condición>
Caso = <condición>
instrucción o instrucciones
Otro caso
instrucción o instrucciones
fin-según
Así, utilizando esta estructura, el problema del día de la
semana será así:
inicio
Leer numero
Según sea numero
Caso = 1
imprimir "Domingo"
Caso = 2
imprimir="Lunes"
Caso = 3
imprimir="Martes"
Caso = 4
imprimir "Miercoles"
Caso = 5
imprimir "Jueves"
Caso = 6
imprimir "Viernes"
Caso = 7
imprimir "Sábado"
Otro Caso
imprimir "El número debe estar entre 1 y 7"
fin-según
fin
Lo cual resulta menos engorroso que varios Si...
entonces anidados. Es posible anidar Si... entonces
dentro de estructuras Según sea y viceversa.
Observa que la instrucción Otro Caso ejecuta una o
varias instrucciones cuando no se cumple ningún caso de
los contemplados más arriba. Otro Caso debe estar
siempre al final (cuando sea necesario, si no o es se
puede omitir Otro Caso)
El uso de una u otra estructura depende de cada persona,
pero en general cuando las condiciones a evaluar son
muchas, se utiliza Según Sea.
La estructura según sea admite varias condiciones por
ejemplo:
Según sea MES
caso= 1,3,5,7,8,10,12
TDias = 31
caso = 2,4,6,11
TDias =30
caso = 2
TDias=28
fin-según
Este pequeño ejemplo establece el número de días de un
mes determinado almacenado en la variable MES (para
años no bisiestos). En lugar de escribir varios Caso= 1,
Caso =2, etc, se puede especificar acción o acciones (en
este caso la asignación de días a TDias) cuando la
variable tome uno de los valores separados por comas.
17
Es decir si TDias es 1 ó 3 ó 5 ó 7 ó 8 ó 10 ó 12; se
ejecuta TDias=31.
Ejercicios
4.13. Los n trabajadores de la empresa “PagaPoco"
lograron obtener un aumento de sueldo en el último
mes. Este aumento de sueldo se determinó por
tramos, de acuerdo a la siguiente tabla:
Construya un algoritmo que reciba como entrada el
sueldo actual de cada uno de los trabajadores y calcule el
nuevo sueldo. Además, el algoritmo debería indicar
cuánto más gasta la empresa por concepto de sueldos,
después del aumento.
4.14. Escribir un algoritmo para calcular las
soluciones de una ecuación cuadrática de la forma
4.15. Un sistema de ecuaciones lineales de la forma:
Puede resolverse utilizando las siguientes fórmulas:
Diseñar un algoritmo para leer los coeficientes a, b, c, d,
e, f, y calcule los valores de x e y. ¿Existen algunos
casos en los que este algoritmo no funcione?
4.16. Diseñar un algoritmo que lea tres puntuaciones
de un alumno y calcule la media. Si la media del
alumno no supera los 60 puntos el alumno está
suspenso y el algoritmo deberá imprimir un mensaje
indicándolo. En caso de que el alumno tenga una
media superior o igual a 60 puntos pero inferior a
70, el alumno estará ‘aprobado pero dudoso’. Si el
alumno supera los 70 puntos el mensaje a imprimir
será ‘Aprobado’.
4.17. Escribir un algoritmo que lea dos números y
determine cuál de ellos es el mayor.
4.18. Escribir un algoritmo que lea tres números y
determine cuál de ellos es el mayor.
4.19. Dados por el teclado la base y altura de un
triángulo, hacer un algoritmo para calcular el área
del triángulo. Tener en cuenta los casos no válidos
(la base o la altura negativas).
4.20. Introducir un número por teclado y determinar si
es positivo o negativo.-
Para saber si un número es positivo o negativo,
debemos saber si es menor o mayor a cero. Si es
mayor, el número es positivo y si es menor resulta
negativo.
4.21. Dado un número del 1 al 7, establecer al día de
la semana.
4.22. Leer un número y mostrar por la salida estándar
si dicho numero es o no es par.
4.23. Definir una función que dados tres números X,
Y y Z, devuelva una lista con los números ordenados
por orden creciente.
4.24. Diseñar una función para leer un año y
determinar si es bisiesto. NOTA: un año es bisiesto
si es múltiplo de 4. Los múltiplos de 100 no son
bisiestos, salvo si son también múltiplos de 400.
4.4.ESTRUCTURA ITERATIVA
(REPETICIÓN)
La estructura iterativa o de repetición permite ejecutar
una o varias instrucciones, un número determinado de
veces o, indefinidamente, mientras se cumpla una
condición. Esta estructura ayuda a simplificar los
algoritmos, ahorrando tiempo valioso a quien resuelve
problemas con ayuda del computador.
Figura 2.2: Modelo de estructura iterativa.
Historia Curiosa
Un día, en la India, un joven bracmán llamado Lahur
Sessa pidió una audiencia con el Rey para obsequiarle
18
el juego que había inventado. La curiosidad del rey lo
llevó a conceder la cita que pedía el joven Sessa. El rey
quedó maravillado y aprendió rápidamente las reglas de
aquel juego que consistía de un tablero cuadrado
dividido en sesenta y cuatro cuadritos iguales (32
blancos y 32 negros); sobre este tablero se ubicaban dos
colecciones de piezas, que se distinguían unas de otras
por el color, blancas y negras, repitiendo
simétricamente los motivos y subordinadas a reglas que
permitían de varios modos su movimiento.
Algún tiempo después, el rey mandó llamar a su
presencia al joven bracmán y dirigiéndose a él le dijo:
- Quiero recompensarte, amigo mío, por este
maravilloso obsequio, que de tanto me sirvió para
aliviar viejas angustias. Pide, pues, lo que desees, para
que yo pueda demostrar, una vez más, como soy de
agradecido con aquellos que son dignos de una
recompensa.
Ante tal ofrecimiento, el joven respondió:
- Voy, pues, a aceptar por el juego que inventé, una
recompensa que corresponda a vuestra generosidad; no
deseo, sin embargo, ni oro, ni tierras, ni palacios. Deseo
mi recompensa en granos de trigo.
-¿Granos de trigo? –Exclamó el rey, sin ocultar la
sorpresa que le causara semejante propuesta-. ¿Cómo
podré pagarte con tan insignificante moneda?
-Nada más simple -aclaró Sessa-. Dadme un grano de
trigo por la primera casilla del tablero, dos por la
segunda, cuatro por la tercera, ocho por la cuarta, y así
sucesivamente hasta la sexagésima cuarta y última
casilla del tablero.
No sólo el rey, sino también los visires y venerables
bracmanes, se rieron estrepitosamente al oír la extraña
solicitud del joven.
Insensato -exclamó el rey-. ¿Dónde aprendiste tan
grande indiferencia por la fortuna? La recompensa que
me pides es ridícula.
Mando llamar el rey a los algebristas más hábiles de la
Corte y les ordenó calculasen la porción de trigo que
Sessa pretendía.
Los sabios matemáticos, al cabo de algunas horas de
realizar cálculos dispendiosos, volvieron al salón para
hacer conocer al rey el resultado completo de sus
cálculos.
Preguntándoles el rey, interrumpiendo el juego:
-¿Con cuantos granos de trigo podré cumplir,
finalmente, con la promesa hecha al joven Sessa?
-Rey magnánimo -declaró el más sabio de los
geómetras-: calculamos el número de granos de trigo
que constituirá la recompensa elegida por Sessa,
y obtuvimos un número cuya magnitud es inconcebible
para la imaginación humana (el número en cuestión
contiene 20 guarismos y es el siguiente:
18.446.744.073.709. 551. 615. Se obtiene restando 1 a
la potencia 64 de 2).
-La cantidad de trigo que debe entregarse a Lahur Sessa
-continúo el geómetra- equivale a una montaña que
teniendo por base la ciudad de Taligana, fuese 100
veces más alta que el Himalaya. La India entera,
sembrados todos sus campos, y destruidas todas sus
ciudades, no produciría en un siglo la cantidad de trigo
que, por vuestra promesa, debe entregarse al joven
Sessa.
¿Cómo describir aquí la sorpresa y el asombro que esas
palabras causaron al Rey Ladava y a sus dignos visires?
El soberano hindú se veía, por primera vez, en la
imposibilidad de cumplir una promesa.
Lahur Sessa -refiere la leyenda de la época-, como buen
súbdito, no quiso dejar afligido a su soberano. Después
de declarar públicamente que se desdecía del pedido
que formulara, se dirigió respetuosamente al monarca y
le dijo: los hombres más precavidos, eluden no sólo la
apariencia engañosa de los números, sino también la
falsa modestia de los ambiciosos.
El rey, olvidando la montaña de trigo que prometiera al
joven bracmán, lo nombró su primer ministro.
(Tomado del libro “El hombre que calculaba” escrito
por Malba Tahan)
Ejemplo
Elabora un algoritmo para ayudar a los hábiles
algebristas de la corte del Rey Ladava con el cálculo del
número de granos de trigo que deben entregar a Lahur
Sessa como pago por haber inventado el juego de
ajedrez.
19
La estructura repetitiva se utiliza cuando se quiere que
un conjunto de instrucciones se ejecuten un cierto
número finito de veces. Llamamos bucle o ciclo a todo
proceso que se repite un cierto número de veces dentro
de un algoritmo o un programa.
Existen dos tipos de estructuras repetitivas; la primera es
aquella en donde se tiene perfectamente establecido el
número de veces que un grupo de acciones se van a
ejecutar (20, 5, 2 veces), y la segunda en la que el
número de repeticiones es desconocido y se hará hasta
que se cumpla o no cierta condición.
Un ejemplo de la primera sería imprimir los datos de los
alumnos de una clase (se conoce cuantos alumnos hay) y
un ejemplo de la segunda puede ser el mostrar un
mensaje de error cada vez que el usuario pulse una
determinada tecla (no sabemos cuantas veces pulsará esa
tecla).
Las acciones que forman parte del cuerpo del bucle son
ejecutadas de forma repetitiva mediante la ocurrencia o
no de una condición.
Estructura Para (Desde - Hasta)
Cuando conocemos de antemano el número de veces en
que se desea ejecutar una acción o grupo de acciones, se
utiliza la estructura repetitiva Desde o Para.
Esta estructura ejecuta las acciones del cuerpo del bucle
un número especificado de veces, y de modo automático
controla el número de iteraciones o pasos.
La sintaxis es:
desde variable= vi hasta vf [incremento]
acción o acciones
fin-desde
Donde:
variable: variable índice
vi: valor inicial de la variable índice
vf: valor final de la variable índice
[incremento]: el número que se incrementa (o
decrementa) a la variable índice en cada iteración del
bucle.
Ejemplo:
Imprimir todos los números del 1 al 100.
Inicio
desde i = 1 hasta 100
imprimir i
fin-desde
fin
I es la variable índice con un valor inicial de 1, se
incrementa uno en cada paso hasta 100.
Podemos notar que la estructura desde comienza con un
valor inicial de la variable índice y las acciones se
ejecutan hasta que el valor inicial sea MAYOR que el
que el Valor final.
La variable índice se incremente en uno (en el ejemplo)
y si este nuevo valor del índice no es mayor que el valor
final, se ejecuta de nuevo la acción imprimir.
En este caso se visualizará los números 1, 2, 3, 4, 5, 6, 7,
8, 9, 10 ....97, 98, 99, 100.
Otro Ejemplo:
Imprimir todos los números pares desde 2 hasta el 300
20
desde i= 2 hasta 300 incremento 2
imprimir i
fin-desde
Donde:
La variable índice comienza en 2, se imprime 2 y en el
siguiente paso se incrementa (suma) 2 a la variable
índice que pasa a valer 4; se imprime el 4 y como 4 es
menor que 300 (valor final) , se pasa a una nueva
iteración incrementando nuevamente en 2 el índice, que
ahora vale 6; y así sucesivamente...
Aquí se visualizan: 2, 4, 6, 8, 10, 12, 14, 16, 18, ..... 296,
298, 300
Si deseamos mostrar los impares el algoritmo es el
siguiente:
desde i= 1 hasta 300 incremento 2
imprimir i
fin-desde
El ciclo termina mostrando 299 puesto que en el
siguiente paso, La variable i valdría 301 y es mayor al
límite establecido de 300. i pasa a valer realmente 301
en el último paso, solo que la instrucción de imprimir no
se ejecuta porque el límite de 300 se supera.
Si diéramos la instrucción de imprimir el valor de i,
inmediatamente después del fin-desde, veíamos 301.
Ejemplo 3: Imprimir los valores comprendidos entre el
460 y 500 en orden inverso.
Debemos mostrar: 500, 499, 498, 497,..... 462, 461, 460.
En este caso haremos un decremento a la variable índice
(no un incremento como en los ejemplos anteriores).
Tenemos que comenzar nuestra variable índice en 500 y
decrementar una unidad hasta alcanzar el 460, así:
desde i= 500 hasta 460 incremento -1
imprimir i
fin-desde
Como salida tenemos, entonces: 500, 499, 498, 497,
496, 495, 494,.... 464, 463, 462, 461, 460.
El segundo tipo de estructura repetitiva se diferencia de
la primera en que no se conoce el número de
repeticiones o iteraciones en que se va a ejecutar una
instrucción o un bloque de instrucciones.
Estas estructuras son básicamente dos: Estructura
mientras....fin-mientras y la estructura repetir.... hasta.
Estas dos se diferencian en que la verificación de la
condición para repetir el ciclo se hace al inicio con
mientras y al final con repetir.
También existen estructuras repetitivas que son
combinaciones de estas dos que mencionamos, pero
no las estudiaremos.
Ejercicios
4.25. Construya un algoritmo que reciba como entrada
un cierto valor n, y genere como salida n veces la
palabra “hola".
4.26. Construya un algoritmo que reciba como entrada
un cierto valor n y genere como salida el valor de la
serie: 1 + 2 + 3 + 4 + : : : + n.
4.27. Escribir un algoritmo que calcule la desviación
estándar de cinco números.
4.28. Realizar un algoritmo para calcular los valores
que toma la siguiente función
4.29. Imprimir todos los números del 1 al 100.
4.30. Imprimir los valores comprendidos entre el 460
y 500 en orden inverso.
4.31. Imprimir todos los números pares desde 2 hasta
el 300
4.32. Dada una secuencia de n números mostrar su
producto por pantalla.
4.33. Tabla de multiplicar del 5.
4.34. Modificar el programa anterior para aplicar la
fórmula a cualquier cantidad de resistencias.
Primeramente, el programa pedirá el número de
resistencias a conectar en paralelo. Después pedirá
uno a uno los valores de todas las resistencias. Por
último, escribirá el resultado global.
Estructura Mientras
Como su nombre lo indica, esta estructura repite el
cuerpo del bucle mientras se cumpla una determinada
condición. Su sintaxis es:
mientras {condición}
acción 1
acción 2
acción 3
.....
acción n
fin mientras
instrucción X
21
Lo primero que el computador hace es examinar la
condición, lo que puede dar como resultado dos
posibilidades:
- La condición se cumple: Se ejecutan acción 1, acción
2, acción 3, ..., acción n.
Las estará repitiendo hasta que la condición no se
cumpla, entonces se sale del ciclo y se siguen ejecutando
la o las instrucciones que vienen a continuación y están
fuera del bucle; instrucción X.
- La condición no se cumple: No entrará en el ciclo. Se
ejecutan las instrucciones que vienen después del bucle,
instrucción X, por ejemplo.
De esto se deduce que el cuerpo del bucle de una
estructura mientras puede repetirse cero o más veces,
veces que son determinadas por el cumplimiento o no de
la condición.
Ejemplo
mientras contraseña < > "josua"
imprimir "La contraseña es incorrecta !"
fin-mientras
imprimir "Ha ingresado la contraseña correcta"
Veremos más ejemplos de esta estructura en la sección
ejercicios. Al analizarlos comprenderemos mejor como
funciona.
Estructura Repetir
La estructura repetir cumple la misma función que la
estructura mientras. La diferencia está en que la
estructura mientras comprueba la condición al inicio y
repetir lo hace al final; por eso la estructura repetir se
ejecuta por lo menos una vez.
La sintaxis es:
repetir
intrucción 1
instrucción 2
instrucción 3
......
hasta {condición}
instrución X
Repetir es opuesta a la estructura mientras. Repetir se
ejecuta hasta que se cumpla una condición que se
comprueba al final del bucle. Esto implica que las
instrucciones que forman el cuerpo del bucle se ejecutan
por lo menos una vez. Con la estructura mientras el
bucle puede ejecutarse 0 o más veces.
Lo que la computadora hace al ejecutar la estructura
repetir es:
- Se ejecutan: instrucción 1, instrucción 2, instrucción 3,
......
- Se evalúa la condición. Si esta es FALSA se vuelve a
repetir el ciclo y se ejecutan instrucción 1, instrucción 2,
instrucción 3, ......
Si la condición es VERDADERA se sale del ciclo y se
ejecuta instrucción X.
Ejemplo
repetir
imprimir "La contraseña es incorrecta !"
hasta contraseña = "josua"
Más ejemplos en la sección Ejercicios.
En resumen, hemos visto dos tipos de estructuras
repetitivas, el primer tipo en la que conocemos el
número de veces que se repetirá el bucle o ciclo (Desde
....fin-desde; y el segundo tipo en el cual no conocemos
el numero de veces en se repite el ciclo ya que está
determinado por el cumplimiento o no de una condición
(mientras ..... fin-mientras y repetir....hasta).
Toda estructura Desde....fin-desde tiene una estructura
mientras....fin-mientras o repetir.....hasta equivalente.
Pero las estructuras mientras... o hacer ... no tienen
NINGÚN desde.....fin-desde equivalente.
Ejercicios
4.35. Construya un algoritmo que reciba como entrada
varios montos de depósito y despliegue la suma de
ellos. Considere que un valor negativo significa que
no hay más datos y no debe ser considerado como
dato válido.
4.36. Construya un algoritmo que reciba como entrada
una secuencia de valores numéricos y genere como
salida la suma de los valores pares y la
multiplicación de los impares. Considere que un
valor negativo significa que no hay más datos y no
debe ser considerado como dato válido.
4.37. Construya un algoritmo que reciba como entrada
una secuencia de valores de temperaturas y genere
como salida el total de veces que la temperatura fue
0. Considere que un valor de temperatura negativo
significa que no hay más datos y no debe ser
considerado como válido.
22
4.38. Construya un algoritmo que reciba como entrada
una secuencia de valores de temperaturas y genere
como salida el total de veces que se registro una
temperatura menor que 0, el total de veces que fue 0
y el total de veces que fue mayor que 0. Considere
que una temperatura con valor 99 es una temperatura
no válida e indica el término de los datos.
4.39. Construya un algoritmo que genere como salida
los términos de la siguiente serie: 2; 5; 7; 10; 12; 15;
17; : : : ; 1800. Hasta un valor dado por el usuario.
4.40. Escribir un diagrama de flujo para un algoritmo
que calcule la media de varios números, los que
introduzca el usuario por teclado, y saque el
resultado por pantalla. Nota: el primer carácter no
numérico que introduzca el usuario indicará que no
va a introducir más números.
4.41. Leer secuencia de números y mostrar la suma de
dichos números hasta que se introduce un número
negativo.
4.42. Pedir al usuario una contraseña hasta que este de
la correcta o decida salir.
4.43. El número mágico.
UNIDAD 5:
5.1. ARREGLOS.
Hasta ahora hemos trabajado con datos simples que
representaban un número, un carácter o una cadena. Sin
embargo, en ocasiones se necesita procesar una
colección de valores que están relacionados entre sí por
algún método, por ejemplo, una lista de calificaciones,
de los meses del año, temperaturas a lo largo de una
semana, etc.
El procesamiento de estos datos utilizando datos simples
es muy difícil. Por eso, se han definido en la
programación varias estructuras de datos, que son una
colección caracterizada por alguna organización y por
las operaciones que se definen en ella.
Una de estas estructuras son los arreglos.
Un arreglo es un conjunto de elementos del mismo tipo
que comparten un nombre común; algo así como una
variable que puede almacenar al mismo tiempo más de
un valor.
Los arreglos reciben también el nombre de tablas, listas
o arrays.
Un arreglo es un conjunto ordenado y homogéneo.
Ordenado porque el primer elemento, segundo, tercero...
n-ésimo puede ser identificado y homogéneo porque sus
elementos son todos del mismo tipo (numéricos o
alfanuméricos, pero no una combinación de ambos).
Gráficamente, un arreglo se representa como una tabla:
De igual forma que cualquier variable, un arreglo debe
tener un nombre.
Aquí hemos llamado A a nuestro arreglo ejemplo.
Los elementos que están en el arreglo A ocupan todos
una determinada posición dentro de él:
Así, el número -5 se encuentra en la posición 3; el 99 en
la posición 10 y el 12 en la posición 1.
A(3) = - 5
A(10) = 99
A(1) = 12
Vemos, entonces que un elemento se referencia por el
nombre del arreglo y la posición que ocupa dentro de él.
El número que se coloca entre paréntesis se llama índice
y designa la posición del elemento en el arreglo.
Cada elemento del arreglo se puede procesar como si
fuera una variable simple.
La dimensión de un arreglo está dada por la cantidad de
elementos que contiene y debe ser definida al comenzar
el programa.
A los arreglos unidimensionales se les suele conocer
como vectores.
5.2. CARGAR UN ARREGLO
La asignación de valores a los elementos de un vector se
realiza de esta forma:
A(4) 0
A(7) 4
Por supuesto que no vamos a cargar un vector de 100
elementos, escribiendo 100 asignaciones.
23
La carga de un vector se hace por medio del ciclo
desde....fin desde . Nuestro bucle va a comenzar en 1
hasta un número N que es la longitud del vector.
Pero antes, no demos olvidar que el vector debe ser
dimensionado. Al dimensionar un vector le decimos a la
máquina que reserve los espacios de memoria necesarios
para los elementos del vector.
Los problemas relacionados con vectores tendrán casi
siempre esta forma
inicio
Leer dimensión del vector
Dimensionar Vector
Cargar Vector
Procesamiento de los elementos del vector (según lo que
se pida)
Imprimir Vector
fin
Por lo tanto, vamos a tener tres desde...fin desde bien
diferenciados:
• Un bucle para la carga
• Un bucle para el proceso
• Un bucle para la impresión
Aunque la carga y el proceso pueden hacerse dentro de
un solo bucle, particularmente no recomiendo esta
práctica, ya que casi siempre crea dificultades
innecesarias.
Ejercicio: Cargar un vector de 30 componentes.
No olvidemos que antes de cargar un vector debemos
dimensionarlo. En este caso la dimensión del vector es
30.
Luego habilitaremos un bucle desde....fin desde
comenzando en 1 hasta 30. Llamaremos V a nuestro
vector.
inicio
dimensionar v(30)
desde i= 1 hasta 30
leer v(i)
fin desde
fin
De esta forma hemos cargado un arreglo v con
componentes. Ahora bien, el usuario deberá siempre
poder determinar la dimensión del arreglo sobre el que
quiera trabajar. Por eso, vamos a leer la dimensión del
vector en una variable:
inicio
Leer n
dimensionar v(n)
desde i = 1 hasta n
Leer v(i)
fin desde
fin
Así vamos a cargar un arreglo SIEMPRE
5.3. IMPRIMIR UN ARREGLO
El procedimiento para imprimir un arreglo es casi
exactamente igual al proceso de carga, con la diferencia
que en lugar de leer, vamos a imprimir. Para el caso de
nuestro arreglo v de n componentes:
desde i= 1 hasta n
imprimir v(i)
fin desde
Es bueno volver a señalar que los elementos de un
arreglo son todos del mismo tipo (todos numéricos o
todos alfanuméricos).
5.4. PROCESANDO UN ARREGLO
Ejercicio: Leer un vector de N componentes. Hallar la
suma y el promedio de los elementos del vector.
Se pide la suma y el promedio de los elementos.
Sabemos que el promedio lo hallaremos dividiendo la
suma todos los elementos, sobre la cantidad.
Nuestro arreglo (al que llamaremos h) va a tener una
dimensión d, que será determinada por el usuario.
Siguiendo el esquema que habíamos visto, vamos a tener
primeramente un bucle para la carga del arreglo, otro
para el proceso y otro para imprimir el arreglo.
inicio
suma 0
leer d
dimensionar h (d)
desde i = 1 hasta h
leer h (i)
fin desde
desde i = 1 hasta d
suma suma + h(i)
fin desde
promedio suma/d
imprimir h (i)
fin
24
desde
impimir ""La suma de los elementos del vector es:",
suma
imprimir "El promedio es:", promedio
fin
5.5. ARREGLOS BIDIMENSIONALES
Matrices
Un arreglo bidimensional o matriz es un conjunto de
datos homogéneos (todos del mismo tipo), cada uno de
los cuales debe referenciarse por dos índices. Los índices
determinan la posición de una fila y una columna.
En este ejemplo tenemos una matriz de dimensión M *
N, en donde M es el número de columnas y N el número
de filas. Aquí M=5 y N=6.
El número total de elementos de la matriz será entonces
5*6 = 30.
De la misma forma que los vectores, una matriz debe
tener un nombre. Llamaremos MAT a nuestra matriz
ejemplo y determinaremos la posición de algunos de sus
elementos. MAT será de tipo alfanumérico.
La matriz MAT está definida con 5 filas y 6 columnas.
La notación para el dimensionamiento de una matriz es
NOMBRE (cantidad de filas, cantidad de columnas);
luego: MAT(5, 6)
Una vez que la matriz contenga datos (veremos más
adelante como cargar una matriz) para referirnos a un
elemento debemos conocer en que fila y que columna
reside ese elemento, por ejemplo:
MAT (1,1) = "A"
MAT(3, 5) ="Ñ"
MAT (4,3)= "OK"
MAT (5,4)="L"
Dimensionamiento y Carga de una matriz
Así como un arreglo unidimensional (vector) tiene que
ser nombrado y dimensionado antes de ser utilizado, una
matriz también. La instrucción para dimensionar un
matriz es:
dimensionar M(5,6)
La carga de datos se realiza de la misma forma que un
vector, por medio de un bucle desde....fin desde; solo
que en este caso, vamos a necesitar 2 bucles; uno que
recorra las filas y otro las columnas:
desde fila = 1 hasta 5
desde columna = 1 hasta 6
leer MAT(fila, columna)
fin-desde
fin-desde
En este ejemplo, la variable fila comienza en el valor 1,
luego se da inicio al bucle columna que desde 1 hasta 6.
El bucle de las columnas debe terminar todo su recorrido
para que pueda comenzar el siguiente valor de fila.
El recorrido de una matriz se hace, por tanto de esta
manera:
25
Una matriz también puede recorrerse por columnas. Al
programar, no siempre podremos predefinir el tamaño de
un matriz, por eso, solicitaremos al usuario que ingrese
la cantidad de filas y columnas con las que desea
dimensionar una matriz:
inicio
leer cantfila, cantcolumna
dimesionar MAT(cantfila, cantcolumna)
desde fila=1 hasta cantfila
desde columna=1 hasta cantcolumna
leer MAT(fila,columna)
fin-desde
fin-desde
fin
Este algoritmo solicita las dimensiones de la matriz, la
dimensiona y luego procede a cargarla.
Una matriz se imprime utilizando también dos índices:
inicio
leer cantfila, cantcolumna
dimesionar MAT(cantfila, cantcolumna) -
----- se dimensiona
desde fila=1 hasta cantfila
desde columna=1 hasta cantcolumna
leer MAT(fila,columna)
------- lectura
fin-desde
fin-desde
desde fila=1 hasta cantfila
desde columna=1 hasta cantcolumna
imprimir MAT(fila,columna) ---
----- impresión
fin-desde
fin-desde
fin
Procesando una matriz.
Proceso de una matriz se realiza también forma análoga
a los ejemplos anteriores. Utilicemos un ejemplo que
calcula el promedio de los elementos de una matriz.
inicio
leer cantfila, cantcolumna
dimensionar M (cantfila, cantcolumna)
desde I = 1 hasta cantfila
desde J=1 hasta cantcolumna
leer M(I, J)
fin-desde
fin-desde
desde I=1 hasta cantfila
desde J=1 hasta cantcolumna
suma suma + M(I, J)
fin-desde
fin-desde
promedio f suma / (cantfila * cantcolumna)
desde I = 1 hasta cantfila
desde J=1 hasta cantcolumna
imprimir M(I, J)
fin-desde
fin-desde
fin
Una matriz que tiene la misma cantidad de filas y de
columnas se llama matriz cuadrada.
1 2 3 4 5
2
3
4
5
Esta es una matriz cuadrada de orden 5.
Las matrices cuadradas tienen ciertas características; por
ejemplo, los elementos en donde el número de filas es
igual al número de columnas se llama diagonal principal
(señalados en amarillo): Los elementos de la diagonal
principal tienen, entonces, la propiedad de que fila =
columna
La diagonal principal define así dos áreas bien notorias,
una que está por encima y otra por debajo. La región
determinada por los elementos situados sobre la diagonal
26
principal se llama matriz triangular superior que tiene la
propiedad de que fila < columna.
La matriz triangular inferior es la zona situada debajo de
la diagonal principal, cuyos índices cumplen con la
propiedad: fila > columna.
Elementos de la Matriz
triangular superior
Elementos de la Matriz
triangular inferior
Operaciones con Matrices
1- Suma de matrices: Si A y B son dos matrices de igual
dimensión (MxN), entonces la suma de Ay B existe y es
igual a una matriz C también de dimensión MxN en
donde cada C (i, j) = A (i, j) + B (i, j):
Matriz A
10 8 3 0
7 -3 33 45
9 15 71 29
Matriz B
1 6 9 69
14 22 56 7
3 5 80 1
A y B son de igual dimensión, por lo tanto existe una
matriz C que es la suma de A y B
11 14 13 69
21 19 89 52
12 20 151 30
2- Producto Escalar por una matriz: Si A es una matriz
de orden (dimensión) MxN y K es un escalar, el
producto de K*A es igual a otra matriz D también de
orden MxN en donde casa D (i, j) = K * A (i ,j):
Matriz A:
1 2 3 4 5 6
7 8 9 10 11 12
0
-
1
-
2
-3 21 22
33 3 0 5 12 4
Escalar: 5
Resultado de multiplicar la matriz A por el escalar
(numero) 5
Matriz D
5 10 15 20 15 30
35 40 45 50 55 60
0 -5
-
10
-
15
105 110
165 15 0 25 60 20
3- Traspuesta de una matriz: Si A es una matriz de orden
MxN, la traspuesta de A, denotada como A°, es otra
matriz de orden NxM donde cada B (i, j) = A (j,i). Una
matriz es simétrica si A° = A:
Matriz A:
0 1 2
3 4 5
6 7 8
9 10 11
Traspuesta de A, A°:
0 3 6 9
1 4 7 10
2 5 8 11
Ejercicios
5.1.Se tiene una tabla con los datos de matricula, peso,
estatura y sexo de los alumnos de una Universidad.
Construya un algoritmo que reciba los datos de la tabla
antes mencionada, calcule y genere como salida el
promedio de los pesos y de las estaturas. Su algoritmo
debe entregar estos valores considerando todos los
individuos y también diferenciando por sexo. Considere
fin de datos la matrícula en cero (0).
5.2.Se dispone de una tabla con las temperaturas
registradas a medio día durante el año 2007. Se
desea determinar cuál fue la máxima, cual fue la
mínima y cuantas veces se repitió cada una de estas
durante el año 2007. Además se desea saber el
promedio de dichas temperaturas.
5.3.Cargar un vector de n componentes
27
5.4.Leer una lista de n números y almacenar en un
vector el factorial de cada número de la lista.
5.5.Leer un vector de N componentes. Hallar la suma y
el promedio de los elementos del vector
5.6.Leer y almacenar en una matriz de m x n una
secuencia de números.
5.7.Dadas 2 matrices a y b obtener la suma.
5.8.Dada una matriz determinar la posición ( i , j ) del
mayor número y del menor.
5.9.Leer una secuencia de n números almacenarlos en
un vector A (1 .. n) y mostrar la suma de los
elementos pares y el mayor de los impares.
5.10. Dada una matriz de m x n (1..4)(1..5) realizar el
proceso de ordenar la misma.
5.11. Dada una matriz [1..n] [1..m] realizar proceso
de ordenar solo por filas.
5.12. Dado un vector de números determinada
aquellos que sean primos.
5.13. Calcular el promedio de los elementos de una
matriz.
5.14. Suma de Matrices
5.15. Producto Escalar por una matriz
5.16. Traspuesta de una matriz.
5.17. Desarrolla un algoritmo que lea por el teclado
una secuencia de n enteros y visualice por pantalla
los que sean pares.
5.18. Diseñar un programa que cree una lista de
números enteros. Cada número se debe situar en
orden creciente. El programa visualizará también el
contenido de la lista
UNIDAD 6:
FUNCIONES Y PROCEDIMIENTOS.
En general un problema complejo puede ser resuelto de
manera más fácil y eficiente si se divide en problemas
más pequeños y concentrándonos en cada etapa en la
solución de ese "subproblema". Esto implica que el gran
problema original será resuelto por medio de varios
módulos, cada uno de los cuales se encarga de resolver
un subproblema determinado. Esos módulos, se conocen
con el nombre de subalgoritmos. Un subalgoritmo no es
más que un algoritmo que tiene la función de resolver un
subproblema.
Los subalgoritmos se escriben sólo una vez, luego es
posible hacer referencia a ellos ("llamarlos") desde
diferentes puntos del algoritmo. La ventaja obvia es que
nos permite reutilización y evita la duplicación de
códigos.
Los subalgoritmos son independientes entre si, en el
sentido de que se puede escribir y verificar cada módulo
en forma separada sin preocuparse por los demás
módulos. Por ello, es menos complicado localizar un
error y también se puede modificar el código sin tener
que tocar o rehacer varias partes del mismo.
Los subalgoritmos pueden ser dos tipos: Funciones y
Procedimientos (también llamadas subrutinas o
subprogramas).
Notemos que al utilizar procedimientos y funciones se
establece un límite para el alcance de las variables, unas
tendrán efecto y valor sólo en el subalgoritmo y otras en
el algoritmo principal, también es posible especificar
que una variable tenga efecto en el algoritmo principal y
todos los subalgoritmos. Este punto lo estudiaremos con
más detalle en la sección Ámbito de variables.
Los subalgoritmos pueden recibir valores del algoritmo
principal (parámetros), trabajar con ellos y devolver un
resultado al algoritmo principal: No existen limitaciones
en cuanto a las acciones que pueda ejecutar un
subalgoritmo. Un subprograma puede, a su vez, invocar
o llamar a otros o a sus propios subprogramas, inclusive
puede llamarse a sí mismo (esto se conoce como
recursividad).
FUNCIONES
Desde el punto de vista matemático, una función es una
expresión que toma uno o más valores llamados
argumentos y produce un valor que se llama resultado.
Este resultado es además, único. Ejemplos de funciones
matemáticas son los logaritmos, funciones
trigonométricas (seno, coseno, etc).
El en ambiente de programación y diseño de algoritmos,
las funciones tienen exactamente el mismo significado.
Es decir, se realizan ciertos cálculos con una o más
variables de entrada y se produce un único resultado. En
programación y diseño de algoritmos, este resultado
podrá ser un valor numérico, alfanumérico o lógico. Es
decir, una función puede devolver un resultado que
puede ser una cadena, un número o un valor de tipo
lógico (verdadero o falso). Esto hace que en los
lenguajes de programación, debamos especificar de qué
tipo es una función. Una función será de tipo numérica
cuando devuelva un número y será de tipo alfanumérica
o string cuando devuelva una cadena. En el caso de las
funciones de tipo numérico se tienen subdivisiones que
están dadas por los tipos de datos soportados por el
lenguaje (integer o entero, simple o single, doble
precisión o double, real, etc). O sea que cuando una
función numérica devuelva un valor numérico entero
28
(sin decimales) será de tipo entera o integer. Si devuelve
un valor decimal será doble o simple, dependiendo del
grado de exactitud que se desea; sin embargo como esto
es propio de lenguajes de programación no se tendrá en
cuenta en este tutorial (las funciones serán numéricas
cuando devuelvan un dato numérico y de tipo string
cuando devuelvan una cadena, sin necesidad de
especificar esto previamente en el algoritmo). Puedes
consultar al profesor de la materia que te proporcione
más detalles sobre los tipos de datos y su aplicación en
las funciones.
Tomemos como ejemplo al función matemática sen(x).
En este caso la función se llama sen (seno) y el
argumento o valor que se pasa a la función para que lo
procese es x. Así sen(90º)=1. Este valor es además único
(por eso se llama función), es decir no existe ningún otro
número que la función pueda procesar y devolver 1 más
que 90º.
Cuando utilicemos esta función en un algoritmo y
necesitemos el valor del sen(90º), debemos asignarlo a
una variable, así:
valor sen(90)
En este caso, la variable valor será = 1, por la tanto
nuestra función es numérica.
La llamada a una función será siempre:
variable funcion (parámetros)
Ejemplos: La llamada a una función MES que devuelva
el nombre del mes, pasándole el valor numérico
correspondiente será:
nombre_mes MES(2) (esto
devolvería "Febrero")
La función es de tipo string porque devuelve una cadena
como resultado en la variable nombre_mes.
Ya sabemos como llamar a una función, ahora veremos
como se escribe la función.
Como las funciones y procedimientos no se escriben en
el algoritmo principal (en programación existen espacios
destinados a ellos) todas las funciones y procedimientos
que utilicen un algoritmo se podrán escribir antes o
después del algoritmo principal.
Para efectos de este curso las funciones y
procedimientos se escribirán siempre al final del
algoritmo principal.
Una función se identifica mediante su nombre. De la
misma manera que cuando escribimos un algoritmo
comenzamos poniendo: inicio y al final fin, debemos
hacer lo mismo para una función. Esto nos dirá donde
comienza y donde termina la función. La sintaxis es:
Función nombre_funcion (parámetros)
<instrucciones>
<instrucciones>
Fin función
Todas las funciones devuelven un sólo valor. Siempre
debemos indicar a la función mediante una instrucción
que devuelva el valor al algoritmo principal (recordemos
que la función será llamada desde un algoritmo). Esto se
debe hacer en el cuerpo de la función cuando tengamos
el resultado. Así que, tomando como ejemplo la función
MES, veremos como se escribe el algoritmo principal,
como se llama a la función desde el algoritmo principal
y cómo se declara la función:
Algoritmo principal
Inicio
leer numero_mes
mientras numero_mes <=0 ó numero_mes >12
imprimir "Debe ingresar un número entre 1 y
12" > Validación del número entre 1 y 12
leer numero_mes
fin mientras
nombre_mes MES
(numero_mes) > Llamada a la función
MES
imprimir "El mes correspondiente es: ", nombre_mes
fin
Función MES (valor)
Según sea valor
caso=1
nombre="Enero"
caso=2
nombre= "Febrero"
caso=3
nombre = "Marzo"
caso =4
nombre = "Abril"
caso=5
nombre = "Mayo"
caso=6
nombre = "Junio"
caso=7
nombre ="Julio"
caso=8
nombre="Agosto"
caso=9
29
nombre="Setiembre"
caso= 10
nombre = "Octubre"
caso=11
nombre= "Noviembre"
caso= "12"
nombre="Diciembre"
fin caso
MES nombre > Le decimos a la función que
devuelva el resultado al algoritmo principal
Fin función
Debes notar como pasan los valores desde el algoritmo
principal a la función. En este caso, cuando se llama a la
función:
nombre_mes  MES (numero_mes)
El valor que se pasa a la misma está en la variable
numero_mes que toma un valor comprendido entre 1 y
12.
Cuando se llama a la función, este valor debe ser
recibido por la misma, en este caso en el cuerpo de la
función se coloca entre paréntesis el nombre de la
variable que recibirá el valor:
Función MES (valor)
Si se pasan varios valores, todos deben ser recibidos en
sus correspondientes variables.
La función toma el valor pasado desde el algoritmo y lo
guarda en la variable valor para procesarlo. Luego de
que obtiene un resultado, en este caso el valor de
nombre_mes, se le ordena a la función que devuelva ese
valor al algoritmo principal:
MES nombre
Esto es siempre así: nombre_funcion resultado
Es en este punto donde se retorna a la línea siguiente a la
que llamó a la función en el algoritmo principal:
imprimir "El mes correspondiente es: ",
nombre_mes
Resumiendo. Una función devuelve un sólo valor, para
que funcione la función debe recibir uno o varios valores
desde el algoritmo principal, realizar el proceso y
devolver el resultado. La función se escribe de igual
forma que cualquier algoritmo, la diferencia consiste en
que en lugar de inicio y fin, ponemos:
Función <nombre_función>
fin_función
La llamada a la función se hace con su nombre y el o los
valores que le pasamos.
Cuando necesitemos procesar uno o varios valores y
ofrecer UN resultado, utilizaremos funciones.
Ejemplos de Funciones
A continuación, estudiaremos ejemplos de funciones. De
esta forma comprenderemos mejor el su funcionamiento.
Ejemplo1: Escribir una función que devuelva la raíz
cuadrada de un número ingresado por teclado.
Aunque todos los lenguajes de programación tiene
instrucciones para calcular una raíz cuadrada, como aquí
no estamos escribiendo código, encontraremos la raíz
cuadrada de un número elevando a la potencia 1/2. En
general, la raíz x de un número se obtiene elevando ese
número a la potencia 1/x.
Llamaremos RAIZCUA a la función que vamos a
escribir. La función RAIZCUA debe obtener un valor
que se pasa desde el algoritmo principal (el número del
cual queremos calcular la raíz cuadrada), elevarlo a la
potencia 1/2 y luego devolver este valor al algoritmo
principal. Recordemos que no podemos permitir el
ingreso de números negativos.
inicio
leer numero
mientras numero < = 0
imprimir "Ingrese un número positivo"
leer numero
fin-mientras
resultado RAIZCUA(numero)
imprimir "La raiz cuadrada es:", resultado
fin
Función RAIZCUA(valor)
raiz valor ^ 1/2
RAIZCUA raiz
fin-función
Este algoritmo comienza leyendo el número, verifica
que sea un número positivo con la estructura repetitiva
mientras y luego hace el llamado a la función RAIZCUA
pasándole la variable numero. El valor de esa función se
recibe en una variable resultado.
La función RAIZCUA recibe el numero que el programa
le pasa en la variable valor, luego eleva ese numero a la
potencia 1/2 y lo asigna a la variable raíz.
30
Para que la función devuelva el resultado del proceso al
algoritmo principal, se asigna la variable raiz a la
función, así: RAIZCUA raiz (esto será así para todas
las funciones que escribamos).
Observa que existen variables tanto en el algoritmo
principal como en la función. Hablemos de ellas.
ÁMBITO DE LAS VARIABLES
En programación existen dos tipos de variables, las
llamadas locales y las variables globales.
Variables Locales: Son aquellas que se encuentran
dentro de un subprograma (procedimiento o función)
y es distinta de las variables que están en el algoritmo
principal. El valor se confina al subprograma en el
que está declarada.
Variables Globales: Son las que se definen o están
declaradas en el algoritmo principal y tiene efecto
tanto en el algoritmo principal como en cualquiera de
sus subprogramas.
Tomando como referencia la función RAIZCUA, las
variables globales son: numero y resultado. Y las
variables locales son: valor y raíz.
valor y raiz sólo existen en la función RAIZCUA, si en
el algoritmo principal tratamos de utilizar estas variables
o imprimirlas, no obtendremos nada, ya que para el
algoritmo estas variables son locales y desde su punto de
vista NO EXISTEN.
numero y resultado son variables globales, es decir que
están disponibles en el algoritmo principal y también en
la función RAIZCUA.
Una variable local (de un subprograma) no tiene ningún
significado en el algoritmo principal y otros
subprogramas. Si un subprograma asigna un valor a una
de sus variables locales, este valor no es accesible a
otros subprogramas, es decir, no pueden utilizar este
valor. Las variables globales tienen la ventaja de
compartir información de diferentes subprogramas.
En resumen: las variables locales son las que se definen
en subprogramas y solo tienen valor dentro de él. Las
variables locales son las definidas en el algoritmo
principal y tienen valor y se pueden utilizar en cualquier
parte de algoritmo o en cualquier subprograma.
Ejemplo 2: Diseñar una función que calcule la media de
tres números.
inicio
leer numero1, numero2, numero3
prom PROMEDIO(numero1, numero2,
numero3)
imprimir "El promedio es:", prom
fin
Función PROMEDIO(valor1, valor2,valor3)
promedio (valor1 + valor2 + valor3) / 3
PROMEDIO promedio
fin-función
PROCEDIMIENTOS
Hemos visto que las funciones se utilizan para devolver
como resultado un valor Sin embargo, en ocasiones
necesitaremos devolver más de un resultado o también
ejecutar las mismas líneas de código varias veces en un
algoritmo (como por ejemplo una ordenación, etc.) En
estas situaciones la función no es apropiada y se
utilizarán los procedimientos (también llamados
subrutinas).
Un procedimiento es un conjunto de sentencias o
instrucciones que realizan una determinada tarea y que
pueden ser ejecutados desde más de un punto del
programa principal. Un procedimiento tiene una
llamada, cuando el procedimiento se ejecuta totalmente,
vuelve al punto desde donde fue llamado y se ejecuta la
siguiente instrucción.
El procedimiento se escribe como cualquier otro
algoritmo, solo existen diferencias en la parte inicial y
final. Para nombrar los procedimientos se deben seguir
las mismas reglas que para las variables. Notemos que el
objetivo de los procedimientos es ayudar en la
modularidad del programa y evitar la repetición de
instrucciones ya que estas se pueden escribir en un
procedimiento y en lugar de repetirlas, llamar al
procedimiento cuantas veces sea necesario.
Desde el programa principal es posible pasar valores
(numéricos, alfanuméricos o combinación de ambos) al
procedimiento. Este utilizará esos valores para realizar
un determinado proceso. Los valores que se pasan a un
procedimiento (en forma de variables) se llaman
parámetros (de igual forma que en las funciones).
Declaración de un procedimiento
La sintaxis para la declaración de un procedimiento es la
siguiente:
Procedimiento Nombre_procedimiento (parámetros)
<......acciones...>
<......acciones...>
31
Fin Procedimiento
La llamada a un procedimiento se hace simplemente por
su nombre:
Nombre_procedimiento(parámetros)
También es posible que no se pase ningún parámetro al
procedimiento, en cuyo caso la llamada se hace así:
Nombre_procedimiento()
Cuando no se pasan parámetros se puede obviar los
paréntesis.
Nombre_procedimiento
Podemos utilizar procedimientos, por ejemplo para
dibujar recuadros en la pantalla, mostrar mensajes de
error, realizar procesos en los que se debe devolver más
de un resultado, colocar en un procedimiento las líneas
de código que se repiten varias veces en un algoritmo.
Cuando necesitemos devolver más de un valor en un
procedimiento, las variables que se devolverán los
resultados deben figurar en la lista de parámetros.
Ejemplo 1: Procedimiento para calcular el cociente y
resto de la división entre dos números
inicio
leer numeroA, numeroB
DIVISION (numeroA, numeroB, P, Q)
imprimir P, Q
fin
Procedimiento DIVISION (dividendo, divisor, cociente,
resto)
cociente dividendo / divisor
resto dividendo - cociente * resto
fin-procedimiento
En este ejemplo, se pasan los números el dividendo y
divisor (numeroA y numeroB respectivamente) y
también en los parámetros de llamada al procedimiento
deben figurar las variables en las que se devolverán los
resultados de cociente y resto (P y Q respectivamente)
por eso la llamada es:
DIVISION (numeroA, numeroB, P, Q)
El procedimiento recibe los valores numeroA en
dividendo, numeroB en divisor y se colocan las variables
en las que se pasarán al programa principal el cociente y
resto. P recibirá el valor de cociente y Q recibirá el valor
del resto.
Es decir, que cuando necesitemos devolver más de un
valor, los parámetros del procedimiento deben ser los
valores que se pasan al procedimiento y luego las
variables en las que se recibirán los resultados.
El objetivo de esta sección es ayudar a comprender
cómo funcionan las funciones y procedimiento. Puedes
pedir a tu profesor más ejemplos de procedimientos y
funciones.
Ejercicios
6.1.Utilizar una declaración de tipos para una matriz de
números reales de tamaño DIM´DIM, donde DIM es
una constante, declarada como tal, de valor 10.
Escribir las siguientes funciones:
a) Función traspuestaM: Acepta una matriz como único
argumento y devuelve su matriz traspuesta.
b) Función simetricaM: Acepta una matriz como único
argumento y devuelve 1 si dicha matriz es simétrica y 0
si no lo es. Para averiguar si la matriz es o no simétrica
se debe usar la función traspuestaM del apartado
anterior.
c) Función sumaM: Acepta tres matrices devolviendo en
la tercera de ellas la suma de las dos primeras.
d) Función restaM: Acepta tres matrices devolviendo en
la tercera de ellas la resta de las dos primeras.
e) Función multiplicaM: Acepta tres matrices
devolviendo en la tercera de ellas la multiplicación de
las dos primeras.
6.2.Definir una función que tenga por argumento una
lista y devuelva el tercer elemento de dicha lista.
6.3.Definir una función que tomando como argumentos
una lista y un elemento, devuelva T si el elemento
aparece más de una vez en la lista.
Generales
1.Construya un algoritmo que reciba como entrada dos
valores: a y b, donde a < b. Este algoritmo debe
generar como salida los múltiplos de a que son
menores que b.
2.La serie de Fibonacci permite aproximar la forma en
que se reproducen los conejos. Se sabe que una pareja
de conejos puede tener dos crías al mes, y esto se da a
partir del tercer mes de nacidos, en el cual los conejos
alcanzan su edad madura. La forma en que aumenta la
población de conejos mes a mes se puede ver en la
siguiente tabla, si consideramos que no se mueren
conejos y que inicialmente se cuenta con una pareja de
conejos recién nacida:
32
mes parejas de
conejos
1
2
3
4
5
6
1
1
2
3
5
8
Construya un algoritmo que dado un valor n,
correspondiente a un mes cualquiera, determine la
cantidad de conejos en ese mes. Indicación: observe que
en cada mes, la cantidad de conejos corresponde a la
suma de los conejos de los dos meses anteriores a ese
mes.
3.Construya un algoritmo que genere los términos de la
siguiente serie, y además calcule su valor para un n
dado.
4.El siguiente es un menú de una hamburguesería.
Diseñar un algoritmo capaz de leer número de cada
alimento ordenado y calcular la cuenta total:
Hamburguesa 1.50
Con queso 1.75
Refresco 1.25
Patatas 1.00
Ensalada 2.00
5.Elabore, un algoritmo que permitan calcular el
máximo común divisor de dos números enteros
positivos.
6.La cedula en Ecuador, es uno de los documentos más
importantes que tiene una persona. Por este motivo es
muy importante que todo sistema informático que
maneje la misma sea capaz de reconocer si la cedula es
valida.
La cedula consta de 10 dígitos, el último digito es un
digito de control.
Para reconocer si una cedula es verdadera se debe
seguir el siguiente procedimiento:
• Comprobar que la cedula tiene 10 dígitos y que
estos sean numéricos. De no ser así no es
correcta.
• Sumar los dígitos de los lugares pares.
• Multiplicar por dos los dígitos de los lugares
impares y sumarlos. (Si al multiplicar por dos un
digito impar, la multiplicación es mayor que 9,
se debe restar 9 a la multiplicación obtenida)
• Sumar los dos resultados obtenidos
anteriormente.
• Buscar la decena igual o superior y restar la
suma obtenida a esta decena.
• Comprobar que el dígito de control que hemos
calculado y el último dígito del de la cedula
coinciden, de lo contrario no es válida.
Ej: 100336275-1
1 0 0 3 3 6 2 7 5 1
2 0 6 4 1 13
0 3 6 7 16
Suma 29
Decena igual o superior 30
Resta 1
7.Convertir un número decimal a binario.
Ej:
134 2
134 67 2
Resto 0 66 33 2
1 32 16 2
1 16 8 2
0 8 4 2
0 4 2 2
0 2 1
0
Número
Binario: 1 0 0 0 0 1 1 0
75 2
74 37 2
Resto 1 36 18 2
1 18 9 2
0 8 4 2
1 4 2 2
0 2 1
0
Número
Binario: 1 0 0 1 0 1 1
8.Transformar un número decimal en letras.
Ej: 134
Ciento treinta y cuatro.
Algoritmos+y+solucion+de+problemas
Algoritmos+y+solucion+de+problemas
Algoritmos+y+solucion+de+problemas
Algoritmos+y+solucion+de+problemas
Algoritmos+y+solucion+de+problemas
Algoritmos+y+solucion+de+problemas
Algoritmos+y+solucion+de+problemas
Algoritmos+y+solucion+de+problemas
Algoritmos+y+solucion+de+problemas
Algoritmos+y+solucion+de+problemas
Algoritmos+y+solucion+de+problemas

Más contenido relacionado

La actualidad más candente

Metodos iterativos
Metodos iterativosMetodos iterativos
Metodos iterativoscyndy
 
Ejercicios resueltos grafos
Ejercicios resueltos grafosEjercicios resueltos grafos
Ejercicios resueltos grafosTERE FERNÁNDEZ
 
Ejercicios (Algoritmo: Pseudocódigo-Diagrama de Flujo)
Ejercicios (Algoritmo: Pseudocódigo-Diagrama de Flujo)Ejercicios (Algoritmo: Pseudocódigo-Diagrama de Flujo)
Ejercicios (Algoritmo: Pseudocódigo-Diagrama de Flujo)Natalia Alejandra
 
Diagramas de Flujo y Algoritmos (Informática ll)
Diagramas de Flujo y Algoritmos (Informática ll)Diagramas de Flujo y Algoritmos (Informática ll)
Diagramas de Flujo y Algoritmos (Informática ll)irvingsalazar2
 
curso Pseint 1 (16 ejercicios basicos)
curso Pseint 1 (16 ejercicios basicos)curso Pseint 1 (16 ejercicios basicos)
curso Pseint 1 (16 ejercicios basicos)Luis Ancel
 
Problemas de diseño de base de datos
Problemas de diseño de base de datosProblemas de diseño de base de datos
Problemas de diseño de base de datosgonzalopomboza
 
21 problemas de algoritmo resueltos
21 problemas de algoritmo resueltos21 problemas de algoritmo resueltos
21 problemas de algoritmo resueltosRoldan El Gato
 
Lenguaje natural pseudocodigo diagramacion y programacion
Lenguaje natural pseudocodigo diagramacion y programacionLenguaje natural pseudocodigo diagramacion y programacion
Lenguaje natural pseudocodigo diagramacion y programacionClaudia Poza
 
Diagrama entidad-relacion normalización
Diagrama entidad-relacion normalizaciónDiagrama entidad-relacion normalización
Diagrama entidad-relacion normalizacióncintiap25
 
Análisis de riesgos de un proyecto de software
Análisis de riesgos de un proyecto de softwareAnálisis de riesgos de un proyecto de software
Análisis de riesgos de un proyecto de softwareAngel Reyes
 
Arreglos vectores pseint
Arreglos vectores pseintArreglos vectores pseint
Arreglos vectores pseintHEIVER CUESTA
 

La actualidad más candente (20)

Recursividad
RecursividadRecursividad
Recursividad
 
Metodos iterativos
Metodos iterativosMetodos iterativos
Metodos iterativos
 
Euler y runge kutta
Euler y runge kuttaEuler y runge kutta
Euler y runge kutta
 
Ejercicios resueltos grafos
Ejercicios resueltos grafosEjercicios resueltos grafos
Ejercicios resueltos grafos
 
Ejercicios (Algoritmo: Pseudocódigo-Diagrama de Flujo)
Ejercicios (Algoritmo: Pseudocódigo-Diagrama de Flujo)Ejercicios (Algoritmo: Pseudocódigo-Diagrama de Flujo)
Ejercicios (Algoritmo: Pseudocódigo-Diagrama de Flujo)
 
Arreglos c++
Arreglos c++Arreglos c++
Arreglos c++
 
Requerimientos del software
Requerimientos del software Requerimientos del software
Requerimientos del software
 
Diagramas de Flujo y Algoritmos (Informática ll)
Diagramas de Flujo y Algoritmos (Informática ll)Diagramas de Flujo y Algoritmos (Informática ll)
Diagramas de Flujo y Algoritmos (Informática ll)
 
Diagrama de contexto
Diagrama de contextoDiagrama de contexto
Diagrama de contexto
 
curso Pseint 1 (16 ejercicios basicos)
curso Pseint 1 (16 ejercicios basicos)curso Pseint 1 (16 ejercicios basicos)
curso Pseint 1 (16 ejercicios basicos)
 
Problemas de diseño de base de datos
Problemas de diseño de base de datosProblemas de diseño de base de datos
Problemas de diseño de base de datos
 
21 problemas de algoritmo resueltos
21 problemas de algoritmo resueltos21 problemas de algoritmo resueltos
21 problemas de algoritmo resueltos
 
Lenguaje natural pseudocodigo diagramacion y programacion
Lenguaje natural pseudocodigo diagramacion y programacionLenguaje natural pseudocodigo diagramacion y programacion
Lenguaje natural pseudocodigo diagramacion y programacion
 
ALGORITMO RESUELTOS EN PSEINT
ALGORITMO RESUELTOS EN PSEINTALGORITMO RESUELTOS EN PSEINT
ALGORITMO RESUELTOS EN PSEINT
 
Calculadora con operaciones básicas en java
Calculadora con operaciones básicas en javaCalculadora con operaciones básicas en java
Calculadora con operaciones básicas en java
 
Diagrama entidad-relacion normalización
Diagrama entidad-relacion normalizaciónDiagrama entidad-relacion normalización
Diagrama entidad-relacion normalización
 
Análisis de riesgos de un proyecto de software
Análisis de riesgos de un proyecto de softwareAnálisis de riesgos de un proyecto de software
Análisis de riesgos de un proyecto de software
 
Arreglos vectores pseint
Arreglos vectores pseintArreglos vectores pseint
Arreglos vectores pseint
 
22 ejercicios base de datos
22 ejercicios base de datos 22 ejercicios base de datos
22 ejercicios base de datos
 
Simulación - Algoritmo de productos medios
Simulación - Algoritmo de productos mediosSimulación - Algoritmo de productos medios
Simulación - Algoritmo de productos medios
 

Similar a Algoritmos+y+solucion+de+problemas

Metodologia programacion
Metodologia  programacionMetodologia  programacion
Metodologia programacionAquino1912
 
SOLUCIONAR PROBLEMAS POR MEDIO DE AGORITMOS
SOLUCIONAR PROBLEMAS POR MEDIO DE AGORITMOSSOLUCIONAR PROBLEMAS POR MEDIO DE AGORITMOS
SOLUCIONAR PROBLEMAS POR MEDIO DE AGORITMOSKatherinBarrios17
 
SOLUCIONAR PROBLEMAS POR MEDIO DE ALGORITMOS
SOLUCIONAR PROBLEMAS POR MEDIO DE ALGORITMOSSOLUCIONAR PROBLEMAS POR MEDIO DE ALGORITMOS
SOLUCIONAR PROBLEMAS POR MEDIO DE ALGORITMOSKatherinBarrios17
 
AnáLisis De Procedimientos AlgoríTmicos No Convencionales
AnáLisis De Procedimientos AlgoríTmicos No ConvencionalesAnáLisis De Procedimientos AlgoríTmicos No Convencionales
AnáLisis De Procedimientos AlgoríTmicos No ConvencionalesSandra Esposito
 
Introducción a la solución de problemas
Introducción a la solución de problemasIntroducción a la solución de problemas
Introducción a la solución de problemasJeckson Loza
 
Diana010
Diana010Diana010
Diana010dani t
 
Solucionar Problemas Por Medio de Algoritmos
Solucionar Problemas Por Medio de AlgoritmosSolucionar Problemas Por Medio de Algoritmos
Solucionar Problemas Por Medio de Algoritmospilgrim15
 
Diagrama de Pareto en Excel..pdf
Diagrama de Pareto en Excel..pdfDiagrama de Pareto en Excel..pdf
Diagrama de Pareto en Excel..pdfCristinaMuoz104
 
Diagrama de Pareto en Excel..pdf
Diagrama de Pareto en Excel..pdfDiagrama de Pareto en Excel..pdf
Diagrama de Pareto en Excel..pdfIsabelRojas526790
 
Solucionar problemas-por-medio-de-algoritmo
Solucionar problemas-por-medio-de-algoritmoSolucionar problemas-por-medio-de-algoritmo
Solucionar problemas-por-medio-de-algoritmoEspitiaGiancarlo
 
Solucionar problemas-por-medio-de-algoritmo
Solucionar problemas-por-medio-de-algoritmoSolucionar problemas-por-medio-de-algoritmo
Solucionar problemas-por-medio-de-algoritmoramosmendezshura
 
Solucionar problemas por medio de algoritmos
Solucionar problemas por medio de algoritmosSolucionar problemas por medio de algoritmos
Solucionar problemas por medio de algoritmospilgrim15
 
Metodologia para el analisis y planteamiento del problema
Metodologia para el analisis y planteamiento del problemaMetodologia para el analisis y planteamiento del problema
Metodologia para el analisis y planteamiento del problemayenmary
 
Diagrama de Pareto en Excel
Diagrama de Pareto en ExcelDiagrama de Pareto en Excel
Diagrama de Pareto en Excelvaleriacaicedo7
 

Similar a Algoritmos+y+solucion+de+problemas (20)

Solución de problemas con algoritmos
Solución de problemas con algoritmosSolución de problemas con algoritmos
Solución de problemas con algoritmos
 
Solución de problemas
Solución de problemasSolución de problemas
Solución de problemas
 
Metodologia programacion
Metodologia  programacionMetodologia  programacion
Metodologia programacion
 
SOLUCIONAR PROBLEMAS POR MEDIO DE AGORITMOS
SOLUCIONAR PROBLEMAS POR MEDIO DE AGORITMOSSOLUCIONAR PROBLEMAS POR MEDIO DE AGORITMOS
SOLUCIONAR PROBLEMAS POR MEDIO DE AGORITMOS
 
SOLUCIONAR PROBLEMAS POR MEDIO DE ALGORITMOS
SOLUCIONAR PROBLEMAS POR MEDIO DE ALGORITMOSSOLUCIONAR PROBLEMAS POR MEDIO DE ALGORITMOS
SOLUCIONAR PROBLEMAS POR MEDIO DE ALGORITMOS
 
AnáLisis De Procedimientos AlgoríTmicos No Convencionales
AnáLisis De Procedimientos AlgoríTmicos No ConvencionalesAnáLisis De Procedimientos AlgoríTmicos No Convencionales
AnáLisis De Procedimientos AlgoríTmicos No Convencionales
 
Algoritmosprogramacioncuaderno1
Algoritmosprogramacioncuaderno1Algoritmosprogramacioncuaderno1
Algoritmosprogramacioncuaderno1
 
Tarea programacion 1
Tarea programacion 1Tarea programacion 1
Tarea programacion 1
 
Barba y calvo 78
Barba y calvo 78Barba y calvo 78
Barba y calvo 78
 
Introducción a la solución de problemas
Introducción a la solución de problemasIntroducción a la solución de problemas
Introducción a la solución de problemas
 
Diana010
Diana010Diana010
Diana010
 
Solucionar Problemas Por Medio de Algoritmos
Solucionar Problemas Por Medio de AlgoritmosSolucionar Problemas Por Medio de Algoritmos
Solucionar Problemas Por Medio de Algoritmos
 
Diagrama de Pareto en Excel..pdf
Diagrama de Pareto en Excel..pdfDiagrama de Pareto en Excel..pdf
Diagrama de Pareto en Excel..pdf
 
Diagrama de Pareto en Excel..pdf
Diagrama de Pareto en Excel..pdfDiagrama de Pareto en Excel..pdf
Diagrama de Pareto en Excel..pdf
 
Solucionar problemas-por-medio-de-algoritmo
Solucionar problemas-por-medio-de-algoritmoSolucionar problemas-por-medio-de-algoritmo
Solucionar problemas-por-medio-de-algoritmo
 
Solucionar problemas-por-medio-de-algoritmo
Solucionar problemas-por-medio-de-algoritmoSolucionar problemas-por-medio-de-algoritmo
Solucionar problemas-por-medio-de-algoritmo
 
Solucionar problemas por medio de algoritmos
Solucionar problemas por medio de algoritmosSolucionar problemas por medio de algoritmos
Solucionar problemas por medio de algoritmos
 
Tarea de word
Tarea de wordTarea de word
Tarea de word
 
Metodologia para el analisis y planteamiento del problema
Metodologia para el analisis y planteamiento del problemaMetodologia para el analisis y planteamiento del problema
Metodologia para el analisis y planteamiento del problema
 
Diagrama de Pareto en Excel
Diagrama de Pareto en ExcelDiagrama de Pareto en Excel
Diagrama de Pareto en Excel
 

Último

644400074-LA-CONSOLIDACION-DE-LA-REPUBLICA-OLIGARQUICA-pdf.pptx
644400074-LA-CONSOLIDACION-DE-LA-REPUBLICA-OLIGARQUICA-pdf.pptx644400074-LA-CONSOLIDACION-DE-LA-REPUBLICA-OLIGARQUICA-pdf.pptx
644400074-LA-CONSOLIDACION-DE-LA-REPUBLICA-OLIGARQUICA-pdf.pptxRosiClaros
 
137489674-Regimenes-Tributarios-MYPES-ppt.ppt
137489674-Regimenes-Tributarios-MYPES-ppt.ppt137489674-Regimenes-Tributarios-MYPES-ppt.ppt
137489674-Regimenes-Tributarios-MYPES-ppt.pptALEJANDRAKATHERINESA
 
El uso de las T I C en la vida cotidiana.
El uso de las T I C en la vida cotidiana.El uso de las T I C en la vida cotidiana.
El uso de las T I C en la vida cotidiana.SEAT
 
644400074-LA-CONSOLIDACION-DE-LA-REPUBLICA-OLIGARQUICA-pdf.pdf
644400074-LA-CONSOLIDACION-DE-LA-REPUBLICA-OLIGARQUICA-pdf.pdf644400074-LA-CONSOLIDACION-DE-LA-REPUBLICA-OLIGARQUICA-pdf.pdf
644400074-LA-CONSOLIDACION-DE-LA-REPUBLICA-OLIGARQUICA-pdf.pdfRosiClaros
 
TEORIA CONTINGENCIAL Precursores y Aportes a la Administración
TEORIA CONTINGENCIAL Precursores y Aportes a la AdministraciónTEORIA CONTINGENCIAL Precursores y Aportes a la Administración
TEORIA CONTINGENCIAL Precursores y Aportes a la AdministraciónCUSICANQUIRAMREZLADY
 
Patrones Funcionales de Marjory Gordon.pptx
Patrones Funcionales de Marjory Gordon.pptxPatrones Funcionales de Marjory Gordon.pptx
Patrones Funcionales de Marjory Gordon.pptxErandiCamperoBojorge
 
Home Assistant - Un Hub para controlarlos a todos
Home Assistant - Un Hub para controlarlos a todosHome Assistant - Un Hub para controlarlos a todos
Home Assistant - Un Hub para controlarlos a todosDebora Gomez Bertoli
 
EXPOSICION_REGLAMENO_DE_EVALUACIÓN_RM._190.pdf
EXPOSICION_REGLAMENO_DE_EVALUACIÓN_RM._190.pdfEXPOSICION_REGLAMENO_DE_EVALUACIÓN_RM._190.pdf
EXPOSICION_REGLAMENO_DE_EVALUACIÓN_RM._190.pdfRosiClaros
 
La Electricidad y la Electrónica gabriela (1).pdf
La Electricidad y la Electrónica gabriela (1).pdfLa Electricidad y la Electrónica gabriela (1).pdf
La Electricidad y la Electrónica gabriela (1).pdfelabarbosa396
 

Último (9)

644400074-LA-CONSOLIDACION-DE-LA-REPUBLICA-OLIGARQUICA-pdf.pptx
644400074-LA-CONSOLIDACION-DE-LA-REPUBLICA-OLIGARQUICA-pdf.pptx644400074-LA-CONSOLIDACION-DE-LA-REPUBLICA-OLIGARQUICA-pdf.pptx
644400074-LA-CONSOLIDACION-DE-LA-REPUBLICA-OLIGARQUICA-pdf.pptx
 
137489674-Regimenes-Tributarios-MYPES-ppt.ppt
137489674-Regimenes-Tributarios-MYPES-ppt.ppt137489674-Regimenes-Tributarios-MYPES-ppt.ppt
137489674-Regimenes-Tributarios-MYPES-ppt.ppt
 
El uso de las T I C en la vida cotidiana.
El uso de las T I C en la vida cotidiana.El uso de las T I C en la vida cotidiana.
El uso de las T I C en la vida cotidiana.
 
644400074-LA-CONSOLIDACION-DE-LA-REPUBLICA-OLIGARQUICA-pdf.pdf
644400074-LA-CONSOLIDACION-DE-LA-REPUBLICA-OLIGARQUICA-pdf.pdf644400074-LA-CONSOLIDACION-DE-LA-REPUBLICA-OLIGARQUICA-pdf.pdf
644400074-LA-CONSOLIDACION-DE-LA-REPUBLICA-OLIGARQUICA-pdf.pdf
 
TEORIA CONTINGENCIAL Precursores y Aportes a la Administración
TEORIA CONTINGENCIAL Precursores y Aportes a la AdministraciónTEORIA CONTINGENCIAL Precursores y Aportes a la Administración
TEORIA CONTINGENCIAL Precursores y Aportes a la Administración
 
Patrones Funcionales de Marjory Gordon.pptx
Patrones Funcionales de Marjory Gordon.pptxPatrones Funcionales de Marjory Gordon.pptx
Patrones Funcionales de Marjory Gordon.pptx
 
Home Assistant - Un Hub para controlarlos a todos
Home Assistant - Un Hub para controlarlos a todosHome Assistant - Un Hub para controlarlos a todos
Home Assistant - Un Hub para controlarlos a todos
 
EXPOSICION_REGLAMENO_DE_EVALUACIÓN_RM._190.pdf
EXPOSICION_REGLAMENO_DE_EVALUACIÓN_RM._190.pdfEXPOSICION_REGLAMENO_DE_EVALUACIÓN_RM._190.pdf
EXPOSICION_REGLAMENO_DE_EVALUACIÓN_RM._190.pdf
 
La Electricidad y la Electrónica gabriela (1).pdf
La Electricidad y la Electrónica gabriela (1).pdfLa Electricidad y la Electrónica gabriela (1).pdf
La Electricidad y la Electrónica gabriela (1).pdf
 

Algoritmos+y+solucion+de+problemas

  • 1. 1 Algoritmos y Solución de Problemas Autor: Ing. Nelson Prado. Índice UNIDAD 1: .......................................................... 1 1.1. INTRODUCCIÓN................................. 1 1.2. ALGORITMOS Y SOLUCIÓN DE PROBLEMAS................................................... 2 1.3. METODOLOGÍA PARA RESOLVER PROBLEMAS................................................... 2 1.4. ETAPAS DEL CICLO DE PROGRAMACIÓN DE COMPUTADORES.... 3 1.5. ALGORITMOS..................................... 4 1.6. REPRESENTAR ALGORITMOS......... 5 UNIDAD 2: .......................................................... 6 2.1. VARIABLES, CONSTANTES E IDENTIFICADORES. ...................................... 6 2.2. DATOS Y TIPOS DE DATOS.............. 6 2.3. VARIABLES ........................................ 7 2.4. OPERACIONES.................................... 7 2.5. ASIGNAR VALORES A LAS VARIABLES.................................................... 9 2.6. TIPOS DE VARIABLES MÁS UTILIZADOS................................................... 9 UNIDAD 3: ........................................................ 11 3.1. DIAGRAMAS DE FLUJO PARA REPRESENTAR ALGORITMOS .................. 11 3.2. PSEUDOCÓDIGO PARA REPRESENTAR ALGORITMOS .................. 12 UNIDAD 4: ........................................................ 13 4.1. PROCESOS......................................... 13 4.2. ESTRUCTURA SECUENCIAL.......... 13 4.3. ESTRUCTURA CONDICIONAL ....... 14 4.4. ESTRUCTURA ITERATIVA (REPETICIÓN)............................................... 17 Estructura Para (Desde - Hasta)................... 19 Ejercicios .................................................... 20 Estructura Mientras ..................................... 20 Estructura Repetir........................................ 21 UNIDAD 5: ........................................................ 22 5.1. ARREGLOS........................................ 22 5.2. CARGAR UN ARREGLO .................. 22 5.3. IMPRIMIR UN ARREGLO ................ 23 5.4. PROCESANDO UN ARREGLO......... 23 5.5. ARREGLOS BIDIMENSIONALES.... 24 UNIDAD 6: ........................................................ 27 6.1. FUNCIONES Y PROCEDIMIENTOS.27 6.2. FUNCIONES ...................................... 27 6.3. ÁMBITO DE LAS VARIABLES........ 30 6.4. PROCEDIMIENTOS........................... 30 UNIDAD 1: 1.1. INTRODUCCIÓN. Los matemáticos hindúes, árabes y europeos fueron los primeros que desarrollaron técnicas de cálculo escrito. El matemático árabe Al'Khwarizmi , alrededor del año 830 DC, escribe un libro de Aritmética, traducido al latín como Algoritmi de numero Indorum, donde introduce el sistema numérico indio (sólo conocido por los árabes unos 50 años antes) y los métodos para calcular con él. De esta versión latina proviene la palabra Algoritmo. Por algoritmo se entiende "una lista de instrucciones donde se especifica una sucesión de operaciones necesarias para resolver cualquier problema de un tipo dado". Los algoritmos son modos de resolución de problemas, cabe aclarar que no sólo son aplicables a la actividad intelectual, sino también a todo tipo de problemas relacionados con actividades cotidianas. El algoritmo es de carácter general y puede aplicarse a cualquier operación matemática o a cualquier problema. La formulación de algoritmos fue uno de los más grandes adelantos dentro de la ciencia matemática ya que a partir de ello se pudieron resolver infinidad de problemas. Landa, matemático ruso, quien ha investigado mucho al respecto nos dice que "la ciencia matemática, en el proceso de su desarrollo, ha tratado de encontrar los algoritmos óptimos más generales para resolver los problemas que permitan la solución uniforme de clases más amplias de problemas de una manera, es decir, empleando siempre el mismo sistema de operación. Los algoritmos, para llegar a ser tales deben reunir ciertas características. Una de ellas es que los pasos que deben seguirse deben estar estrictamente descritos, cada acción debe ser precisa, y debe ser general, es decir, que pueda ser aplicable a todos los elementos de una misma clase. Por ejemplo en el caso del algoritmo de una multiplicación, no sólo se realizará el procedimiento de resolución parte para la multiplicación de 4 x 4, sino que el mismo algoritmo podrá aplicarse a cualquier multiplicación. La última de estas características será la resolución, en otras palabras, esto quiere decir que el algoritmo deberá llegar a un resultado específico. Es de gran importancia aclarar que los algoritmos en si mismos no resuelven problemas, se resuelven gracias al producto de ejercer las operaciones dictadas por el algoritmo, se puede decir que es por el planteamiento mismo. La realización de algoritmos es natural e innata
  • 2. 2 en el hombre y en la mayoría de los casos es de tipo inconsciente, en otras palabras, las personas suelen resolver problemas sin tener que recurrir a la aplicación de cierto algoritmo. No obstante al encontrarse con problemas de un grado de dificultad mayor es necesario detenerse a analizar y pensar en la solución de éste. 1.2. ALGORITMOS Y SOLUCIÓN DE PROBLEMAS La razón principal por las que personas aprenden lenguajes y técnicas de programación es para utilizar la computadora como una herramienta para resolver problemas. La resolución de problemas exige al menos los siguientes pasos: • Definición y análisis del problema. • Diseño del algoritmo. • Transformación del algoritmo en un programa. • Ejecución y validación del programa. Los primeros dos pasos definen lo que es un sistema de procesamiento de información. Un sistema que transforma datos brutos en información organizada, significativa y útil. Para poder entender lo que es un sistema de procesamiento debemos diferenciar las palabras datos e información: • Datos se refiere a la representación de algún hecho, concepto o entidad real (por ejemplo palabras escritas, habladas, números y dibujos). • Información implícita datos procesados y organizados. Figura. 1.1 Sistema de Procesamiento de Información. Los componentes de un sistema de proceso de información son: entrada, salida y procesador. Ejemplo de sistemas: Un termostato que controla la temperatura. La entrada es la temperatura media. La salida es una señal que controla la caldera del aire acondicionado. 1.3. METODOLOGÍA PARA RESOLVER PROBLEMAS Figura 1.2: Pasos para resolver problemas matemáticos. Todos los días nos enfrentamos a problemas. Desde nuestro punto de vista un problema es una oportunidad. En la mayoría de los textos se recomiendan los siguientes procedimientos para solucionar problemas: 1. COMPRENDER EL PROBLEMA. • Leer el problema varias veces. • ¿Qué datos me dan en el enunciado del problema? • ¿Cuál es la pregunta que me da el problema? • ¿Qué debo lograr? • ¿Cuál es la incógnita del problema? • Organizar la información. • Agrupar los datos en categorías. • Trazar una figura o diagrama. 2. HACER EL PLAN. • Escoger y decidir las operaciones a efectuar. • Eliminar los datos inútiles. • Descomponer el problema en otros más pequeños. 3. EJECUTAR EL PLAN (Resolver). • Ejecutar en detalle cada operación. • Simplificar antes de calcular. • Realizar un dibujo o diagrama. 4. ANALIZAR LA SOLUCIÓN (Revisar). • Dar una respuesta completa. • Hallar el mismo resultado de otra manera. • Verificar por apreciación que la respuesta es adecuada.
  • 3. 3 Ejemplo 1.1 En un juego, el ganador obtiene una ficha roja; el segundo, una ficha azul; y el tercero, una amarilla. Al final de varias rondas, el puntaje se calcula de la siguiente manera: Al triple de la cantidad de fichas rojas se adicionan las fichas azules y se descuenta el doble de las fichas amarillas. Si Andrés llegó 3 veces en primer lugar, 4 veces de último y 6 veces de intermedio, ¿Qué puntaje obtuvo? Solución: COMPRENDE • Leer detenidamente el problema. • ¿Cuántos colores de fichas se reparten? • ¿Cuántas fichas rojas, azules y amarillas obtuvo Andrés? • ¿Qué pregunta el problema? PLANEA • Para hallar el puntaje que obtiene Andrés por sus llegadas de primero, calcular el triple de la cantidad de fichas rojas. • Para hallar el puntaje por sus llegadas en segundo lugar, contar la cantidad de fichas azules. • Para hallar el puntaje que pierde por sus llegadas en último lugar, calcular el doble de la cantidad de fichas amarillas. • Para hallar el puntaje total, calcular la suma de los puntajes por las fichas rojas y azules, restarle los puntos de las fichas amarillas. RESUELVE • Por tres fichas rojas: 3 x 3 = 9 puntos. • Por seis fichas azules: 6 = 6 puntos. • Por cuatro fichas amarillas: 4 x 2 = 8 puntos. • Para obtener el puntaje final de Andrés, sumar los puntos obtenidos con las fichas rojas y azules (9 + 6 = 15 puntos) y de este resultado restar los puntos representados por las fichas amarillas (15 – 8 = 7 puntos). REVISA • El puntaje que obtuvo Andrés es 7 puntos. • Verificar las operaciones y comparar los cálculos con la solución estimada. Ejercicios Debes tener en cuenta (y anotar) las actividades que realizas para resolver estos problemas y clasificarlas en cada una de las cuatro etapas vistas: comprender, planear, resolver y revisar. 1.1.Se tienen dos cubetas de 5 y 4 litros respectivamente. Las mismas no están graduadas con medidas. Sí se tiene disponible toda el agua necesaria. ¿Cómo lograría poner dos litros de agua en una de las dos? 1.2.En un curso de un colegio, la materia de educación física se divide en dos grupos de estudiantes: Natación, con 136 y Fútbol, con 204. Si hay 25 estudiantes que estudian Natación y Fútbol, ¿cuántos estudiantes tiene el curso? Para resolver este problema, debes tener conocimientos sobre conjuntos (representación, clasificación e intersección). Es buena idea que construyas una tabla para organizar la información y un diagrama para representar los datos. 1.3.Orlando compró 15 metros de tela para mandar a fabricar una cortina, a $26 el metro. Para colgarla necesita 28 aros de madera cuyo valor es de $1 cada uno. El riel y demás accesorios cuestan $30. Si la modista cobra $5 por cada metro de tela confeccionado y la instalación vale $15 ¿Cuánto es el costo total de la cortina instalada? Debes tener conocimientos sobre sumas y multiplicaciones. 1.4.El “peso neto” indicado en la envoltura de un jabón de baño es de 140 gramos y el “peso neto” indicado en otro jabón es de 80 gramos. El primero vale $0.90 y el segundo $0.65. ¿Cuál de los dos es más costoso? Debes tener conocimientos sobre sistemas de medidas (peso) y divisiones. 1.4. ETAPAS DEL CICLO DE PROGRAMACIÓN DE COMPUTADORES Muchos expertos en programación afirman que para elaborar en un computador procedimientos que realicen determinadas tareas, se deben seguir cuatro fases o etapas. Estas fases concuerdan con los procedimientos para solucionar problemas, vistos anteriormente: 1. Analizar el problema (Entender el problema) 2. Diseñar un algoritmo (Trazar un plan) 3. Traducir el algoritmo a un lenguaje de programación (Ejecutar el plan) 4. Depurar el programa (Revisar) Como puedes apreciar, hay una semejanza entre los métodos utilizados para solucionar problemas y las cuatro fases para solucionar problemas con ayuda del computador en otras áreas del conocimiento.
  • 4. 4 1.5. ALGORITMOS En la naturaleza hay muchos procesos que puedes considerar como Algoritmos ya que tienen procedimientos y reglas. Incluso, muchas veces no somos conscientes de ellos. Por ejemplo, el proceso digestivo es un concepto de algoritmo con el que convivimos a diario sin que haga falta una definición precisa de este proceso. El hecho de que conozcas cómo funciona el sistema digestivo, no implica que los alimentos que consumas te alimenten más o menos. La familiaridad de lo que sucede día a día nos impide ver muchos algoritmos que pasan a nuestro alrededor. Procesos, rutinas o biorritmos naturales como la gestación, las estaciones, la circulación sanguínea, los ciclos cósmicos, etc., son algoritmos naturales que generalmente pasan desapercibidos. Ejemplo 1.2 Un procedimiento que realizamos varias veces al día consiste en lavarnos los dientes. Veamos la forma de expresar este procedimiento como un Algoritmo: 1. Tomar la crema dental. 2. Destapar la crema dental. 3. Tomar el cepillo de dientes. 4. Aplicar crema dental al cepillo. 5. Tapar la crema dental. 6. Abrir la llave del lavamanos. 7. Remojar el cepillo con la crema dental. 8. Cerrar la llave del lavamanos. 9. Frotar los dientes con el cepillo. 10. Abrir la llave del lavamanos. 11. Enjuagarse la boca. 12. Enjuagar el cepillo. 13. Cerrar la llave del lavamanos. 14. Secarse la cara y las manos con una toalla. Ejemplo 1.3 Veamos que algo tan común como los pasos para cambiar una bombilla (foco) se pueden expresar en forma de Algoritmo: 1. Ubicar una escalera o un banco debajo de la bombilla fundida. 2. Tomar una bombilla nueva. 3. Subir por la escalera o al banco. 4. Girar la bombilla fundida hacia la izquierda hasta soltarla. 5. Enroscar la bombilla nueva hacia la derecha en el plafón hasta apretarla. 6. Bajar de la escalera o del banco. 7. Fin. Ejercicio 1. Discutir en parejas el ejemplo de la bombilla y proponer algunas mejoras. Luego, un voluntario debe pasar al tablero y escribir un Algoritmo con participación de toda la clase. Los Algoritmos permiten describir claramente una serie de instrucciones que debe realizar el computador para lograr un resultado previsible. Vale la pena recordar que un procedimiento de computador consiste de una serie de instrucciones muy precisas y escritas en un lenguaje de programación que el computador entienda. En resumen, un Algoritmo es una serie ordenada de instrucciones, pasos o procesos que llevan a la solución de un determinado problema. Los hay tan sencillos y cotidianos como seguir la receta del médico, abrir una puerta, lavarse las manos, etc.; hasta los que conducen a la solución de problemas muy complejos. El concepto de algoritmo, aunque similar y obviamente relacionado, no debe confundirse con el concepto de programa. Mientras el primero es la especificación de un conjunto de pasos (operaciones, instrucciones, órdenes,...) orientados a la resolución de un problema, el segundo es ese conjunto de operaciones especificadas en un determinado lenguaje de programación y para un computador concreto, susceptible de ser ejecutado (o compilado o interpretado). Un algoritmo, estrictamente hablando, no puede ejecutarse hasta que se implementa, ya sea en un lenguaje de programación, en un circuito eléctrico, en un aparato mecánico, usando papel y lápiz, o en algún otro modelo de computación. Las características fundamentales de un algoritmo son: • Debe ser preciso e indicar el orden de realización de cada paso. • Debe estar definido. Si se sigue el algoritmo dos veces, se debe obtener el mismo resultado cada vez. • Debe ser finito. Si se sigue un algoritmo, se debe terminar en algún momento. Cuando el procesador es una computadora, el algoritmo se expresa por medio de un programa. Cada paso esta expresado por medio de una instrucción.
  • 5. 5 Ejemplo 1.4 Consideremos algo más complejo como el algoritmo de Euclides para hallar el Máximo Común Divisor (MCD) de dos números enteros positivos dados. Obsérvese que no se especifica cuáles son los dos números, pero si se establece claramente una restricción: deben ser enteros y positivos. ALGORITMO 1. Paso 1: Inicio. 2. Paso 2: Leer los dos números (“a” y “b”). Avanzar al paso 3. 3. Paso 3: Comparar “a” y “b” para determinar cuál es mayor. Avanzar al paso 4. 4. Paso 4: Si “a” y “b” son iguales, entonces ambos son el resultado esperado y termina el algoritmo. En caso contrario, avanzar al paso 5. 5. Paso 5: Si “a” es menor que “b”, se deben intercambiar sus valores. Avanzar al paso 6; si “a” no es menor que “b”, avanzar al paso 6. 6. Paso 6: realizar la operación “a” menos “b”, asignar el valor de “b” a “a” y asignar el valor de la resta a “b”. Ir al paso 3. Ejercicio A diferencia de los seres humanos que realizan actividades sin detenerse a pensar en los pasos que deben seguir, los computadores son muy ordenados y necesitan que quien los programa les especifique cada uno de los pasos que debe realizar y el orden lógico de ejecución. Numerar en orden lógico los pasos siguientes (para pescar): ___ El pez se traga el anzuelo. ___ Enrollar el sedal. ___ Tirar el sedal al agua. ___ Llevar el pescado a casa. ___ Quitar el Anzuelo de la boca del pescado. ___ Poner carnada al anzuelo. ___ Sacar el pescado del agua. 1.6. REPRESENTAR ALGORITMOS Los Algoritmos se puede expresar de muchas maneras, pero en este curso se tratarán solo dos formas: Pseudocódigo y Diagrama de Flujo. En Pseudocódigo la secuencia de instrucciones se representa por medio de palabras en forma de frases o proposiciones, mientras que en un Diagrama de Flujo se representa por medio de gráficos. Ejemplo 1.5 Diseñar un algoritmo (pseudocódigo) para hallar el área de un triángulo rectángulo cuya Base mide 3 cm, la Altura 4 cm y la Hipotenusa 5 cm. Solución: ANÁLISIS DEL PROBLEMA Formular el problema: Ya se encuentra claramente planteado. Resultados esperados: El área de un triángulo rectángulo. Datos disponibles: Base, Altura, Hipotenusa, tipo de triángulo. La incógnita es el área y todos los valores son constantes. El valor de la hipotenusa se puede omitir. Debes preguntarte si tus conocimientos actuales de matemáticas te permiten resolver este problema; de no ser así, debes plantear una estrategia para obtener los conocimientos requeridos. Determinar las restricciones: Utilizar las medidas dadas. Procesos necesarios: Guardar en dos variables (BASE y ALTURA) los valores de Base y Altura; Guardar en una constante (DIV) el divisor 2; aplicar la fórmula BASE*ALTURA/DIV y guardar el resultado en la variable AREA; comunicar el resultado (AREA). ALGORITMO EN PSEUDOCÓDIGO Paso 1: Inicio Paso 2: Asignar el número 2 a la constante "div" Paso 3: Asignar el número 3 a la constante “base” Paso 4: Asignar el número 4 a la constante “altura” Paso 5: Guardar en la variable "área" el resultado de base*altura/div Paso 6: Imprimir el valor de la variable "área" Paso 7: Final Ejercicios Elabora un algoritmo para cada uno de los siguientes problemas: 1.5.Escribir un algoritmo para la preparación de un ceviche de camaron que conste de 5 a 10 acciones principales. 1.6.¿Qué requisitos debe cumplir un algoritmo bien elaborado? 1.7.Los ingredientes para 4 personas del “pastel de manzana danés” son los indicados en el cuadro adjunto. Realizar un algoritmo que calcule los ingredientes para un número variable de personas que se lee por teclado.
  • 6. 6 1.8.Desarrollar un algoritmo para cambiar un neumático desinflado. Supóngase que se dispone de una rueda de repuesto y de gato. 1.9.Hallar el perímetro de un cuadrado cuyo lado mide 5 cm. 1.10. Hallar el perímetro de un círculo cuyo radio mide 2 cm. 1.11. Hallar el área de un cuadrado cuyo lado mide 5 cm. 1.12. Hallar uno de los lados de un rectángulo cuya área es de 15 cm2 y uno de sus lados mide 3 cm. 1.13. Hallar el área y el perímetro de un círculo cuyo radio mide 2 cm. 1.14. Hallar el área de un pentágono regular de 6 cm de lado y con 4 cm de apotema. UNIDAD 2: 2.1. VARIABLES, CONSTANTES E IDENTIFICADORES. En programación, las Variables son espacios de trabajo reservados para guardar datos (valores). El valor de una Variable puede cambiar en algún paso del Algoritmo o permanecer invariable; por lo tanto, el valor que contiene una variable es el del último dato asignado a esta. Ejemplo 2.1 En el siguiente diagrama de flujo, "AREA" es un ejemplo de Variable; en el paso 5 se guardó en ella el resultado de multiplicar "BASE" por "ALTURA" y en el paso 6 se utilizó nuevamente para guardar el valor de dividir su propio contenido ("AREA") entre la Constante "DIV". Figura 2.1: Algoritmo para calcular el área de cualquier triángulo rectángulo. - Constantes: Tienen un valor fijo que se le da cuando se define la constante y que ya no puede ser modificado durante la ejecución. - Variables: El valor puede cambiar durante la ejecución del algoritmo, pero nunca varia su nombre y su tipo. 2.2. DATOS Y TIPOS DE DATOS Las cosas se definen en la computadora mediante datos, los algoritmos que vamos a diseñar van operar sobre esos datos. A nivel de la máquina los datos se representan como una serie de bits (dígito 1 ó 0). Los tipos de datos que vamos a manejar a lo largo del curso son: numéricos y carácter (también llamados alfanuméricos), existen además, los datos de tipo lógicos que solo pueden tener uno de dos valores: verdadero o falso. Los datos numéricos pueden ser de varias clases: enteros, enteros largos, de doble precisión, de simple precisión, de coma flotante, reales; cuya definición depende del lenguaje de programación utilizado. Los datos de tipo carácter o alfanuméricos están compuestos por el conjunto finito y ordenado de caracteres que la computadora reconoce: • Caracteres alfabéticos : A,B,C,.......Z ; a,b,c,.......z • Caracteres numéricos : 0,1,2, ......9 (que no son números) • Caracteres especiales : +, /, *, ?,%,$, #, !, ,ä,¦,{},~,etc.
  • 7. 7 Una cadena o string es una sucesión de caracteres que se encuentran delimitados por comillas (" "). La longitud de la cadena es la cantidad de caracteres que la forma, incluyendo los espacios que son un carácter más. Así: • "Quito, Pichincha" es una cadena de longitud 18. • "Miércoles 7 de Marzo de 2008" es una cadena de longitud 28 (el 7 y el 2001 no son números) • "123456" es una cadena de longitud 6, no es el número 123.456 sobre "123456" no se puede realizar ninguna operación aritmética como sumar, restar, etc., ya que se trata de una cadena alfanumérica. Ejemplo de este tipo son: cedula, pasaporte, teléfonos. 2.3. VARIABLES Cuando representamos datos, numéricos o alfanuméricos, debemos darles un nombre. Una variable es un nombre que representa el valor de un dato. En esencia, una variable es una zona o posición de memoria en la computadora donde se almacena información. En un algoritmo y también en un programa se pueden crear tantas variables como queramos. Así tenemos: • A = 50: Variable tipo numérica A cuyo valor es 50. • Ciudad = "Guayaquil": Variable alfanumérica o de tipo carácter Ciudad, cuyo valor es "Guayaquil" • X = C + B: Variable numérica X cuyo valor es la suma de los valores de las variables numéricas C y B. Es una variable calculada. Ten en cuenta que las operaciones que se pueden realizar con dos o más variables exigen que éstas sean del mismo tipo. No podemos "sumar", por ejemplo una variable alfanumérica a otra numérica y viceversa como por ejemplo: • FechaNueva="1 de Junio de 1.971" + 5 Esto no se puede hacer !! Nombres de las variables constantes A continuación encontrarás una serie de reglas para asignar nombres (identificadores) a variables, constantes y procedimientos: • Los nombres pueden estar formados por una combinación de letras y números (saldoMes, salario, fecha2, baseTriángulo, etc). • El primer carácter de un nombre debe ser una letra. • La mayoría de los lenguajes de programación diferencian las letras mayúsculas de las minúsculas. • Con solo leer los nombres se puede entender lo que contienen. Deben ser muy descriptivos; no utilizar abreviaturas, a menos que se justifique plenamente. • Es conveniente utilizar una sola palabra para nombrar páginas, controles, variables, etc. • No utilizar caracteres reservados (%, +, /, >, etc). • Se debe tener en cuenta que algunos lenguajes de programación no admiten las tildes. • No utilizar palabras reservadas por los lenguajes de programación. • Los nombres de procedimientos, variables y constantes deben empezar con minúscula. Ejemplo, fecha, suma, etc. Si es un nombre compuesto por varias palabras, cada una de las palabras (con excepción de la primera) deben empezar con mayúscula. Ejemplo: fechaInicial, baseTriángulo, etc. El tipo de nombre que se asigne a variables, constantes y procedimientos es muy importante. Cuando dejas de trabajar en un proyecto por varios días, es más fácil para ti retomar la actividad si los nombres describen muy bien el contenido de variables, constantes y procedimientos. Ejemplos de nombres válidos de variables • fechaNueva. • c1. • totalPersonas. • contador_Maletas. • cantidad_de_Alumnos. • pedido_Almacen. Algunos lenguajes de programación exigen la declaración de las variables que se van a utilizar en todo el programa; es decir, que al comenzar el programa se debe decir que nombre tiene, de que tipo es (numérica o alfanumérica) y un valor inicial. Como aquí no estamos tratando con ningún lenguaje, la declaración de las variables puede omitirse. Las variables también pueden inicializarse; darles un valor inicial. Por defecto, todas las variables para las que no especifiquemos un valor inicial, valen cero si son de tipo numérica y nulo (nulo no es cero ni espacio en blanco; es nulo) si son de tipo carácter. 2.4. OPERACIONES
  • 8. 8 Las variables se pueden procesar utilizando operaciones apropiadas para su tipo. Los operadores son de 4 clases: • Relacionales. • Aritméticos. • Alfanuméricos. • Lógicos. Los operadores relacionales se utilizan para formar expresiones que al ser evaluadas producen un valor de tipo lógico: verdadero o falso. Ellos son: Signo Operador > Mayor que < Menor que = Igual a <= Menor o igual que >= Mayor o igual que <> Distinto Ejemplos: Ejemplo Resultado 25 <= 25 Verdadero 25 <> 25 Falso 25 <> 4 Verdadero 50 <= 100 Verdadero 500 >= 1 Verdadero 1 = 6 Falso Cuando se comparan caracteres alfanuméricos se hace uno a uno, comenzando por la izquierda hacia la derecha. Si las variables son de diferente longitud, pero exactamente iguales, se considera que la de menor longitud es menor. Los datos alfanuméricos son iguales si y solo si tienen la misma longitud y los mismos componentes. Las letras minúsculas son mayores que las mayúsculas y cualquier carácter numérico es menor que cualquier letra mayúscula o minúscula; Así: carácter numérico < mayúsculas < minúsculas. Ejemplos: Comparación Resultado "A" < "B" Verdadero "AAAA" > "AAA" Verdadero "B" > "AAAA" Verdadero "C" < "c" Verdadero "2" < "12" Falso Estas comparaciones se realizan utilizando el valor ASCII de cada carácter. Para tratar los números se utilizan los operadores aritméticos: Signo Significado + Suma - Resta * Multiplicación / División ^ Potenciación MOD Resto de la división entera El único operador alfanumérico se utiliza para unir o concatenar datos de este tipo: Signo Significado + Concatenación Ejemplos: Expresión Resultado "Pseudo" + "código" "Pseudocódigo" "3" + "4567" "34567" "Hola " + "que tal ?" "Hola que tal ?" Los operadores lógicos combinan sus operandos de acuerdo con las reglas del álgebra de Boole para producir un nuevo valor que se convierte en el valor de la expresión, puede ser verdadero o falso. Signo Significado OR Suma lógica (O) AND Producto lógico (Y) NOT Negación (NO) Ejemplos: Expresión Resultado Verdad AND Falso Falso NOT Falso Verdad Verdad OR Falso Verdad Por ejemplo, la expresión: (12 + 5) OR (7 + 3) = 10 es verdadera (se cumple una y Verdad OR Falso es Verdad). La expresión (12 * 5) AND (3 + 2) = 60 es falsa (verdad AND falso = Falso).
  • 9. 9 ¿Cómo se evalúan los operadores? La prioridad de los operadores es: • Paréntesis • Potencias • Productos y Divisiones • Sumas y restas • Concatenación • Relacionales • Lógicos 2.5. ASIGNAR VALORES A LAS VARIABLES La operación de dar valor a una variable se llama asignación. La asignación vamos a representarla con el símbolo ; una flecha apuntando a la izquierda. No utilizaremos en signo = ya que el operador de asignación varía de acuerdo con el lenguaje de programación utilizado. El formato general de una asignación es: nombre de la variable expresión. La flecha se sustituye en los lenguajes de programación por = (basic); : = (pascal). Pero para evitar ambigüedades en el algoritmo utilizaremos la flecha para la asignación y el símbolo = para indicar igualdad. He aquí algunos ejemplos: • a 100: significa que a la variable a se le ha asignado el valor 100, ahora A vale 100. • suma 5+10: asigna el valor 15 a la variable suma a través de una asignación aritmética. • x z + v: asigna el valor de la suma de las variables z y v a la variable x. El resultado depende de los valores que se asignen a x y a z. Toda asignación es destructiva. Esto quiere decir que el valor que tuviera antes la variable se pierde y se reemplaza por el nuevo valor que asignamos, así cuando se ejecuta esta secuencia: • edad 25. • edad 100. • edad 77. El valor final que toma edad será 77 pues los valores 25 y 100 han sido destruidos. 2.6.TIPOS DE VARIABLES MÁS UTILIZADOS Contador Un contador es una variable destinada a contener valores que se van incrementando o decrementando cada vez que se ejecuta la acción que lo contiene. El incremento o decremento es llamado paso de contador y es siempre constante. Por ejemplo; el marcador de un partido de fútbol, cada vez que un equipo anota un gol, aumenta su marcador en una unidad. En las carrera de automóviles, cada vez que un vehículo pasa por la línea de meta, se incrementa en una unidad el número de vueltas dadas al circuito, o bien se decrementa en una unidad el número de vueltas que quedan por realizar. Aunque el incremento es siempre constante, el paso de contador no necesariamente puede ser la unidad como en los ejemplos que se han dado más arriba; también puede incrementarse o decrementarse a de dos, tres, cuatro,.... n; es decir, puede ser cualquier número que conserva el mismo valor durante todo el programa. La sintaxis de una variable contador es: variable variable + constante (al incrementar) variable variable - constante (al decrementar) Ejemplos: • gol_local gol_local + 1. • vueltas vueltas + 1. • faltan faltan – 1. • de_cinco de_cinco + 5. • c c + 1. • x x – 3. Observación: Cuando una variable aparece a ambos lados del símbolo de asignación, conviene inicializarlas a cero. Acumulador o Sumador Es una variable que nos permite guardar un valor que se incrementa o decrementa en forma NO constante durante el proceso. En un momento determinado tendrá un valor y al siguiente tendrá otro valor igual o distinto. Por ejemplo; cuando realizamos un depósito en el banco, la cantidad depositada cada vez no es siempre la misma; unas veces será una cantidad y otras veces distinta. Lo mismo ocurre cuando realizamos algún retiro, pero decrementando la cantidad total. La sintaxis es:
  • 10. 10 acumulador acumulador + variable (al incrementar) acumulador acumulador - variable (al decrementar) acumulador es la variable en la que se almacena el resultado. variable contiene el número que estamos incrementando o decrementando Ejemplos: • saldo saldo + entrega. • saldo saldo – retiro. • suma suma + numero. • sumaEdades sumaEdades + edad. Halle el valor de A: A (3*2^5 mod 1 + 8*(3-5) < (2+8-1 mod 1) A (3*32 mod 1 + (-16)) < 10 A -16 < 10 A Verdadero Ejemplo Escribir un algoritmo que intercambie el valor de dos variables. Si se tienen, por ejemplo a = 5 y b = 10, se quiere intercambiar el valor de las variables, así: a = 10; b = 5. No podemos asignar directamente el valor de una a la otra porque uno de los valores se destruiría; de modo que esto no se puede hacer: a b (el valor de a se pierde y quedaría a = 10 ; b = 10) . La solución consiste en asignar el valor de una de las variables a otra variable auxiliar. inicio leer A,B Auxiliar A A B B Auxiliar imprimir A,B fin Ejercicios 2.1. ¿Cuáles de los siguientes nombres de Variables NO son validos y por qué? a) números. b) Numero X. c) 7 d) A(45+ e) VII f) 7mesas. g) sieteMesas 2.2. Halle el valor de A: A A o (3+5*8) < 3 y ((-6/3 div 4)*2 < 2) 2.3. Halle el valor de B: B 3 mod 2 div 3 2.4. Halle el valor de C: C (-B*2 <> 8*3 mod 4) y (‘A’>’B’) 2.5. Dadas las siguientes declaraciones de variables siguientes y los valores iniciales indicados: VAR Z color, lima, marron, amarillo, rojo, naranja R negro, blanco, verde, azul, morado, crayon Evaluar el valor final de las variables después de ejecutar de forma independiente las sentencias de asignación siguientes. Nota: suponer que las incompatibilidades de tipos se resuelven implícitamente e indicar dónde se producen. a) blanco = color * 2.5 / morado b) verde = color / morado c) naranja = color*(-12) DIV rojo d) azul = (color + marron) / (crayon + 0.3) e) lima = rojo DIV color + rojo MOD color - 356 f) morado = marron / rojo * color 2.6. Indicar el tipo de cada una de las siguientes constantes: a) 534 b) 534.0 c) -534 d) ’534’ e) -45.3x10 4 f) 17x10 7 g) -45.6x10 -3 h) ’fin del ejercicio’ 2.7. Indicar el resultado y el tipo de las siguientes expresiones: a) 5^2+3 b) 6+19-0.3 c) 3.0^3+1 d) 1/4+2 e) 29.0/2+4 f) 3/6.0 - 7 2.8. Calcular el valor de cada una de las siguientes expresiones enteras: a) 5*6-3*2 b) -2^3 c) (26+3*4)/4 d) 3+2*(18-4^2) e) 2^2*3 f) 8-30/6
  • 11. 11 2.9. Escribir las siguientes expresiones matemáticas en forma de expresiones de computación: 2.10. Evaluar las siguientes expresiones booleanas escribiendo el árbol de precedencia. Los valores de las variables son A=TRUE, B=TRUE, C=FALSE, D=FALSE. a) C OR NOT A AND B b) NOT (A OR C) OR B AND NOT C c) NOT(NOT(NOT(A AND C OR D))) d) NOT (5<3) AND A OR NOT (D OR C) e) A AND NOT (D OR NOT C AND A) OR NOT (NOT C OR B) 2.11. Encuéntrese el valor de la variable RESULT después de la ejecución de las siguientes secuencias de operaciones (suponer que todas las variables son reales): a) RESULT ← 3.0*5 b) X ← 2.0 Y ← 3.0 RESULT ← X^Y-X c) RESULT ← 4 X ← 2 RESULT ← RESULT*X 2.12. ¿Qué valor se obtiene en las variables A, B y C después de la ejecución de las siguientes instrucciones? A ← 3 B ← 20 C ← A+B B ← A+B A ← B 2.13. Supóngase que I y J son variables enteras cuyos valores son 6 y 12 respectivamente. ¿Cuáles de las siguientes condiciones son verdaderas? a) (2*I) ≤ J b) (2*I-1) < J c) (I > 0) y (I ≤ 10) d) (I > 25) o ((I < 50) y (J < 50)) e) (I < 4) o (J > 5) f) no (I > 6) UNIDAD 3: 3.1. DIAGRAMAS DE FLUJO PARA REPRESENTAR ALGORITMOS Diagrama de Flujo Conjunto de símbolos estándar en los cuales se encuentran escritos los pasos del algoritmo, dichos símbolos se encuentran unidos por medio de flechas, denominadas líneas de flujo, que indican la secuencia en que se deben de ejecutar. Los siguientes son los principales símbolos para elaborar Diagramas de Flujo:
  • 12. 12 Reglas básicas para elaborar Diagramas de Flujo: • Poner un encabezado que incluya un título que identifique la función del algoritmo; el nombre del autor; y la fecha de elaboración. • Sólo se pueden utilizar los símbolos anteriores. • Los diagramas se deben dibujar de arriba hacía abajo y de izquierda a derecha. • La ejecución del programa siempre empieza en la parte superior del diagrama. • Los símbolos de “Inicio” y “Final” deben aparecer solo una vez. • La dirección del flujo se debe representar por medio de flechas (líneas de flujo). • Todas las líneas de flujo deben llegar a un símbolo o a otra línea. • Una línea de flujo recta nunca debe cruzar a otra. • Cuando dos líneas de flujo se crucen, una de ellas debe incluir una línea arqueada en el sitio donde cruza a la otra. • Las bifurcaciones y ciclos se deben dibujar procurando una cierta simetría. • Cada rombo de decisión debe tener al menos dos líneas de salida (una para SI y otra para NO). • Las acciones y decisiones se deben describir utilizando el menor numero de palabras posible; sin que resulten confusas. • Todo el Diagrama debe ser claro, ordenado y fácil de recorrer. Actividad 1.6 1. Hallar el perímetro de un cuadrado cuyo lado mide 5 cm. 2. Hallar el perímetro de un círculo cuyo radio mide 2 cm. 3. Hallar el área de un cuadrado cuyo lado mide 5 cm. 4. Hallar uno de los lados de un rectángulo cuya área es de 15 cm2 y uno de sus lados mide 3 cm. 5. Hallar el área y el perímetro de un círculo cuyo radio mide 2 cm. 6. Hallar el área de un pentágono regular de 6 cm de lado y con 4 cm de apotema. 3.2. PSEUDOCÓDIGO PARA REPRESENTAR ALGORITMOS Pseudocódigo: lenguaje de especificación de algoritmo que utiliza para representar las acciones palabras reservadas en ingles, las cuales son similares a las de los lenguajes de programación, tales como start, end, if- then-else, while-wend, repeat-until, etc. (o su equivalente en español) Este nació como un lenguaje similar al inglés y era un medio de representar básicamente las estructuras de control de programación estructurada. El pseudocódigo no puede ser ejecutado por una computadora. Una ventaja del pseudocódigo es que puede ser traducido fácilmente a lenguajes de programación. La escritura del pseudocódigo exige normalmente la indentación (sangría en el margen izquierdo) o en su defecto, numeración jerárquica. Ejercicios: Realice los ejercicios, utilizando Diagramas de Flujo y Pseudocdigo. 3.1.Escribir un algoritmo que calcule y saque por pantalla, las horas, minutos y segundos de un tiempo expresado sólo en segundos introducido por teclado. 3.2.Escribe un algoritmo que calcule la altura desde la que cae un objeto que tarda t segundos en llegar al suelo. El tiempo lo introduce el usuario por teclado. Use la fórmula:
  • 13. 13 3.3.Escribe un algoritmo que lea por teclado una temperatura en grados Fahrenheit y la convierta a grados centígrados según la fórmula: 3.4.Realizar un algoritmo para intercambiar los valores de dos variables. 3.5.Escribir un algoritmo para leer un valor entero, doblarlo, multiplicarlo por 25 y visualizar el resultado. 3.6.Diseñar un algoritmo que lea los dos catetos de un triángulo rectángulo y calcule la hipotenusa. 3.7.Diseñar un algoritmo que lea cuatro calificaciones de un alumno y calcule la calificación promedio. UNIDAD 4: 4.1. PROCESOS Se llama procesos a todas las instrucciones contenidas en un algoritmo para: • Declarar variables y constantes. • Asignar valores iniciales a variables y constantes. • Leer datos que suministra el usuario por medio del teclado o del ratón (mouse). • Realizar operaciones matemáticas (aplicar fórmulas). • Reportar o mostrar contenidos de variables y constantes. • Mostrar en pantalla resultados de procedimientos activados por el programa. 4.2.ESTRUCTURA SECUENCIAL Un Algoritmo está compuesto por instrucciones de diferentes tipos, organizadas secuencialmente, en forma de estructuras de control. De estas estructuras de control, las más comunes son las siguientes: • Secuencial. • Iterativa (repetición). • Condicional (decisión, selección). Una estructura de control se define como un esquema que permite representar ideas de manera simplificada y que bajo condiciones normales, es constante. Figura 4.1: Modelo de estructura secuencial. La estructura de control secuencial es la más sencilla. También se la conoce como estructura lineal. Se compone de instrucciones que deben ejecutarse en forma consecutiva, una tras otra, siguiendo una línea de flujo. Solamente los problemas muy sencillos pueden resolverse haciendo uso únicamente de esta estructura. Una estructura de control secuencial puede contener cualquiera de las siguientes instrucciones: • Declaración variables • Asignación de valores • Entrada de datos • Procesamiento de datos (operaciones) • Reporte de resultados Ejercicios 4.1.Diseñar un algoritmo que lea la cantidad de lluvia en pulgadas e imprima su equivalente en milímetros sabiendo que 25.5 mm = 1 pulgada. 4.2.Diseñar un algoritmo que lea el nombre y el apellido de una persona en ese orden e imprima el apellido seguido del nombre. 4.3.El costo de un automóvil para el comprador es la suma total del costo del vehículo, del porcentaje de ganancia del vendedor (12%) y de los impuestos estatales y locales aplicables (6%). Diseñar un algoritmo que lea el costo del automóvil e imprima el costo para el comprador. 4.4.La calificación final de un estudiante viene dada por tres aspectos del trabajo anual: nota de laboratorio que cuenta un 30% del total, nota de examen parcial que cuenta un 20% del total y nota de examen final que cuenta el 50% restante. Diseñar un algoritmo
  • 14. 14 que lea el nombre del estudiante, la nota de laboratorio, la nota del examen parcial y la nota del examen final e imprima el tanto por ciento correspondiente a cada una de las notas así como la calificación final. 4.5.Realizar un algoritmo para calcular la longitud de una circunferencia y el área del círculo con un radio leído desde teclado. El algoritmo debe detectar entradas no válidas. 4.6.Leer dos números y mostrar el producto de ellos. 4.7.Leer las longitudes de un rectángulo y calcular la superficie y el perímetro. 4.8.Convierta de doláres a euros. 4.9.Un negocio de deportes hace un 25 % de descuento en pelotas de fútbol y de béisbol. Se requiere escribir un programa que le permita a un empleado ingresar los precios originales de las pelotas. El programa deberá usar esta entrada de datos para calcular el precio rebajado. La salida del programa deberá mostrar, en líneas separadas, el precio original y el precio con descuento. 4.10. Efectuar un programa que lea los valores de 3 resistencias electrónicas (en Ohmios, W) conectadas en paralelo y muestre en pantalla el valor global de las 3. El valor global es calculado por la siguiente ecuación: 1 / (1/R1 + 1/R2 + 1/R3). 4.11. ¿Dada la duracion en minutos de una llamada calcular el costo,considerando? -Hasta tres minutos el costo es 0.50 -Por encima de tres minutos es 0.50 más 0.1*cada minuto adicional a los tres primeros 4.12. Realizar un algoritmo que permita ingresar una frase y la descomponga esta en sus palabras imprimiéndolas al revés. Ejem. CIUDAD CHICLAYO DADUIC OYALCIHC 4.3.ESTRUCTURA CONDICIONAL La estructura condicional se utiliza para indicarle al computador que debe evaluar una condición y, a partir del resultado, ejecutar el bloque de instrucciones correspondiente. La forma más común está compuesta por una proposición que se evalúa y dos bloques de instrucciones que se ejecutan, uno cuando la condición es verdadera (selección simple y doble) y otro cuando ésta es falsa (únicamente en la selección doble). Por su parte, un bloque de instrucciones puede contener una o varias instrucciones que se ejecutan una detrás de otra. La estructura condicional tiene dos variantes: • Selección simple. • Selección Múltiple. Las estructuras condicionales simple y múltiple evalúan una proposición (condición) que devuelve como resultado únicamente dos valores posibles y excluyentes: verdadero o falso. Selección simple La estructura condicional de selección simple ejecuta un bloque de instrucciones cuando la proposición (condición) es verdadera; si esta es falsa, no hace nada. El formato de la estructura de selección es: si <condición> entonces instrucción 1 instrucción 2 ................... instrucción n si-no instrucción a instrucción b ................... instrucción z fin-si Por ejemplo, Cuando realizamos una llamada telefónica: Si {señal de ocupado} entonces Colgar el teléfono si - no Iniciar la conversación fin – si En este caso, la condición es {señal de ocupado}, que puede ser verdadera o falsa. Si es verdadera, entonces debemos colgar el teléfono y si no, podemos realizar la conversación.
  • 15. 15 Ejemplo: Si a = 5 entonces imprimir"A es 5" si - no imprimir "A no es igual a 5" fin - si También puede obviarse el si - no cuando no nos interesa ejecutar un bloque de instrucciones en caso de que la condición no se cumpla. Si {condición} entonces instrucción 1 instrucción 2 ......... instrucción n fin – si Por ejemplo: Si {hoy es Miércoles} entonces Comprar entradas para el cine fin - si Ejemplo: Introducir un número por teclado y determinar si es positivo o negativo. Para saber si un número es positivo o negativo, debemos saber si es menor o mayor a cero. Si es mayor, el número es positivo y si es menor resulta negativo. Utilizamos Si... para evaluar como es el número con respecto a cero y mostramos los mensajes correspondientes en cada caso. Así: inicio leer numero Si numero < 0 entonces imprimir "El número es negativo" si-no imprimir "El número es positivo" fin-si fin Ejemplo. Dados dos números, establecer cuál es mayor. Comenzamos leyendo ambos números, que en el ejemplo se llamarán NumeroA y NumeroB. Luego debemos comparar como es uno contra el otro (puede ser NumeroA contra NumeroB o bien comparar NumeroB contra NumeroA): inicio leer numeroA, numeroB Si numeroA < numeroB entonces imprimir "El mayor es:", numeroB si-no imprimir "El mayor es:", numeroA fin-si fin En este ejemplo, ¿qué pasaría si los números fueran iguales? Hagamos la prueba. Luego de leer los números, por ejemplo: numeroA=100 y numeroB=100 se ejecutan las instrucciones: Si numeroA < numeroB entonces imprimir "El mayor es:", numeroB El resultado de la condición Por lo tanto, al ser falsa la condición, se ejecuta la instrucción imprimir "El mayor es:", numeroA. Por tanto, el algoritmo ofrecerá una solución incorrecta cuando los números son iguales. Para solucionar esto, tenemos que prever el caso de que los números sean iguales, utilizando condiciones anidadas. inicio leer numeroA, numeroB Si numeroA < numeroB entonces imprimir "El mayor es:", numeroB si-no Si numeroA > numeroB entonces imprimir "El mayor es:", numeroA si-no imprimir "Los números son iguales" fin-si fin-si fin Esta solución contiene dos estructuras de repetición, una dentro de la otra (anidada). En caso de ser necesario podemos anidar tantas estructuras de selección como sea necesario. El algoritmo averigua si A es menor a B, si no lo es, tenemos otras dos posibilidades: que sea menor o igual, esto es lo que determina la estructura anidada. Otro ejemplo de estructuras de repetición anidadas, consiste en dado un número del 1 al 7, establecer al día de la semana. inicio leer numero Si numero=1 entonces imprimir "Domingo"
  • 16. 16 si-no Si numero=2 entonces imprimir="Lunes" si-no Si numero=3 imprimir "Martes" si-no Si numero=4 entonces imprimir "Miercoles" si-no Si Numero=5 entonces imprimir "Jueves" si-no Si numero=6 entonces imprimir "Viernes" si-no Si numero=7 entonces imprimir "Sábado" si-no imprimir "El número debe estar entre 1 y 7" fin-si fin-si fin-si fin-si fin-si fin-si fin-si fin Notarás que tenemos varios Si...entonces anidados, ya que si el número ingreso no es 1, tenemos que preguntar si es 2 ó 3 ó 4...etc. El último Si...entonces es para verificar que el número ingresado no es 1, 2, 3, 4, 5, 6 ó 7; sino cualquier otro que no nos interesa. Repasa los algoritmos anteriores. Resulta bastante tedioso anidar un montón de Si ... entonces, como en el ejemplo del día de la semana. Cuando queramos o necesitemos hacer numerosas comparaciones podemos usar otra estructura de selección llamada Según Sea. El formato de estructura de selección Según sea es: Según sea <variable> Caso = <condición> Caso = <condición> instrucción o instrucciones Otro caso instrucción o instrucciones fin-según Así, utilizando esta estructura, el problema del día de la semana será así: inicio Leer numero Según sea numero Caso = 1 imprimir "Domingo" Caso = 2 imprimir="Lunes" Caso = 3 imprimir="Martes" Caso = 4 imprimir "Miercoles" Caso = 5 imprimir "Jueves" Caso = 6 imprimir "Viernes" Caso = 7 imprimir "Sábado" Otro Caso imprimir "El número debe estar entre 1 y 7" fin-según fin Lo cual resulta menos engorroso que varios Si... entonces anidados. Es posible anidar Si... entonces dentro de estructuras Según sea y viceversa. Observa que la instrucción Otro Caso ejecuta una o varias instrucciones cuando no se cumple ningún caso de los contemplados más arriba. Otro Caso debe estar siempre al final (cuando sea necesario, si no o es se puede omitir Otro Caso) El uso de una u otra estructura depende de cada persona, pero en general cuando las condiciones a evaluar son muchas, se utiliza Según Sea. La estructura según sea admite varias condiciones por ejemplo: Según sea MES caso= 1,3,5,7,8,10,12 TDias = 31 caso = 2,4,6,11 TDias =30 caso = 2 TDias=28 fin-según Este pequeño ejemplo establece el número de días de un mes determinado almacenado en la variable MES (para años no bisiestos). En lugar de escribir varios Caso= 1, Caso =2, etc, se puede especificar acción o acciones (en este caso la asignación de días a TDias) cuando la variable tome uno de los valores separados por comas.
  • 17. 17 Es decir si TDias es 1 ó 3 ó 5 ó 7 ó 8 ó 10 ó 12; se ejecuta TDias=31. Ejercicios 4.13. Los n trabajadores de la empresa “PagaPoco" lograron obtener un aumento de sueldo en el último mes. Este aumento de sueldo se determinó por tramos, de acuerdo a la siguiente tabla: Construya un algoritmo que reciba como entrada el sueldo actual de cada uno de los trabajadores y calcule el nuevo sueldo. Además, el algoritmo debería indicar cuánto más gasta la empresa por concepto de sueldos, después del aumento. 4.14. Escribir un algoritmo para calcular las soluciones de una ecuación cuadrática de la forma 4.15. Un sistema de ecuaciones lineales de la forma: Puede resolverse utilizando las siguientes fórmulas: Diseñar un algoritmo para leer los coeficientes a, b, c, d, e, f, y calcule los valores de x e y. ¿Existen algunos casos en los que este algoritmo no funcione? 4.16. Diseñar un algoritmo que lea tres puntuaciones de un alumno y calcule la media. Si la media del alumno no supera los 60 puntos el alumno está suspenso y el algoritmo deberá imprimir un mensaje indicándolo. En caso de que el alumno tenga una media superior o igual a 60 puntos pero inferior a 70, el alumno estará ‘aprobado pero dudoso’. Si el alumno supera los 70 puntos el mensaje a imprimir será ‘Aprobado’. 4.17. Escribir un algoritmo que lea dos números y determine cuál de ellos es el mayor. 4.18. Escribir un algoritmo que lea tres números y determine cuál de ellos es el mayor. 4.19. Dados por el teclado la base y altura de un triángulo, hacer un algoritmo para calcular el área del triángulo. Tener en cuenta los casos no válidos (la base o la altura negativas). 4.20. Introducir un número por teclado y determinar si es positivo o negativo.- Para saber si un número es positivo o negativo, debemos saber si es menor o mayor a cero. Si es mayor, el número es positivo y si es menor resulta negativo. 4.21. Dado un número del 1 al 7, establecer al día de la semana. 4.22. Leer un número y mostrar por la salida estándar si dicho numero es o no es par. 4.23. Definir una función que dados tres números X, Y y Z, devuelva una lista con los números ordenados por orden creciente. 4.24. Diseñar una función para leer un año y determinar si es bisiesto. NOTA: un año es bisiesto si es múltiplo de 4. Los múltiplos de 100 no son bisiestos, salvo si son también múltiplos de 400. 4.4.ESTRUCTURA ITERATIVA (REPETICIÓN) La estructura iterativa o de repetición permite ejecutar una o varias instrucciones, un número determinado de veces o, indefinidamente, mientras se cumpla una condición. Esta estructura ayuda a simplificar los algoritmos, ahorrando tiempo valioso a quien resuelve problemas con ayuda del computador. Figura 2.2: Modelo de estructura iterativa. Historia Curiosa Un día, en la India, un joven bracmán llamado Lahur Sessa pidió una audiencia con el Rey para obsequiarle
  • 18. 18 el juego que había inventado. La curiosidad del rey lo llevó a conceder la cita que pedía el joven Sessa. El rey quedó maravillado y aprendió rápidamente las reglas de aquel juego que consistía de un tablero cuadrado dividido en sesenta y cuatro cuadritos iguales (32 blancos y 32 negros); sobre este tablero se ubicaban dos colecciones de piezas, que se distinguían unas de otras por el color, blancas y negras, repitiendo simétricamente los motivos y subordinadas a reglas que permitían de varios modos su movimiento. Algún tiempo después, el rey mandó llamar a su presencia al joven bracmán y dirigiéndose a él le dijo: - Quiero recompensarte, amigo mío, por este maravilloso obsequio, que de tanto me sirvió para aliviar viejas angustias. Pide, pues, lo que desees, para que yo pueda demostrar, una vez más, como soy de agradecido con aquellos que son dignos de una recompensa. Ante tal ofrecimiento, el joven respondió: - Voy, pues, a aceptar por el juego que inventé, una recompensa que corresponda a vuestra generosidad; no deseo, sin embargo, ni oro, ni tierras, ni palacios. Deseo mi recompensa en granos de trigo. -¿Granos de trigo? –Exclamó el rey, sin ocultar la sorpresa que le causara semejante propuesta-. ¿Cómo podré pagarte con tan insignificante moneda? -Nada más simple -aclaró Sessa-. Dadme un grano de trigo por la primera casilla del tablero, dos por la segunda, cuatro por la tercera, ocho por la cuarta, y así sucesivamente hasta la sexagésima cuarta y última casilla del tablero. No sólo el rey, sino también los visires y venerables bracmanes, se rieron estrepitosamente al oír la extraña solicitud del joven. Insensato -exclamó el rey-. ¿Dónde aprendiste tan grande indiferencia por la fortuna? La recompensa que me pides es ridícula. Mando llamar el rey a los algebristas más hábiles de la Corte y les ordenó calculasen la porción de trigo que Sessa pretendía. Los sabios matemáticos, al cabo de algunas horas de realizar cálculos dispendiosos, volvieron al salón para hacer conocer al rey el resultado completo de sus cálculos. Preguntándoles el rey, interrumpiendo el juego: -¿Con cuantos granos de trigo podré cumplir, finalmente, con la promesa hecha al joven Sessa? -Rey magnánimo -declaró el más sabio de los geómetras-: calculamos el número de granos de trigo que constituirá la recompensa elegida por Sessa, y obtuvimos un número cuya magnitud es inconcebible para la imaginación humana (el número en cuestión contiene 20 guarismos y es el siguiente: 18.446.744.073.709. 551. 615. Se obtiene restando 1 a la potencia 64 de 2). -La cantidad de trigo que debe entregarse a Lahur Sessa -continúo el geómetra- equivale a una montaña que teniendo por base la ciudad de Taligana, fuese 100 veces más alta que el Himalaya. La India entera, sembrados todos sus campos, y destruidas todas sus ciudades, no produciría en un siglo la cantidad de trigo que, por vuestra promesa, debe entregarse al joven Sessa. ¿Cómo describir aquí la sorpresa y el asombro que esas palabras causaron al Rey Ladava y a sus dignos visires? El soberano hindú se veía, por primera vez, en la imposibilidad de cumplir una promesa. Lahur Sessa -refiere la leyenda de la época-, como buen súbdito, no quiso dejar afligido a su soberano. Después de declarar públicamente que se desdecía del pedido que formulara, se dirigió respetuosamente al monarca y le dijo: los hombres más precavidos, eluden no sólo la apariencia engañosa de los números, sino también la falsa modestia de los ambiciosos. El rey, olvidando la montaña de trigo que prometiera al joven bracmán, lo nombró su primer ministro. (Tomado del libro “El hombre que calculaba” escrito por Malba Tahan) Ejemplo Elabora un algoritmo para ayudar a los hábiles algebristas de la corte del Rey Ladava con el cálculo del número de granos de trigo que deben entregar a Lahur Sessa como pago por haber inventado el juego de ajedrez.
  • 19. 19 La estructura repetitiva se utiliza cuando se quiere que un conjunto de instrucciones se ejecuten un cierto número finito de veces. Llamamos bucle o ciclo a todo proceso que se repite un cierto número de veces dentro de un algoritmo o un programa. Existen dos tipos de estructuras repetitivas; la primera es aquella en donde se tiene perfectamente establecido el número de veces que un grupo de acciones se van a ejecutar (20, 5, 2 veces), y la segunda en la que el número de repeticiones es desconocido y se hará hasta que se cumpla o no cierta condición. Un ejemplo de la primera sería imprimir los datos de los alumnos de una clase (se conoce cuantos alumnos hay) y un ejemplo de la segunda puede ser el mostrar un mensaje de error cada vez que el usuario pulse una determinada tecla (no sabemos cuantas veces pulsará esa tecla). Las acciones que forman parte del cuerpo del bucle son ejecutadas de forma repetitiva mediante la ocurrencia o no de una condición. Estructura Para (Desde - Hasta) Cuando conocemos de antemano el número de veces en que se desea ejecutar una acción o grupo de acciones, se utiliza la estructura repetitiva Desde o Para. Esta estructura ejecuta las acciones del cuerpo del bucle un número especificado de veces, y de modo automático controla el número de iteraciones o pasos. La sintaxis es: desde variable= vi hasta vf [incremento] acción o acciones fin-desde Donde: variable: variable índice vi: valor inicial de la variable índice vf: valor final de la variable índice [incremento]: el número que se incrementa (o decrementa) a la variable índice en cada iteración del bucle. Ejemplo: Imprimir todos los números del 1 al 100. Inicio desde i = 1 hasta 100 imprimir i fin-desde fin I es la variable índice con un valor inicial de 1, se incrementa uno en cada paso hasta 100. Podemos notar que la estructura desde comienza con un valor inicial de la variable índice y las acciones se ejecutan hasta que el valor inicial sea MAYOR que el que el Valor final. La variable índice se incremente en uno (en el ejemplo) y si este nuevo valor del índice no es mayor que el valor final, se ejecuta de nuevo la acción imprimir. En este caso se visualizará los números 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ....97, 98, 99, 100. Otro Ejemplo: Imprimir todos los números pares desde 2 hasta el 300
  • 20. 20 desde i= 2 hasta 300 incremento 2 imprimir i fin-desde Donde: La variable índice comienza en 2, se imprime 2 y en el siguiente paso se incrementa (suma) 2 a la variable índice que pasa a valer 4; se imprime el 4 y como 4 es menor que 300 (valor final) , se pasa a una nueva iteración incrementando nuevamente en 2 el índice, que ahora vale 6; y así sucesivamente... Aquí se visualizan: 2, 4, 6, 8, 10, 12, 14, 16, 18, ..... 296, 298, 300 Si deseamos mostrar los impares el algoritmo es el siguiente: desde i= 1 hasta 300 incremento 2 imprimir i fin-desde El ciclo termina mostrando 299 puesto que en el siguiente paso, La variable i valdría 301 y es mayor al límite establecido de 300. i pasa a valer realmente 301 en el último paso, solo que la instrucción de imprimir no se ejecuta porque el límite de 300 se supera. Si diéramos la instrucción de imprimir el valor de i, inmediatamente después del fin-desde, veíamos 301. Ejemplo 3: Imprimir los valores comprendidos entre el 460 y 500 en orden inverso. Debemos mostrar: 500, 499, 498, 497,..... 462, 461, 460. En este caso haremos un decremento a la variable índice (no un incremento como en los ejemplos anteriores). Tenemos que comenzar nuestra variable índice en 500 y decrementar una unidad hasta alcanzar el 460, así: desde i= 500 hasta 460 incremento -1 imprimir i fin-desde Como salida tenemos, entonces: 500, 499, 498, 497, 496, 495, 494,.... 464, 463, 462, 461, 460. El segundo tipo de estructura repetitiva se diferencia de la primera en que no se conoce el número de repeticiones o iteraciones en que se va a ejecutar una instrucción o un bloque de instrucciones. Estas estructuras son básicamente dos: Estructura mientras....fin-mientras y la estructura repetir.... hasta. Estas dos se diferencian en que la verificación de la condición para repetir el ciclo se hace al inicio con mientras y al final con repetir. También existen estructuras repetitivas que son combinaciones de estas dos que mencionamos, pero no las estudiaremos. Ejercicios 4.25. Construya un algoritmo que reciba como entrada un cierto valor n, y genere como salida n veces la palabra “hola". 4.26. Construya un algoritmo que reciba como entrada un cierto valor n y genere como salida el valor de la serie: 1 + 2 + 3 + 4 + : : : + n. 4.27. Escribir un algoritmo que calcule la desviación estándar de cinco números. 4.28. Realizar un algoritmo para calcular los valores que toma la siguiente función 4.29. Imprimir todos los números del 1 al 100. 4.30. Imprimir los valores comprendidos entre el 460 y 500 en orden inverso. 4.31. Imprimir todos los números pares desde 2 hasta el 300 4.32. Dada una secuencia de n números mostrar su producto por pantalla. 4.33. Tabla de multiplicar del 5. 4.34. Modificar el programa anterior para aplicar la fórmula a cualquier cantidad de resistencias. Primeramente, el programa pedirá el número de resistencias a conectar en paralelo. Después pedirá uno a uno los valores de todas las resistencias. Por último, escribirá el resultado global. Estructura Mientras Como su nombre lo indica, esta estructura repite el cuerpo del bucle mientras se cumpla una determinada condición. Su sintaxis es: mientras {condición} acción 1 acción 2 acción 3 ..... acción n fin mientras instrucción X
  • 21. 21 Lo primero que el computador hace es examinar la condición, lo que puede dar como resultado dos posibilidades: - La condición se cumple: Se ejecutan acción 1, acción 2, acción 3, ..., acción n. Las estará repitiendo hasta que la condición no se cumpla, entonces se sale del ciclo y se siguen ejecutando la o las instrucciones que vienen a continuación y están fuera del bucle; instrucción X. - La condición no se cumple: No entrará en el ciclo. Se ejecutan las instrucciones que vienen después del bucle, instrucción X, por ejemplo. De esto se deduce que el cuerpo del bucle de una estructura mientras puede repetirse cero o más veces, veces que son determinadas por el cumplimiento o no de la condición. Ejemplo mientras contraseña < > "josua" imprimir "La contraseña es incorrecta !" fin-mientras imprimir "Ha ingresado la contraseña correcta" Veremos más ejemplos de esta estructura en la sección ejercicios. Al analizarlos comprenderemos mejor como funciona. Estructura Repetir La estructura repetir cumple la misma función que la estructura mientras. La diferencia está en que la estructura mientras comprueba la condición al inicio y repetir lo hace al final; por eso la estructura repetir se ejecuta por lo menos una vez. La sintaxis es: repetir intrucción 1 instrucción 2 instrucción 3 ...... hasta {condición} instrución X Repetir es opuesta a la estructura mientras. Repetir se ejecuta hasta que se cumpla una condición que se comprueba al final del bucle. Esto implica que las instrucciones que forman el cuerpo del bucle se ejecutan por lo menos una vez. Con la estructura mientras el bucle puede ejecutarse 0 o más veces. Lo que la computadora hace al ejecutar la estructura repetir es: - Se ejecutan: instrucción 1, instrucción 2, instrucción 3, ...... - Se evalúa la condición. Si esta es FALSA se vuelve a repetir el ciclo y se ejecutan instrucción 1, instrucción 2, instrucción 3, ...... Si la condición es VERDADERA se sale del ciclo y se ejecuta instrucción X. Ejemplo repetir imprimir "La contraseña es incorrecta !" hasta contraseña = "josua" Más ejemplos en la sección Ejercicios. En resumen, hemos visto dos tipos de estructuras repetitivas, el primer tipo en la que conocemos el número de veces que se repetirá el bucle o ciclo (Desde ....fin-desde; y el segundo tipo en el cual no conocemos el numero de veces en se repite el ciclo ya que está determinado por el cumplimiento o no de una condición (mientras ..... fin-mientras y repetir....hasta). Toda estructura Desde....fin-desde tiene una estructura mientras....fin-mientras o repetir.....hasta equivalente. Pero las estructuras mientras... o hacer ... no tienen NINGÚN desde.....fin-desde equivalente. Ejercicios 4.35. Construya un algoritmo que reciba como entrada varios montos de depósito y despliegue la suma de ellos. Considere que un valor negativo significa que no hay más datos y no debe ser considerado como dato válido. 4.36. Construya un algoritmo que reciba como entrada una secuencia de valores numéricos y genere como salida la suma de los valores pares y la multiplicación de los impares. Considere que un valor negativo significa que no hay más datos y no debe ser considerado como dato válido. 4.37. Construya un algoritmo que reciba como entrada una secuencia de valores de temperaturas y genere como salida el total de veces que la temperatura fue 0. Considere que un valor de temperatura negativo significa que no hay más datos y no debe ser considerado como válido.
  • 22. 22 4.38. Construya un algoritmo que reciba como entrada una secuencia de valores de temperaturas y genere como salida el total de veces que se registro una temperatura menor que 0, el total de veces que fue 0 y el total de veces que fue mayor que 0. Considere que una temperatura con valor 99 es una temperatura no válida e indica el término de los datos. 4.39. Construya un algoritmo que genere como salida los términos de la siguiente serie: 2; 5; 7; 10; 12; 15; 17; : : : ; 1800. Hasta un valor dado por el usuario. 4.40. Escribir un diagrama de flujo para un algoritmo que calcule la media de varios números, los que introduzca el usuario por teclado, y saque el resultado por pantalla. Nota: el primer carácter no numérico que introduzca el usuario indicará que no va a introducir más números. 4.41. Leer secuencia de números y mostrar la suma de dichos números hasta que se introduce un número negativo. 4.42. Pedir al usuario una contraseña hasta que este de la correcta o decida salir. 4.43. El número mágico. UNIDAD 5: 5.1. ARREGLOS. Hasta ahora hemos trabajado con datos simples que representaban un número, un carácter o una cadena. Sin embargo, en ocasiones se necesita procesar una colección de valores que están relacionados entre sí por algún método, por ejemplo, una lista de calificaciones, de los meses del año, temperaturas a lo largo de una semana, etc. El procesamiento de estos datos utilizando datos simples es muy difícil. Por eso, se han definido en la programación varias estructuras de datos, que son una colección caracterizada por alguna organización y por las operaciones que se definen en ella. Una de estas estructuras son los arreglos. Un arreglo es un conjunto de elementos del mismo tipo que comparten un nombre común; algo así como una variable que puede almacenar al mismo tiempo más de un valor. Los arreglos reciben también el nombre de tablas, listas o arrays. Un arreglo es un conjunto ordenado y homogéneo. Ordenado porque el primer elemento, segundo, tercero... n-ésimo puede ser identificado y homogéneo porque sus elementos son todos del mismo tipo (numéricos o alfanuméricos, pero no una combinación de ambos). Gráficamente, un arreglo se representa como una tabla: De igual forma que cualquier variable, un arreglo debe tener un nombre. Aquí hemos llamado A a nuestro arreglo ejemplo. Los elementos que están en el arreglo A ocupan todos una determinada posición dentro de él: Así, el número -5 se encuentra en la posición 3; el 99 en la posición 10 y el 12 en la posición 1. A(3) = - 5 A(10) = 99 A(1) = 12 Vemos, entonces que un elemento se referencia por el nombre del arreglo y la posición que ocupa dentro de él. El número que se coloca entre paréntesis se llama índice y designa la posición del elemento en el arreglo. Cada elemento del arreglo se puede procesar como si fuera una variable simple. La dimensión de un arreglo está dada por la cantidad de elementos que contiene y debe ser definida al comenzar el programa. A los arreglos unidimensionales se les suele conocer como vectores. 5.2. CARGAR UN ARREGLO La asignación de valores a los elementos de un vector se realiza de esta forma: A(4) 0 A(7) 4 Por supuesto que no vamos a cargar un vector de 100 elementos, escribiendo 100 asignaciones.
  • 23. 23 La carga de un vector se hace por medio del ciclo desde....fin desde . Nuestro bucle va a comenzar en 1 hasta un número N que es la longitud del vector. Pero antes, no demos olvidar que el vector debe ser dimensionado. Al dimensionar un vector le decimos a la máquina que reserve los espacios de memoria necesarios para los elementos del vector. Los problemas relacionados con vectores tendrán casi siempre esta forma inicio Leer dimensión del vector Dimensionar Vector Cargar Vector Procesamiento de los elementos del vector (según lo que se pida) Imprimir Vector fin Por lo tanto, vamos a tener tres desde...fin desde bien diferenciados: • Un bucle para la carga • Un bucle para el proceso • Un bucle para la impresión Aunque la carga y el proceso pueden hacerse dentro de un solo bucle, particularmente no recomiendo esta práctica, ya que casi siempre crea dificultades innecesarias. Ejercicio: Cargar un vector de 30 componentes. No olvidemos que antes de cargar un vector debemos dimensionarlo. En este caso la dimensión del vector es 30. Luego habilitaremos un bucle desde....fin desde comenzando en 1 hasta 30. Llamaremos V a nuestro vector. inicio dimensionar v(30) desde i= 1 hasta 30 leer v(i) fin desde fin De esta forma hemos cargado un arreglo v con componentes. Ahora bien, el usuario deberá siempre poder determinar la dimensión del arreglo sobre el que quiera trabajar. Por eso, vamos a leer la dimensión del vector en una variable: inicio Leer n dimensionar v(n) desde i = 1 hasta n Leer v(i) fin desde fin Así vamos a cargar un arreglo SIEMPRE 5.3. IMPRIMIR UN ARREGLO El procedimiento para imprimir un arreglo es casi exactamente igual al proceso de carga, con la diferencia que en lugar de leer, vamos a imprimir. Para el caso de nuestro arreglo v de n componentes: desde i= 1 hasta n imprimir v(i) fin desde Es bueno volver a señalar que los elementos de un arreglo son todos del mismo tipo (todos numéricos o todos alfanuméricos). 5.4. PROCESANDO UN ARREGLO Ejercicio: Leer un vector de N componentes. Hallar la suma y el promedio de los elementos del vector. Se pide la suma y el promedio de los elementos. Sabemos que el promedio lo hallaremos dividiendo la suma todos los elementos, sobre la cantidad. Nuestro arreglo (al que llamaremos h) va a tener una dimensión d, que será determinada por el usuario. Siguiendo el esquema que habíamos visto, vamos a tener primeramente un bucle para la carga del arreglo, otro para el proceso y otro para imprimir el arreglo. inicio suma 0 leer d dimensionar h (d) desde i = 1 hasta h leer h (i) fin desde desde i = 1 hasta d suma suma + h(i) fin desde promedio suma/d imprimir h (i) fin
  • 24. 24 desde impimir ""La suma de los elementos del vector es:", suma imprimir "El promedio es:", promedio fin 5.5. ARREGLOS BIDIMENSIONALES Matrices Un arreglo bidimensional o matriz es un conjunto de datos homogéneos (todos del mismo tipo), cada uno de los cuales debe referenciarse por dos índices. Los índices determinan la posición de una fila y una columna. En este ejemplo tenemos una matriz de dimensión M * N, en donde M es el número de columnas y N el número de filas. Aquí M=5 y N=6. El número total de elementos de la matriz será entonces 5*6 = 30. De la misma forma que los vectores, una matriz debe tener un nombre. Llamaremos MAT a nuestra matriz ejemplo y determinaremos la posición de algunos de sus elementos. MAT será de tipo alfanumérico. La matriz MAT está definida con 5 filas y 6 columnas. La notación para el dimensionamiento de una matriz es NOMBRE (cantidad de filas, cantidad de columnas); luego: MAT(5, 6) Una vez que la matriz contenga datos (veremos más adelante como cargar una matriz) para referirnos a un elemento debemos conocer en que fila y que columna reside ese elemento, por ejemplo: MAT (1,1) = "A" MAT(3, 5) ="Ñ" MAT (4,3)= "OK" MAT (5,4)="L" Dimensionamiento y Carga de una matriz Así como un arreglo unidimensional (vector) tiene que ser nombrado y dimensionado antes de ser utilizado, una matriz también. La instrucción para dimensionar un matriz es: dimensionar M(5,6) La carga de datos se realiza de la misma forma que un vector, por medio de un bucle desde....fin desde; solo que en este caso, vamos a necesitar 2 bucles; uno que recorra las filas y otro las columnas: desde fila = 1 hasta 5 desde columna = 1 hasta 6 leer MAT(fila, columna) fin-desde fin-desde En este ejemplo, la variable fila comienza en el valor 1, luego se da inicio al bucle columna que desde 1 hasta 6. El bucle de las columnas debe terminar todo su recorrido para que pueda comenzar el siguiente valor de fila. El recorrido de una matriz se hace, por tanto de esta manera:
  • 25. 25 Una matriz también puede recorrerse por columnas. Al programar, no siempre podremos predefinir el tamaño de un matriz, por eso, solicitaremos al usuario que ingrese la cantidad de filas y columnas con las que desea dimensionar una matriz: inicio leer cantfila, cantcolumna dimesionar MAT(cantfila, cantcolumna) desde fila=1 hasta cantfila desde columna=1 hasta cantcolumna leer MAT(fila,columna) fin-desde fin-desde fin Este algoritmo solicita las dimensiones de la matriz, la dimensiona y luego procede a cargarla. Una matriz se imprime utilizando también dos índices: inicio leer cantfila, cantcolumna dimesionar MAT(cantfila, cantcolumna) - ----- se dimensiona desde fila=1 hasta cantfila desde columna=1 hasta cantcolumna leer MAT(fila,columna) ------- lectura fin-desde fin-desde desde fila=1 hasta cantfila desde columna=1 hasta cantcolumna imprimir MAT(fila,columna) --- ----- impresión fin-desde fin-desde fin Procesando una matriz. Proceso de una matriz se realiza también forma análoga a los ejemplos anteriores. Utilicemos un ejemplo que calcula el promedio de los elementos de una matriz. inicio leer cantfila, cantcolumna dimensionar M (cantfila, cantcolumna) desde I = 1 hasta cantfila desde J=1 hasta cantcolumna leer M(I, J) fin-desde fin-desde desde I=1 hasta cantfila desde J=1 hasta cantcolumna suma suma + M(I, J) fin-desde fin-desde promedio f suma / (cantfila * cantcolumna) desde I = 1 hasta cantfila desde J=1 hasta cantcolumna imprimir M(I, J) fin-desde fin-desde fin Una matriz que tiene la misma cantidad de filas y de columnas se llama matriz cuadrada. 1 2 3 4 5 2 3 4 5 Esta es una matriz cuadrada de orden 5. Las matrices cuadradas tienen ciertas características; por ejemplo, los elementos en donde el número de filas es igual al número de columnas se llama diagonal principal (señalados en amarillo): Los elementos de la diagonal principal tienen, entonces, la propiedad de que fila = columna La diagonal principal define así dos áreas bien notorias, una que está por encima y otra por debajo. La región determinada por los elementos situados sobre la diagonal
  • 26. 26 principal se llama matriz triangular superior que tiene la propiedad de que fila < columna. La matriz triangular inferior es la zona situada debajo de la diagonal principal, cuyos índices cumplen con la propiedad: fila > columna. Elementos de la Matriz triangular superior Elementos de la Matriz triangular inferior Operaciones con Matrices 1- Suma de matrices: Si A y B son dos matrices de igual dimensión (MxN), entonces la suma de Ay B existe y es igual a una matriz C también de dimensión MxN en donde cada C (i, j) = A (i, j) + B (i, j): Matriz A 10 8 3 0 7 -3 33 45 9 15 71 29 Matriz B 1 6 9 69 14 22 56 7 3 5 80 1 A y B son de igual dimensión, por lo tanto existe una matriz C que es la suma de A y B 11 14 13 69 21 19 89 52 12 20 151 30 2- Producto Escalar por una matriz: Si A es una matriz de orden (dimensión) MxN y K es un escalar, el producto de K*A es igual a otra matriz D también de orden MxN en donde casa D (i, j) = K * A (i ,j): Matriz A: 1 2 3 4 5 6 7 8 9 10 11 12 0 - 1 - 2 -3 21 22 33 3 0 5 12 4 Escalar: 5 Resultado de multiplicar la matriz A por el escalar (numero) 5 Matriz D 5 10 15 20 15 30 35 40 45 50 55 60 0 -5 - 10 - 15 105 110 165 15 0 25 60 20 3- Traspuesta de una matriz: Si A es una matriz de orden MxN, la traspuesta de A, denotada como A°, es otra matriz de orden NxM donde cada B (i, j) = A (j,i). Una matriz es simétrica si A° = A: Matriz A: 0 1 2 3 4 5 6 7 8 9 10 11 Traspuesta de A, A°: 0 3 6 9 1 4 7 10 2 5 8 11 Ejercicios 5.1.Se tiene una tabla con los datos de matricula, peso, estatura y sexo de los alumnos de una Universidad. Construya un algoritmo que reciba los datos de la tabla antes mencionada, calcule y genere como salida el promedio de los pesos y de las estaturas. Su algoritmo debe entregar estos valores considerando todos los individuos y también diferenciando por sexo. Considere fin de datos la matrícula en cero (0). 5.2.Se dispone de una tabla con las temperaturas registradas a medio día durante el año 2007. Se desea determinar cuál fue la máxima, cual fue la mínima y cuantas veces se repitió cada una de estas durante el año 2007. Además se desea saber el promedio de dichas temperaturas. 5.3.Cargar un vector de n componentes
  • 27. 27 5.4.Leer una lista de n números y almacenar en un vector el factorial de cada número de la lista. 5.5.Leer un vector de N componentes. Hallar la suma y el promedio de los elementos del vector 5.6.Leer y almacenar en una matriz de m x n una secuencia de números. 5.7.Dadas 2 matrices a y b obtener la suma. 5.8.Dada una matriz determinar la posición ( i , j ) del mayor número y del menor. 5.9.Leer una secuencia de n números almacenarlos en un vector A (1 .. n) y mostrar la suma de los elementos pares y el mayor de los impares. 5.10. Dada una matriz de m x n (1..4)(1..5) realizar el proceso de ordenar la misma. 5.11. Dada una matriz [1..n] [1..m] realizar proceso de ordenar solo por filas. 5.12. Dado un vector de números determinada aquellos que sean primos. 5.13. Calcular el promedio de los elementos de una matriz. 5.14. Suma de Matrices 5.15. Producto Escalar por una matriz 5.16. Traspuesta de una matriz. 5.17. Desarrolla un algoritmo que lea por el teclado una secuencia de n enteros y visualice por pantalla los que sean pares. 5.18. Diseñar un programa que cree una lista de números enteros. Cada número se debe situar en orden creciente. El programa visualizará también el contenido de la lista UNIDAD 6: FUNCIONES Y PROCEDIMIENTOS. En general un problema complejo puede ser resuelto de manera más fácil y eficiente si se divide en problemas más pequeños y concentrándonos en cada etapa en la solución de ese "subproblema". Esto implica que el gran problema original será resuelto por medio de varios módulos, cada uno de los cuales se encarga de resolver un subproblema determinado. Esos módulos, se conocen con el nombre de subalgoritmos. Un subalgoritmo no es más que un algoritmo que tiene la función de resolver un subproblema. Los subalgoritmos se escriben sólo una vez, luego es posible hacer referencia a ellos ("llamarlos") desde diferentes puntos del algoritmo. La ventaja obvia es que nos permite reutilización y evita la duplicación de códigos. Los subalgoritmos son independientes entre si, en el sentido de que se puede escribir y verificar cada módulo en forma separada sin preocuparse por los demás módulos. Por ello, es menos complicado localizar un error y también se puede modificar el código sin tener que tocar o rehacer varias partes del mismo. Los subalgoritmos pueden ser dos tipos: Funciones y Procedimientos (también llamadas subrutinas o subprogramas). Notemos que al utilizar procedimientos y funciones se establece un límite para el alcance de las variables, unas tendrán efecto y valor sólo en el subalgoritmo y otras en el algoritmo principal, también es posible especificar que una variable tenga efecto en el algoritmo principal y todos los subalgoritmos. Este punto lo estudiaremos con más detalle en la sección Ámbito de variables. Los subalgoritmos pueden recibir valores del algoritmo principal (parámetros), trabajar con ellos y devolver un resultado al algoritmo principal: No existen limitaciones en cuanto a las acciones que pueda ejecutar un subalgoritmo. Un subprograma puede, a su vez, invocar o llamar a otros o a sus propios subprogramas, inclusive puede llamarse a sí mismo (esto se conoce como recursividad). FUNCIONES Desde el punto de vista matemático, una función es una expresión que toma uno o más valores llamados argumentos y produce un valor que se llama resultado. Este resultado es además, único. Ejemplos de funciones matemáticas son los logaritmos, funciones trigonométricas (seno, coseno, etc). El en ambiente de programación y diseño de algoritmos, las funciones tienen exactamente el mismo significado. Es decir, se realizan ciertos cálculos con una o más variables de entrada y se produce un único resultado. En programación y diseño de algoritmos, este resultado podrá ser un valor numérico, alfanumérico o lógico. Es decir, una función puede devolver un resultado que puede ser una cadena, un número o un valor de tipo lógico (verdadero o falso). Esto hace que en los lenguajes de programación, debamos especificar de qué tipo es una función. Una función será de tipo numérica cuando devuelva un número y será de tipo alfanumérica o string cuando devuelva una cadena. En el caso de las funciones de tipo numérico se tienen subdivisiones que están dadas por los tipos de datos soportados por el lenguaje (integer o entero, simple o single, doble precisión o double, real, etc). O sea que cuando una función numérica devuelva un valor numérico entero
  • 28. 28 (sin decimales) será de tipo entera o integer. Si devuelve un valor decimal será doble o simple, dependiendo del grado de exactitud que se desea; sin embargo como esto es propio de lenguajes de programación no se tendrá en cuenta en este tutorial (las funciones serán numéricas cuando devuelvan un dato numérico y de tipo string cuando devuelvan una cadena, sin necesidad de especificar esto previamente en el algoritmo). Puedes consultar al profesor de la materia que te proporcione más detalles sobre los tipos de datos y su aplicación en las funciones. Tomemos como ejemplo al función matemática sen(x). En este caso la función se llama sen (seno) y el argumento o valor que se pasa a la función para que lo procese es x. Así sen(90º)=1. Este valor es además único (por eso se llama función), es decir no existe ningún otro número que la función pueda procesar y devolver 1 más que 90º. Cuando utilicemos esta función en un algoritmo y necesitemos el valor del sen(90º), debemos asignarlo a una variable, así: valor sen(90) En este caso, la variable valor será = 1, por la tanto nuestra función es numérica. La llamada a una función será siempre: variable funcion (parámetros) Ejemplos: La llamada a una función MES que devuelva el nombre del mes, pasándole el valor numérico correspondiente será: nombre_mes MES(2) (esto devolvería "Febrero") La función es de tipo string porque devuelve una cadena como resultado en la variable nombre_mes. Ya sabemos como llamar a una función, ahora veremos como se escribe la función. Como las funciones y procedimientos no se escriben en el algoritmo principal (en programación existen espacios destinados a ellos) todas las funciones y procedimientos que utilicen un algoritmo se podrán escribir antes o después del algoritmo principal. Para efectos de este curso las funciones y procedimientos se escribirán siempre al final del algoritmo principal. Una función se identifica mediante su nombre. De la misma manera que cuando escribimos un algoritmo comenzamos poniendo: inicio y al final fin, debemos hacer lo mismo para una función. Esto nos dirá donde comienza y donde termina la función. La sintaxis es: Función nombre_funcion (parámetros) <instrucciones> <instrucciones> Fin función Todas las funciones devuelven un sólo valor. Siempre debemos indicar a la función mediante una instrucción que devuelva el valor al algoritmo principal (recordemos que la función será llamada desde un algoritmo). Esto se debe hacer en el cuerpo de la función cuando tengamos el resultado. Así que, tomando como ejemplo la función MES, veremos como se escribe el algoritmo principal, como se llama a la función desde el algoritmo principal y cómo se declara la función: Algoritmo principal Inicio leer numero_mes mientras numero_mes <=0 ó numero_mes >12 imprimir "Debe ingresar un número entre 1 y 12" > Validación del número entre 1 y 12 leer numero_mes fin mientras nombre_mes MES (numero_mes) > Llamada a la función MES imprimir "El mes correspondiente es: ", nombre_mes fin Función MES (valor) Según sea valor caso=1 nombre="Enero" caso=2 nombre= "Febrero" caso=3 nombre = "Marzo" caso =4 nombre = "Abril" caso=5 nombre = "Mayo" caso=6 nombre = "Junio" caso=7 nombre ="Julio" caso=8 nombre="Agosto" caso=9
  • 29. 29 nombre="Setiembre" caso= 10 nombre = "Octubre" caso=11 nombre= "Noviembre" caso= "12" nombre="Diciembre" fin caso MES nombre > Le decimos a la función que devuelva el resultado al algoritmo principal Fin función Debes notar como pasan los valores desde el algoritmo principal a la función. En este caso, cuando se llama a la función: nombre_mes  MES (numero_mes) El valor que se pasa a la misma está en la variable numero_mes que toma un valor comprendido entre 1 y 12. Cuando se llama a la función, este valor debe ser recibido por la misma, en este caso en el cuerpo de la función se coloca entre paréntesis el nombre de la variable que recibirá el valor: Función MES (valor) Si se pasan varios valores, todos deben ser recibidos en sus correspondientes variables. La función toma el valor pasado desde el algoritmo y lo guarda en la variable valor para procesarlo. Luego de que obtiene un resultado, en este caso el valor de nombre_mes, se le ordena a la función que devuelva ese valor al algoritmo principal: MES nombre Esto es siempre así: nombre_funcion resultado Es en este punto donde se retorna a la línea siguiente a la que llamó a la función en el algoritmo principal: imprimir "El mes correspondiente es: ", nombre_mes Resumiendo. Una función devuelve un sólo valor, para que funcione la función debe recibir uno o varios valores desde el algoritmo principal, realizar el proceso y devolver el resultado. La función se escribe de igual forma que cualquier algoritmo, la diferencia consiste en que en lugar de inicio y fin, ponemos: Función <nombre_función> fin_función La llamada a la función se hace con su nombre y el o los valores que le pasamos. Cuando necesitemos procesar uno o varios valores y ofrecer UN resultado, utilizaremos funciones. Ejemplos de Funciones A continuación, estudiaremos ejemplos de funciones. De esta forma comprenderemos mejor el su funcionamiento. Ejemplo1: Escribir una función que devuelva la raíz cuadrada de un número ingresado por teclado. Aunque todos los lenguajes de programación tiene instrucciones para calcular una raíz cuadrada, como aquí no estamos escribiendo código, encontraremos la raíz cuadrada de un número elevando a la potencia 1/2. En general, la raíz x de un número se obtiene elevando ese número a la potencia 1/x. Llamaremos RAIZCUA a la función que vamos a escribir. La función RAIZCUA debe obtener un valor que se pasa desde el algoritmo principal (el número del cual queremos calcular la raíz cuadrada), elevarlo a la potencia 1/2 y luego devolver este valor al algoritmo principal. Recordemos que no podemos permitir el ingreso de números negativos. inicio leer numero mientras numero < = 0 imprimir "Ingrese un número positivo" leer numero fin-mientras resultado RAIZCUA(numero) imprimir "La raiz cuadrada es:", resultado fin Función RAIZCUA(valor) raiz valor ^ 1/2 RAIZCUA raiz fin-función Este algoritmo comienza leyendo el número, verifica que sea un número positivo con la estructura repetitiva mientras y luego hace el llamado a la función RAIZCUA pasándole la variable numero. El valor de esa función se recibe en una variable resultado. La función RAIZCUA recibe el numero que el programa le pasa en la variable valor, luego eleva ese numero a la potencia 1/2 y lo asigna a la variable raíz.
  • 30. 30 Para que la función devuelva el resultado del proceso al algoritmo principal, se asigna la variable raiz a la función, así: RAIZCUA raiz (esto será así para todas las funciones que escribamos). Observa que existen variables tanto en el algoritmo principal como en la función. Hablemos de ellas. ÁMBITO DE LAS VARIABLES En programación existen dos tipos de variables, las llamadas locales y las variables globales. Variables Locales: Son aquellas que se encuentran dentro de un subprograma (procedimiento o función) y es distinta de las variables que están en el algoritmo principal. El valor se confina al subprograma en el que está declarada. Variables Globales: Son las que se definen o están declaradas en el algoritmo principal y tiene efecto tanto en el algoritmo principal como en cualquiera de sus subprogramas. Tomando como referencia la función RAIZCUA, las variables globales son: numero y resultado. Y las variables locales son: valor y raíz. valor y raiz sólo existen en la función RAIZCUA, si en el algoritmo principal tratamos de utilizar estas variables o imprimirlas, no obtendremos nada, ya que para el algoritmo estas variables son locales y desde su punto de vista NO EXISTEN. numero y resultado son variables globales, es decir que están disponibles en el algoritmo principal y también en la función RAIZCUA. Una variable local (de un subprograma) no tiene ningún significado en el algoritmo principal y otros subprogramas. Si un subprograma asigna un valor a una de sus variables locales, este valor no es accesible a otros subprogramas, es decir, no pueden utilizar este valor. Las variables globales tienen la ventaja de compartir información de diferentes subprogramas. En resumen: las variables locales son las que se definen en subprogramas y solo tienen valor dentro de él. Las variables locales son las definidas en el algoritmo principal y tienen valor y se pueden utilizar en cualquier parte de algoritmo o en cualquier subprograma. Ejemplo 2: Diseñar una función que calcule la media de tres números. inicio leer numero1, numero2, numero3 prom PROMEDIO(numero1, numero2, numero3) imprimir "El promedio es:", prom fin Función PROMEDIO(valor1, valor2,valor3) promedio (valor1 + valor2 + valor3) / 3 PROMEDIO promedio fin-función PROCEDIMIENTOS Hemos visto que las funciones se utilizan para devolver como resultado un valor Sin embargo, en ocasiones necesitaremos devolver más de un resultado o también ejecutar las mismas líneas de código varias veces en un algoritmo (como por ejemplo una ordenación, etc.) En estas situaciones la función no es apropiada y se utilizarán los procedimientos (también llamados subrutinas). Un procedimiento es un conjunto de sentencias o instrucciones que realizan una determinada tarea y que pueden ser ejecutados desde más de un punto del programa principal. Un procedimiento tiene una llamada, cuando el procedimiento se ejecuta totalmente, vuelve al punto desde donde fue llamado y se ejecuta la siguiente instrucción. El procedimiento se escribe como cualquier otro algoritmo, solo existen diferencias en la parte inicial y final. Para nombrar los procedimientos se deben seguir las mismas reglas que para las variables. Notemos que el objetivo de los procedimientos es ayudar en la modularidad del programa y evitar la repetición de instrucciones ya que estas se pueden escribir en un procedimiento y en lugar de repetirlas, llamar al procedimiento cuantas veces sea necesario. Desde el programa principal es posible pasar valores (numéricos, alfanuméricos o combinación de ambos) al procedimiento. Este utilizará esos valores para realizar un determinado proceso. Los valores que se pasan a un procedimiento (en forma de variables) se llaman parámetros (de igual forma que en las funciones). Declaración de un procedimiento La sintaxis para la declaración de un procedimiento es la siguiente: Procedimiento Nombre_procedimiento (parámetros) <......acciones...> <......acciones...>
  • 31. 31 Fin Procedimiento La llamada a un procedimiento se hace simplemente por su nombre: Nombre_procedimiento(parámetros) También es posible que no se pase ningún parámetro al procedimiento, en cuyo caso la llamada se hace así: Nombre_procedimiento() Cuando no se pasan parámetros se puede obviar los paréntesis. Nombre_procedimiento Podemos utilizar procedimientos, por ejemplo para dibujar recuadros en la pantalla, mostrar mensajes de error, realizar procesos en los que se debe devolver más de un resultado, colocar en un procedimiento las líneas de código que se repiten varias veces en un algoritmo. Cuando necesitemos devolver más de un valor en un procedimiento, las variables que se devolverán los resultados deben figurar en la lista de parámetros. Ejemplo 1: Procedimiento para calcular el cociente y resto de la división entre dos números inicio leer numeroA, numeroB DIVISION (numeroA, numeroB, P, Q) imprimir P, Q fin Procedimiento DIVISION (dividendo, divisor, cociente, resto) cociente dividendo / divisor resto dividendo - cociente * resto fin-procedimiento En este ejemplo, se pasan los números el dividendo y divisor (numeroA y numeroB respectivamente) y también en los parámetros de llamada al procedimiento deben figurar las variables en las que se devolverán los resultados de cociente y resto (P y Q respectivamente) por eso la llamada es: DIVISION (numeroA, numeroB, P, Q) El procedimiento recibe los valores numeroA en dividendo, numeroB en divisor y se colocan las variables en las que se pasarán al programa principal el cociente y resto. P recibirá el valor de cociente y Q recibirá el valor del resto. Es decir, que cuando necesitemos devolver más de un valor, los parámetros del procedimiento deben ser los valores que se pasan al procedimiento y luego las variables en las que se recibirán los resultados. El objetivo de esta sección es ayudar a comprender cómo funcionan las funciones y procedimiento. Puedes pedir a tu profesor más ejemplos de procedimientos y funciones. Ejercicios 6.1.Utilizar una declaración de tipos para una matriz de números reales de tamaño DIM´DIM, donde DIM es una constante, declarada como tal, de valor 10. Escribir las siguientes funciones: a) Función traspuestaM: Acepta una matriz como único argumento y devuelve su matriz traspuesta. b) Función simetricaM: Acepta una matriz como único argumento y devuelve 1 si dicha matriz es simétrica y 0 si no lo es. Para averiguar si la matriz es o no simétrica se debe usar la función traspuestaM del apartado anterior. c) Función sumaM: Acepta tres matrices devolviendo en la tercera de ellas la suma de las dos primeras. d) Función restaM: Acepta tres matrices devolviendo en la tercera de ellas la resta de las dos primeras. e) Función multiplicaM: Acepta tres matrices devolviendo en la tercera de ellas la multiplicación de las dos primeras. 6.2.Definir una función que tenga por argumento una lista y devuelva el tercer elemento de dicha lista. 6.3.Definir una función que tomando como argumentos una lista y un elemento, devuelva T si el elemento aparece más de una vez en la lista. Generales 1.Construya un algoritmo que reciba como entrada dos valores: a y b, donde a < b. Este algoritmo debe generar como salida los múltiplos de a que son menores que b. 2.La serie de Fibonacci permite aproximar la forma en que se reproducen los conejos. Se sabe que una pareja de conejos puede tener dos crías al mes, y esto se da a partir del tercer mes de nacidos, en el cual los conejos alcanzan su edad madura. La forma en que aumenta la población de conejos mes a mes se puede ver en la siguiente tabla, si consideramos que no se mueren conejos y que inicialmente se cuenta con una pareja de conejos recién nacida:
  • 32. 32 mes parejas de conejos 1 2 3 4 5 6 1 1 2 3 5 8 Construya un algoritmo que dado un valor n, correspondiente a un mes cualquiera, determine la cantidad de conejos en ese mes. Indicación: observe que en cada mes, la cantidad de conejos corresponde a la suma de los conejos de los dos meses anteriores a ese mes. 3.Construya un algoritmo que genere los términos de la siguiente serie, y además calcule su valor para un n dado. 4.El siguiente es un menú de una hamburguesería. Diseñar un algoritmo capaz de leer número de cada alimento ordenado y calcular la cuenta total: Hamburguesa 1.50 Con queso 1.75 Refresco 1.25 Patatas 1.00 Ensalada 2.00 5.Elabore, un algoritmo que permitan calcular el máximo común divisor de dos números enteros positivos. 6.La cedula en Ecuador, es uno de los documentos más importantes que tiene una persona. Por este motivo es muy importante que todo sistema informático que maneje la misma sea capaz de reconocer si la cedula es valida. La cedula consta de 10 dígitos, el último digito es un digito de control. Para reconocer si una cedula es verdadera se debe seguir el siguiente procedimiento: • Comprobar que la cedula tiene 10 dígitos y que estos sean numéricos. De no ser así no es correcta. • Sumar los dígitos de los lugares pares. • Multiplicar por dos los dígitos de los lugares impares y sumarlos. (Si al multiplicar por dos un digito impar, la multiplicación es mayor que 9, se debe restar 9 a la multiplicación obtenida) • Sumar los dos resultados obtenidos anteriormente. • Buscar la decena igual o superior y restar la suma obtenida a esta decena. • Comprobar que el dígito de control que hemos calculado y el último dígito del de la cedula coinciden, de lo contrario no es válida. Ej: 100336275-1 1 0 0 3 3 6 2 7 5 1 2 0 6 4 1 13 0 3 6 7 16 Suma 29 Decena igual o superior 30 Resta 1 7.Convertir un número decimal a binario. Ej: 134 2 134 67 2 Resto 0 66 33 2 1 32 16 2 1 16 8 2 0 8 4 2 0 4 2 2 0 2 1 0 Número Binario: 1 0 0 0 0 1 1 0 75 2 74 37 2 Resto 1 36 18 2 1 18 9 2 0 8 4 2 1 4 2 2 0 2 1 0 Número Binario: 1 0 0 1 0 1 1 8.Transformar un número decimal en letras. Ej: 134 Ciento treinta y cuatro.