Вы находитесь на странице: 1из 43

Algoritmos y Solución de Problemas

Autor: Ing. Nelson Prado. UNIDAD 1:


Índice
UNIDAD 1: .......................................................... 1 1.1. INTRODUCCIÓN.
1.1. INTRODUCCIÓN. ................................ 1
Los matemáticos hindúes, árabes y europeos fueron los
1.2. ALGORITMOS Y SOLUCIÓN DE primeros que desarrollaron técnicas de cálculo escrito.
PROBLEMAS................................................... 2 El matemático árabe Al'Khwarizmi , alrededor del año
1.3. METODOLOGÍA PARA RESOLVER 830 DC, escribe un libro de Aritmética, traducido al latín
PROBLEMAS................................................... 2 como Algoritmi de numero Indorum, donde introduce el
1.4. ETAPAS DEL CICLO DE sistema numérico indio (sólo conocido por los árabes
PROGRAMACIÓN DE COMPUTADORES .... 3 unos 50 años antes) y los métodos para calcular con él.
1.5. ALGORITMOS ..................................... 4 De esta versión latina proviene la palabra Algoritmo.
1.6. REPRESENTAR ALGORITMOS ......... 5
UNIDAD 2: .......................................................... 6 Por algoritmo se entiende "una lista de instrucciones
2.1. VARIABLES, CONSTANTES E donde se especifica una sucesión de operaciones
IDENTIFICADORES. ...................................... 6 necesarias para resolver cualquier problema de un tipo
dado". Los algoritmos son modos de resolución de
2.2. DATOS Y TIPOS DE DATOS .............. 6 problemas, cabe aclarar que no sólo son aplicables a la
2.3. VARIABLES ........................................ 7 actividad intelectual, sino también a todo tipo de
2.4. OPERACIONES.................................... 7 problemas relacionados con actividades cotidianas. El
2.5. ASIGNAR VALORES A LAS algoritmo es de carácter general y puede aplicarse a
VARIABLES .................................................... 9 cualquier operación matemática o a cualquier problema.
2.6. TIPOS DE VARIABLES MÁS La formulación de algoritmos fue uno de los más
UTILIZADOS ................................................... 9 grandes adelantos dentro de la ciencia matemática ya
UNIDAD 3: ........................................................ 11 que a partir de ello se pudieron resolver infinidad de
3.1. DIAGRAMAS DE FLUJO PARA problemas.
REPRESENTAR ALGORITMOS .................. 11
3.2. PSEUDOCÓDIGO PARA Landa, matemático ruso, quien ha investigado mucho al
respecto nos dice que "la ciencia matemática, en el
REPRESENTAR ALGORITMOS .................. 12
proceso de su desarrollo, ha tratado de encontrar los
UNIDAD 4: ........................................................ 13 algoritmos óptimos más generales para resolver los
4.1. PROCESOS......................................... 13 problemas que permitan la solución uniforme de clases
4.2. ESTRUCTURA SECUENCIAL .......... 13 más amplias de problemas de una manera, es decir,
4.3. ESTRUCTURA CONDICIONAL ....... 14 empleando siempre el mismo sistema de operación. Los
4.4. ESTRUCTURA ITERATIVA algoritmos, para llegar a ser tales deben reunir ciertas
(REPETICIÓN)............................................... 17 características. Una de ellas es que los pasos que deben
Estructura Para (Desde - Hasta) ................... 19 seguirse deben estar estrictamente descritos, cada acción
Ejercicios .................................................... 20 debe ser precisa, y debe ser general, es decir, que pueda
Estructura Mientras ..................................... 20 ser aplicable a todos los elementos de una misma clase.
Estructura Repetir........................................ 21 Por ejemplo en el caso del algoritmo de una
multiplicación, no sólo se realizará el procedimiento de
UNIDAD 5: ........................................................ 22
resolución parte para la multiplicación de 4 x 4, sino que
5.1. ARREGLOS. ....................................... 22 el mismo algoritmo podrá aplicarse a cualquier
5.2. CARGAR UN ARREGLO .................. 22 multiplicación. La última de estas características será la
5.3. IMPRIMIR UN ARREGLO ................ 23 resolución, en otras palabras, esto quiere decir que el
5.4. PROCESANDO UN ARREGLO ......... 23 algoritmo deberá llegar a un resultado específico.
5.5. ARREGLOS BIDIMENSIONALES .... 24
UNIDAD 6: ........................................................ 27 Es de gran importancia aclarar que los algoritmos en si
6.1. FUNCIONES Y PROCEDIMIENTOS. 27 mismos no resuelven problemas, se resuelven gracias al
6.2. FUNCIONES ...................................... 27 producto de ejercer las operaciones dictadas por el
6.3. ÁMBITO DE LAS VARIABLES ........ 30 algoritmo, se puede decir que es por el planteamiento
mismo. La realización de algoritmos es natural e innata
6.4. PROCEDIMIENTOS........................... 30

1
en el hombre y en la mayoría de los casos es de tipo 1.3. METODOLOGÍA PARA RESOLVER
inconsciente, en otras palabras, las personas suelen PROBLEMAS
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.
Figura 1.2: Pasos para resolver problemas
La resolución de problemas exige al menos los
matemáticos.
siguientes pasos:
Todos los días nos enfrentamos a problemas. Desde
• Definición y análisis del problema. nuestro punto de vista un problema es una oportunidad.
• Diseño del algoritmo.
• Transformación del algoritmo en un programa. En la mayoría de los textos se recomiendan los
• Ejecución y validación del programa. siguientes procedimientos para solucionar problemas:

Los primeros dos pasos definen lo que es un sistema de 1. COMPRENDER EL PROBLEMA.


procesamiento de información. • Leer el problema varias veces.
• ¿Qué datos me dan en el enunciado del problema?
Un sistema que transforma datos brutos en información • ¿Cuál es la pregunta que me da el problema?
organizada, significativa y útil.
• ¿Qué debo lograr?
• ¿Cuál es la incógnita del problema?
Para poder entender lo que es un sistema de
procesamiento debemos diferenciar las palabras datos e • Organizar la información.
información: • Agrupar los datos en categorías.
• Trazar una figura o diagrama.
• Datos se refiere a la representación de algún hecho,
concepto o entidad real (por ejemplo palabras 2. HACER EL PLAN.
escritas, habladas, números y dibujos). • Escoger y decidir las operaciones a efectuar.
• Información implícita datos procesados y • Eliminar los datos inútiles.
organizados. • Descomponer el problema en otros más pequeños.

3. EJECUTAR EL PLAN (Resolver).


• Ejecutar en detalle cada operación.
• Simplificar antes de calcular.
Figura. 1.1 Sistema de Procesamiento de Información. • Realizar un dibujo o diagrama.

Los componentes de un sistema de proceso de 4. ANALIZAR LA SOLUCIÓN (Revisar).


información son: entrada, salida y procesador. • Dar una respuesta completa.
• Hallar el mismo resultado de otra manera.
Ejemplo de sistemas: Un termostato que controla la • Verificar por apreciación que la respuesta es
temperatura. La entrada es la temperatura media. La adecuada.
salida es una señal que controla la caldera del aire
acondicionado.

2
Ejemplo 1.1
1.1. Se tienen dos cubetas de 5 y 4 litros
En un juego, el ganador obtiene una ficha roja; el respectivamente. Las mismas no están graduadas
segundo, una ficha azul; y el tercero, una amarilla. Al con medidas. Sí se tiene disponible toda el agua
final de varias rondas, el puntaje se calcula de la necesaria. ¿Cómo lograría poner dos litros de agua
siguiente manera: Al triple de la cantidad de fichas rojas en una de las dos?
se adicionan las fichas azules y se descuenta el doble de 1.2. En un curso de un colegio, la materia de educación
las fichas amarillas. Si Andrés llegó 3 veces en primer física se divide en dos grupos de estudiantes:
lugar, 4 veces de último y 6 veces de intermedio, ¿Qué Natación, con 136 y Fútbol, con 204. Si hay 25
puntaje obtuvo? estudiantes que estudian Natación y Fútbol, ¿cuántos
estudiantes tiene el curso? Para resolver este
Solución: problema, debes tener conocimientos sobre
conjuntos (representación, clasificación e
COMPRENDE intersección). Es buena idea que construyas una
• Leer detenidamente el problema. tabla para organizar la información y un diagrama
• ¿Cuántos colores de fichas se reparten? para representar los datos.
• ¿Cuántas fichas rojas, azules y amarillas obtuvo 1.3. Orlando compró 15 metros de tela para mandar a
Andrés? fabricar una cortina, a $26 el metro. Para colgarla
• ¿Qué pregunta el problema? necesita 28 aros de madera cuyo valor es de $1 cada
uno. El riel y demás accesorios cuestan $30. Si la
PLANEA modista cobra $5 por cada metro de tela
• Para hallar el puntaje que obtiene Andrés por sus confeccionado y la instalación vale $15 ¿Cuánto es
llegadas de primero, calcular el triple de la el costo total de la cortina instalada? Debes tener
cantidad de fichas rojas. conocimientos sobre sumas y multiplicaciones.
• Para hallar el puntaje por sus llegadas en segundo 1.4. El “peso neto” indicado en la envoltura de un jabón
lugar, contar la cantidad de fichas azules. de baño es de 140 gramos y el “peso neto” indicado
• Para hallar el puntaje que pierde por sus llegadas en otro jabón es de 80 gramos. El primero vale $0.90
en último lugar, calcular el doble de la cantidad de y el segundo $0.65. ¿Cuál de los dos es más
fichas amarillas. costoso? Debes tener conocimientos sobre sistemas
de medidas (peso) y divisiones.
• Para hallar el puntaje total, calcular la suma de los
puntajes por las fichas rojas y azules, restarle los
puntos de las fichas amarillas. 1.4. ETAPAS DEL CICLO DE
PROGRAMACIÓN DE COMPUTADORES
RESUELVE
• Por tres fichas rojas: 3 x 3 = 9 puntos. Muchos expertos en programación afirman que para
• Por seis fichas azules: 6 = 6 puntos. elaborar en un computador procedimientos que realicen
• Por cuatro fichas amarillas: 4 x 2 = 8 puntos. determinadas tareas, se deben seguir cuatro fases o
• Para obtener el puntaje final de Andrés, sumar los etapas.
puntos obtenidos con las fichas rojas y azules (9 +
6 = 15 puntos) y de este resultado restar los puntos Estas fases concuerdan con los procedimientos para
representados por las fichas amarillas (15 – 8 = 7 solucionar problemas, vistos anteriormente:
puntos).
1. Analizar el problema (Entender el problema)
REVISA 2. Diseñar un algoritmo (Trazar un plan)
• El puntaje que obtuvo Andrés es 7 puntos. 3. Traducir el algoritmo a un lenguaje de programación
(Ejecutar el plan)
• Verificar las operaciones y comparar los cálculos
4. Depurar el programa (Revisar)
con la solución estimada.
Como puedes apreciar, hay una semejanza entre los
Ejercicios
métodos utilizados para solucionar problemas y las
cuatro fases para solucionar problemas con ayuda del
Debes tener en cuenta (y anotar) las actividades que
computador en otras áreas del conocimiento.
realizas para resolver estos problemas y clasificarlas en
cada una de las cuatro etapas vistas: comprender,
planear, resolver y revisar.

3
1.5. ALGORITMOS 5. Enroscar la bombilla nueva hacia la derecha en el
plafón hasta apretarla.
En la naturaleza hay muchos procesos que puedes 6. Bajar de la escalera o del banco.
considerar como Algoritmos ya que tienen 7. Fin.
procedimientos y reglas. Incluso, muchas veces no
somos conscientes de ellos. Ejercicio

Por ejemplo, el proceso digestivo es un concepto de 1. Discutir en parejas el ejemplo de la bombilla y


algoritmo con el que convivimos a diario sin que haga proponer algunas mejoras. Luego, un voluntario
falta una definición precisa de este proceso. El hecho de debe pasar al tablero y escribir un Algoritmo con
que conozcas cómo funciona el sistema digestivo, no participación de toda la clase.
implica que los alimentos que consumas te alimenten
más o menos. Los Algoritmos permiten describir claramente una serie
de instrucciones que debe realizar el computador para
La familiaridad de lo que sucede día a día nos impide lograr un resultado previsible. Vale la pena recordar que
ver muchos algoritmos que pasan a nuestro alrededor. un procedimiento de computador consiste de una serie
de instrucciones muy precisas y escritas en un lenguaje
Procesos, rutinas o biorritmos naturales como la de programación que el computador entienda.
gestación, las estaciones, la circulación sanguínea, los
ciclos cósmicos, etc., son algoritmos naturales que En resumen, un Algoritmo es una serie ordenada de
generalmente pasan desapercibidos. instrucciones, pasos o procesos que llevan a la solución
de un determinado problema. Los hay tan sencillos y
Ejemplo 1.2 cotidianos como seguir la receta del médico, abrir una
puerta, lavarse las manos, etc.; hasta los que conducen a
Un procedimiento que realizamos varias veces al día la solución de problemas muy complejos.
consiste en lavarnos los dientes. Veamos la forma de
expresar este procedimiento como un Algoritmo: El concepto de algoritmo, aunque similar y obviamente
relacionado, no debe confundirse con el concepto de
1. Tomar la crema dental. programa. Mientras el primero es la especificación de un
2. Destapar la crema dental. conjunto de pasos (operaciones, instrucciones,
3. Tomar el cepillo de dientes. órdenes,...) orientados a la resolución de un problema, el
4. Aplicar crema dental al cepillo. segundo es ese conjunto de operaciones especificadas en
5. Tapar la crema dental. un determinado lenguaje de programación y para un
6. Abrir la llave del lavamanos. computador concreto, susceptible de ser ejecutado (o
7. Remojar el cepillo con la crema dental. compilado o interpretado). Un algoritmo, estrictamente
8. Cerrar la llave del lavamanos. hablando, no puede ejecutarse hasta que se implementa,
9. Frotar los dientes con el cepillo. ya sea en un lenguaje de programación, en un circuito
10. Abrir la llave del lavamanos. eléctrico, en un aparato mecánico, usando papel y lápiz,
11. Enjuagarse la boca. o en algún otro modelo de computación.
12. Enjuagar el cepillo.
13. Cerrar la llave del lavamanos. Las características fundamentales de un algoritmo son:
14. Secarse la cara y las manos con una toalla.
• Debe ser preciso e indicar el orden de realización
Ejemplo 1.3 de cada paso.
• Debe estar definido. Si se sigue el algoritmo dos
Veamos que algo tan común como los pasos para veces, se debe obtener el mismo resultado cada vez.
cambiar una bombilla (foco) se pueden expresar en • Debe ser finito. Si se sigue un algoritmo, se debe
forma de Algoritmo: terminar en algún momento.

1. Ubicar una escalera o un banco debajo de la Cuando el procesador es una computadora, el algoritmo
bombilla fundida. se expresa por medio de un programa. Cada paso esta
2. Tomar una bombilla nueva. expresado por medio de una instrucción.
3. Subir por la escalera o al banco.
4. Girar la bombilla fundida hacia la izquierda hasta
soltarla.

