Академический Документы
Профессиональный Документы
Культура Документы
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.
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
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:
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:
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.
7
Las variables se pueden procesar utilizando operaciones "C" < "c" Verdadero
apropiadas para su tipo. Los operadores son de 4 clases: "2" < "12" Falso
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.
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’)
Ejemplo
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
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
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.
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:
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
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)
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.
La sintaxis es:
Donde:
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
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.
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:
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.
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
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:
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.
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:
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
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
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
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.
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.
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.
43