4
Ejemplo 1.4 proposiciones, mientras que en un Diagrama de Flujo
se representa por medio de gráficos.
Consideremos algo más complejo como el algoritmo de
Euclides para hallar el Máximo Común Divisor (MCD) Ejemplo 1.5
de dos números enteros positivos dados. Obsérvese que Diseñar un algoritmo (pseudocódigo) para hallar el área
no se especifica cuáles son los dos números, pero si se de un triángulo rectángulo cuya Base mide 3 cm, la
establece claramente una restricción: deben ser enteros y Altura 4 cm y la Hipotenusa 5 cm.
positivos.
Solución:
ALGORITMO
1. Paso 1: Inicio. ANÁLISIS DEL PROBLEMA
2. Paso 2: Leer los dos números (“a” y “b”). Avanzar Formular el problema: Ya se encuentra claramente
al paso 3. planteado.
3. Paso 3: Comparar “a” y “b” para determinar cuál es Resultados esperados: El área de un triángulo
mayor. Avanzar al paso 4. rectángulo.
4. Paso 4: Si “a” y “b” son iguales, entonces ambos son Datos disponibles: Base, Altura, Hipotenusa, tipo de
el resultado esperado y termina el algoritmo. En triángulo. La incógnita es el área y todos los valores son
caso contrario, avanzar al paso 5. constantes. El valor de la hipotenusa se puede omitir.
5. Paso 5: Si “a” es menor que “b”, se deben Debes preguntarte si tus conocimientos actuales de
intercambiar sus valores. Avanzar al paso 6; si “a” matemáticas te permiten resolver este problema; de no
no es menor que “b”, avanzar al paso 6. ser así, debes plantear una estrategia para obtener los
6. Paso 6: realizar la operación “a” menos “b”, asignar conocimientos requeridos.
el valor de “b” a “a” y asignar el valor de la resta a Determinar las restricciones: Utilizar las medidas
“b”. Ir al paso 3. dadas.
Procesos necesarios: Guardar en dos variables (BASE y
Ejercicio ALTURA) los valores de Base y Altura; Guardar en una
constante (DIV) el divisor 2; aplicar la fórmula
A diferencia de los seres humanos que realizan BASE*ALTURA/DIV y guardar el resultado en la
actividades sin detenerse a pensar en los pasos que variable AREA; comunicar el resultado (AREA).
deben seguir, los computadores son muy ordenados y
necesitan que quien los programa les especifique cada ALGORITMO EN PSEUDOCÓDIGO
uno de los pasos que debe realizar y el orden lógico de Paso 1: Inicio
ejecución. Paso 2: Asignar el número 2 a la constante "div"
Paso 3: Asignar el número 3 a la constante “base”
Numerar en orden lógico los pasos siguientes (para Paso 4: Asignar el número 4 a la constante “altura”
pescar): Paso 5: Guardar en la variable "área" el resultado de
base*altura/div
___ El pez se traga el anzuelo. Paso 6: Imprimir el valor de la variable "área"
___ Enrollar el sedal. Paso 7: Final
___ Tirar el sedal al agua.
___ Llevar el pescado a casa. Ejercicios
___ Quitar el Anzuelo de la boca del pescado.
___ Poner carnada al anzuelo. Elabora un algoritmo para cada uno de los siguientes
___ Sacar el pescado del agua. problemas:

1.5. Escribir un algoritmo para la preparación de un


1.6. REPRESENTAR ALGORITMOS ceviche de camaron que conste de 5 a 10 acciones
principales.
Los Algoritmos se puede expresar de muchas maneras, 1.6. ¿Qué requisitos debe cumplir un algoritmo bien
pero en este curso se tratarán solo dos formas: elaborado?
1.7. Los ingredientes para 4 personas del “pastel de
Pseudocódigo y Diagrama de Flujo. manzana danés” son los indicados en el cuadro
adjunto. Realizar un algoritmo que calcule los
En Pseudocódigo la secuencia de instrucciones se ingredientes para un número variable de personas
representa por medio de palabras en forma de frases o que se lee por teclado.

5
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. Figura 2.1: Algoritmo para calcular el área de
1.13. Hallar el área y el perímetro de un círculo cuyo cualquier triángulo rectángulo.
radio mide 2 cm.
1.14. Hallar el área de un pentágono regular de 6 cm - Constantes: Tienen un valor fijo que se le da cuando
de lado y con 4 cm de apotema. se define la constante y que ya no puede ser
modificado durante la ejecución.
- Variables: El valor puede cambiar durante la
UNIDAD 2: ejecución del algoritmo, pero nunca varia su nombre
y su tipo.
2.1. VARIABLES, CONSTANTES E
IDENTIFICADORES. 2.2. DATOS Y TIPOS DE DATOS

En programación, las Variables son espacios de trabajo Las cosas se definen en la computadora mediante datos,
reservados para guardar datos (valores). El valor de una los algoritmos que vamos a diseñar van operar sobre
Variable puede cambiar en algún paso del Algoritmo o esos datos. A nivel de la máquina los datos se
permanecer invariable; por lo tanto, el valor que representan como una serie de bits (dígito 1 ó 0). Los
contiene una variable es el del último dato asignado a tipos de datos que vamos a manejar a lo largo del curso
esta. son: numéricos y carácter (también llamados
alfanuméricos), existen además, los datos de tipo lógicos
Ejemplo 2.1 que solo pueden tener uno de dos valores: verdadero o
falso.
En el siguiente diagrama de flujo, "AREA" es un
ejemplo de Variable; en el paso 5 se guardó en ella el Los datos numéricos pueden ser de varias clases:
resultado de multiplicar "BASE" por "ALTURA" y en el enteros, enteros largos, de doble precisión, de simple
paso 6 se utilizó nuevamente para guardar el valor de precisión, de coma flotante, reales; cuya definición
dividir su propio contenido ("AREA") entre la Constante depende del lenguaje de programación utilizado.
"DIV".
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.

6
Una cadena o string es una sucesión de caracteres que se • El primer carácter de un nombre debe ser una letra.
encuentran delimitados por comillas (" "). La longitud de • La mayoría de los lenguajes de programación
la cadena es la cantidad de caracteres que la forma, diferencian las letras mayúsculas de las minúsculas.
incluyendo los espacios que son un carácter más. Así: • Con solo leer los nombres se puede entender lo que
contienen. Deben ser muy descriptivos; no utilizar
• "Quito, Pichincha" es una cadena de longitud 18. abreviaturas, a menos que se justifique plenamente.
• "Miércoles 7 de Marzo de 2008" es una cadena de • Es conveniente utilizar una sola palabra para
longitud 28 (el 7 y el 2001 no son números) nombrar páginas, controles, variables, etc.
• "123456" es una cadena de longitud 6, no es el • No utilizar caracteres reservados (%, +, /, >, etc).
número 123.456 sobre "123456" no se puede • Se debe tener en cuenta que algunos lenguajes de
realizar ninguna operación aritmética como sumar, programación no admiten las tildes.
restar, etc., ya que se trata de una cadena • No utilizar palabras reservadas por los lenguajes de
alfanumérica. Ejemplo de este tipo son: cedula, programación.
pasaporte, teléfonos. • Los nombres de procedimientos, variables y
constantes deben empezar con minúscula. Ejemplo,
2.3. VARIABLES fecha, suma, etc. Si es un nombre compuesto por
varias palabras, cada una de las palabras (con
Cuando representamos datos, numéricos o excepción de la primera) deben empezar con
alfanuméricos, debemos darles un nombre. mayúscula. Ejemplo: fechaInicial, baseTriángulo,
etc.
Una variable es un nombre que representa el valor de un
dato. El tipo de nombre que se asigne a variables, constantes y
procedimientos es muy importante. Cuando dejas de
En esencia, una variable es una zona o posición de trabajar en un proyecto por varios días, es más fácil para
memoria en la computadora donde se almacena ti retomar la actividad si los nombres describen muy
información. En un algoritmo y también en un programa bien el contenido de variables, constantes y
se pueden crear tantas variables como queramos. Así procedimientos.
tenemos:
Ejemplos de nombres válidos de variables
• A = 50: Variable tipo numérica A cuyo valor es 50.
• Ciudad = "Guayaquil": Variable alfanumérica o de • fechaNueva.
tipo carácter Ciudad, cuyo valor es "Guayaquil" • c1.
• X = C + B: Variable numérica X cuyo valor es la • totalPersonas.
suma de los valores de las variables numéricas C y • contador_Maletas.
B. Es una variable calculada. • cantidad_de_Alumnos.
• pedido_Almacen.
Ten en cuenta que las operaciones que se pueden realizar
con dos o más variables exigen que éstas sean del mismo Algunos lenguajes de programación exigen la
tipo. No podemos "sumar", por ejemplo una variable declaración de las variables que se van a utilizar en todo
alfanumérica a otra numérica y viceversa como por el programa; es decir, que al comenzar el programa se
ejemplo: debe decir que nombre tiene, de que tipo es (numérica o
alfanumérica) y un valor inicial. Como aquí no estamos
• FechaNueva="1 de Junio de 1.971" + 5 Esto no tratando con ningún lenguaje, la declaración de las
se puede hacer !! variables puede omitirse.

Nombres de las variables constantes Las variables también pueden inicializarse; darles un
valor inicial. Por defecto, todas las variables para las que
A continuación encontrarás una serie de reglas para no especifiquemos un valor inicial, valen cero si son de
asignar nombres (identificadores) a variables, constantes tipo numérica y nulo (nulo no es cero ni espacio en
y procedimientos: blanco; es nulo) si son de tipo carácter.

• Los nombres pueden estar formados por una 2.4. OPERACIONES


combinación de letras y números (saldoMes, salario,
fecha2, baseTriángulo, etc).

7
Las variables se pueden procesar utilizando operaciones "C" < "c" Verdadero
apropiadas para su tipo. Los operadores son de 4 clases: "2" < "12" Falso

• Relacionales. Estas comparaciones se realizan utilizando el valor


• Aritméticos. ASCII de cada carácter.
• Alfanuméricos.
• Lógicos. Para tratar los números se utilizan los operadores
aritméticos:
Los operadores relacionales se utilizan para formar
expresiones que al ser evaluadas producen un valor de Signo Significado
tipo lógico: verdadero o falso. Ellos son: + Suma
- Resta
Signo Operador * Multiplicación
> Mayor que / División
< Menor que ^ Potenciación
= Igual a MOD Resto de la división entera
<= Menor o igual
que El único operador alfanumérico se utiliza para unir o
>= Mayor o igual concatenar datos de este tipo:
que
<> Distinto Signo Significado
+ Concatenación
Ejemplos:
Ejemplo Resultado Ejemplos:
25 <= 25 Verdadero
25 <> 25 Falso Expresión Resultado
25 <> 4 Verdadero "Pseudo" + "código" "Pseudocódigo"
50 <= 100 Verdadero "3" + "4567" "34567"
500 >= 1 Verdadero "Hola " + "que tal ?" "Hola que tal ?"
1=6 Falso
Cuando se comparan caracteres alfanuméricos se hace Los operadores lógicos combinan sus operandos de
uno a uno, comenzando por la izquierda hacia la acuerdo con las reglas del álgebra de Boole para
derecha. producir un nuevo valor que se convierte en el valor de
la expresión, puede ser verdadero o falso.
Si las variables son de diferente longitud, pero
exactamente iguales, se considera que la de menor Signo Significado
longitud es menor. OR Suma lógica (O)
AND Producto lógico (Y)
Los datos alfanuméricos son iguales si y solo si tienen la NOT Negación (NO)
misma longitud y los mismos componentes.
Ejemplos:
Las letras minúsculas son mayores que las mayúsculas y
cualquier carácter numérico es menor que cualquier letra Expresión Resultado
mayúscula o minúscula; Así: Verdad AND Falso Falso
NOT Falso Verdad
carácter numérico < mayúsculas < minúsculas. Verdad OR Falso Verdad

Ejemplos: Por ejemplo, la expresión: (12 + 5) OR (7 + 3) = 10 es


verdadera (se cumple una y Verdad OR Falso es
Comparación Resultado Verdad).
"A" < "B" Verdadero
"AAAA" > Verdadero La expresión (12 * 5) AND (3 + 2) = 60 es falsa
"AAA" (verdad AND falso = Falso).
"B" > "AAAA" Verdadero

8
que se van incrementando o decrementando cada vez
¿Cómo se evalúan los operadores? La prioridad de los que se ejecuta la acción que lo contiene. El incremento o
operadores es: decremento es llamado paso de contador y es siempre
constante.
• Paréntesis
• Potencias Por ejemplo; el marcador de un partido de fútbol, cada
• Productos y Divisiones vez que un equipo anota un gol, aumenta su marcador en
• Sumas y restas una unidad.
• Concatenación
• Relacionales En las carrera de automóviles, cada vez que un vehículo
• Lógicos 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
2.5. ASIGNAR VALORES A LAS VARIABLES quedan por realizar.

La operación de dar valor a una variable se llama Aunque el incremento es siempre constante, el paso de
asignación. La asignación vamos a representarla con el contador no necesariamente puede ser la unidad como en
símbolo; una flecha apuntando a la izquierda. No los ejemplos que se han dado más arriba; también puede
utilizaremos en signo = ya que el operador de asignación incrementarse o decrementarse a de dos, tres, cuatro,....
varía de acuerdo con el lenguaje de programación n; es decir, puede ser cualquier número que conserva el
utilizado. El formato general de una asignación es: mismo valor durante todo el programa.

nombre de la variable  expresión. La sintaxis de una variable contador es:


La flecha se sustituye en los lenguajes de programación variable  variable + constante (al incrementar)
por = (basic); : = (pascal). Pero para evitar variable  variable - constante (al decrementar)
ambigüedades en el algoritmo utilizaremos la flecha para
la asignación y el símbolo = para indicar igualdad. He Ejemplos:
aquí algunos ejemplos:
• gol_local  gol_local + 1.
• a 100: significa que a la variable a se le ha • vueltas  vueltas + 1.
asignado el valor 100, ahora A vale 100. • faltan  faltan – 1.
• suma  5+10: asigna el valor 15 a la variable suma • de_cinco  de_cinco + 5.
a través de una asignación aritmética.
• c  c + 1.
• x z + v: asigna el valor de la suma de las
• x  x – 3.
variables z y v a la variable x. El resultado depende
de los valores que se asignen a x y a z.
Observación: Cuando una variable aparece a ambos
lados del símbolo de asignación, conviene inicializarlas
Toda asignación es destructiva. Esto quiere decir que el
a cero.
valor que tuviera antes la variable se pierde y se
reemplaza por el nuevo valor que asignamos, así cuando
Acumulador o Sumador
se ejecuta esta secuencia:
Es una variable que nos permite guardar un valor que se
• edad  25. incrementa o decrementa en forma NO constante durante
• edad  100. el proceso. En un momento determinado tendrá un valor
• edad  77. y al siguiente tendrá otro valor igual o distinto. Por
ejemplo; cuando realizamos un depósito en el banco, la
El valor final que toma edad será 77 pues los valores 25 cantidad depositada cada vez no es siempre la misma;
y 100 han sido destruidos. unas veces será una cantidad y otras veces distinta. Lo
mismo ocurre cuando realizamos algún retiro, pero
2.6. TIPOS DE VARIABLES MÁS UTILIZADOS decrementando la cantidad total.

Contador La sintaxis es:

Un contador es una variable destinada a contener valores

9
a) números.
acumulador  acumulador + variable (al incrementar) b) Numero X.
acumulador  acumulador - variable (al decrementar) c) 7
d) A(45+
acumulador es la variable en la que se almacena el e) VII
resultado. f) 7mesas.
g) sieteMesas
variable contiene el número que estamos incrementando
o decrementando 2.2. Halle el valor de A:
A  A o (3+5*8) < 3 y ((-6/3 div 4)*2 < 2)
Ejemplos:
2.3. Halle el valor de B:
• saldo  saldo + entrega. B  3 mod 2 div 3
• saldo  saldo – retiro.
• suma  suma + numero. 2.4. Halle el valor de C:
• sumaEdades  sumaEdades + edad. C  (-B*2 <> 8*3 mod 4) y (‘A’>’B’)

Halle el valor de A: 2.5. Dadas las siguientes declaraciones de variables


A  (3*2^5 mod 1 + 8*(3-5) < (2+8-1 mod 1) siguientes y los valores iniciales indicados:
A  (3*32 mod 1 + (-16)) < 10 VAR
A  -16 < 10 Z color, lima, marron, amarillo, rojo, naranja
A  Verdadero R negro, blanco, verde, azul, morado, crayon

Ejemplo

Escribir un algoritmo que intercambie el valor de dos


variables. Evaluar el valor final de las variables después de
ejecutar de forma independiente las sentencias de
Si se tienen, por ejemplo a = 5 y b = 10, se quiere asignación siguientes. Nota: suponer que las
intercambiar el valor de las variables, así: incompatibilidades de tipos se resuelven implícitamente
e indicar dónde se producen.
a = 10; b = 5. a) blanco = color * 2.5 / morado
b) verde = color / morado
No podemos asignar directamente el valor de una a la c) naranja = color*(-12) DIV rojo
otra porque uno de los valores se destruiría; de modo d) azul = (color + marron) / (crayon + 0.3)
que esto no se puede hacer: e) lima = rojo DIV color + rojo MOD color - 356
f) morado = marron / rojo * color
a  b (el valor de a se pierde y quedaría a = 10 ; b =
10) . 2.6. Indicar el tipo de cada una de las siguientes
constantes:
La solución consiste en asignar el valor de una de las a) 534 b) 534.0 c) -534 d) ’534’
4 7 -3
variables a otra variable auxiliar. e) -45.3x10 f) 17x10 g) -45.6x10 h) ’fin del
ejercicio’
inicio
leer A,B 2.7. Indicar el resultado y el tipo de las siguientes
Auxiliar  A expresiones:
A B a) 5^2+3 b) 6+19-0.3 c) 3.0^3+1
B  Auxiliar d) 1/4+2 e) 29.0/2+4 f) 3/6.0 - 7
imprimir A,B
fin 2.8. Calcular el valor de cada una de las siguientes
expresiones enteras:
Ejercicios 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
2.1. ¿Cuáles de los siguientes nombres de Variables
NO son validos y por qué?

10
2.9. Escribir las siguientes expresiones matemáticas en e) (I < 4) o (J > 5)
forma de expresiones de computación: 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


2.10. Evaluar las siguientes expresiones booleanas encuentran escritos los pasos del algoritmo, dichos
escribiendo el árbol de precedencia. Los valores símbolos se encuentran unidos por medio de flechas,
de las variables son A=TRUE, B=TRUE, denominadas líneas de flujo, que indican la secuencia en
C=FALSE, D=FALSE. que se deben de ejecutar.

a) C OR NOT A AND B Los siguientes son los principales símbolos para elaborar
Diagramas de Flujo:
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))

11
• 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)

Reglas básicas para elaborar Diagramas de Flujo: Este nació como un lenguaje similar al inglés y era un
medio de representar básicamente las estructuras de
• Poner un encabezado que incluya un título que control de programación estructurada.
identifique la función del algoritmo; el nombre del
autor; y la fecha de elaboración. El pseudocódigo no puede ser ejecutado por una
• Sólo se pueden utilizar los símbolos anteriores. computadora. Una ventaja del pseudocódigo es que
• Los diagramas se deben dibujar de arriba hacía abajo puede ser traducido fácilmente a lenguajes de
y de izquierda a derecha. programación.
• La ejecución del programa siempre empieza en la
parte superior del diagrama. La escritura del pseudocódigo exige normalmente la
• Los símbolos de “Inicio” y “Final” deben aparecer indentación (sangría en el margen izquierdo) o en su
solo una vez. defecto, numeración jerárquica.
• La dirección del flujo se debe representar por medio
de flechas (líneas de flujo). Ejercicios:
• Todas las líneas de flujo deben llegar a un símbolo o Realice los ejercicios, utilizando Diagramas de Flujo
a otra línea. y Pseudocdigo.
• Una línea de flujo recta nunca debe cruzar a otra.
3.1. Escribir un algoritmo que calcule y saque por
• Cuando dos líneas de flujo se crucen, una de ellas
pantalla, las horas, minutos y segundos de un tiempo
debe incluir una línea arqueada en el sitio donde
expresado sólo en segundos introducido por teclado.
cruza a la otra.
3.2. Escribe un algoritmo que calcule la altura desde la
• Las bifurcaciones y ciclos se deben dibujar
que cae un objeto que tarda t segundos en llegar al
procurando una cierta simetría.
suelo. El tiempo lo introduce el usuario por teclado.
• Cada rombo de decisión debe tener al menos dos Use la fórmula:
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.

12
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: Figura 4.1: Modelo de estructura secuencial.

4.1. PROCESOS La estructura de control secuencial es la más sencilla.


También se la conoce como estructura lineal. Se
Se llama procesos a todas las instrucciones contenidas compone de instrucciones que deben ejecutarse en forma
en un algoritmo para: consecutiva, una tras otra, siguiendo una línea de flujo.

• Declarar variables y constantes. Solamente los problemas muy sencillos pueden


• Asignar valores iniciales a variables y constantes. resolverse haciendo uso únicamente de esta estructura.
• Leer datos que suministra el usuario por medio del
teclado o del ratón (mouse). Una estructura de control secuencial puede contener
• Realizar operaciones matemáticas (aplicar cualquiera de las siguientes instrucciones:
fórmulas).
• Reportar o mostrar contenidos de variables y • Declaración variables
constantes. • Asignación de valores
• Mostrar en pantalla resultados de procedimientos • Entrada de datos
activados por el programa. • Procesamiento de datos (operaciones)
• Reporte de resultados
4.2.ESTRUCTURA SECUENCIAL
Ejercicios
Un Algoritmo está compuesto por instrucciones de
4.1. Diseñar un algoritmo que lea la cantidad de lluvia en
diferentes tipos, organizadas secuencialmente, en forma
pulgadas e imprima su equivalente en milímetros
de estructuras de control. De estas estructuras de control,
sabiendo que 25.5 mm = 1 pulgada.
las más comunes son las siguientes:
4.2. Diseñar un algoritmo que lea el nombre y el apellido
de una persona en ese orden e imprima el apellido
• Secuencial. seguido del nombre.
• Iterativa (repetición). 4.3. El costo de un automóvil para el comprador es la
• Condicional (decisión, selección). suma total del costo del vehículo, del porcentaje de
ganancia del vendedor (12%) y de los impuestos
Una estructura de control se define como un esquema estatales y locales aplicables (6%). Diseñar un
que permite representar ideas de manera simplificada y algoritmo que lea el costo del automóvil e imprima
que bajo condiciones normales, es constante. 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

13
que lea el nombre del estudiante, la nota de • Selección Múltiple.
laboratorio, la nota del examen parcial y la nota del
examen final e imprima el tanto por ciento Las estructuras condicionales simple y múltiple evalúan
correspondiente a cada una de las notas así como la una proposición (condición) que devuelve como
calificación final. resultado únicamente dos valores posibles y excluyentes:
4.5. Realizar un algoritmo para calcular la longitud de verdadero o falso.
una circunferencia y el área del círculo con un radio
leído desde teclado. El algoritmo debe detectar Selección simple
entradas no válidas.
4.6. Leer dos números y mostrar el producto de ellos. La estructura condicional de selección simple ejecuta un
4.7. Leer las longitudes de un rectángulo y calcular la bloque de instrucciones cuando la proposición
superficie y el perímetro. (condición) es verdadera; si esta es falsa, no hace nada.
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? El formato de la estructura de selección es:
-Hasta tres minutos el costo es 0.50
-Por encima de tres minutos es 0.50 más si <condición> entonces
0.1*cada minuto adicional a los tres primeros instrucción 1
instrucción 2
4.12. Realizar un algoritmo que permita ingresar una ...................
frase y la descomponga esta en sus palabras instrucción n
imprimiéndolas al revés. Ejem. si-no
CIUDAD CHICLAYO instrucción a
DADUIC OYALCIHC instrucción b
...................
4.3.ESTRUCTURA CONDICIONAL instrucción z
fin-si
La estructura condicional se utiliza para indicarle al
computador que debe evaluar una condición y, a partir Por ejemplo, Cuando realizamos una llamada telefónica:
del resultado, ejecutar el bloque de instrucciones
correspondiente. La forma más común está compuesta Si {señal de ocupado} entonces
por una proposición que se evalúa y dos bloques de Colgar el teléfono
instrucciones que se ejecutan, uno cuando la condición si - no
es verdadera (selección simple y doble) y otro cuando Iniciar la conversación
ésta es falsa (únicamente en la selección doble). fin – si

Por su parte, un bloque de instrucciones puede contener En este caso, la condición es {señal de ocupado}, que
una o varias instrucciones que se ejecutan una detrás de puede ser verdadera o falsa. Si es verdadera, entonces
otra. La estructura condicional tiene dos variantes: debemos colgar el teléfono y si no, podemos realizar la
conversación.
• Selección simple.

14
Ejemplo: leer numeroA, numeroB
Si numeroA < numeroB entonces
Si a = 5 entonces imprimir "El mayor es:", numeroB
imprimir"A es 5" si-no
si - no imprimir "El mayor es:", numeroA
imprimir "A no es igual a 5" fin-si
fin - si fin

También puede obviarse el si - no cuando no nos En este ejemplo, ¿qué pasaría si los números fueran
interesa ejecutar un bloque de instrucciones en caso de iguales? Hagamos la prueba.
que la condición no se cumpla.
Luego de leer los números, por ejemplo: numeroA=100
Si {condición} entonces y numeroB=100 se ejecutan las instrucciones:
instrucción 1
instrucción 2 Si numeroA < numeroB entonces
......... imprimir "El mayor es:", numeroB
instrucción n
fin – si El resultado de la condición

Por ejemplo: Por lo tanto, al ser falsa la condición, se ejecuta la


instrucción imprimir "El mayor es:", numeroA.
Si {hoy es Miércoles} entonces
Comprar entradas para el cine Por tanto, el algoritmo ofrecerá una solución incorrecta
fin - si cuando los números son iguales. Para solucionar esto,
tenemos que prever el caso de que los números sean
Ejemplo: iguales, utilizando condiciones anidadas.

Introducir un número por teclado y determinar si es inicio


positivo o negativo. leer numeroA, numeroB
Si numeroA < numeroB entonces
Para saber si un número es positivo o negativo, debemos imprimir "El mayor es:", numeroB
saber si es menor o mayor a cero. Si es mayor, el si-no
número es positivo y si es menor resulta negativo. Si numeroA > numeroB entonces
Utilizamos Si... para evaluar como es el número con imprimir "El mayor es:", numeroA
respecto a cero y mostramos los mensajes si-no
correspondientes en cada caso. Así: imprimir "Los números son iguales"
fin-si
inicio fin-si
leer numero fin
Si numero < 0 entonces
imprimir "El número es negativo" Esta solución contiene dos estructuras de repetición, una
si-no dentro de la otra (anidada). En caso de ser necesario
imprimir "El número es positivo" podemos anidar tantas estructuras de selección como sea
fin-si necesario. El algoritmo averigua si A es menor a B, si no
fin lo es, tenemos otras dos posibilidades: que sea menor o
igual, esto es lo que determina la estructura anidada.
Ejemplo. Dados dos números, establecer cuál es mayor.
Otro ejemplo de estructuras de repetición anidadas,
Comenzamos leyendo ambos números, que en el consiste en dado un número del 1 al 7, establecer al día
ejemplo se llamarán NumeroA y NumeroB. Luego de la semana.
debemos comparar como es uno contra el otro (puede ser
NumeroA contra NumeroB o bien comparar NumeroB inicio
contra NumeroA): leer numero
Si numero=1 entonces
inicio imprimir "Domingo"

15
si-no inicio
Si numero=2 entonces Leer numero
imprimir="Lunes" Según sea numero
si-no Caso = 1
Si numero=3 imprimir "Domingo"
imprimir "Martes" Caso = 2
si-no imprimir="Lunes"
Si numero=4 entonces Caso = 3
imprimir "Miercoles" imprimir="Martes"
si-no Caso = 4
Si Numero=5 entonces imprimir "Miercoles"
imprimir "Jueves" Caso = 5
si-no imprimir "Jueves"
Si numero=6 entonces Caso = 6
imprimir "Viernes" imprimir "Viernes"
si-no Caso = 7
Si numero=7 entonces imprimir "Sábado"
imprimir "Sábado" Otro Caso
si-no imprimir "El número debe estar entre 1 y 7"
imprimir "El número fin-según
debe estar entre 1 y 7" fin
fin-si
fin-si Lo cual resulta menos engorroso que varios Si...
fin-si entonces anidados. Es posible anidar Si... entonces
fin-si dentro de estructuras Según sea y viceversa.
fin-si
fin-si Observa que la instrucción Otro Caso ejecuta una o
fin-si varias instrucciones cuando no se cumple ningún caso de
fin los contemplados más arriba. Otro Caso debe estar
siempre al final (cuando sea necesario, si no o es se
Notarás que tenemos varios Si...entonces anidados, ya puede omitir Otro Caso)
que si el número ingreso no es 1, tenemos que preguntar
si es 2 ó 3 ó 4...etc. El último Si...entonces es para El uso de una u otra estructura depende de cada persona,
verificar que el número ingresado no es 1, 2, 3, 4, 5, 6 ó pero en general cuando las condiciones a evaluar son
7; sino cualquier otro que no nos interesa. muchas, se utiliza Según Sea.

Repasa los algoritmos anteriores. La estructura según sea admite varias condiciones por
ejemplo:
Resulta bastante tedioso anidar un montón de Si ...
entonces, como en el ejemplo del día de la semana. Según sea MES
Cuando queramos o necesitemos hacer numerosas caso= 1,3,5,7,8,10,12
comparaciones podemos usar otra estructura de TDias = 31
selección llamada Según Sea. El formato de estructura caso = 2,4,6,11
de selección Según sea es: TDias =30
caso = 2
Según sea <variable> TDias=28
Caso = <condición> fin-según
Caso = <condición>
instrucción o instrucciones Este pequeño ejemplo establece el número de días de un
Otro caso mes determinado almacenado en la variable MES (para
instrucción o instrucciones años no bisiestos). En lugar de escribir varios Caso= 1,
fin-según Caso =2, etc, se puede especificar acción o acciones (en
este caso la asignación de días a TDias) cuando la
Así, utilizando esta estructura, el problema del día de la variable tome uno de los valores separados por comas.
semana será así:

16
Es decir si TDias es 1 ó 3 ó 5 ó 7 ó 8 ó 10 ó 12; se del triángulo. Tener en cuenta los casos no válidos
ejecuta TDias=31. (la base o la altura negativas).
4.20. Introducir un número por teclado y determinar si
Ejercicios es positivo o negativo.-
Para saber si un número es positivo o negativo,
4.13. Los n trabajadores de la empresa “PagaPoco" debemos saber si es menor o mayor a cero. Si es
lograron obtener un aumento de sueldo en el último mayor, el número es positivo y si es menor resulta
mes. Este aumento de sueldo se determinó por negativo.
tramos, de acuerdo a la siguiente tabla: 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
Construya un algoritmo que reciba como entrada el determinar si es bisiesto. NOTA: un año es bisiesto
sueldo actual de cada uno de los trabajadores y calcule el si es múltiplo de 4. Los múltiplos de 100 no son
nuevo sueldo. Además, el algoritmo debería indicar bisiestos, salvo si son también múltiplos de 400.
cuánto más gasta la empresa por concepto de sueldos,
después del aumento.
4.14. Escribir un algoritmo para calcular las 4.4.ESTRUCTURA ITERATIVA
soluciones de una ecuación cuadrática de la forma (REPETICIÓN)

La estructura iterativa o de repetición permite ejecutar


una o varias instrucciones, un número determinado de
4.15. Un sistema de ecuaciones lineales de la forma:
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.
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 Figura 2.2: Modelo de estructura iterativa.
determine cuál de ellos es el mayor.
4.18. Escribir un algoritmo que lea tres números y Historia Curiosa
determine cuál de ellos es el mayor.
4.19. Dados por el teclado la base y altura de un Un día, en la India, un joven bracmán llamado Lahur
triángulo, hacer un algoritmo para calcular el área Sessa pidió una audiencia con el Rey para obsequiarle

17
el juego que había inventado. La curiosidad del rey lo 18.446.744.073.709. 551. 615. Se obtiene restando 1 a
llevó a conceder la cita que pedía el joven Sessa. El rey la potencia 64 de 2).
quedó maravillado y aprendió rápidamente las reglas de -La cantidad de trigo que debe entregarse a Lahur Sessa
aquel juego que consistía de un tablero cuadrado -continúo el geómetra- equivale a una montaña que
dividido en sesenta y cuatro cuadritos iguales (32 teniendo por base la ciudad de Taligana, fuese 100
blancos y 32 negros); sobre este tablero se ubicaban dos veces más alta que el Himalaya. La India entera,
colecciones de piezas, que se distinguían unas de otras sembrados todos sus campos, y destruidas todas sus
por el color, blancas y negras, repitiendo ciudades, no produciría en un siglo la cantidad de trigo
simétricamente los motivos y subordinadas a reglas que que, por vuestra promesa, debe entregarse al joven
permitían de varios modos su movimiento. Sessa.
¿Cómo describir aquí la sorpresa y el asombro que esas
Algún tiempo después, el rey mandó llamar a su palabras causaron al Rey Ladava y a sus dignos visires?
presencia al joven bracmán y dirigiéndose a él le dijo: El soberano hindú se veía, por primera vez, en la
- Quiero recompensarte, amigo mío, por este imposibilidad de cumplir una promesa.
maravilloso obsequio, que de tanto me sirvió para Lahur Sessa -refiere la leyenda de la época-, como buen
aliviar viejas angustias. Pide, pues, lo que desees, para súbdito, no quiso dejar afligido a su soberano. Después
que yo pueda demostrar, una vez más, como soy de de declarar públicamente que se desdecía del pedido
agradecido con aquellos que son dignos de una que formulara, se dirigió respetuosamente al monarca y
recompensa. le dijo: los hombres más precavidos, eluden no sólo la
Ante tal ofrecimiento, el joven respondió: apariencia engañosa de los números, sino también la
- Voy, pues, a aceptar por el juego que inventé, una falsa modestia de los ambiciosos.
recompensa que corresponda a vuestra generosidad; no El rey, olvidando la montaña de trigo que prometiera al
deseo, sin embargo, ni oro, ni tierras, ni palacios. Deseo joven bracmán, lo nombró su primer ministro.
mi recompensa en granos de trigo. (Tomado del libro “El hombre que calculaba” escrito
-¿Granos de trigo? –Exclamó el rey, sin ocultar la por Malba Tahan)
sorpresa que le causara semejante propuesta-. ¿Cómo
podré pagarte con tan insignificante moneda? Ejemplo
-Nada más simple -aclaró Sessa-. Dadme un grano de
trigo por la primera casilla del tablero, dos por la Elabora un algoritmo para ayudar a los hábiles
segunda, cuatro por la tercera, ocho por la cuarta, y así algebristas de la corte del Rey Ladava con el cálculo del
sucesivamente hasta la sexagésima cuarta y última número de granos de trigo que deben entregar a Lahur
casilla del tablero. Sessa como pago por haber inventado el juego de
No sólo el rey, sino también los visires y venerables ajedrez.
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
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
La estructura repetitiva se utiliza cuando se quiere que
fin-desde
un conjunto de instrucciones se ejecuten un cierto
fin
número finito de veces. Llamamos bucle o ciclo a todo
proceso que se repite un cierto número de veces dentro
I es la variable índice con un valor inicial de 1, se
de un algoritmo o un programa.
incrementa uno en cada paso hasta 100.
Existen dos tipos de estructuras repetitivas; la primera es
Podemos notar que la estructura desde comienza con un
aquella en donde se tiene perfectamente establecido el
valor inicial de la variable índice y las acciones se
número de veces que un grupo de acciones se van a
ejecutan hasta que el valor inicial sea MAYOR que el
ejecutar (20, 5, 2 veces), y la segunda en la que el
que el Valor final.
número de repeticiones es desconocido y se hará hasta
que se cumpla o no cierta condición.
La variable índice se incremente en uno (en el ejemplo)
y si este nuevo valor del índice no es mayor que el valor
Un ejemplo de la primera sería imprimir los datos de los
final, se ejecuta de nuevo la acción imprimir.
alumnos de una clase (se conoce cuantos alumnos hay) y
un ejemplo de la segunda puede ser el mostrar un
En este caso se visualizará los números 1, 2, 3, 4, 5, 6, 7,
mensaje de error cada vez que el usuario pulse una
8, 9, 10 ....97, 98, 99, 100.
determinada tecla (no sabemos cuantas veces pulsará esa
tecla).
Otro Ejemplo:
Las acciones que forman parte del cuerpo del bucle son
Imprimir todos los números pares desde 2 hasta el 300

19
Estas estructuras son básicamente dos: Estructura
desde i= 2 hasta 300 incremento 2 mientras....fin-mientras y la estructura repetir.... hasta.
imprimir i Estas dos se diferencian en que la verificación de la
fin-desde condición para repetir el ciclo se hace al inicio con
mientras y al final con repetir.
Donde:
También existen estructuras repetitivas que son
La variable índice comienza en 2, se imprime 2 y en el combinaciones de estas dos que mencionamos, pero
siguiente paso se incrementa (suma) 2 a la variable no las estudiaremos.
índice que pasa a valer 4; se imprime el 4 y como 4 es
menor que 300 (valor final) , se pasa a una nueva Ejercicios
iteración incrementando nuevamente en 2 el índice, que
ahora vale 6; y así sucesivamente... 4.25. Construya un algoritmo que reciba como entrada
un cierto valor n, y genere como salida n veces la
Aquí se visualizan: 2, 4, 6, 8, 10, 12, 14, 16, 18, ..... 296, palabra “hola".
298, 300 4.26. Construya un algoritmo que reciba como entrada
un cierto valor n y genere como salida el valor de la
Si deseamos mostrar los impares el algoritmo es el serie: 1 + 2 + 3 + 4 + : : : + n.
siguiente: 4.27. Escribir un algoritmo que calcule la desviación
estándar de cinco números.
desde i= 1 hasta 300 incremento 2
imprimir i
fin-desde 4.28. Realizar un algoritmo para calcular los valores
que toma la siguiente función
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 4.29. Imprimir todos los números del 1 al 100.
se ejecuta porque el límite de 300 se supera. 4.30. Imprimir los valores comprendidos entre el 460
y 500 en orden inverso.
Si diéramos la instrucción de imprimir el valor de i, 4.31. Imprimir todos los números pares desde 2 hasta
inmediatamente después del fin-desde, veíamos 301. el 300
4.32. Dada una secuencia de n números mostrar su
Ejemplo 3: Imprimir los valores comprendidos entre el producto por pantalla.
460 y 500 en orden inverso. 4.33. Tabla de multiplicar del 5.
4.34. Modificar el programa anterior para aplicar la
Debemos mostrar: 500, 499, 498, 497,..... 462, 461, 460. fórmula a cualquier cantidad de resistencias.
En este caso haremos un decremento a la variable índice Primeramente, el programa pedirá el número de
(no un incremento como en los ejemplos anteriores). resistencias a conectar en paralelo. Después pedirá
uno a uno los valores de todas las resistencias. Por
Tenemos que comenzar nuestra variable índice en 500 y último, escribirá el resultado global.
decrementar una unidad hasta alcanzar el 460, así:
Estructura Mientras
desde i= 500 hasta 460 incremento -1 Como su nombre lo indica, esta estructura repite el
imprimir i cuerpo del bucle mientras se cumpla una determinada
fin-desde condición. Su sintaxis es:

Como salida tenemos, entonces: 500, 499, 498, 497, mientras {condición}
496, 495, 494,.... 464, 463, 462, 461, 460. acción 1
acción 2
El segundo tipo de estructura repetitiva se diferencia de acción 3
la primera en que no se conoce el número de .....
repeticiones o iteraciones en que se va a ejecutar una acción n
instrucción o un bloque de instrucciones. fin mientras
instrucción X

20
por lo menos una vez. Con la estructura mientras el
Lo primero que el computador hace es examinar la bucle puede ejecutarse 0 o más veces.
condición, lo que puede dar como resultado dos
posibilidades: Lo que la computadora hace al ejecutar la estructura
repetir es:
- La condición se cumple: Se ejecutan acción 1, acción
2, acción 3, ..., acción n. - Se ejecutan: instrucción 1, instrucción 2, instrucción 3,
......
Las estará repitiendo hasta que la condición no se - Se evalúa la condición. Si esta es FALSA se vuelve a
cumpla, entonces se sale del ciclo y se siguen ejecutando repetir el ciclo y se ejecutan instrucción 1, instrucción 2,
la o las instrucciones que vienen a continuación y están instrucción 3, ......
fuera del bucle; instrucción X.
Si la condición es VERDADERA se sale del ciclo y se
- La condición no se cumple: No entrará en el ciclo. Se ejecuta instrucción X.
ejecutan las instrucciones que vienen después del bucle,
instrucción X, por ejemplo. Ejemplo

De esto se deduce que el cuerpo del bucle de una repetir


estructura mientras puede repetirse cero o más veces, imprimir "La contraseña es incorrecta !"
veces que son determinadas por el cumplimiento o no de hasta contraseña = "josua"
la condición.
Ejemplo Más ejemplos en la sección Ejercicios.

mientras contraseña < > "josua" En resumen, hemos visto dos tipos de estructuras
imprimir "La contraseña es incorrecta !" repetitivas, el primer tipo en la que conocemos el
fin-mientras número de veces que se repetirá el bucle o ciclo (Desde
imprimir "Ha ingresado la contraseña correcta" ....fin-desde; y el segundo tipo en el cual no conocemos
el numero de veces en se repite el ciclo ya que está
Veremos más ejemplos de esta estructura en la sección determinado por el cumplimiento o no de una condición
ejercicios. Al analizarlos comprenderemos mejor como (mientras ..... fin-mientras y repetir....hasta).
funciona.
Toda estructura Desde....fin-desde tiene una estructura
Estructura Repetir mientras....fin-mientras o repetir.....hasta equivalente.

La estructura repetir cumple la misma función que la Pero las estructuras mientras... o hacer ... no tienen
estructura mientras. La diferencia está en que la NINGÚN desde.....fin-desde equivalente.
estructura mientras comprueba la condición al inicio y
repetir lo hace al final; por eso la estructura repetir se Ejercicios
ejecuta por lo menos una vez. 4.35. Construya un algoritmo que reciba como entrada
varios montos de depósito y despliegue la suma de
La sintaxis es: ellos. Considere que un valor negativo significa que
no hay más datos y no debe ser considerado como
repetir dato válido.
intrucción 1 4.36. Construya un algoritmo que reciba como entrada
instrucción 2 una secuencia de valores numéricos y genere como
instrucción 3 salida la suma de los valores pares y la
...... multiplicación de los impares. Considere que un
hasta {condición} valor negativo significa que no hay más datos y no
instrución X debe ser considerado como dato válido.
4.37. Construya un algoritmo que reciba como entrada
Repetir es opuesta a la estructura mientras. Repetir se una secuencia de valores de temperaturas y genere
ejecuta hasta que se cumpla una condición que se como salida el total de veces que la temperatura fue
comprueba al final del bucle. Esto implica que las 0. Considere que un valor de temperatura negativo
instrucciones que forman el cuerpo del bucle se ejecutan significa que no hay más datos y no debe ser
considerado como válido.

21
4.38. Construya un algoritmo que reciba como entrada n-ésimo puede ser identificado y homogéneo porque sus
una secuencia de valores de temperaturas y genere elementos son todos del mismo tipo (numéricos o
como salida el total de veces que se registro una alfanuméricos, pero no una combinación de ambos).
temperatura menor que 0, el total de veces que fue 0
y el total de veces que fue mayor que 0. Considere Gráficamente, un arreglo se representa como una tabla:
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. De igual forma que cualquier variable, un arreglo debe
4.40. Escribir un diagrama de flujo para un algoritmo tener un nombre.
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. Aquí hemos llamado A a nuestro arreglo ejemplo.
4.41. Leer secuencia de números y mostrar la suma de
dichos números hasta que se introduce un número Los elementos que están en el arreglo A ocupan todos
negativo. una determinada posición dentro de él:
4.42. Pedir al usuario una contraseña hasta que este de
la correcta o decida salir.
4.43. El número mágico.

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.
UNIDAD 5:
A(3) = -5
5.1. ARREGLOS. A(10) = 99
A(1) = 12
Hasta ahora hemos trabajado con datos simples que
representaban un número, un carácter o una cadena. Sin Vemos, entonces que un elemento se referencia por el
embargo, en ocasiones se necesita procesar una nombre del arreglo y la posición que ocupa dentro de él.
colección de valores que están relacionados entre sí por El número que se coloca entre paréntesis se llama índice
algún método, por ejemplo, una lista de calificaciones, y designa la posición del elemento en el arreglo.
de los meses del año, temperaturas a lo largo de una
semana, etc. Cada elemento del arreglo se puede procesar como si
fuera una variable simple.
El procesamiento de estos datos utilizando datos simples
es muy difícil. Por eso, se han definido en la La dimensión de un arreglo está dada por la cantidad de
programación varias estructuras de datos, que son una elementos que contiene y debe ser definida al comenzar
colección caracterizada por alguna organización y por el programa.
las operaciones que se definen en ella.
A los arreglos unidimensionales se les suele conocer
Una de estas estructuras son los arreglos. como vectores.

Un arreglo es un conjunto de elementos del mismo tipo 5.2. CARGAR UN ARREGLO


que comparten un nombre común; algo así como una
variable que puede almacenar al mismo tiempo más de La asignación de valores a los elementos de un vector se
un valor. realiza de esta forma:
A(4)  0
Los arreglos reciben también el nombre de tablas, listas A(7)  4
o arrays.
Por supuesto que no vamos a cargar un vector de 100
Un arreglo es un conjunto ordenado y homogéneo. elementos, escribiendo 100 asignaciones.
Ordenado porque el primer elemento, segundo, tercero...

22
La carga de un vector se hace por medio del ciclo inicio
desde....fin desde . Nuestro bucle va a comenzar en 1 Leer n
hasta un número N que es la longitud del vector. dimensionar v(n)
desde i = 1 hasta n
Pero antes, no demos olvidar que el vector debe ser Leer v(i)
dimensionado. Al dimensionar un vector le decimos a la fin desde
máquina que reserve los espacios de memoria necesarios fin
para los elementos del vector.
Así vamos a cargar un arreglo SIEMPRE
Los problemas relacionados con vectores tendrán casi
siempre esta forma 5.3. IMPRIMIR UN ARREGLO
inicio El procedimiento para imprimir un arreglo es casi
Leer dimensión del vector exactamente igual al proceso de carga, con la diferencia
Dimensionar Vector que en lugar de leer, vamos a imprimir. Para el caso de
Cargar Vector nuestro arreglo v de n componentes:
Procesamiento de los elementos del vector (según lo que
se pida) desde i= 1 hasta n
Imprimir Vector imprimir v(i)
fin fin desde
Por lo tanto, vamos a tener tres desde...fin desde bien Es bueno volver a señalar que los elementos de un
diferenciados: arreglo son todos del mismo tipo (todos numéricos o
• Un bucle para la carga todos alfanuméricos).
• Un bucle para el proceso
• Un bucle para la impresión 5.4. PROCESANDO UN ARREGLO
Aunque la carga y el proceso pueden hacerse dentro de Ejercicio: Leer un vector de N componentes. Hallar la
un solo bucle, particularmente no recomiendo esta suma y el promedio de los elementos del vector.
práctica, ya que casi siempre crea dificultades
innecesarias. Se pide la suma y el promedio de los elementos.
Sabemos que el promedio lo hallaremos dividiendo la
Ejercicio: Cargar un vector de 30 componentes. suma todos los elementos, sobre la cantidad.
Nuestro arreglo (al que llamaremos h) va a tener una
No olvidemos que antes de cargar un vector debemos dimensión d, que será determinada por el usuario.
dimensionarlo. En este caso la dimensión del vector es
30. Siguiendo el esquema que habíamos visto, vamos a tener
primeramente un bucle para la carga del arreglo, otro
Luego habilitaremos un bucle desde....fin desde para el proceso y otro para imprimir el arreglo.
comenzando en 1 hasta 30. Llamaremos V a nuestro
vector. inicio
suma  0
inicio leer d
dimensionar v(30) dimensionar h (d)
desde i= 1 hasta 30 desde i = 1 hasta h
leer v(i) leer h (i)
fin desde fin desde
fin desde i = 1 hasta d
suma suma + h(i)
De esta forma hemos cargado un arreglo v con fin desde
componentes. Ahora bien, el usuario deberá siempre promedio suma/d
poder determinar la dimensión del arreglo sobre el que imprimir h (i)
quiera trabajar. Por eso, vamos a leer la dimensión del fin
vector en una variable:

23
desde La matriz MAT está definida con 5 filas y 6 columnas.
impimir ""La suma de los elementos del vector es:", La notación para el dimensionamiento de una matriz es
suma NOMBRE (cantidad de filas, cantidad de columnas);
imprimir "El promedio es:", promedio luego: MAT(5, 6)
fin
Una vez que la matriz contenga datos (veremos más
5.5. ARREGLOS BIDIMENSIONALES adelante como cargar una matriz) para referirnos a un
elemento debemos conocer en que fila y que columna
Matrices reside ese elemento, por ejemplo:

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.

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:
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 dimensionar M(5,6)
de filas. Aquí M=5 y N=6.
La carga de datos se realiza de la misma forma que un
El número total de elementos de la matriz será entonces vector, por medio de un bucle desde....fin desde; solo
5*6 = 30. que en este caso, vamos a necesitar 2 bucles; uno que
recorra las filas y otro las columnas:
De la misma forma que los vectores, una matriz debe
tener un nombre. Llamaremos MAT a nuestra matriz desde fila = 1 hasta 5
ejemplo y determinaremos la posición de algunos de sus desde columna = 1 hasta 6
elementos. MAT será de tipo alfanumérico. 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:

24
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
Una matriz también puede recorrerse por columnas. Al desde I=1 hasta cantfila
programar, no siempre podremos predefinir el tamaño de desde J=1 hasta cantcolumna
un matriz, por eso, solicitaremos al usuario que ingrese suma  suma + M(I, J)
la cantidad de filas y columnas con las que desea fin-desde
dimensionar una matriz: fin-desde
promedio f suma / (cantfila * cantcolumna)
inicio desde I = 1 hasta cantfila
leer cantfila, cantcolumna desde J=1 hasta cantcolumna
dimesionar MAT(cantfila, cantcolumna) imprimir M(I, J)
desde fila=1 hasta cantfila fin-desde
desde columna=1 hasta cantcolumna fin-desde
leer MAT(fila,columna) fin
fin-desde
fin-desde Una matriz que tiene la misma cantidad de filas y de
fin columnas se llama matriz cuadrada.

Este algoritmo solicita las dimensiones de la matriz, la


1 2 3 4 5
dimensiona y luego procede a cargarla.
2
Una matriz se imprime utilizando también dos índices: 3
4
inicio
leer cantfila, cantcolumna 5
dimesionar MAT(cantfila, cantcolumna) - Esta es una matriz cuadrada de orden 5.
----- se dimensiona
desde fila=1 hasta cantfila Las matrices cuadradas tienen ciertas características; por
desde columna=1 hasta cantcolumna ejemplo, los elementos en donde el número de filas es
leer MAT(fila,columna) igual al número de columnas se llama diagonal principal
------- lectura (señalados en amarillo): Los elementos de la diagonal
fin-desde principal tienen, entonces, la propiedad de que fila =
fin-desde columna
desde fila=1 hasta cantfila
desde columna=1 hasta cantcolumna
imprimir MAT(fila,columna) ---
----- impresión
fin-desde
fin-desde
fin

Procesando una matriz. La diagonal principal define así dos áreas bien notorias,
una que está por encima y otra por debajo. La región
Proceso de una matriz se realiza también forma análoga determinada por los elementos situados sobre la diagonal

25
principal se llama matriz triangular superior que tiene la 7 8 9 10 11 12
propiedad de que fila < columna.
- -
0 -3 21 22
La matriz triangular inferior es la zona situada debajo de 1 2
la diagonal principal, cuyos índices cumplen con la 33 3 0 5 12 4
propiedad: fila > columna. 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 105 110
10 15
165 15 0 25 60 20
Elementos de la Matriz Elementos de la Matriz
triangular superior triangular inferior
3- Traspuesta de una matriz: Si A es una matriz de orden
MxN, la traspuesta de A, denotada como A°, es otra
Operaciones con Matrices matriz de orden NxM donde cada B (i, j) = A (j,i). Una
matriz es simétrica si A° = A:
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 Matriz A:
igual a una matriz C también de dimensión MxN en
donde cada C (i, j) = A (i, j) + B (i, j):
0 1 2
Matriz A 3 4 5
6 7 8
10 8 3 0 9 10 11
7 -3 33 45 Traspuesta de A, A°:
9 15 71 29
Matriz B 0 3 6 9
1 4 7 10
1 6 9 69 2 5 8 11
14 22 56 7
3 5 80 1 Ejercicios
5.1. Se tiene una tabla con los datos de matricula, peso,
A y B son de igual dimensión, por lo tanto existe una estatura y sexo de los alumnos de una Universidad.
matriz C que es la suma de A y B 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
11 14 13 69 debe entregar estos valores considerando todos los
21 19 89 52 individuos y también diferenciando por sexo. Considere
12 20 151 30 fin de datos la matrícula en cero (0).
5.2. Se dispone de una tabla con las temperaturas
2- Producto Escalar por una matriz: Si A es una matriz registradas a medio día durante el año 2007. Se
de orden (dimensión) MxN y K es un escalar, el desea determinar cuál fue la máxima, cual fue la
producto de K*A es igual a otra matriz D también de mínima y cuantas veces se repitió cada una de estas
orden MxN en donde casa D (i, j) = K * A (i ,j): durante el año 2007. Además se desea saber el
Matriz A: promedio de dichas temperaturas.
5.3. Cargar un vector de n componentes
1 2 3 4 5 6

26
5.4. Leer una lista de n números y almacenar en un Los subalgoritmos son independientes entre si, en el
vector el factorial de cada número de la lista. sentido de que se puede escribir y verificar cada módulo
5.5. Leer un vector de N componentes. Hallar la suma y en forma separada sin preocuparse por los demás
el promedio de los elementos del vector módulos. Por ello, es menos complicado localizar un
5.6. Leer y almacenar en una matriz de m x n una error y también se puede modificar el código sin tener
secuencia de números. que tocar o rehacer varias partes del mismo.
5.7. Dadas 2 matrices a y b obtener la suma.
5.8. Dada una matriz determinar la posición ( i , j ) del Los subalgoritmos pueden ser dos tipos: Funciones y
mayor número y del menor. Procedimientos (también llamadas subrutinas o
5.9. Leer una secuencia de n números almacenarlos en subprogramas).
un vector A (1 .. n) y mostrar la suma de los
elementos pares y el mayor de los impares. Notemos que al utilizar procedimientos y funciones se
5.10. Dada una matriz de m x n (1..4)(1..5) realizar el establece un límite para el alcance de las variables, unas
proceso de ordenar la misma. tendrán efecto y valor sólo en el subalgoritmo y otras en
5.11. Dada una matriz [1..n] [1..m] realizar proceso el algoritmo principal, también es posible especificar
de ordenar solo por filas. que una variable tenga efecto en el algoritmo principal y
5.12. Dado un vector de números determinada todos los subalgoritmos. Este punto lo estudiaremos con
aquellos que sean primos. más detalle en la sección Ámbito de variables.
5.13. Calcular el promedio de los elementos de una
matriz. Los subalgoritmos pueden recibir valores del algoritmo
5.14. Suma de Matrices principal (parámetros), trabajar con ellos y devolver un
5.15. Producto Escalar por una matriz resultado al algoritmo principal: No existen limitaciones
5.16. Traspuesta de una matriz. en cuanto a las acciones que pueda ejecutar un
5.17. Desarrolla un algoritmo que lea por el teclado subalgoritmo. Un subprograma puede, a su vez, invocar
una secuencia de n enteros y visualice por pantalla o llamar a otros o a sus propios subprogramas, inclusive
los que sean pares. puede llamarse a sí mismo (esto se conoce como
5.18. Diseñar un programa que cree una lista de recursividad).
números enteros. Cada número se debe situar en
orden creciente. El programa visualizará también el FUNCIONES
contenido de la lista
Desde el punto de vista matemático, una función es una
expresión que toma uno o más valores llamados
UNIDAD 6: argumentos y produce un valor que se llama resultado.
Este resultado es además, único. Ejemplos de funciones
FUNCIONES Y PROCEDIMIENTOS. matemáticas son los logaritmos, funciones
trigonométricas (seno, coseno, etc).
En general un problema complejo puede ser resuelto de
manera más fácil y eficiente si se divide en problemas El en ambiente de programación y diseño de algoritmos,
más pequeños y concentrándonos en cada etapa en la las funciones tienen exactamente el mismo significado.
solución de ese "subproblema". Esto implica que el gran Es decir, se realizan ciertos cálculos con una o más
problema original será resuelto por medio de varios variables de entrada y se produce un único resultado. En
módulos, cada uno de los cuales se encarga de resolver programación y diseño de algoritmos, este resultado
un subproblema determinado. Esos módulos, se conocen podrá ser un valor numérico, alfanumérico o lógico. Es
con el nombre de subalgoritmos. Un subalgoritmo no es decir, una función puede devolver un resultado que
más que un algoritmo que tiene la función de resolver un puede ser una cadena, un número o un valor de tipo
subproblema. lógico (verdadero o falso). Esto hace que en los
lenguajes de programación, debamos especificar de qué
Los subalgoritmos se escriben sólo una vez, luego es tipo es una función. Una función será de tipo numérica
posible hacer referencia a ellos ("llamarlos") desde cuando devuelva un número y será de tipo alfanumérica
diferentes puntos del algoritmo. La ventaja obvia es que o string cuando devuelva una cadena. En el caso de las
nos permite reutilización y evita la duplicación de funciones de tipo numérico se tienen subdivisiones que
códigos. 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

27
(sin decimales) será de tipo entera o integer. Si devuelve
un valor decimal será doble o simple, dependiendo del Una función se identifica mediante su nombre. De la
grado de exactitud que se desea; sin embargo como esto misma manera que cuando escribimos un algoritmo
es propio de lenguajes de programación no se tendrá en comenzamos poniendo: inicio y al final fin, debemos
cuenta en este tutorial (las funciones serán numéricas hacer lo mismo para una función. Esto nos dirá donde
cuando devuelvan un dato numérico y de tipo string comienza y donde termina la función. La sintaxis es:
cuando devuelvan una cadena, sin necesidad de
especificar esto previamente en el algoritmo). Puedes Función nombre_funcion (parámetros)
consultar al profesor de la materia que te proporcione <instrucciones>
más detalles sobre los tipos de datos y su aplicación en <instrucciones>
las funciones. Fin función

Tomemos como ejemplo al función matemática sen(x). Todas las funciones devuelven un sólo valor. Siempre
En este caso la función se llama sen (seno) y el debemos indicar a la función mediante una instrucción
argumento o valor que se pasa a la función para que lo que devuelva el valor al algoritmo principal (recordemos
procese es x. Así sen(90º)=1. Este valor es además único que la función será llamada desde un algoritmo). Esto se
(por eso se llama función), es decir no existe ningún otro debe hacer en el cuerpo de la función cuando tengamos
número que la función pueda procesar y devolver 1 más el resultado. Así que, tomando como ejemplo la función
que 90º. MES, veremos como se escribe el algoritmo principal,
como se llama a la función desde el algoritmo principal
Cuando utilicemos esta función en un algoritmo y y cómo se declara la función:
necesitemos el valor del sen(90º), debemos asignarlo a Algoritmo principal
una variable, así:
Inicio
valor  sen(90) leer numero_mes
mientras numero_mes <=0 ó numero_mes >12
En este caso, la variable valor será = 1, por la tanto imprimir "Debe ingresar un número entre 1 y
nuestra función es numérica. 12" > Validación del número entre 1 y 12
leer numero_mes
La llamada a una función será siempre: fin mientras
nombre_mes MES
variable  funcion (parámetros) (numero_mes) > Llamada a la función
MES
Ejemplos: La llamada a una función MES que devuelva imprimir "El mes correspondiente es: ", nombre_mes
el nombre del mes, pasándole el valor numérico fin
correspondiente será:
Función MES (valor)
nombre_mes  MES(2) (esto Según sea valor
devolvería "Febrero") caso=1
nombre="Enero"
La función es de tipo string porque devuelve una cadena caso=2
como resultado en la variable nombre_mes. nombre= "Febrero"
caso=3
Ya sabemos como llamar a una función, ahora veremos nombre = "Marzo"
como se escribe la función. caso =4
nombre = "Abril"
Como las funciones y procedimientos no se escriben en caso=5
el algoritmo principal (en programación existen espacios nombre = "Mayo"
destinados a ellos) todas las funciones y procedimientos caso=6
que utilicen un algoritmo se podrán escribir antes o nombre = "Junio"
después del algoritmo principal. caso=7
nombre ="Julio"
Para efectos de este curso las funciones y caso=8
procedimientos se escribirán siempre al final del nombre="Agosto"
algoritmo principal. caso=9

28
nombre="Setiembre" Función <nombre_función>
caso= 10 fin_función
nombre = "Octubre"
caso=11 La llamada a la función se hace con su nombre y el o los
nombre= "Noviembre" valores que le pasamos.
caso= "12"
nombre="Diciembre" Cuando necesitemos procesar uno o varios valores y
fin caso ofrecer UN resultado, utilizaremos funciones.
MES  nombre > Le decimos a la función que
devuelva el resultado al algoritmo principal Ejemplos de Funciones
Fin función
A continuación, estudiaremos ejemplos de funciones. De
Debes notar como pasan los valores desde el algoritmo esta forma comprenderemos mejor el su funcionamiento.
principal a la función. En este caso, cuando se llama a la Ejemplo1: Escribir una función que devuelva la raíz
función: cuadrada de un número ingresado por teclado.
Aunque todos los lenguajes de programación tiene
nombre_mes  MES (numero_mes) instrucciones para calcular una raíz cuadrada, como aquí
no estamos escribiendo código, encontraremos la raíz
El valor que se pasa a la misma está en la variable cuadrada de un número elevando a la potencia 1/2. En
numero_mes que toma un valor comprendido entre 1 y general, la raíz x de un número se obtiene elevando ese
12. número a la potencia 1/x.

Cuando se llama a la función, este valor debe ser Llamaremos RAIZCUA a la función que vamos a
recibido por la misma, en este caso en el cuerpo de la escribir. La función RAIZCUA debe obtener un valor
función se coloca entre paréntesis el nombre de la que se pasa desde el algoritmo principal (el número del
variable que recibirá el valor: cual queremos calcular la raíz cuadrada), elevarlo a la
potencia 1/2 y luego devolver este valor al algoritmo
Función MES (valor) principal. Recordemos que no podemos permitir el
ingreso de números negativos.
Si se pasan varios valores, todos deben ser recibidos en
sus correspondientes variables. inicio
leer numero
La función toma el valor pasado desde el algoritmo y lo mientras numero < = 0
guarda en la variable valor para procesarlo. Luego de imprimir "Ingrese un número positivo"
que obtiene un resultado, en este caso el valor de leer numero
nombre_mes, se le ordena a la función que devuelva ese fin-mientras
valor al algoritmo principal: resultado RAIZCUA(numero)
imprimir "La raiz cuadrada es:", resultado
MES  nombre fin
Función RAIZCUA(valor)
Esto es siempre así: nombre_funcion resultado raiz  valor ^ 1/2
RAIZCUA  raiz
Es en este punto donde se retorna a la línea siguiente a la fin-función
que llamó a la función en el algoritmo principal:
Este algoritmo comienza leyendo el número, verifica
imprimir "El mes correspondiente es: ", que sea un número positivo con la estructura repetitiva
nombre_mes mientras y luego hace el llamado a la función RAIZCUA
pasándole la variable numero. El valor de esa función se
Resumiendo. Una función devuelve un sólo valor, para recibe en una variable resultado.
que funcione la función debe recibir uno o varios valores
desde el algoritmo principal, realizar el proceso y La función RAIZCUA recibe el numero que el programa
devolver el resultado. La función se escribe de igual le pasa en la variable valor, luego eleva ese numero a la
forma que cualquier algoritmo, la diferencia consiste en potencia 1/2 y lo asigna a la variable raíz.
que en lugar de inicio y fin, ponemos:

29
Para que la función devuelva el resultado del proceso al leer numero1, numero2, numero3
algoritmo principal, se asigna la variable raiz a la prom PROMEDIO(numero1, numero2,
función, así: RAIZCUA  raiz (esto será así para todas numero3)
las funciones que escribamos). imprimir "El promedio es:", prom
fin
Observa que existen variables tanto en el algoritmo
principal como en la función. Hablemos de ellas. Función PROMEDIO(valor1, valor2,valor3)
promedio  (valor1 + valor2 + valor3) / 3
ÁMBITO DE LAS VARIABLES PROMEDIO  promedio
fin-función
En programación existen dos tipos de variables, las
llamadas locales y las variables globales. PROCEDIMIENTOS

Variables Locales: Son aquellas que se encuentran Hemos visto que las funciones se utilizan para devolver
dentro de un subprograma (procedimiento o función) como resultado un valor Sin embargo, en ocasiones
y es distinta de las variables que están en el algoritmo necesitaremos devolver más de un resultado o también
principal. El valor se confina al subprograma en el ejecutar las mismas líneas de código varias veces en un
que está declarada. algoritmo (como por ejemplo una ordenación, etc.) En
Variables Globales: Son las que se definen o están estas situaciones la función no es apropiada y se
declaradas en el algoritmo principal y tiene efecto utilizarán los procedimientos (también llamados
tanto en el algoritmo principal como en cualquiera de subrutinas).
sus subprogramas.
Un procedimiento es un conjunto de sentencias o
Tomando como referencia la función RAIZCUA, las instrucciones que realizan una determinada tarea y que
variables globales son: numero y resultado. Y las pueden ser ejecutados desde más de un punto del
variables locales son: valor y raíz. programa principal. Un procedimiento tiene una
llamada, cuando el procedimiento se ejecuta totalmente,
valor y raiz sólo existen en la función RAIZCUA, si en vuelve al punto desde donde fue llamado y se ejecuta la
el algoritmo principal tratamos de utilizar estas variables siguiente instrucción.
o imprimirlas, no obtendremos nada, ya que para el
algoritmo estas variables son locales y desde su punto de El procedimiento se escribe como cualquier otro
vista NO EXISTEN. algoritmo, solo existen diferencias en la parte inicial y
final. Para nombrar los procedimientos se deben seguir
numero y resultado son variables globales, es decir que las mismas reglas que para las variables. Notemos que el
están disponibles en el algoritmo principal y también en objetivo de los procedimientos es ayudar en la
la función RAIZCUA. modularidad del programa y evitar la repetición de
instrucciones ya que estas se pueden escribir en un
Una variable local (de un subprograma) no tiene ningún procedimiento y en lugar de repetirlas, llamar al
significado en el algoritmo principal y otros procedimiento cuantas veces sea necesario.
subprogramas. Si un subprograma asigna un valor a una
de sus variables locales, este valor no es accesible a Desde el programa principal es posible pasar valores
otros subprogramas, es decir, no pueden utilizar este (numéricos, alfanuméricos o combinación de ambos) al
valor. Las variables globales tienen la ventaja de procedimiento. Este utilizará esos valores para realizar
compartir información de diferentes subprogramas. un determinado proceso. Los valores que se pasan a un
procedimiento (en forma de variables) se llaman
En resumen: las variables locales son las que se definen parámetros (de igual forma que en las funciones).
en subprogramas y solo tienen valor dentro de él. Las
variables locales son las definidas en el algoritmo Declaración de un procedimiento
principal y tienen valor y se pueden utilizar en cualquier
parte de algoritmo o en cualquier subprograma. La sintaxis para la declaración de un procedimiento es la
siguiente:
Ejemplo 2: Diseñar una función que calcule la media de
tres números. Procedimiento Nombre_procedimiento (parámetros)
<......acciones...>
inicio <......acciones...>

30
Fin Procedimiento resto. P recibirá el valor de cociente y Q recibirá el valor
del resto.
La llamada a un procedimiento se hace simplemente por
su nombre: Es decir, que cuando necesitemos devolver más de un
valor, los parámetros del procedimiento deben ser los
Nombre_procedimiento(parámetros) valores que se pasan al procedimiento y luego las
variables en las que se recibirán los resultados.
También es posible que no se pase ningún parámetro al
procedimiento, en cuyo caso la llamada se hace así: El objetivo de esta sección es ayudar a comprender
cómo funcionan las funciones y procedimiento. Puedes
Nombre_procedimiento() pedir a tu profesor más ejemplos de procedimientos y
funciones.
Cuando no se pasan parámetros se puede obviar los
paréntesis. Ejercicios

Nombre_procedimiento 6.1. Utilizar una declaración de tipos para una matriz de


números reales de tamaño DIM´DIM, donde DIM es
Podemos utilizar procedimientos, por ejemplo para una constante, declarada como tal, de valor 10.
dibujar recuadros en la pantalla, mostrar mensajes de Escribir las siguientes funciones:
error, realizar procesos en los que se debe devolver más a) Función traspuestaM: Acepta una matriz como único
de un resultado, colocar en un procedimiento las líneas argumento y devuelve su matriz traspuesta.
de código que se repiten varias veces en un algoritmo. b) Función simetricaM: Acepta una matriz como único
argumento y devuelve 1 si dicha matriz es simétrica y 0
Cuando necesitemos devolver más de un valor en un si no lo es. Para averiguar si la matriz es o no simétrica
procedimiento, las variables que se devolverán los se debe usar la función traspuestaM del apartado
resultados deben figurar en la lista de parámetros. anterior.
c) Función sumaM: Acepta tres matrices devolviendo en
Ejemplo 1: Procedimiento para calcular el cociente y la tercera de ellas la suma de las dos primeras.
resto de la división entre dos números d) Función restaM: Acepta tres matrices devolviendo en
inicio la tercera de ellas la resta de las dos primeras.
leer numeroA, numeroB e) Función multiplicaM: Acepta tres matrices
DIVISION (numeroA, numeroB, P, Q) devolviendo en la tercera de ellas la multiplicación de
imprimir P, Q las dos primeras.
fin 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
Procedimiento DIVISION (dividendo, divisor, cociente, una lista y un elemento, devuelva T si el elemento
resto) aparece más de una vez en la lista.
cociente  dividendo / divisor
resto dividendo - cociente * resto Generales
fin-procedimiento
1. Construya un algoritmo que reciba como entrada dos
En este ejemplo, se pasan los números el dividendo y valores: a y b, donde a < b. Este algoritmo debe
divisor (numeroA y numeroB respectivamente) y generar como salida los múltiplos de a que son
también en los parámetros de llamada al procedimiento menores que b.
deben figurar las variables en las que se devolverán los 2. La serie de Fibonacci permite aproximar la forma en
resultados de cociente y resto (P y Q respectivamente) que se reproducen los conejos. Se sabe que una pareja
por eso la llamada es: 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
DIVISION (numeroA, numeroB, P, Q) alcanzan su edad madura. La forma en que aumenta la
población de conejos mes a mes se puede ver en la
El procedimiento recibe los valores numeroA en siguiente tabla, si consideramos que no se mueren
dividendo, numeroB en divisor y se colocan las variables conejos y que inicialmente se cuenta con una pareja de
en las que se pasarán al programa principal el cociente y conejos recién nacida:

31
digito impar, la multiplicación es mayor que 9,
mes parejas de se debe restar 9 a la multiplicación obtenida)
conejos • Sumar los dos resultados obtenidos
1 1 anteriormente.
2 1 • Buscar la decena igual o superior y restar la
3 2 suma obtenida a esta decena.
4 3 • Comprobar que el dígito de control que hemos
5 5 calculado y el último dígito del de la cedula
6 8 coinciden, de lo contrario no es válida.

Ej: 100336275-1
Construya un algoritmo que dado un valor n,
correspondiente a un mes cualquiera, determine la 1 0 0 3 3 6 2 7 5 1
cantidad de conejos en ese mes. Indicación: observe que 2 0 6 4 1 13
en cada mes, la cantidad de conejos corresponde a la 0 3 6 7 16
suma de los conejos de los dos meses anteriores a ese Suma 29
mes.
Decena igual o superior 30
3. Construya un algoritmo que genere los términos de la
siguiente serie, y además calcule su valor para un n Resta 1
dado.
7. Convertir un número decimal a binario.
Ej:
134 2
134 67 2
4. El siguiente es un menú de una hamburguesería. Resto 0 66 33 2
Diseñar un algoritmo capaz de leer número de cada 1 32 16 2
alimento ordenado y calcular la cuenta total: 1 16 8 2
Hamburguesa 1.50 0 8 4 2
Con queso 1.75 0 4 2 2
Refresco 1.25 0 2 1
Patatas 1.00 0
Ensalada 2.00
5. Elabore, un algoritmo que permitan calcular el Número
máximo común divisor de dos números enteros Binario: 1 0 0 0 0 1 1 0
positivos.
6. La cedula en Ecuador, es uno de los documentos más
importantes que tiene una persona. Por este motivo es 75 2
muy importante que todo sistema informático que 74 37 2
maneje la misma sea capaz de reconocer si la cedula es Resto 1 36 18 2
valida.
1 18 9 2
0 8 4 2
La cedula consta de 10 dígitos, el último digito es un
digito de control. 1 4 2 2
0 2 1
Para reconocer si una cedula es verdadera se debe 0
seguir el siguiente procedimiento:
Número
• Comprobar que la cedula tiene 10 dígitos y que
Binario: 1 0 0 1 0 1 1
estos sean numéricos. De no ser así no es
correcta.
• Sumar los dígitos de los lugares pares. 8. Transformar un número decimal en letras.
Ej: 134
• Multiplicar por dos los dígitos de los lugares
Ciento treinta y cuatro.
impares y sumarlos. (Si al multiplicar por dos un

32
9. El codigo EAN (European Article Number) es un • Se coge un número natural n, y se prueba a
sistema de código de barras para asignar un número dividirlo por los números primos, empezando
único a cada producto. Los códigos más comunes por el 2, luego el 3, luego el 5... cuando el resto
tienen 8 o 13 dígitos, especialmente 13 (sistemas de la división es 0, hemos obtenido un factor,
conocidos como EAN8 y EAN13). En ellos van hacemos que n valga ahora el cociente, y
codificados el país de origen del producto, la empresa seguimos probando por el último primo en el
y el propio producto. El último de los dígitos es un que estábamos. Así indefinidamente hasta que
dígito de control para evitar errores de trascripción. n=1.

El algoritmo para comprobar que un código EAN8 o Por ejemplo, para factorizar el 350, hacemos n=350... y
EAN13 ha sido trascrito correctamente es empezamos a probar a dividir por los números primos.
extremadamente sencillo.
Probamos a dividir n por 2... 350/2=175, y resto 0...
Podemos describirlo algorítmicamente de esta manera: perfecto, hemos encontrado un factor: el 2. Hacemos
n=175
• Comprobar que el código tiene 8 o 13 dígitos.
De no ser así, no es correcto. Lo volvemos a intentar 175/2 = 87 y resto 1... oops... el
• Sumar los dígitos de lugares pares por un lado y 2 no vuelve a ser factor primo.
los de los impares por otro, pero sin incluir el
último dígito. Pasamos a probar con el 3.
• Si el código es EAN13, multiplicar la suma de
los pares por 3. 175/3=58 y resto 1... el 3 no es factor primo. Pasamos al
• Si el código es EAN8, es la suma de los impares 5.
la que se multiplica por 3.
• Sumar el resultado de los pares y el de los 175/5=35 y resto 0 ... el 5 es factor primo. Tomamos
impares y hallar el resto de la división por 10. nota (ya tenemos el 2 y el 5), y hacemos n=35
• Realizar la operación 10 menos ese resto y ese
es el dígito de control. Volvemos a probar el 5... 35/5=7 y resto 0. Otra vez el 5
• Si como resultado sale 10, entenderemos que el es factor primo (ya tenemos 2, 5 y 5). Hacemos n=7
dígito de control es 0.
• Comprobar que el dígito de control que hemos
Volvemos a probar el 5... 7/5=1 y resto 2. Ya no hay
calculado y el último dígito del código EAN
más cincos. Probamos con el 7.
coinciden
7/7=1 y resto 0. El siete es factor primo (ya tenemos 2,
10. Un palíndromo es una palabra que si se lee de
5, 5, y 7). Hacemos n=1... ya hemos terminado.
izquierda a derecha suena igual que de derecha a
izquierda, por ejemplo, ANILINA, RASAR,
NADAN. El término palíndromo es a las palabras lo Así pues, 350 se puede expresar como 350=2 x 5 x 5 x 7.
mismo que capicúa es a los números. El ejercicio El procedimiento es sencillo... pero... ¿Seremos capaces
consiste en comprobar si una cadena dada es un de encontrar un buen algoritmo que dado un número
palíndromo. natural n nos devuelva sus factores primos?
11. Ordenar una lista de mayor a menor o viceversa,
según desee el usuario. 13. Algoritmo de Euclides: MCD y MCM.
12. Descomposición en factores primos. Cualquier
número entero positivo se puede representar de El máximo común divisor de dos o más números es el
forma única (salvo el orden) como el producto de número, más grande posible, que permite dividir a esos
una serie de factores primos. números.

A esto se le llama el teorema fundamental de la • Para calcularlo. De los números que vayas a
aritmética. Este teorema tiene aplicaciones prácticas en sacar el máximo común divisor, se ponen uno
muchos campos. debajo del otro, se sacan todos los divisores de
los dos números y el máximo que se repita es el
Un algoritmo simple para obtener la factorización de un máximo común divisor (M.C.D.)
número entero en sus factores primos es: • Ejemplo: Sacar el M.C.D. de 20 y 10:

33
1, 2, 4, 5, 10 y
20:
20 14. El ISBN (International Standard Book Numbers)
10: 1, 2, 5 y 10 sirve para identificar libros y otras publicaciones a
nivel mundial. Si abres un libro cualquiera, verás
Forma rápida de calcular el Máximo común Divisor que en sus primeras páginas consta este ISBN.
(M.C.D.).
El ISBN consta de una serie de dígitos decimales (de 0 a
Ejemplo: Sacar el M. C. D. de 40 y 60: 9), de los cuales, el último es un carácter de control, que
puede ser bien un dígito decimal (de 0 a 9) o la letra "X".
A veces el ISBN lleva guiones. No se deben tener en
1º Tienes que saber las reglas divisibilidad. Haces la
cuenta para validarlo.
descomposición de factores poniendo números
primos. Por ejemplo para 40, en la tabla de abajo, se va
descomponiendo en 2, 2, 2 y 5. Para comprobar un ISBN:

40 2 60 2 1. Si el ISBN lleva guiones en su interior,


20 2 30 2 eliminarlos.
10 2 15 3 2. Multiplicar cada dígito -excepto el último, que
puede ser un dígito o una X- por la posición que
5 5 5 5
ocupa e ir sumándolos (el 1er dígito por 1,
1 1 sumado al 2º dígito por 2, sumado al 3er dígito
por 3...)
3. Obtener el módulo de la división del resultado
2º De los resultados, se cogen los números repetidos de obtenido en el paso 2 entre 11. Dicho módulo
menor exponente y se multiplican y ese es el M.C.D. debe coincidir con el último dígito del ISBN. Si
el módulo fuera 10, el último dígito es una X.
M.C.D. 40 = 2x2x2x5
MCD = 2x2x5= 20
M.C.D. 60 = 2x2x3x5 Ejemplo:
ISBN=8472102629

El mínimo común múltiplo (m. c. m.) de dos o más Para comprobarlo, obtenemos
números es el menor múltiplo común distinto de cero.
s=8*1+4*2+7*3+2*4+1*5+0*6+2*7+6*8+2*9=130
s mod 11=130 mod 11=<strong>9</strong>
• Ejemplo: Averiguar el m.c.m. de Sacar el
---> Coincide con el último dígito del ISBN
M.C.D. de 20 y 10:
---> Correcto.

20: 20, 40, 60, 80... 15. La congruencia de Zeller es un algoritmo que
10: 10, 20, 30... permite obtener, a partir de una fecha, el día de la
semana que le corresponde.
20 es el múltiplo menor que es común a ambos números.
Se atribuye su creación a Julius Christian Johannes
Zeller, un sacerdote protestante alemán que vivió en el
Ejemplo: Calcular el m. c. m. de 4, 5 y 6.
siglo XIX.
Se hace la descomposición de factores. Lo hacemos de
Zeller observó que existía una dependencia entre las
la siguiente forma:
fechas del calendario gregoriano y el día de la semana
que les correspondía. A raíz de esa observación, obtuvo
4= 2x2
(se dice que por tanteo), esta fórmula, en apariencia
5= 5
mágica, que lleva su nombre.
6= 2x3
La fórmula en sí es muy sencilla, y se basa en algunas
Se toman los factores comunes y no comunes con el
operaciones de aritmética modular (el resto, también
mayor exponente y se multiplican: 2x2 x3 x5 = 60. El
llamado módulo, de las divisiones)
mcm de 4,5 y 6 es 60.

34
Es necesario tener en cuenta que la fórmula presentada a laberinto es encontrar un camino que lleve desde un
continuación es válida sólo para el calendario punto inicial a una de las salidas, desplazándose
gregoriano, promulgado por el papa Gregorio XIII en siempre en sentido horizontal o vertical y
1582, pero adoptado en distintas fechas en cada país. exclusivamente por casillas libres. Elaborar un
algoritmo capaz de resolver un laberinto.
Para calcular la congruencia de zeller, se parte de una
fecha del calendario gregoriano, que consideraremos 19. El problema de las ocho reinas consiste en encontrar
como tres enteros: año, mes (1=enero, 12=diciembre) y una disposición de ocho reinas en un tablero de
día. ajedrez de tal manera que ninguna de ellas amenace
a ninguna otra (en el juego del ajedrez una reina
Primeramente, es necesario hacer algunos ajustes en el amenaza a cualquier pieza que le sea accesible
mes y el año. Si el mes es enero o febrero (1 o 2) se mediante un desplazamiento horizontal, vertical o
considerarán como el mes 13 o 14 del año anterior. A diagonal de cualquier número de casillas).
partir de ahí, basta con aplicar la fórmula. Desarrollar un programa que nos muestre en pantalla
la disposición de las reinas. Tras resolver el
Pasos: problema, intentar generalizarlo a los casos
siguientes:
-Sean año, mes, día tres enteros que representan a una
fecha del calendario gregoriano
• Colocar N reinas sobre un tablero de N filas y N
-Si mes<=2
columnas.
-mes=mes+12
• Encontrar no solo una solución, sino todas las
-año=año-1
soluciones posibles, mostrándolas
-si no
sucesivamente en pantalla.
-mes=mes-2
• Elaborar un programa que nos diga el número de
-a=año mod 100
soluciones existentes para los tableros de
-b=año / 100 //división entera
dimensiones desde 4 x 4 hasta 11 x 11.
-d=( 700 +
(mes*26-2)/10 +
dia + 20. Camino
a+ Todos los días José parte de su casa (ubicada en un
a / 4 + //división entera cruce) hacia su trabajo (ubicado en un cruce también),
b / 4 - //división entera recorriendo calles que unen estos cruces. Aunque José
b*2 puede realizar este recorrido usando diferentes rutas, ha
) mod 7 notado que existen cruces a los cuales le es imposible
//d es un entero que representa al dia de la semana evitar.
//tal que domingo es 0, lunes es 1... sábado es 6
Tarea

16. Escribir un algoritmo que lea diez nombres y los A José le inquieta saber todos los cruces que
ponga en orden alfabético. necesariamente tiene que visitar, por eso usted debe
escribir un programa que le ayude a identificarlos.
17. El problema de las Torres de Hanoi consiste en lo
siguiente: Hay tres postes; en uno se encuentra una Suponga el siguiente mapa de calles y cruces:
torre con n discos, todos de diferentes tamaños,
colocados del más grande en la base, hasta el más
pequeño en la cima. Elaborar un programa que
exhiba todos los pasos para mover la torre a otro
poste, moviendo un solo disco cada vez, y sin
colocar un disco más grande encima de otro menor.

18. Un laberinto se puede definir como un recinto


Es fácil identificar los cruces 5 y 9 como los únicos que
rectangular formado por casillas cada una de las
tienen que ser siempre visitados sin importar que ruta se
cuales puede estar libre o ocupada por un obstáculo.
tome para ir del cruce 1 (casa) al 1000 (trabajo).
El perímetro del laberinto está formado por
obstáculos excepto una o más salidas. Resolver el
Entrada: CAMINO.ENT

35
En la primera línea del archivo CAMINO.ENT, un entendiendo por comentario todo aquel texto que
número (1 < n < 2.000) indicando el número de calles aparece entre paréntesis.
existentes en el mapa. En las siguientes n líneas 2
números (1 < x, y < 1000) indicando la existencia de Así al ingresar el siguiente texto:
una calle entre los cruces x y y. Las calles son de doble Juan (mi mejor amigo) regresa a la Argentina el día 20.
vía, si se indica la calle x-y es posible recorrerla de x a
y ó de y a x. El cruce 1 siempre designará la ubicación se debe reescribir:
de la casa y el 1000 el del trabajo. Se garantiza que al Juan regresa a la Argentina el día 20.
menos habrá un camino del cruce 1 al cruce 1000.
Debe tenerse en cuenta que los comentarios pueden estar
Salida: CAMINO.SAL "anidados", como por ejemplo en el siguiente texto:

Un archivo CAMINO.SAL conteniendo la lista de Carlos (el hermano de Juan (mi mejor amigo) que
cruces solicitados, uno por línea. Los cruces 1 y 1000 regresa a la Argentina el día 20) irá a esperarlo al
(casa y trabajo respectivamente) no deben ser aeropuerto.
considerados en esta lista.
En este caso, el programa debe producir la siguiente
Ejemplo "salida":
Carlos irá a esperarlo al aeropuerto.
CAMINO.ENT
22. Una palabra es anagrama de otra cuando se obtiene
CAMINO.SAL
una de la otra por permutación de sus letras. Por
14 5 ejemplo:

15 9 pote es anagrama de tope


saco es anagrama de cosa y de ocas
12 porta es anagrama de topar, de tropa y de parto

13 Escribir un programa que: dado un diccionario


castellano pueda determinar los conjuntos de anagramas.
14
Por ejemplo:
25 Si en el diccionario sólo tuviésemos las palabras:

35 cava
empresa
pote
45
torta
tope
56 trota
vaca
59
los conjuntos de anagramas serían:
67 cava - vaca
empresa
68 pote - tope
torta – trota
79

89 23. Pesca

9 1000 Historia
Limo se ha ido de pesca y ha observado que los peces se
21. Escribir un programa que permita ingresar un texto y encuentran distribuidos a los largo de un lago. El tiene
luego lo reescriba eliminando los comentarios, una red de tamaño nxm. Un pez es atrapado si se

36
encuentra en el área en donde Limo tire la red. Ayuda a
Limo a decidir donde tirar su red. La red siempre cubre Es decir, lo que le toque a cada concursantes debe
una superficie de n unidades en la vertical y m en lo provenir de la misma pizza, y nunca de dos o más pizzas
horizontal (Limo no sabe tirarla de otra manera). distintas.

Problema Problema
Dado un arreglo de 0 k 1000 puntos de coordenadas Dada la cantidad n de concursantes de los Alpes, m de
enteras 0 xi , yi 10000. Hallar el mayor número de peces concursantes del Colón y k de concursantes del
que puede atrapar Limo con su red de nxm con 1 n Veintimilla, escribe la mínima cantidad de pizzas que es
10000 y 1 m 10000. necesario comprar para alimentar a todos los
concursantes. (NOTA: puede haber desperdicio, pero no
Entrada te preocupes, dado que los entrenadores se darán a la
abnegada tarea de comerse el resto).
El archivo de entrada consiste en k+1 líneas. La primera
línea contiene tres enteros n, m y k. En las siguientes k Entrada
líneas vienen las coordenadas de los peces en formato El archivo de entrada contiene una única línea de texto
(X,Y). con tres números 0 ≤ n ≤ 100, y 0 ≤ m ≤ 100 y 0 ≤ k ≤
100, separados entre ellos por un único espacio.
Salida
El archivo de salida consiste en una única línea con un Salida
solo entero que indica el número máximo de peces que El archivo de salida debe contener una sola línea con un
puede atrapar Limo con su red. número indicando la mínima cantidad de pizzas
necesarias para alimentar a los concursantes.
input.txt
435 Ejemplo
00 Entrada (input.txt)
01 332
21 Salida (output.txt)
44 4
10 0
output.txt 25. RESOLUCIÓN DE LOS CUADRADOS
3 MÁGICOS

24. Pizzas Un cuadrado mágico es la disposición de una serie de


números enteros en un cuadrado o matriz de forma tal
Historia que la suma de los números por columnas, filas y
Durante el concurso intercolegial de programación, los diagonales sea la misma, la constante mágica
entrenadores de los colegios Colón, Alpes y Veintimilla
se enfrentaron a un problema. Se querían encargar pizzas Hemos de distinguir, a la hora de aplicar una estrategia
para los concursantes, pero como ellos comen mucho y para su construcción, entre los cuadrados mágicos de
son muy quisquillosos, tienen unas preferencias orden par y los de orden impar.
alimenticias algo peculiares.
Comenzaremos por estos últimos dado que la dificultad
Para comenzar, Los concursantes de los Alpes comen para resolverlos es menor.
muy poco, y cada uno de ellos come exactamente un
cuarto (¼) de pizza, y nada más. Los del Colón están un El método básico consiste en añadir lateralmente a los
poco más mal alimentados, y requieren de media (½) cuatro lados series virtuales de casillas, de forma
pizza exactamente para llenarse, sin embargo, por triangular, de manera que nos quede la figura de un
ningún motivo son capaces de comerse dos cuartos rombo. (Paso número 1)
sobrantes de pizzas distintas. Para terminar, los
concursantes de Veintimilla se alimentan con gran Entonces, y comenzando desde el extremo superior,
apetito y requieren de tres cuartas partes (¾) de pizza situaremos todas las cifras (a partir del 1) siguiendo sólo
para llenarse. Como es el caso de los del Colón, los del las diagonales alternas formadas en el rombo, observad
Veintimilla no aceptan trozos que hayan sido dejados
por otros concursantes (de otras pizzas).

37
que quedan, por tanto, líneas diagonales y casillas fáciles de aplicar de lo que puede parecer en un primer
interiores del cuadrado en blanco. (Paso número 2) momento:

El cuadrado mágico se completa situando los números Utilizaré, en primero lugar, un cuadrado de orden 4,
que han quedado en las casillas “virtuales” exteriores del que es el menor de los de orden par, para aclararlo
cuadrado, en las casillas interiores en blanco, siguiendo mejor.
primero una simetría horizontal, las del triángulo
superior pasan a completar la parte inferior, como si lo 1. Comenzaremos por situar el número 1 (o la 1ª cifra de
recortásemos y lo pegásemos sin girarlo y las del la serie) en el extremo superior izquierda y entonces
triángulo inferior en la parte superior; y una simetría escribiremos, desplazándonos de izquierda a derecha,
vertical, las de la parte exterior derecha en la interior sólo las cifras correspondientes a las casillas que forman
izquierda y al revés. (Paso número 3) las dos diagonales principales.
1> 4
Esta imagen ilustra claramente este procedimiento:
6 7
10 11
13 16

2. Ahora nos situaremos en la primera casilla inferior


derecha en blanco, vecina de la del extremo, dónde
pondremos el número 2 (o la 2ª cifra de la serie) e
iremos desplazándonos hacia arriba y en sentido de
derecha a izquierda para ir completando, en estricto
orden, las casillas que faltan, es decir, las que forman
los interiores de las diagonales principales y las dos
casillas exteriores de las filas centrales.

Es decir, pondremos el 2 e iremos contando de uno en


uno hasta llegar a una de las casillas mencionadas,
entonces escribimos esta cifra y las seguimos
enumerando, si se acaba una fila subimos a la anterior
y cambiamos de sentido (zigzag), hasta llegar al
extremo superior izquierda.

De hecho, como se puede observar, el cuadrado


mágico de orden 4 ya ha quedado completamente
resuelto.
1 15 14 4
12 6 7 9
8 10 11 5
13 3 2 <16

Extrapolaré, a continuación, este método a cuadrados


mágicos mayores de orden par. Pasaremos, pues, al
cuadrado de orden 6 y aplicaremos los dos pasos
descritos anteriormente:

¡¡Es increíblemente sencillo!! 1> 6


8 11
Para resolver cuadrados mágicos de orden par 15 16
seguiremos los siguientes pasos, que son mucho más 21 22
26 29

38
31 36 · El tercero es la acción a aplicar: completar diagonales
(DG), interior diagonales (DGI), exterior diagonales
1 32 35 6
centro (DGE), escribir pares (EP), escribir impares (ES),
8 28 27 11 completar números restantes (NR)
19 15 16 24
26. El rey blanco y 8 peones negros se encuentran
18 21 22 13 ubicados en un tablero de ajedrez (8 casilleros de
26 9 10 29 largo por 8 casilleros de ancho). El rey y cada uno
31 5 2 <36 de los peones pueden "comerse" entre sí. El rey
puede moverse de acuerdo a las reglas usuales del
Después de esto ya llevaremos escritas 2n cifras, por ajedrez, esto es, un casillero por vez, en cualquier
ejemplo, como este es de orden 6, ya llevamos 12. dirección. Sin embargo, los peones no pueden
moverse salvo para "comer" al rey; para ello, el rey
3a. Nos situaremos, ahora, en el extremo superior debe ubicarse en cualquiera de los casilleros
izquierda y con un desplazamiento siempre de derecha a diagonales adyacentes al que ocupa el peón.
izquierda, iremos contando de uno en uno y escribiremos Diremos que una "ruta" para el rey es SEGURA si el
sólo los números pares en las casillas correspondientes. rey puede recorrerla sin ser "comido" por ninguno
1 32 4 35 <6 de los 8 peones. Se trata entonces de encontrar un
12 8 28 27 11 algoritmo que permita determinar si existe o no una
ruta segura para el rey desde el casillero A1 al H8
19 15 16 14 24
para una posición dada de los 8 peones negros.
18 21 22 20 13
30 26 9 10 29 Escribir un programa que:
31 5 34 2 36
A- permita la entrada de las posiciones de los 8 peones
3b. Finalmente nos situaremos en el extremo inferior negros.
derecho y con un desplazamiento de derecha a izquierda,
iremos contando de uno en uno y escribiremos sólo los B- determine si existe o no una ruta segura para el rey,
números impares en las casillas correspondientes que con respecto a la posición ingresada de los 8 peones
han de coincidir exactamente con las casillas que todavía negros, desde el casillero A1 al H8.
quedaban en blanco.
C- si tal ruta existe, la describa.
(Los pasos 3a y 3b pueden invertirse de orden sin
27. Para un palabra dada encontrar todos sus anagramas.
afectar el resultado final)
1 32 4 33 35 6 28. Un equipo electrónico consta de un visor y dos
12 8 28 27 11 25 únicos botones señalados con "1" y "2".Al encender
19 23 15 16 14 24 el equipo aparece 0 en el visor. Si se oprime el botón
18 17 21 22 20 13 1 el número que está en la pantalla aumenta en 1,
30 26 9 10 29 7 mientras que si se oprime el botón 2, el número se
duplica. Escribir un programa que:
31 5 34 3 2 <36
a) permita ingresar un número natural N.
Una vez completado este cuadrado mágico de orden 6
se pueden extraer algunas conclusiones, dado que este b) muestre la cantidad de veces que deberá apretarse el
método es recurrente y sólo varían algunos detalles botón 1 y la cantidad de veces que deberá apretarse el
dependiendo del orden del cuadrado. botón 2 para obtener, en la menor cantidad posible de
pasos, el número N en el visor.
Hay tres factores determinantes o que definen cada paso:
· El primero es indicar el extremo de inicio: Superior (S) c) indique la manera en que deberán apretarse los
/ Inferior (I), Derecha (D) / Izquierda (E) botones.
· El segundo el tipo de desplazamiento a seguir: de Por ejemplo: Si N = 25
izquierda a derecha (E-D), de derecha a izquierda (D-E)
o en zig-zag (Z-Z)
Se deberá apretar el botón 1: "3 veces"

39
Se deberá apretar el botón 2: "4 veces" 2. Determine a cuáles de las empresas se les responderá
afirmativamente y fije el día en que se realizará la cena
Los botones deberán apretarse en el siguiente orden: "1- de cada una de ellas respetando los plazos máximos
2-1-2-2-2-1" fijados de forma tal que la ganancia obtenida por ChefEc
29. Escriba un programa que permita el ingreso de un sea máxima.
número natural N (N<=1000) y que encuentre el
número natural menor igual que N que tenga el 3. Escriba en un archivo ASCII de salida, CHEF.SOL:,
mayor número de divisores. Si hubiese varios de en forma cronológica los días de las cenas junto con el
tales números, el programa deberá imprimirlos todos número de la empresa atendida. Deberá agregarse
junto con los divisores de cada uno. también la ganancia máxima obtenida mediante este
cronograma.
30. ChefEc S.A. se dedica a la preparación de cenas
empresariales que se sirven en su salón del centro de Las respuestas a los distintos juegos de datos deberán
la ciudad. En este momento N empresas distintas separarse con un registro en blanco.
han requerido sus servicios. Cada una de ellas ha
fijado una cantidad de días a partir de hoy como Ejemplo:
plazo máximo para realizar la cena. ChefEc no
puede atender a más de una empresa por noche. CHEF.DAT
Debido a los menús y vinos seleccionados y a la
cantidad de invitados de cada empresa, la ganancia 5
que cada una de estas cenas le redituará a ChefEc no
es pareja. El Gerente General de ChefEc necesita dar 50 1
una respuesta a cada una de las N empresas
informándole si atenderá o no su pedido y, en caso 25 2
afirmativo, cuándo se realizará la cena; demás está
decir que pretende que la ganancia obtenida por
44 4
ChefEc sea máxima.
30 2
Ud. es el programador que debe encargarse de dar una
solución al Gerente General. Para ello, en un archivo de
20 1
entrada ASCII, CHEF.DAT, se han escrito distintos
juegos de datos. En cada uno de ellos figura:
11
N (el número total de empresas)
45 10
g1 d1 (la ganancia en $ y el plazo en días de la cena para
la empresa 1) 35 6

g2 d2 (la ganancia en $ y el plazo en días de la cena para 60 7


la empresa 2)
100 3
........
20 2
gN dN (la ganancia en $ y el plazo en días de la cena
para la empresa N) 20 2

donde los números N, gi, di (1 <= i <= N) son enteros 40 4


positivos.
35 3
Escriba un programa que:
10 5
1. Lea en CHEF.DAT el siguiente juego de datos.
20 1

40
40 4 - El primer y segundo caracter se colocan a izquierda y
derecha respectivamente, de lo que se obtuvo como
CHEF.SOL codificación de la primera contraseña
- El tercer caracter se guarda a izquierda del primero.
Día 1: cena para la empresa 1 - El cuarto a derecha del segundo.
- El quinto a izquierda del tercero.
Día 2: cena para la empresa 4 - El sexto a derecha del cuarto.

Día 3: cena para la empresa 3 En general los caracteres de la i-ésima contraseña se


codifican usando el método descrito, tomando como
base lo que resulta de codificar las (i-1) contraseñas
Total ganancia obtenida= $124
anteriores.
Día 1: cena para la empresa 4 Se debe escribir un programa CONTRA en que tome la
codificación de las contraseñas y obtenga todas las
Día 2: cena para la empresa 8 contraseñas correctamente escritas.

Día 3: cena para la empresa 7 Datos de entrada


Se recibe una única línea, de no más de 200 caracteres,
Día 4: cena para la empresa 11 conteniendo las contraseñas codificadas.

Día 5: cena para la empresa 9 Datos de salida


El programa debe generar una respuesta con:
Día 6: cena para la empresa 2
• Una primera línea con la cantidad total de contraseñas
Día 7: cena para la empresa 3 decodificadas.
• A continuación las contraseñas decodificadas, una por
Día 8: cena para la empresa 1 línea, imprimidas en el mismo orden en que fueron
codificadas.
Total ganancia obtenida= $365
Notas
31. Contraseñas - La longitud de la línea de entrada es un múltiplo de 6.
- Las contraseñas están formadas por letras y/o dígitos
Un señor debe manejar una gran cantidad de del 0 al 9.
contraseñas, de exactamente 6 caracteres cada una, que - Si desea puede guardar la respuesta en un archivo de
le permiten acceder a sus cuentas de mail, cuentas texto.
bancarias, tarjetas, etc. Ante el temor de olvidarlas,
decide escribirlas en un archivo cambiando el orden Ejemplo
original de los caracteres en la contraseñas, de forma tal En el caso de que la entrada fuera:
de evitar que alguien pueda verlas y usarlas. 017AIComRtN7udr243

Para ello usa el siguiente método. La primera contraseña la salida debería ser:
se guarda de la siguiente manera:
3
- Los dos primeros caracteres quedan como están. RtmNo7
- El tercer caracter se guarda a izquierda del primero. CuIdAr
- El cuarto a derecha del segundo. 721403
- El quinto a izquierda del tercero.
- El sexto a derecha del cuarto. 32. Las resistencias electrónicas suelen ir identificadas
por un código de colores que permite marcar cada
Para la segunda contraseña se utiliza el mismo método resistencia con su valor (en Ohmios, W) y su
pero tomando como base la codificación de la primera Tolerancia (en %). Este código de colores viene
contraseña, es decir: representado en la siguiente tabla:

41
ya creado y leerá de teclado 4 números que
corresponderán a los colores de las 4 bandas.
Tras esta lectura mostrará los datos de la resistencia con
esos colores en las bandas. El programa se repetirá
indefinidamente hasta que lea un valor negativo como
color de una banda.

33. Quizás el más famoso de todos los sistemas de


codificación es el código Morse, desarrollado por
Samuel Morse en 1832, para uso en el sistema
telegráfico. El código Morse asigna una serie de
puntos y rayas a cada letra del alfabeto, a cada dígito
y a unos cuantos caracteres especiales. La
separación entre palabras se indica por un espacio o
por la ausencia de un punto o una raya. La versión
internacional del código Morse aparece en la tabla
siguiente:
El código que suele emplearse en las resistencias es un
código de 4 colores, es decir, cada resistencia está
marcada con 4 bandas y cada una de ellas puede ser de
diferente color. Cada banda tiene un significado, que
depende de cada color:

· Las primeras 2 bandas indican un número de 2 dígitos:


Esos dos dígitos vienen dados por el color de esas
bandas, según la columna "Dígito" de la tabla.
· La tercera banda es un valor por el que se multiplicará
el número obtenido por las bandas anteriores.
Una vez multiplicados ambos valores, obtenemos el
valor de la resistencia en Ohmios (W).
· La cuarta banda indica la tolerancia de la resistencia y,
como puede verse en la tabla, no puede ser de cualquier
color.
Ejemplo: Unas resistencias con los siguientes colores,
tienen los siguientes valores de resistencia y tolerancia:
Verde-Azul-Amarillo-Oro 560kW, 5%
Rojo-Negro-Rojo-Rojo 2kW, 2%
Rojo-Rojo-Marrón-Plata 220W, 10%
Según todo lo anterior, implemente un subprograma que
permita calcular la resistencia y la tolerancia de una
resistencia, sabiendo los códigos de colores. El
subprograma tendrá, como mínimo, 4 argumentos, que
serán números naturales, y que indicarán el color de las
bandas según la columna "Dígito". Los colores Oro,
Plata y Ninguno tomarán los valores 10, 11 y 12
respectivamente. Escriba un programa que lea una frase escrita en español
Implementar otro subprograma que muestre por pantalla y cifre dicha frase en código Morse y que también lea
el dígito que le corresponde a cada color (incluyendo los una frase en código Morse y la convierta en el
dígitos 10, 11 y 12). equivalente en español. Utilice un espacio en blanco
Implementar también un programa que pida los colores entre cada letra codificada Morse y tres espacios en
de las 4 bandas y muestre los valores devueltos por el blanco entre cada palabra codificada en Morse.
anterior subprograma. El programa mostrará el dígito
que le corresponde a cada color usando el procedimiento El programa deberá incorporar una función Menu() que
muestre las siguientes opciones: 1) Pasar una frase a

42
código Morse, lo cual se implementará en una función El objetivo del juego es adivinar los dígitos así como sus
que se llame Frase2Morse(), posiciones correctas con el menor número de intentos
2) Pasar código Morse a una frase, implementando una posibles. Para cada intento, el jugador proporciona tres
función que se llame Morse2Frase() y dígitos para las posiciones 1, 2 y 3. El programa
3) Salir. responde con una pista que consta de rojo, amarillo y
verde. Si un dígito está en la posición correcta, la
34. Análisis de texto. La disponibilidad de respuesta es verde. Si el dígito adivinado está en una
computadoras con capacidades de manipulación de posición incorrecta, la respuesta es amarillo. Si el dígito
cadenas nos proporciona interesantes métodos para para una posición dada no coincide con ninguno de los
analizar lo escrito por grandes autores. Se ha puesto, tres dígitos, la respuesta es rojo. A continuación se
por ejemplo, gran atención al hecho de saber si muestra un ejemplo de respuestas para los dígitos 6, 5 y
William Shakespeare alguna vez existió. Algunos 8 en las posiciones 1, 2 y 3, respectivamente:
estudiosos creen que existen evidencias indicando
que Christopher Marlowe fue el que escribió las INTENTO PISTA
obras maestras atribuidas a Shakespeare. Los 1 2 5 rojo rojo amarillo
investigadores han utilizado ordenadores para 8 5 3 amarillo verde rojo
localizar similitudes en los textos de estos dos 8 5 6 amarillo verde amarillo
autores. Realice un programa que lea varias líneas 6 5 8 verde verde verde
de texto y analice las siguientes características del
texto: 36. Implementar el juego del AHORCADO. El
programa dispondrá de un menú con tres opciones:
a) Imprimir una tabla indicando el número de veces que introducir palabra, adivinar palabra y salir. La
aparece cada letra del alfabeto en dicho texto. primera opción permitirá introducir la palabra que
b) Imprimir una tabla que indique el número de palabras otro jugador (o nosotros mismos, para probar el
de una letra, de dos letras, de tres letras ... que aparecen programa) ha de adivinar. La segunda opción sólo
en el texto. podrá llevarse a cabo si ha sido introducida
c) Imprimir una tabla indicando el número de previamente una palabra. De ser así aparecerá una
ocurrencias de cada palabra distinta en el texto. Para ello cadena formada por guiones “-” (tantos como letras
supondremos que el texto tiene como máximo 100 contiene la palabra). El programa irá pidiendo una
palabras distintas, con lo que deberá almacenarlas en un letra tras otra. Si la letra es válida aparecerá en la
array de estructuras de tamaño 100. Cada estructura cadena en la posición correspondiente, si no es así
deberá contener una cadena de caracteres con la palabra contaremos un fallo. El programa termina cuando se
(máximo 20 caracteres) y otro campo con el número de han destapado todas las letras o se ha fallado seis
veces que aparece esa palabra en el texto. Considere veces (cabeza, tronco, brazo derecho, brazo
opcionalmente la posibilidad de que las palabras izquierdo, pierna derecha y pierna izquierda)
aparezcan ordenadas alfabéticamente. Para ordenarlas
puede utilizar cualquier algoritmo de ordenación
teniendo en cuenta que hay que intercambiar estructuras
completas (la cadena y el número de ocurrencias).
Para comparar las cadenas de caracteres en la
ordenación utilice la función strcmp() que dice si dos
cadenas son iguales, si una es mayor que la otra o
viceversa.
El programa deberá mostrar un menú con las siguientes
opciones: 1) Introducir texto, 2) Número de instancias de
cada letra,
3) Número de palabras de cada longitud,
4) Número de ocurrencias de cada palabra distinta,
5) Salir.

35. Escriba un programa que juegue al juego de ROJO-


AMARILLO-VERDE. El programa genera tres
dígitos aleatorios entre 0 y 9. A estos dígitos se le
asigna la posición 1, 2 y 3.

43

Вам также может понравиться