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

Algoritmos y Solucin de Problemas

Autor: Ing. Nelson Prado.


ndice
UNIDAD 1: .......................................................... 1
1.1.
INTRODUCCIN. ................................ 1
1.2.
ALGORITMOS Y SOLUCIN DE
PROBLEMAS................................................... 2
1.3.
METODOLOGA PARA RESOLVER
PROBLEMAS................................................... 2
1.4.
ETAPAS DEL CICLO DE
PROGRAMACIN DE COMPUTADORES .... 3
1.5.
ALGORITMOS ..................................... 4
1.6.
REPRESENTAR ALGORITMOS ......... 5
UNIDAD 2: .......................................................... 6
2.1.
VARIABLES, CONSTANTES E
IDENTIFICADORES. ...................................... 6
2.2.
DATOS Y TIPOS DE DATOS .............. 6
2.3.
VARIABLES ........................................ 7
2.4.
OPERACIONES.................................... 7
2.5.
ASIGNAR VALORES A LAS
VARIABLES .................................................... 9
2.6.
TIPOS DE VARIABLES MS
UTILIZADOS ................................................... 9
UNIDAD 3: ........................................................ 11
3.1.
DIAGRAMAS DE FLUJO PARA
REPRESENTAR ALGORITMOS .................. 11
3.2.
PSEUDOCDIGO PARA
REPRESENTAR ALGORITMOS .................. 12
UNIDAD 4: ........................................................ 13
4.1.
PROCESOS......................................... 13
4.2.
ESTRUCTURA SECUENCIAL .......... 13
4.3.
ESTRUCTURA CONDICIONAL ....... 14
4.4.
ESTRUCTURA ITERATIVA
(REPETICIN)............................................... 17
Estructura Para (Desde - Hasta) ................... 19
Ejercicios .................................................... 20
Estructura Mientras ..................................... 20
Estructura Repetir........................................ 21
UNIDAD 5: ........................................................ 22
5.1.
ARREGLOS. ....................................... 22
5.2.
CARGAR UN ARREGLO .................. 22
5.3.
IMPRIMIR UN ARREGLO ................ 23
5.4.
PROCESANDO UN ARREGLO ......... 23
5.5.
ARREGLOS BIDIMENSIONALES .... 24
UNIDAD 6: ........................................................ 27
6.1.
FUNCIONES Y PROCEDIMIENTOS. 27
6.2.
FUNCIONES ...................................... 27
6.3.
MBITO DE LAS VARIABLES ........ 30
6.4.
PROCEDIMIENTOS........................... 30

UNIDAD 1:
1.1. INTRODUCCIN.
Los matemticos hindes, rabes y europeos fueron los
primeros que desarrollaron tcnicas de clculo escrito.
El matemtico rabe Al'Khwarizmi , alrededor del ao
830 DC, escribe un libro de Aritmtica, traducido al latn
como Algoritmi de numero Indorum, donde introduce el
sistema numrico indio (slo conocido por los rabes
unos 50 aos antes) y los mtodos para calcular con l.
De esta versin latina proviene la palabra Algoritmo.
Por algoritmo se entiende "una lista de instrucciones
donde se especifica una sucesin de operaciones
necesarias para resolver cualquier problema de un tipo
dado". Los algoritmos son modos de resolucin de
problemas, cabe aclarar que no slo son aplicables a la
actividad intelectual, sino tambin a todo tipo de
problemas relacionados con actividades cotidianas. El
algoritmo es de carcter general y puede aplicarse a
cualquier operacin matemtica o a cualquier problema.
La formulacin de algoritmos fue uno de los ms
grandes adelantos dentro de la ciencia matemtica ya
que a partir de ello se pudieron resolver infinidad de
problemas.
Landa, matemtico ruso, quien ha investigado mucho al
respecto nos dice que "la ciencia matemtica, en el
proceso de su desarrollo, ha tratado de encontrar los
algoritmos ptimos ms generales para resolver los
problemas que permitan la solucin uniforme de clases
ms amplias de problemas de una manera, es decir,
empleando siempre el mismo sistema de operacin. Los
algoritmos, para llegar a ser tales deben reunir ciertas
caractersticas. Una de ellas es que los pasos que deben
seguirse deben estar estrictamente descritos, cada accin
debe ser precisa, y debe ser general, es decir, que pueda
ser aplicable a todos los elementos de una misma clase.
Por ejemplo en el caso del algoritmo de una
multiplicacin, no slo se realizar el procedimiento de
resolucin parte para la multiplicacin de 4 x 4, sino que
el mismo algoritmo podr aplicarse a cualquier
multiplicacin. La ltima de estas caractersticas ser la
resolucin, en otras palabras, esto quiere decir que el
algoritmo deber llegar a un resultado especfico.
Es de gran importancia aclarar que los algoritmos en si
mismos no resuelven problemas, se resuelven gracias al
producto de ejercer las operaciones dictadas por el
algoritmo, se puede decir que es por el planteamiento
mismo. La realizacin de algoritmos es natural e innata

en el hombre y en la mayora de los casos es de tipo


inconsciente, en otras palabras, las personas suelen
resolver problemas sin tener que recurrir a la aplicacin
de cierto algoritmo. No obstante al encontrarse con
problemas de un grado de dificultad mayor es necesario
detenerse a analizar y pensar en la solucin de ste.

1.3. METODOLOGA PARA RESOLVER


PROBLEMAS

1.2. ALGORITMOS Y SOLUCIN DE


PROBLEMAS
La razn principal por las que personas aprenden
lenguajes y tcnicas de programacin es para utilizar la
computadora como una herramienta para resolver
problemas.
La resolucin de problemas exige al menos los
siguientes pasos:

Definicin y anlisis del problema.


Diseo del algoritmo.
Transformacin del algoritmo en un programa.
Ejecucin y validacin del programa.

Los primeros dos pasos definen lo que es un sistema de


procesamiento de informacin.
Un sistema que transforma datos brutos en informacin
organizada, significativa y til.
Para poder entender lo que es un sistema de
procesamiento debemos diferenciar las palabras datos e
informacin:

Datos se refiere a la representacin de algn hecho,


concepto o entidad real (por ejemplo palabras
escritas, habladas, nmeros y dibujos).
Informacin implcita datos procesados y
organizados.

Figura. 1.1 Sistema de Procesamiento de Informacin.


Los componentes de un sistema de proceso de
informacin son: entrada, salida y procesador.
Ejemplo de sistemas: Un termostato que controla la
temperatura. La entrada es la temperatura media. La
salida es una seal que controla la caldera del aire
acondicionado.

Figura 1.2: Pasos para resolver problemas


matemticos.
Todos los das nos enfrentamos a problemas. Desde
nuestro punto de vista un problema es una oportunidad.
En la mayora de los textos se recomiendan los
siguientes procedimientos para solucionar problemas:
1. COMPRENDER EL PROBLEMA.
Leer el problema varias veces.
Qu datos me dan en el enunciado del problema?
Cul es la pregunta que me da el problema?
Qu debo lograr?
Cul es la incgnita del problema?
Organizar la informacin.
Agrupar los datos en categoras.
Trazar una figura o diagrama.
2. HACER EL PLAN.
Escoger y decidir las operaciones a efectuar.
Eliminar los datos intiles.
Descomponer el problema en otros ms pequeos.
3. EJECUTAR EL PLAN (Resolver).
Ejecutar en detalle cada operacin.
Simplificar antes de calcular.
Realizar un dibujo o diagrama.
4. ANALIZAR LA SOLUCIN (Revisar).
Dar una respuesta completa.
Hallar el mismo resultado de otra manera.
Verificar por apreciacin que la respuesta es
adecuada.

Ejemplo 1.1
En un juego, el ganador obtiene una ficha roja; el
segundo, una ficha azul; y el tercero, una amarilla. Al
final de varias rondas, el puntaje se calcula de la
siguiente manera: Al triple de la cantidad de fichas rojas
se adicionan las fichas azules y se descuenta el doble de
las fichas amarillas. Si Andrs lleg 3 veces en primer
lugar, 4 veces de ltimo y 6 veces de intermedio, Qu
puntaje obtuvo?
Solucin:
COMPRENDE
Leer detenidamente el problema.
Cuntos colores de fichas se reparten?
Cuntas fichas rojas, azules y amarillas obtuvo
Andrs?
Qu pregunta el problema?
PLANEA
Para hallar el puntaje que obtiene Andrs por sus
llegadas de primero, calcular el triple de la
cantidad de fichas rojas.
Para hallar el puntaje por sus llegadas en segundo
lugar, contar la cantidad de fichas azules.
Para hallar el puntaje que pierde por sus llegadas
en ltimo lugar, calcular el doble de la cantidad de
fichas amarillas.
Para hallar el puntaje total, calcular la suma de los
puntajes por las fichas rojas y azules, restarle los
puntos de las fichas amarillas.
RESUELVE
Por tres fichas rojas: 3 x 3 = 9 puntos.
Por seis fichas azules: 6 = 6 puntos.
Por cuatro fichas amarillas: 4 x 2 = 8 puntos.
Para obtener el puntaje final de Andrs, sumar los
puntos obtenidos con las fichas rojas y azules (9 +
6 = 15 puntos) y de este resultado restar los puntos
representados por las fichas amarillas (15 8 = 7
puntos).
REVISA
El puntaje que obtuvo Andrs es 7 puntos.
Verificar las operaciones y comparar los clculos
con la solucin estimada.
Ejercicios
Debes tener en cuenta (y anotar) las actividades que
realizas para resolver estos problemas y clasificarlas en
cada una de las cuatro etapas vistas: comprender,
planear, resolver y revisar.

1.1. Se tienen dos cubetas de 5 y 4 litros


respectivamente. Las mismas no estn graduadas
con medidas. S se tiene disponible toda el agua
necesaria. Cmo lograra poner dos litros de agua
en una de las dos?
1.2. En un curso de un colegio, la materia de educacin
fsica se divide en dos grupos de estudiantes:
Natacin, con 136 y Ftbol, con 204. Si hay 25
estudiantes que estudian Natacin y Ftbol, cuntos
estudiantes tiene el curso? Para resolver este
problema, debes tener conocimientos sobre
conjuntos
(representacin,
clasificacin
e
interseccin). Es buena idea que construyas una
tabla para organizar la informacin y un diagrama
para representar los datos.
1.3. Orlando compr 15 metros de tela para mandar a
fabricar una cortina, a $26 el metro. Para colgarla
necesita 28 aros de madera cuyo valor es de $1 cada
uno. El riel y dems accesorios cuestan $30. Si la
modista cobra $5 por cada metro de tela
confeccionado y la instalacin vale $15 Cunto es
el costo total de la cortina instalada? Debes tener
conocimientos sobre sumas y multiplicaciones.
1.4. El peso neto indicado en la envoltura de un jabn
de bao es de 140 gramos y el peso neto indicado
en otro jabn es de 80 gramos. El primero vale $0.90
y el segundo $0.65. Cul de los dos es ms
costoso? Debes tener conocimientos sobre sistemas
de medidas (peso) y divisiones.

1.4. ETAPAS DEL CICLO DE


PROGRAMACIN DE COMPUTADORES
Muchos expertos en programacin afirman que para
elaborar en un computador procedimientos que realicen
determinadas tareas, se deben seguir cuatro fases o
etapas.
Estas fases concuerdan con los procedimientos para
solucionar problemas, vistos anteriormente:
1. Analizar el problema (Entender el problema)
2. Disear un algoritmo (Trazar un plan)
3. Traducir el algoritmo a un lenguaje de programacin
(Ejecutar el plan)
4. Depurar el programa (Revisar)
Como puedes apreciar, hay una semejanza entre los
mtodos utilizados para solucionar problemas y las
cuatro fases para solucionar problemas con ayuda del
computador en otras reas del conocimiento.

1.5. ALGORITMOS
En la naturaleza hay muchos procesos que puedes
considerar como Algoritmos ya que tienen
procedimientos y reglas. Incluso, muchas veces no
somos conscientes de ellos.
Por ejemplo, el proceso digestivo es un concepto de
algoritmo con el que convivimos a diario sin que haga
falta una definicin precisa de este proceso. El hecho de
que conozcas cmo funciona el sistema digestivo, no
implica que los alimentos que consumas te alimenten
ms o menos.
La familiaridad de lo que sucede da a da nos impide
ver muchos algoritmos que pasan a nuestro alrededor.
Procesos, rutinas o biorritmos naturales como la
gestacin, las estaciones, la circulacin sangunea, los
ciclos csmicos, etc., son algoritmos naturales que
generalmente pasan desapercibidos.
Ejemplo 1.2
Un procedimiento que realizamos varias veces al da
consiste en lavarnos los dientes. Veamos la forma de
expresar este procedimiento como un Algoritmo:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.

Tomar la crema dental.


Destapar la crema dental.
Tomar el cepillo de dientes.
Aplicar crema dental al cepillo.
Tapar la crema dental.
Abrir la llave del lavamanos.
Remojar el cepillo con la crema dental.
Cerrar la llave del lavamanos.
Frotar los dientes con el cepillo.
Abrir la llave del lavamanos.
Enjuagarse la boca.
Enjuagar el cepillo.
Cerrar la llave del lavamanos.
Secarse la cara y las manos con una toalla.

5. Enroscar la bombilla nueva hacia la derecha en el


plafn hasta apretarla.
6. Bajar de la escalera o del banco.
7. Fin.
Ejercicio
1. Discutir en parejas el ejemplo de la bombilla y
proponer algunas mejoras. Luego, un voluntario
debe pasar al tablero y escribir un Algoritmo con
participacin de toda la clase.
Los Algoritmos permiten describir claramente una serie
de instrucciones que debe realizar el computador para
lograr un resultado previsible. Vale la pena recordar que
un procedimiento de computador consiste de una serie
de instrucciones muy precisas y escritas en un lenguaje
de programacin que el computador entienda.
En resumen, un Algoritmo es una serie ordenada de
instrucciones, pasos o procesos que llevan a la solucin
de un determinado problema. Los hay tan sencillos y
cotidianos como seguir la receta del mdico, abrir una
puerta, lavarse las manos, etc.; hasta los que conducen a
la solucin de problemas muy complejos.
El concepto de algoritmo, aunque similar y obviamente
relacionado, no debe confundirse con el concepto de
programa. Mientras el primero es la especificacin de un
conjunto de pasos (operaciones, instrucciones,
rdenes,...) orientados a la resolucin de un problema, el
segundo es ese conjunto de operaciones especificadas en
un determinado lenguaje de programacin y para un
computador concreto, susceptible de ser ejecutado (o
compilado o interpretado). Un algoritmo, estrictamente
hablando, no puede ejecutarse hasta que se implementa,
ya sea en un lenguaje de programacin, en un circuito
elctrico, en un aparato mecnico, usando papel y lpiz,
o en algn otro modelo de computacin.
Las caractersticas fundamentales de un algoritmo son:

Ejemplo 1.3

Veamos que algo tan comn como los pasos para


cambiar una bombilla (foco) se pueden expresar en
forma de Algoritmo:
1. Ubicar una escalera o un banco debajo de la
bombilla fundida.
2. Tomar una bombilla nueva.
3. Subir por la escalera o al banco.
4. Girar la bombilla fundida hacia la izquierda hasta
soltarla.

Debe ser preciso e indicar el orden de realizacin


de cada paso.
Debe estar definido. Si se sigue el algoritmo dos
veces, se debe obtener el mismo resultado cada vez.
Debe ser finito. Si se sigue un algoritmo, se debe
terminar en algn momento.

Cuando el procesador es una computadora, el algoritmo


se expresa por medio de un programa. Cada paso esta
expresado por medio de una instruccin.

Ejemplo 1.4
Consideremos algo ms complejo como el algoritmo de
Euclides para hallar el Mximo Comn Divisor (MCD)
de dos nmeros enteros positivos dados. Obsrvese que
no se especifica cules son los dos nmeros, pero si se
establece claramente una restriccin: deben ser enteros y
positivos.

proposiciones, mientras que en un Diagrama de Flujo


se representa por medio de grficos.
Ejemplo 1.5
Disear un algoritmo (pseudocdigo) para hallar el rea
de un tringulo rectngulo cuya Base mide 3 cm, la
Altura 4 cm y la Hipotenusa 5 cm.
Solucin:

ALGORITMO
1. Paso 1: Inicio.
2. Paso 2: Leer los dos nmeros (a y b). Avanzar
al paso 3.
3. Paso 3: Comparar a y b para determinar cul es
mayor. Avanzar al paso 4.
4. Paso 4: Si a y b son iguales, entonces ambos son
el resultado esperado y termina el algoritmo. En
caso contrario, avanzar al paso 5.
5. Paso 5: Si a es menor que b, se deben
intercambiar sus valores. Avanzar al paso 6; si a
no es menor que b, avanzar al paso 6.
6. Paso 6: realizar la operacin a menos b, asignar
el valor de b a a y asignar el valor de la resta a
b. Ir al paso 3.
Ejercicio
A diferencia de los seres humanos que realizan
actividades sin detenerse a pensar en los pasos que
deben seguir, los computadores son muy ordenados y
necesitan que quien los programa les especifique cada
uno de los pasos que debe realizar y el orden lgico de
ejecucin.
Numerar en orden lgico los pasos siguientes (para
pescar):
___ El pez se traga el anzuelo.
___ Enrollar el sedal.
___ Tirar el sedal al agua.
___ Llevar el pescado a casa.
___ Quitar el Anzuelo de la boca del pescado.
___ Poner carnada al anzuelo.
___ Sacar el pescado del agua.

1.6. REPRESENTAR ALGORITMOS


Los Algoritmos se puede expresar de muchas maneras,
pero en este curso se tratarn solo dos formas:
Pseudocdigo y Diagrama de Flujo.
En Pseudocdigo la secuencia de instrucciones se
representa por medio de palabras en forma de frases o

ANLISIS DEL PROBLEMA


Formular el problema: Ya se encuentra claramente
planteado.
Resultados esperados: El rea de un tringulo
rectngulo.
Datos disponibles: Base, Altura, Hipotenusa, tipo de
tringulo. La incgnita es el rea y todos los valores son
constantes. El valor de la hipotenusa se puede omitir.
Debes preguntarte si tus conocimientos actuales de
matemticas te permiten resolver este problema; de no
ser as, debes plantear una estrategia para obtener los
conocimientos requeridos.
Determinar las restricciones: Utilizar las medidas
dadas.
Procesos necesarios: Guardar en dos variables (BASE y
ALTURA) los valores de Base y Altura; Guardar en una
constante (DIV) el divisor 2; aplicar la frmula
BASE*ALTURA/DIV y guardar el resultado en la
variable AREA; comunicar el resultado (AREA).
ALGORITMO EN PSEUDOCDIGO
Paso 1: Inicio
Paso 2: Asignar el nmero 2 a la constante "div"
Paso 3: Asignar el nmero 3 a la constante base
Paso 4: Asignar el nmero 4 a la constante altura
Paso 5: Guardar en la variable "rea" el resultado de
base*altura/div
Paso 6: Imprimir el valor de la variable "rea"
Paso 7: Final
Ejercicios
Elabora un algoritmo para cada uno de los siguientes
problemas:
1.5. Escribir un algoritmo para la preparacin de un
ceviche de camaron que conste de 5 a 10 acciones
principales.
1.6. Qu requisitos debe cumplir un algoritmo bien
elaborado?
1.7. Los ingredientes para 4 personas del pastel de
manzana dans son los indicados en el cuadro
adjunto. Realizar un algoritmo que calcule los
ingredientes para un nmero variable de personas
que se lee por teclado.

1.8. Desarrollar un algoritmo para cambiar un neumtico


desinflado. Supngase que se dispone de una rueda
de repuesto y de gato.
1.9. Hallar el permetro de un cuadrado cuyo lado mide 5
cm.
1.10. Hallar el permetro de un crculo 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 rectngulo cuya
rea es de 15 cm2 y uno de sus lados mide 3 cm.
1.13. Hallar el rea y el permetro de un crculo cuyo
radio mide 2 cm.
1.14. Hallar el rea de un pentgono regular de 6 cm
de lado y con 4 cm de apotema.

UNIDAD 2:

Figura 2.1: Algoritmo para calcular el rea de


cualquier tringulo rectngulo.
-

Constantes: Tienen un valor fijo que se le da cuando


se define la constante y que ya no puede ser
modificado durante la ejecucin.
Variables: El valor puede cambiar durante la
ejecucin del algoritmo, pero nunca varia su nombre
y su tipo.

2.1. VARIABLES, CONSTANTES E

IDENTIFICADORES.
En programacin, las Variables son espacios de trabajo
reservados para guardar datos (valores). El valor de una
Variable puede cambiar en algn paso del Algoritmo o
permanecer invariable; por lo tanto, el valor que
contiene una variable es el del ltimo dato asignado a
esta.
Ejemplo 2.1
En el siguiente diagrama de flujo, "AREA" es un
ejemplo de Variable; en el paso 5 se guard en ella el
resultado de multiplicar "BASE" por "ALTURA" y en el
paso 6 se utiliz nuevamente para guardar el valor de
dividir su propio contenido ("AREA") entre la Constante
"DIV".

2.2. DATOS Y TIPOS DE DATOS


Las cosas se definen en la computadora mediante datos,
los algoritmos que vamos a disear van operar sobre
esos datos. A nivel de la mquina los datos se
representan como una serie de bits (dgito 1 0). Los
tipos de datos que vamos a manejar a lo largo del curso
son: numricos y carcter (tambin llamados
alfanumricos), existen adems, los datos de tipo lgicos
que solo pueden tener uno de dos valores: verdadero o
falso.
Los datos numricos pueden ser de varias clases:
enteros, enteros largos, de doble precisin, de simple
precisin, de coma flotante, reales; cuya definicin
depende del lenguaje de programacin utilizado.
Los datos de tipo carcter o alfanumricos estn
compuestos por el conjunto finito y ordenado de
caracteres que la computadora reconoce:

Caracteres alfabticos : A,B,C,.......Z ; a,b,c,.......z


Caracteres numricos : 0,1,2, ......9 (que no son
nmeros)
Caracteres especiales : +, /, *, ?,%,$, #, !,
,,,{},~,etc.

Una cadena o string es una sucesin de caracteres que se


encuentran delimitados por comillas (" "). La longitud de
la cadena es la cantidad de caracteres que la forma,
incluyendo los espacios que son un carcter ms. As:

"Quito, Pichincha" es una cadena de longitud 18.


"Mircoles 7 de Marzo de 2008" es una cadena de
longitud 28 (el 7 y el 2001 no son nmeros)
"123456" es una cadena de longitud 6, no es el
nmero 123.456 sobre "123456" no se puede
realizar ninguna operacin aritmtica como sumar,
restar, etc., ya que se trata de una cadena
alfanumrica. Ejemplo de este tipo son: cedula,
pasaporte, telfonos.

2.3. VARIABLES
Cuando
representamos
datos,
numricos
alfanumricos, debemos darles un nombre.

Una variable es un nombre que representa el valor de un


dato.
En esencia, una variable es una zona o posicin de
memoria en la computadora donde se almacena
informacin. En un algoritmo y tambin en un programa
se pueden crear tantas variables como queramos. As
tenemos:

El primer carcter de un nombre debe ser una letra.


La mayora de los lenguajes de programacin
diferencian las letras maysculas de las minsculas.
Con solo leer los nombres se puede entender lo que
contienen. Deben ser muy descriptivos; no utilizar
abreviaturas, a menos que se justifique plenamente.
Es conveniente utilizar una sola palabra para
nombrar pginas, controles, variables, etc.
No utilizar caracteres reservados (%, +, /, >, etc).
Se debe tener en cuenta que algunos lenguajes de
programacin no admiten las tildes.
No utilizar palabras reservadas por los lenguajes de
programacin.
Los nombres de procedimientos, variables y
constantes deben empezar con minscula. Ejemplo,
fecha, suma, etc. Si es un nombre compuesto por
varias palabras, cada una de las palabras (con
excepcin de la primera) deben empezar con
mayscula. Ejemplo: fechaInicial, baseTringulo,
etc.

El tipo de nombre que se asigne a variables, constantes y


procedimientos es muy importante. Cuando dejas de
trabajar en un proyecto por varios das, es ms fcil para
ti retomar la actividad si los nombres describen muy
bien el contenido de variables, constantes y
procedimientos.
Ejemplos de nombres vlidos de variables

A = 50: Variable tipo numrica A cuyo valor es 50.


Ciudad = "Guayaquil": Variable alfanumrica o de
tipo carcter Ciudad, cuyo valor es "Guayaquil"
X = C + B: Variable numrica X cuyo valor es la
suma de los valores de las variables numricas C y
B. Es una variable calculada.

Ten en cuenta que las operaciones que se pueden realizar


con dos o ms variables exigen que stas sean del mismo
tipo. No podemos "sumar", por ejemplo una variable
alfanumrica a otra numrica y viceversa como por
ejemplo:

FechaNueva="1 de Junio de 1.971" + 5


se puede hacer !!

Esto no

Nombres de las variables constantes


A continuacin encontrars una serie de reglas para
asignar nombres (identificadores) a variables, constantes
y procedimientos:

Los nombres pueden estar formados por una


combinacin de letras y nmeros (saldoMes, salario,
fecha2, baseTringulo, etc).

fechaNueva.
c1.
totalPersonas.
contador_Maletas.
cantidad_de_Alumnos.
pedido_Almacen.

Algunos lenguajes de programacin exigen la


declaracin de las variables que se van a utilizar en todo
el programa; es decir, que al comenzar el programa se
debe decir que nombre tiene, de que tipo es (numrica o
alfanumrica) y un valor inicial. Como aqu no estamos
tratando con ningn lenguaje, la declaracin de las
variables puede omitirse.
Las variables tambin pueden inicializarse; darles un
valor inicial. Por defecto, todas las variables para las que
no especifiquemos un valor inicial, valen cero si son de
tipo numrica y nulo (nulo no es cero ni espacio en
blanco; es nulo) si son de tipo carcter.

2.4. OPERACIONES

Las variables se pueden procesar utilizando operaciones


apropiadas para su tipo. Los operadores son de 4 clases:

Relacionales.
Aritmticos.
Alfanumricos.
Lgicos.

>=
<>

Verdadero
Falso

Estas comparaciones se realizan utilizando el valor


ASCII de cada carcter.
Para tratar los nmeros se utilizan los operadores
aritmticos:

Los operadores relacionales se utilizan para formar


expresiones que al ser evaluadas producen un valor de
tipo lgico: verdadero o falso. Ellos son:
Signo
>
<
=
<=

"C" < "c"


"2" < "12"

Operador
Mayor que
Menor que
Igual a
Menor o igual
que
Mayor o igual
que
Distinto

Signo
+
*
/
^
MOD

Significado
Suma
Resta
Multiplicacin
Divisin
Potenciacin
Resto de la divisin entera

El nico operador alfanumrico se utiliza para unir o


concatenar datos de este tipo:
Signo Significado
+
Concatenacin

Ejemplos:
Ejemplo
Resultado
25 <= 25
Verdadero
25 <> 25
Falso
25 <> 4
Verdadero
50 <= 100
Verdadero
500 >= 1
Verdadero
1=6
Falso
Cuando se comparan caracteres alfanumricos se hace
uno a uno, comenzando por la izquierda hacia la
derecha.

Ejemplos:
Expresin
"Pseudo" + "cdigo"
"3" + "4567"
"Hola " + "que tal ?"

Resultado
"Pseudocdigo"
"34567"
"Hola que tal ?"

Los operadores lgicos combinan sus operandos de


acuerdo con las reglas del lgebra de Boole para
producir un nuevo valor que se convierte en el valor de
la expresin, puede ser verdadero o falso.

Si las variables son de diferente longitud, pero


exactamente iguales, se considera que la de menor
longitud es menor.

Signo
OR
AND
NOT

Los datos alfanumricos son iguales si y solo si tienen la


misma longitud y los mismos componentes.

Significado
Suma lgica (O)
Producto lgico (Y)
Negacin (NO)

Ejemplos:
Las letras minsculas son mayores que las maysculas y
cualquier carcter numrico es menor que cualquier letra
mayscula o minscula; As:
carcter numrico < maysculas < minsculas.
Ejemplos:
Comparacin
"A" < "B"
"AAAA"
>
"AAA"
"B" > "AAAA"

Resultado
Verdadero
Verdadero

Expresin
Verdad AND Falso
NOT Falso
Verdad OR Falso

Resultado
Falso
Verdad
Verdad

Por ejemplo, la expresin: (12 + 5) OR (7 + 3) = 10 es


verdadera (se cumple una y Verdad OR Falso es
Verdad).
La expresin (12 * 5) AND (3 + 2) = 60 es falsa
(verdad AND falso = Falso).

Verdadero

Cmo se evalan los operadores? La prioridad de los


operadores es:

Parntesis
Potencias
Productos y Divisiones
Sumas y restas
Concatenacin
Relacionales
Lgicos

que se van incrementando o decrementando cada vez


que se ejecuta la accin que lo contiene. El incremento o
decremento es llamado paso de contador y es siempre
constante.
Por ejemplo; el marcador de un partido de ftbol, cada
vez que un equipo anota un gol, aumenta su marcador en
una unidad.

2.5. ASIGNAR VALORES A LAS VARIABLES

En las carrera de automviles, cada vez que un vehculo


pasa por la lnea de meta, se incrementa en una unidad el
nmero de vueltas dadas al circuito, o bien se
decrementa en una unidad el nmero de vueltas que
quedan por realizar.

La operacin de dar valor a una variable se llama


asignacin. La asignacin vamos a representarla con el
smbolo; una flecha apuntando a la izquierda. No
utilizaremos en signo = ya que el operador de asignacin
vara de acuerdo con el lenguaje de programacin
utilizado. El formato general de una asignacin es:

Aunque el incremento es siempre constante, el paso de


contador no necesariamente puede ser la unidad como en
los ejemplos que se han dado ms arriba; tambin puede
incrementarse o decrementarse a de dos, tres, cuatro,....
n; es decir, puede ser cualquier nmero que conserva el
mismo valor durante todo el programa.

nombre de la variable  expresin.


La flecha se sustituye en los lenguajes de programacin
por = (basic); : = (pascal). Pero para evitar
ambigedades en el algoritmo utilizaremos la flecha para
la asignacin y el smbolo = para indicar igualdad. He
aqu algunos ejemplos:

a 100: significa que a la variable a se le ha


asignado el valor 100, ahora A vale 100.
suma  5+10: asigna el valor 15 a la variable suma
a travs de una asignacin aritmtica.
x z + v: asigna el valor de la suma de las
variables z y v a la variable x. El resultado depende
de los valores que se asignen a x y a z.

Toda asignacin es destructiva. Esto quiere decir que el


valor que tuviera antes la variable se pierde y se
reemplaza por el nuevo valor que asignamos, as cuando
se ejecuta esta secuencia:

La sintaxis de una variable contador es:


variable  variable + constante (al incrementar)
variable  variable - constante (al decrementar)
Ejemplos:

gol_local  gol_local + 1.
vueltas  vueltas + 1.
faltan  faltan 1.
de_cinco  de_cinco + 5.
c  c + 1.
x  x 3.

Observacin: Cuando una variable aparece a ambos


lados del smbolo de asignacin, conviene inicializarlas
a cero.
Acumulador o Sumador

2.6. TIPOS DE VARIABLES MS UTILIZADOS

Es una variable que nos permite guardar un valor que se


incrementa o decrementa en forma NO constante durante
el proceso. En un momento determinado tendr un valor
y al siguiente tendr otro valor igual o distinto. Por
ejemplo; cuando realizamos un depsito en el banco, la
cantidad depositada cada vez no es siempre la misma;
unas veces ser una cantidad y otras veces distinta. Lo
mismo ocurre cuando realizamos algn retiro, pero
decrementando la cantidad total.

Contador

La sintaxis es:

edad  25.
edad  100.
edad  77.

El valor final que toma edad ser 77 pues los valores 25


y 100 han sido destruidos.

Un contador es una variable destinada a contener valores

acumulador  acumulador + variable (al incrementar)


acumulador  acumulador - variable (al decrementar)
acumulador es la variable en la que se almacena el
resultado.
variable contiene el nmero que estamos incrementando
o decrementando

a) nmeros.
b) Numero X.
c) 7
d) A(45+
e) VII
f) 7mesas.
g) sieteMesas
2.2. Halle el valor de A:
A  A o (3+5*8) < 3 y ((-6/3 div 4)*2 < 2)

Ejemplos:

saldo  saldo + entrega.


saldo  saldo retiro.
suma  suma + numero.
sumaEdades  sumaEdades + edad.

Halle el valor de A:
A  (3*2^5 mod 1 + 8*(3-5) < (2+8-1 mod 1)
A  (3*32 mod 1 + (-16)) < 10
A  -16 < 10
A  Verdadero

2.3. Halle el valor de B:


B  3 mod 2 div 3
2.4. Halle el valor de C:
C  (-B*2 <> 8*3 mod 4) y (A>B)
2.5. Dadas las siguientes declaraciones de variables
siguientes y los valores iniciales indicados:
VAR
Z color, lima, marron, amarillo, rojo, naranja
R negro, blanco, verde, azul, morado, crayon

Ejemplo
Escribir un algoritmo que intercambie el valor de dos
variables.
Si se tienen, por ejemplo a = 5 y b = 10, se quiere
intercambiar el valor de las variables, as:
a = 10; b = 5.
No podemos asignar directamente el valor de una a la
otra porque uno de los valores se destruira; de modo
que esto no se puede hacer:
a  b (el valor de a se pierde y quedara a = 10 ; b =
10) .
La solucin consiste en asignar el valor de una de las
variables a otra variable auxiliar.
inicio
leer A,B
Auxiliar  A
A B
B  Auxiliar
imprimir A,B
fin
Ejercicios

Evaluar el valor final de las variables despus de


ejecutar de forma independiente las sentencias de
asignacin siguientes. Nota: suponer que las
incompatibilidades de tipos se resuelven implcitamente
e indicar dnde se producen.
a) blanco = color * 2.5 / morado
b) verde = color / morado
c) naranja = color*(-12) DIV rojo
d) azul = (color + marron) / (crayon + 0.3)
e) lima = rojo DIV color + rojo MOD color - 356
f) morado = marron / rojo * color
2.6. Indicar el tipo de cada una de las siguientes
constantes:
a) 534 b) 534.0 c) -534 d) 534
4

-3

e) -45.3x10 f) 17x10 g) -45.6x10 h) fin del


ejercicio
2.7. Indicar el resultado y el tipo de las siguientes
expresiones:
a) 5^2+3 b) 6+19-0.3 c) 3.0^3+1
d) 1/4+2 e) 29.0/2+4 f) 3/6.0 - 7
2.8. Calcular el valor de cada una de las siguientes
expresiones enteras:
a) 5*6-3*2 b) -2^3 c) (26+3*4)/4
d) 3+2*(18-4^2) e) 2^2*3 f) 8-30/6

2.1. Cules de los siguientes nombres de Variables


NO son validos y por qu?

10

2.9. Escribir las siguientes expresiones matemticas en


forma de expresiones de computacin:

e) (I < 4) o (J > 5)
f) no (I > 6)

UNIDAD 3:
3.1. DIAGRAMAS DE FLUJO PARA
REPRESENTAR ALGORITMOS
Diagrama de Flujo

2.10. Evaluar las siguientes expresiones booleanas


escribiendo el rbol de precedencia. Los valores
de las variables son A=TRUE, B=TRUE,
C=FALSE, D=FALSE.
a) C OR NOT A AND B

Conjunto de smbolos estndar en los cuales se


encuentran escritos los pasos del algoritmo, dichos
smbolos se encuentran unidos por medio de flechas,
denominadas lneas de flujo, que indican la secuencia en
que se deben de ejecutar.
Los siguientes son los principales smbolos 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. Encuntrese el valor de la variable RESULT
despus de la ejecucin 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
X2
RESULT RESULT*X
2.12. Qu valor se obtiene en las variables A, B y C
despus de la ejecucin de las siguientes
instrucciones?
A3
B 20
C A+B
B A+B
AB
2.13. Supngase que I y J son variables enteras cuyos
valores son 6 y 12 respectivamente. Cules 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 fcil


de recorrer.

Actividad 1.6
Hallar el permetro de un cuadrado cuyo lado mide 5
cm.
2. Hallar el permetro de un crculo 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 rectngulo cuya rea
es de 15 cm2 y uno de sus lados mide 3 cm.
5. Hallar el rea y el permetro de un crculo cuyo radio
mide 2 cm.
6. Hallar el rea de un pentgono regular de 6 cm de
lado y con 4 cm de apotema.
1.

3.2. PSEUDOCDIGO PARA REPRESENTAR


ALGORITMOS
Pseudocdigo: lenguaje de especificacin de algoritmo
que utiliza para representar las acciones palabras
reservadas en ingles, las cuales son similares a las de los
lenguajes de programacin, tales como start, end, ifthen-else, while-wend, repeat-until, etc. (o su
equivalente en espaol)
Reglas bsicas para elaborar Diagramas de Flujo:

Poner un encabezado que incluya un ttulo que


identifique la funcin del algoritmo; el nombre del
autor; y la fecha de elaboracin.
Slo se pueden utilizar los smbolos anteriores.
Los diagramas se deben dibujar de arriba haca abajo
y de izquierda a derecha.
La ejecucin del programa siempre empieza en la
parte superior del diagrama.
Los smbolos de Inicio y Final deben aparecer
solo una vez.
La direccin del flujo se debe representar por medio
de flechas (lneas de flujo).
Todas las lneas de flujo deben llegar a un smbolo o
a otra lnea.
Una lnea de flujo recta nunca debe cruzar a otra.
Cuando dos lneas de flujo se crucen, una de ellas
debe incluir una lnea arqueada en el sitio donde
cruza a la otra.
Las bifurcaciones y ciclos se deben dibujar
procurando una cierta simetra.
Cada rombo de decisin debe tener al menos dos
lneas 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.

Este naci como un lenguaje similar al ingls y era un


medio de representar bsicamente las estructuras de
control de programacin estructurada.
El pseudocdigo no puede ser ejecutado por una
computadora. Una ventaja del pseudocdigo es que
puede ser traducido fcilmente a lenguajes de
programacin.
La escritura del pseudocdigo exige normalmente la
indentacin (sangra en el margen izquierdo) o en su
defecto, numeracin jerrquica.
Ejercicios:
Realice los ejercicios, utilizando Diagramas de Flujo
y Pseudocdigo.
3.1. Escribir un algoritmo que calcule y saque por
pantalla, las horas, minutos y segundos de un tiempo
expresado slo en segundos introducido por teclado.
3.2. Escribe un algoritmo que calcule la altura desde la
que cae un objeto que tarda t segundos en llegar al
suelo. El tiempo lo introduce el usuario por teclado.
Use la frmula:

12

3.3. Escribe un algoritmo que lea por teclado una


temperatura en grados Fahrenheit y la convierta a
grados centgrados segn la frmula:

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. Disear un algoritmo que lea los dos catetos de un
tringulo rectngulo y calcule la hipotenusa.
3.7. Disear un algoritmo que lea cuatro calificaciones
de un alumno y calcule la calificacin promedio.

UNIDAD 4:
4.1. PROCESOS
Se llama procesos a todas las instrucciones contenidas
en un algoritmo para:

Declarar variables y constantes.


Asignar valores iniciales a variables y constantes.
Leer datos que suministra el usuario por medio del
teclado o del ratn (mouse).
Realizar
operaciones
matemticas
(aplicar
frmulas).
Reportar o mostrar contenidos de variables y
constantes.
Mostrar en pantalla resultados de procedimientos
activados por el programa.

4.2.ESTRUCTURA SECUENCIAL
Un Algoritmo est compuesto por instrucciones de
diferentes tipos, organizadas secuencialmente, en forma
de estructuras de control. De estas estructuras de control,
las ms comunes son las siguientes:

Secuencial.
Iterativa (repeticin).
Condicional (decisin, seleccin).

Una estructura de control se define como un esquema


que permite representar ideas de manera simplificada y
que bajo condiciones normales, es constante.

Figura 4.1: Modelo de estructura secuencial.


La estructura de control secuencial es la ms sencilla.
Tambin se la conoce como estructura lineal. Se
compone de instrucciones que deben ejecutarse en forma
consecutiva, una tras otra, siguiendo una lnea de flujo.
Solamente los problemas muy sencillos pueden
resolverse haciendo uso nicamente de esta estructura.
Una estructura de control secuencial puede contener
cualquiera de las siguientes instrucciones:

Declaracin variables
Asignacin de valores
Entrada de datos
Procesamiento de datos (operaciones)
Reporte de resultados

Ejercicios
4.1. Disear un algoritmo que lea la cantidad de lluvia en
pulgadas e imprima su equivalente en milmetros
sabiendo que 25.5 mm = 1 pulgada.
4.2. Disear un algoritmo que lea el nombre y el apellido
de una persona en ese orden e imprima el apellido
seguido del nombre.
4.3. El costo de un automvil para el comprador es la
suma total del costo del vehculo, del porcentaje de
ganancia del vendedor (12%) y de los impuestos
estatales y locales aplicables (6%). Disear un
algoritmo que lea el costo del automvil e imprima
el costo para el comprador.
4.4. La calificacin 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. Disear un algoritmo

13

que lea el nombre del estudiante, la nota de


laboratorio, la nota del examen parcial y la nota del
examen final e imprima el tanto por ciento
correspondiente a cada una de las notas as como la
calificacin final.
4.5. Realizar un algoritmo para calcular la longitud de
una circunferencia y el rea del crculo con un radio
ledo desde teclado. El algoritmo debe detectar
entradas no vlidas.
4.6. Leer dos nmeros y mostrar el producto de ellos.
4.7. Leer las longitudes de un rectngulo y calcular la
superficie y el permetro.
4.8. Convierta de dolres a euros.
4.9. Un negocio de deportes hace un 25 % de descuento
en pelotas de ftbol y de bisbol. 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 lneas separadas, el precio original y el
precio con descuento.
4.10. Efectuar un programa que lea los valores de 3
resistencias electrnicas (en Ohmios, W) conectadas
en paralelo y muestre en pantalla el valor global de
las 3. El valor global es calculado por la siguiente
ecuacin: 1 / (1/R1 + 1/R2 + 1/R3).
4.11. Dada la duracion en minutos de una llamada
calcular el costo,considerando?
-Hasta tres minutos el costo es 0.50
-Por encima de tres minutos es 0.50 ms
0.1*cada minuto adicional a los tres primeros
4.12. Realizar un algoritmo que permita ingresar una
frase y la descomponga esta en sus palabras
imprimindolas al revs. Ejem.
CIUDAD CHICLAYO
DADUIC OYALCIHC

4.3.ESTRUCTURA CONDICIONAL
La estructura condicional se utiliza para indicarle al
computador que debe evaluar una condicin y, a partir
del resultado, ejecutar el bloque de instrucciones
correspondiente. La forma ms comn est compuesta
por una proposicin que se evala y dos bloques de
instrucciones que se ejecutan, uno cuando la condicin
es verdadera (seleccin simple y doble) y otro cuando
sta es falsa (nicamente en la seleccin doble).
Por su parte, un bloque de instrucciones puede contener
una o varias instrucciones que se ejecutan una detrs de
otra. La estructura condicional tiene dos variantes:

Seleccin Mltiple.

Las estructuras condicionales simple y mltiple evalan


una proposicin (condicin) que devuelve como
resultado nicamente dos valores posibles y excluyentes:
verdadero o falso.
Seleccin simple
La estructura condicional de seleccin simple ejecuta un
bloque de instrucciones cuando la proposicin
(condicin) es verdadera; si esta es falsa, no hace nada.

El formato de la estructura de seleccin es:


si <condicin> entonces
instruccin 1
instruccin 2
...................
instruccin n
si-no
instruccin a
instruccin b
...................
instruccin z
fin-si
Por ejemplo, Cuando realizamos una llamada telefnica:
Si {seal de ocupado} entonces
Colgar el telfono
si - no
Iniciar la conversacin
fin si
En este caso, la condicin es {seal de ocupado}, que
puede ser verdadera o falsa. Si es verdadera, entonces
debemos colgar el telfono y si no, podemos realizar la
conversacin.

Seleccin simple.

14

Ejemplo:
Si a = 5 entonces
imprimir"A es 5"
si - no
imprimir "A no es igual a 5"
fin
-

si

Tambin puede obviarse el si - no cuando no nos


interesa ejecutar un bloque de instrucciones en caso de
que la condicin no se cumpla.
Si {condicin} entonces
instruccin 1
instruccin 2
.........
instruccin n
fin si
Por ejemplo:
Si {hoy es Mircoles} entonces
Comprar entradas para el cine
fin - si
Ejemplo:
Introducir un nmero por teclado y determinar si es
positivo o negativo.
Para saber si un nmero es positivo o negativo, debemos
saber si es menor o mayor a cero. Si es mayor, el
nmero es positivo y si es menor resulta negativo.
Utilizamos Si... para evaluar como es el nmero con
respecto a cero y mostramos los mensajes
correspondientes en cada caso. As:
inicio
leer numero
Si numero < 0 entonces
imprimir "El nmero es negativo"
si-no
imprimir "El nmero es positivo"
fin-si
fin

leer numeroA, numeroB


Si numeroA < numeroB entonces
imprimir "El mayor es:", numeroB
si-no
imprimir "El mayor es:", numeroA
fin-si
fin
En este ejemplo, qu pasara si los nmeros fueran
iguales? Hagamos la prueba.
Luego de leer los nmeros, por ejemplo: numeroA=100
y numeroB=100 se ejecutan las instrucciones:
Si numeroA < numeroB entonces
imprimir "El mayor es:", numeroB
El resultado de la condicin
Por lo tanto, al ser falsa la condicin, se ejecuta la
instruccin imprimir "El mayor es:", numeroA.
Por tanto, el algoritmo ofrecer una solucin incorrecta
cuando los nmeros son iguales. Para solucionar esto,
tenemos que prever el caso de que los nmeros sean
iguales, utilizando condiciones anidadas.
inicio
leer numeroA, numeroB
Si numeroA < numeroB entonces
imprimir "El mayor es:", numeroB
si-no
Si numeroA > numeroB entonces
imprimir "El mayor es:", numeroA
si-no
imprimir "Los nmeros son iguales"
fin-si
fin-si
fin
Esta solucin contiene dos estructuras de repeticin, una
dentro de la otra (anidada). En caso de ser necesario
podemos anidar tantas estructuras de seleccin como sea
necesario. El algoritmo averigua si A es menor a B, si no
lo es, tenemos otras dos posibilidades: que sea menor o
igual, esto es lo que determina la estructura anidada.

Ejemplo. Dados dos nmeros, establecer cul es mayor.


Comenzamos leyendo ambos nmeros, que en el
ejemplo se llamarn NumeroA y NumeroB. Luego
debemos comparar como es uno contra el otro (puede ser
NumeroA contra NumeroB o bien comparar NumeroB
contra NumeroA):
inicio

Otro ejemplo de estructuras de repeticin anidadas,


consiste en dado un nmero del 1 al 7, establecer al da
de la semana.
inicio
leer numero
Si numero=1 entonces
imprimir "Domingo"

15

si-no
Si numero=2 entonces
imprimir="Lunes"
si-no
Si numero=3
imprimir "Martes"
si-no
Si numero=4 entonces
imprimir "Miercoles"
si-no
Si Numero=5 entonces
imprimir "Jueves"
si-no
Si numero=6 entonces
imprimir "Viernes"
si-no
Si numero=7 entonces
imprimir "Sbado"
si-no
imprimir "El nmero
debe estar entre 1 y 7"
fin-si
fin-si
fin-si
fin-si
fin-si
fin-si
fin-si
fin
Notars que tenemos varios Si...entonces anidados, ya
que si el nmero ingreso no es 1, tenemos que preguntar
si es 2 3 4...etc. El ltimo Si...entonces es para
verificar que el nmero ingresado no es 1, 2, 3, 4, 5, 6
7; sino cualquier otro que no nos interesa.
Repasa los algoritmos anteriores.
Resulta bastante tedioso anidar un montn de Si ...
entonces, como en el ejemplo del da de la semana.
Cuando queramos o necesitemos hacer numerosas
comparaciones podemos usar otra estructura de
seleccin llamada Segn Sea. El formato de estructura
de seleccin Segn sea es:
Segn sea <variable>
Caso = <condicin>
Caso = <condicin>
instruccin o instrucciones
Otro caso
instruccin o instrucciones
fin-segn
As, utilizando esta estructura, el problema del da de la
semana ser as:

inicio
Leer numero
Segn sea numero
Caso = 1
imprimir "Domingo"
Caso = 2
imprimir="Lunes"
Caso = 3
imprimir="Martes"
Caso = 4
imprimir "Miercoles"
Caso = 5
imprimir "Jueves"
Caso = 6
imprimir "Viernes"
Caso = 7
imprimir "Sbado"
Otro Caso
imprimir "El nmero debe estar entre 1 y 7"
fin-segn
fin
Lo cual resulta menos engorroso que varios Si...
entonces anidados. Es posible anidar Si... entonces
dentro de estructuras Segn sea y viceversa.
Observa que la instruccin Otro Caso ejecuta una o
varias instrucciones cuando no se cumple ningn caso de
los contemplados ms arriba. Otro Caso debe estar
siempre al final (cuando sea necesario, si no o es se
puede omitir Otro Caso)
El uso de una u otra estructura depende de cada persona,
pero en general cuando las condiciones a evaluar son
muchas, se utiliza Segn Sea.
La estructura segn sea admite varias condiciones por
ejemplo:
Segn sea MES
caso= 1,3,5,7,8,10,12
TDias = 31
caso = 2,4,6,11
TDias =30
caso = 2
TDias=28
fin-segn
Este pequeo ejemplo establece el nmero de das de un
mes determinado almacenado en la variable MES (para
aos no bisiestos). En lugar de escribir varios Caso= 1,
Caso =2, etc, se puede especificar accin o acciones (en
este caso la asignacin de das a TDias) cuando la
variable tome uno de los valores separados por comas.

16

Es decir si TDias es 1 3 5 7 8 10 12; se


ejecuta TDias=31.
Ejercicios
4.13. Los n trabajadores de la empresa PagaPoco"
lograron obtener un aumento de sueldo en el ltimo
mes. Este aumento de sueldo se determin por
tramos, de acuerdo a la siguiente tabla:

Construya un algoritmo que reciba como entrada el


sueldo actual de cada uno de los trabajadores y calcule el
nuevo sueldo. Adems, el algoritmo debera indicar
cunto ms gasta la empresa por concepto de sueldos,
despus del aumento.
4.14. Escribir un algoritmo para calcular las
soluciones de una ecuacin cuadrtica de la forma

4.15.

Un sistema de ecuaciones lineales de la forma:

del tringulo. Tener en cuenta los casos no vlidos


(la base o la altura negativas).
4.20. Introducir un nmero por teclado y determinar si
es
positivo
o
negativo.Para saber si un nmero es positivo o negativo,
debemos saber si es menor o mayor a cero. Si es
mayor, el nmero es positivo y si es menor resulta
negativo.
4.21. Dado un nmero del 1 al 7, establecer al da de
la semana.
4.22. Leer un nmero y mostrar por la salida estndar
si dicho numero es o no es par.
4.23. Definir una funcin que dados tres nmeros X,
Y y Z, devuelva una lista con los nmeros ordenados
por orden creciente.
4.24. Disear una funcin para leer un ao y
determinar si es bisiesto. NOTA: un ao es bisiesto
si es mltiplo de 4. Los mltiplos de 100 no son
bisiestos, salvo si son tambin mltiplos de 400.

4.4.ESTRUCTURA ITERATIVA
(REPETICIN)
La estructura iterativa o de repeticin permite ejecutar
una o varias instrucciones, un nmero determinado de
veces o, indefinidamente, mientras se cumpla una
condicin. Esta estructura ayuda a simplificar los
algoritmos, ahorrando tiempo valioso a quien resuelve
problemas con ayuda del computador.

Puede resolverse utilizando las siguientes frmulas:

Disear 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. Disear 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
indicndolo. 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 nmeros y
determine cul de ellos es el mayor.
4.18. Escribir un algoritmo que lea tres nmeros y
determine cul de ellos es el mayor.
4.19. Dados por el teclado la base y altura de un
tringulo, hacer un algoritmo para calcular el rea

Figura 2.2: Modelo de estructura iterativa.


Historia Curiosa
Un da, en la India, un joven bracmn llamado Lahur
Sessa pidi una audiencia con el Rey para obsequiarle

17

el juego que haba inventado. La curiosidad del rey lo


llev a conceder la cita que peda el joven Sessa. El rey
qued maravillado y aprendi rpidamente las reglas de
aquel juego que consista de un tablero cuadrado
dividido en sesenta y cuatro cuadritos iguales (32
blancos y 32 negros); sobre este tablero se ubicaban dos
colecciones de piezas, que se distinguan unas de otras
por el color, blancas y negras, repitiendo
simtricamente los motivos y subordinadas a reglas que
permitan de varios modos su movimiento.
Algn tiempo despus, el rey mand llamar a su
presencia al joven bracmn y dirigindose a l le dijo:
- Quiero recompensarte, amigo mo, por este
maravilloso obsequio, que de tanto me sirvi para
aliviar viejas angustias. Pide, pues, lo que desees, para
que yo pueda demostrar, una vez ms, como soy de
agradecido con aquellos que son dignos de una
recompensa.
Ante tal ofrecimiento, el joven respondi:
- Voy, pues, a aceptar por el juego que invent, una
recompensa que corresponda a vuestra generosidad; no
deseo, sin embargo, ni oro, ni tierras, ni palacios. Deseo
mi recompensa en granos de trigo.
-Granos de trigo? Exclam el rey, sin ocultar la
sorpresa que le causara semejante propuesta-. Cmo
podr pagarte con tan insignificante moneda?
-Nada ms simple -aclar Sessa-. Dadme un grano de
trigo por la primera casilla del tablero, dos por la
segunda, cuatro por la tercera, ocho por la cuarta, y as
sucesivamente hasta la sexagsima cuarta y ltima
casilla del tablero.
No slo el rey, sino tambin los visires y venerables
bracmanes, se rieron estrepitosamente al or la extraa
solicitud del joven.
Insensato -exclam el rey-. Dnde aprendiste tan
grande indiferencia por la fortuna? La recompensa que
me pides es ridcula.
Mando llamar el rey a los algebristas ms hbiles de la
Corte y les orden calculasen la porcin de trigo que
Sessa pretenda.
Los sabios matemticos, al cabo de algunas horas de
realizar clculos dispendiosos, volvieron al saln para
hacer conocer al rey el resultado completo de sus
clculos.
Preguntndoles el rey, interrumpiendo el juego:
-Con cuantos granos de trigo podr cumplir,
finalmente, con la promesa hecha al joven Sessa?
-Rey magnnimo -declar el ms sabio de los
gemetras-: calculamos el nmero de granos de trigo
que constituir la recompensa elegida por Sessa,
y obtuvimos un nmero cuya magnitud es inconcebible
para la imaginacin humana (el nmero en cuestin
contiene 20 guarismos y es el siguiente:

18.446.744.073.709. 551. 615. Se obtiene restando 1 a


la potencia 64 de 2).
-La cantidad de trigo que debe entregarse a Lahur Sessa
-contino el gemetra- equivale a una montaa que
teniendo por base la ciudad de Taligana, fuese 100
veces ms alta que el Himalaya. La India entera,
sembrados todos sus campos, y destruidas todas sus
ciudades, no producira en un siglo la cantidad de trigo
que, por vuestra promesa, debe entregarse al joven
Sessa.
Cmo describir aqu la sorpresa y el asombro que esas
palabras causaron al Rey Ladava y a sus dignos visires?
El soberano hind se vea, por primera vez, en la
imposibilidad de cumplir una promesa.
Lahur Sessa -refiere la leyenda de la poca-, como buen
sbdito, no quiso dejar afligido a su soberano. Despus
de declarar pblicamente que se desdeca del pedido
que formulara, se dirigi respetuosamente al monarca y
le dijo: los hombres ms precavidos, eluden no slo la
apariencia engaosa de los nmeros, sino tambin la
falsa modestia de los ambiciosos.
El rey, olvidando la montaa de trigo que prometiera al
joven bracmn, lo nombr su primer ministro.
(Tomado del libro El hombre que calculaba escrito
por Malba Tahan)
Ejemplo
Elabora un algoritmo para ayudar a los hbiles
algebristas de la corte del Rey Ladava con el clculo del
nmero de granos de trigo que deben entregar a Lahur
Sessa como pago por haber inventado el juego de
ajedrez.

18

ejecutadas de forma repetitiva mediante la ocurrencia o


no de una condicin.

Estructura Para (Desde - Hasta)


Cuando conocemos de antemano el nmero de veces en
que se desea ejecutar una accin o grupo de acciones, se
utiliza la estructura repetitiva Desde o Para.
Esta estructura ejecuta las acciones del cuerpo del bucle
un nmero especificado de veces, y de modo automtico
controla el nmero de iteraciones o pasos.
La sintaxis es:
desde variable= vi hasta vf [incremento]
accin o acciones
fin-desde
Donde:
variable: variable ndice
vi: valor inicial de la variable ndice
vf: valor final de la variable ndice
[incremento]: el nmero que se incrementa (o
decrementa) a la variable ndice en cada iteracin del
bucle.
Ejemplo:
Imprimir todos los nmeros del 1 al 100.

La estructura repetitiva se utiliza cuando se quiere que


un conjunto de instrucciones se ejecuten un cierto
nmero finito de veces. Llamamos bucle o ciclo a todo
proceso que se repite un cierto nmero de veces dentro
de un algoritmo o un programa.
Existen dos tipos de estructuras repetitivas; la primera es
aquella en donde se tiene perfectamente establecido el
nmero de veces que un grupo de acciones se van a
ejecutar (20, 5, 2 veces), y la segunda en la que el
nmero de repeticiones es desconocido y se har hasta
que se cumpla o no cierta condicin.
Un ejemplo de la primera sera imprimir los datos de los
alumnos de una clase (se conoce cuantos alumnos hay) y
un ejemplo de la segunda puede ser el mostrar un
mensaje de error cada vez que el usuario pulse una
determinada tecla (no sabemos cuantas veces pulsar esa
tecla).
Las acciones que forman parte del cuerpo del bucle son

Inicio
desde i = 1 hasta 100
imprimir i
fin-desde
fin
I es la variable ndice con un valor inicial de 1, se
incrementa uno en cada paso hasta 100.
Podemos notar que la estructura desde comienza con un
valor inicial de la variable ndice y las acciones se
ejecutan hasta que el valor inicial sea MAYOR que el
que el Valor final.
La variable ndice se incremente en uno (en el ejemplo)
y si este nuevo valor del ndice no es mayor que el valor
final, se ejecuta de nuevo la accin imprimir.
En este caso se visualizar los nmeros 1, 2, 3, 4, 5, 6, 7,
8, 9, 10 ....97, 98, 99, 100.
Otro Ejemplo:
Imprimir todos los nmeros pares desde 2 hasta el 300

19

desde i= 2 hasta 300 incremento 2


imprimir i
fin-desde

Estas estructuras son bsicamente dos: Estructura


mientras....fin-mientras y la estructura repetir.... hasta.
Estas dos se diferencian en que la verificacin de la
condicin para repetir el ciclo se hace al inicio con
mientras y al final con repetir.

Donde:
La variable ndice comienza en 2, se imprime 2 y en el
siguiente paso se incrementa (suma) 2 a la variable
ndice que pasa a valer 4; se imprime el 4 y como 4 es
menor que 300 (valor final) , se pasa a una nueva
iteracin incrementando nuevamente en 2 el ndice, que
ahora vale 6; y as sucesivamente...
Aqu se visualizan: 2, 4, 6, 8, 10, 12, 14, 16, 18, ..... 296,
298, 300
Si deseamos mostrar los impares el algoritmo es el
siguiente:
desde i= 1 hasta 300 incremento 2
imprimir i
fin-desde
El ciclo termina mostrando 299 puesto que en el
siguiente paso, La variable i valdra 301 y es mayor al
lmite establecido de 300. i pasa a valer realmente 301
en el ltimo paso, solo que la instruccin de imprimir no
se ejecuta porque el lmite de 300 se supera.
Si diramos la instruccin de imprimir el valor de i,
inmediatamente despus del fin-desde, veamos 301.
Ejemplo 3: Imprimir los valores comprendidos entre el
460 y 500 en orden inverso.
Debemos mostrar: 500, 499, 498, 497,..... 462, 461, 460.
En este caso haremos un decremento a la variable ndice
(no un incremento como en los ejemplos anteriores).
Tenemos que comenzar nuestra variable ndice en 500 y
decrementar una unidad hasta alcanzar el 460, as:

Tambin existen estructuras repetitivas que son


combinaciones de estas dos que mencionamos, pero
no las estudiaremos.
Ejercicios
4.25. Construya un algoritmo que reciba como entrada
un cierto valor n, y genere como salida n veces la
palabra hola".
4.26. Construya un algoritmo que reciba como entrada
un cierto valor n y genere como salida el valor de la
serie: 1 + 2 + 3 + 4 + : : : + n.
4.27. Escribir un algoritmo que calcule la desviacin
estndar de cinco nmeros.

4.28. Realizar un algoritmo para calcular los valores


que toma la siguiente funcin

4.29. Imprimir todos los nmeros del 1 al 100.


4.30. Imprimir los valores comprendidos entre el 460
y 500 en orden inverso.
4.31. Imprimir todos los nmeros pares desde 2 hasta
el 300
4.32. Dada una secuencia de n nmeros mostrar su
producto por pantalla.
4.33. Tabla de multiplicar del 5.
4.34. Modificar el programa anterior para aplicar la
frmula a cualquier cantidad de resistencias.
Primeramente, el programa pedir el nmero de
resistencias a conectar en paralelo. Despus pedir
uno a uno los valores de todas las resistencias. Por
ltimo, escribir el resultado global.

Estructura Mientras
desde i= 500 hasta 460 incremento -1
imprimir i
fin-desde

Como su nombre lo indica, esta estructura repite el


cuerpo del bucle mientras se cumpla una determinada
condicin. Su sintaxis es:

Como salida tenemos, entonces: 500, 499, 498, 497,


496, 495, 494,.... 464, 463, 462, 461, 460.

mientras {condicin}
accin 1
accin 2
accin 3
.....
accin n
fin mientras
instruccin X

El segundo tipo de estructura repetitiva se diferencia de


la primera en que no se conoce el nmero de
repeticiones o iteraciones en que se va a ejecutar una
instruccin o un bloque de instrucciones.

20

Lo primero que el computador hace es examinar la


condicin, lo que puede dar como resultado dos
posibilidades:
- La condicin se cumple: Se ejecutan accin 1, accin
2, accin 3, ..., accin n.
Las estar repitiendo hasta que la condicin no se
cumpla, entonces se sale del ciclo y se siguen ejecutando
la o las instrucciones que vienen a continuacin y estn
fuera del bucle; instruccin X.
- La condicin no se cumple: No entrar en el ciclo. Se
ejecutan las instrucciones que vienen despus del bucle,
instruccin X, por ejemplo.

por lo menos una vez. Con la estructura mientras el


bucle puede ejecutarse 0 o ms veces.
Lo que la computadora hace al ejecutar la estructura
repetir es:
- Se ejecutan: instruccin 1, instruccin 2, instruccin 3,
......
- Se evala la condicin. Si esta es FALSA se vuelve a
repetir el ciclo y se ejecutan instruccin 1, instruccin 2,
instruccin 3, ......
Si la condicin es VERDADERA se sale del ciclo y se
ejecuta instruccin X.
Ejemplo

De esto se deduce que el cuerpo del bucle de una


estructura mientras puede repetirse cero o ms veces,
veces que son determinadas por el cumplimiento o no de
la condicin.
Ejemplo

repetir

mientras contrasea < > "josua"


imprimir "La contrasea es incorrecta !"
fin-mientras
imprimir "Ha ingresado la contrasea correcta"

En resumen, hemos visto dos tipos de estructuras


repetitivas, el primer tipo en la que conocemos el
nmero de veces que se repetir el bucle o ciclo (Desde
....fin-desde; y el segundo tipo en el cual no conocemos
el numero de veces en se repite el ciclo ya que est
determinado por el cumplimiento o no de una condicin
(mientras ..... fin-mientras y repetir....hasta).

Veremos ms ejemplos de esta estructura en la seccin


ejercicios. Al analizarlos comprenderemos mejor como
funciona.

Estructura Repetir
La estructura repetir cumple la misma funcin que la
estructura mientras. La diferencia est en que la
estructura mientras comprueba la condicin al inicio y
repetir lo hace al final; por eso la estructura repetir se
ejecuta por lo menos una vez.
La sintaxis es:
repetir
intruccin 1
instruccin 2
instruccin 3
......
hasta {condicin}
instrucin X
Repetir es opuesta a la estructura mientras. Repetir se
ejecuta hasta que se cumpla una condicin que se
comprueba al final del bucle. Esto implica que las
instrucciones que forman el cuerpo del bucle se ejecutan

imprimir "La contrasea es incorrecta !"


hasta contrasea = "josua"
Ms ejemplos en la seccin Ejercicios.

Toda estructura Desde....fin-desde tiene una estructura


mientras....fin-mientras o repetir.....hasta equivalente.
Pero las estructuras mientras... o hacer ... no tienen
NINGN desde.....fin-desde equivalente.
Ejercicios
4.35. Construya un algoritmo que reciba como entrada
varios montos de depsito y despliegue la suma de
ellos. Considere que un valor negativo significa que
no hay ms datos y no debe ser considerado como
dato vlido.
4.36. Construya un algoritmo que reciba como entrada
una secuencia de valores numricos y genere como
salida la suma de los valores pares y la
multiplicacin de los impares. Considere que un
valor negativo significa que no hay ms datos y no
debe ser considerado como dato vlido.
4.37. Construya un algoritmo que reciba como entrada
una secuencia de valores de temperaturas y genere
como salida el total de veces que la temperatura fue
0. Considere que un valor de temperatura negativo
significa que no hay ms datos y no debe ser
considerado como vlido.

21

4.38. Construya un algoritmo que reciba como entrada


una secuencia de valores de temperaturas y genere
como salida el total de veces que se registro una
temperatura menor que 0, el total de veces que fue 0
y el total de veces que fue mayor que 0. Considere
que una temperatura con valor 99 es una temperatura
no vlida e indica el trmino de los datos.
4.39. Construya un algoritmo que genere como salida
los trminos de la siguiente serie: 2; 5; 7; 10; 12; 15;
17; : : : ; 1800. Hasta un valor dado por el usuario.
4.40. Escribir un diagrama de flujo para un algoritmo
que calcule la media de varios nmeros, los que
introduzca el usuario por teclado, y saque el
resultado por pantalla. Nota: el primer carcter no
numrico que introduzca el usuario indicar que no
va a introducir ms nmeros.
4.41. Leer secuencia de nmeros y mostrar la suma de
dichos nmeros hasta que se introduce un nmero
negativo.
4.42. Pedir al usuario una contrasea hasta que este de
la correcta o decida salir.
4.43. El nmero mgico.

UNIDAD 5:

n-simo puede ser identificado y homogneo porque sus


elementos son todos del mismo tipo (numricos o
alfanumricos, pero no una combinacin de ambos).
Grficamente, un arreglo se representa como una tabla:

De igual forma que cualquier variable, un arreglo debe


tener un nombre.

Aqu hemos llamado A a nuestro arreglo ejemplo.


Los elementos que estn en el arreglo A ocupan todos
una determinada posicin dentro de l:

As, el nmero -5 se encuentra en la posicin 3; el 99 en


la posicin 10 y el 12 en la posicin 1.

5.1. ARREGLOS.

A(3) =
A(10) =
A(1) =

Hasta ahora hemos trabajado con datos simples que


representaban un nmero, un carcter o una cadena. Sin
embargo, en ocasiones se necesita procesar una
coleccin de valores que estn relacionados entre s por
algn mtodo, por ejemplo, una lista de calificaciones,
de los meses del ao, temperaturas a lo largo de una
semana, etc.

Vemos, entonces que un elemento se referencia por el


nombre del arreglo y la posicin que ocupa dentro de l.
El nmero que se coloca entre parntesis se llama ndice
y designa la posicin del elemento en el arreglo.

El procesamiento de estos datos utilizando datos simples


es muy difcil. Por eso, se han definido en la
programacin varias estructuras de datos, que son una
coleccin caracterizada por alguna organizacin y por
las operaciones que se definen en ella.

La dimensin de un arreglo est dada por la cantidad de


elementos que contiene y debe ser definida al comenzar
el programa.

Una de estas estructuras son los arreglos.

A los arreglos unidimensionales se les suele conocer


como vectores.

Un arreglo es un conjunto de elementos del mismo tipo


que comparten un nombre comn; algo as como una
variable que puede almacenar al mismo tiempo ms de
un valor.
Los arreglos reciben tambin el nombre de tablas, listas
o arrays.
Un arreglo es un conjunto ordenado y homogneo.
Ordenado porque el primer elemento, segundo, tercero...

-5
99
12

Cada elemento del arreglo se puede procesar como si


fuera una variable simple.

5.2. CARGAR UN ARREGLO


La asignacin de valores a los elementos de un vector se
realiza de esta forma:
A(4)  0
A(7)  4
Por supuesto que no vamos a cargar un vector de 100
elementos, escribiendo 100 asignaciones.

22

La carga de un vector se hace por medio del ciclo


desde....fin desde . Nuestro bucle va a comenzar en 1
hasta un nmero N que es la longitud del vector.
Pero antes, no demos olvidar que el vector debe ser
dimensionado. Al dimensionar un vector le decimos a la
mquina que reserve los espacios de memoria necesarios
para los elementos del vector.

inicio
Leer n
dimensionar v(n)
desde i = 1 hasta n
Leer v(i)
fin desde
fin
As vamos a cargar un arreglo SIEMPRE

Los problemas relacionados con vectores tendrn casi


siempre esta forma
inicio
Leer dimensin del vector
Dimensionar Vector
Cargar Vector
Procesamiento de los elementos del vector (segn lo que
se pida)
Imprimir Vector
fin
Por lo tanto, vamos a tener tres desde...fin desde bien
diferenciados:
Un bucle para la carga
Un bucle para el proceso
Un bucle para la impresin
Aunque la carga y el proceso pueden hacerse dentro de
un solo bucle, particularmente no recomiendo esta
prctica, ya que casi siempre crea dificultades
innecesarias.
Ejercicio: Cargar un vector de 30 componentes.
No olvidemos que antes de cargar un vector debemos
dimensionarlo. En este caso la dimensin del vector es
30.
Luego habilitaremos un bucle desde....fin desde
comenzando en 1 hasta 30. Llamaremos V a nuestro
vector.
inicio
dimensionar v(30)
desde i= 1 hasta 30
leer v(i)
fin desde
fin
De esta forma hemos cargado un arreglo v con
componentes. Ahora bien, el usuario deber siempre
poder determinar la dimensin del arreglo sobre el que
quiera trabajar. Por eso, vamos a leer la dimensin del
vector en una variable:

5.3. IMPRIMIR UN ARREGLO


El procedimiento para imprimir un arreglo es casi
exactamente igual al proceso de carga, con la diferencia
que en lugar de leer, vamos a imprimir. Para el caso de
nuestro arreglo v de n componentes:
desde i= 1 hasta n
imprimir v(i)
fin desde
Es bueno volver a sealar que los elementos de un
arreglo son todos del mismo tipo (todos numricos o
todos alfanumricos).

5.4. PROCESANDO UN ARREGLO


Ejercicio: Leer un vector de N componentes. Hallar la
suma y el promedio de los elementos del vector.
Se pide la suma y el promedio de los elementos.
Sabemos que el promedio lo hallaremos dividiendo la
suma todos los elementos, sobre la cantidad.
Nuestro arreglo (al que llamaremos h) va a tener una
dimensin d, que ser determinada por el usuario.
Siguiendo el esquema que habamos visto, vamos a tener
primeramente un bucle para la carga del arreglo, otro
para el proceso y otro para imprimir el arreglo.
inicio
suma  0
leer d
dimensionar h (d)
desde i = 1 hasta h
leer h (i)
fin desde
desde i = 1 hasta d
suma suma + h(i)
fin desde
promedio suma/d
imprimir h (i)
fin

23

desde
impimir ""La suma de los elementos del vector es:",
suma
imprimir "El promedio es:", promedio
fin

5.5. ARREGLOS BIDIMENSIONALES


Matrices

La matriz MAT est definida con 5 filas y 6 columnas.


La notacin para el dimensionamiento de una matriz es
NOMBRE (cantidad de filas, cantidad de columnas);
luego: MAT(5, 6)
Una vez que la matriz contenga datos (veremos ms
adelante como cargar una matriz) para referirnos a un
elemento debemos conocer en que fila y que columna
reside ese elemento, por ejemplo:

Un arreglo bidimensional o matriz es un conjunto de


datos homogneos (todos del mismo tipo), cada uno de
los cuales debe referenciarse por dos ndices. Los ndices
determinan la posicin 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 tambin. La instruccin para dimensionar un
matriz es:
En este ejemplo tenemos una matriz de dimensin M *
N, en donde M es el nmero de columnas y N el nmero
de filas. Aqu M=5 y N=6.

dimensionar M(5,6)

El nmero total de elementos de la matriz ser entonces


5*6 = 30.

La carga de datos se realiza de la misma forma que un


vector, por medio de un bucle desde....fin desde; solo
que en este caso, vamos a necesitar 2 bucles; uno que
recorra las filas y otro las columnas:

De la misma forma que los vectores, una matriz debe


tener un nombre. Llamaremos MAT a nuestra matriz
ejemplo y determinaremos la posicin de algunos de sus
elementos. MAT ser de tipo alfanumrico.

desde fila = 1 hasta 5


desde columna = 1 hasta 6
leer MAT(fila, columna)
fin-desde
fin-desde
En este ejemplo, la variable fila comienza en el valor 1,
luego se da inicio al bucle columna que desde 1 hasta 6.
El bucle de las columnas debe terminar todo su recorrido
para que pueda comenzar el siguiente valor de fila.
El recorrido de una matriz se hace, por tanto de esta
manera:

24

a los ejemplos anteriores. Utilicemos un ejemplo que


calcula el promedio de los elementos de una matriz.

Una matriz tambin puede recorrerse por columnas. Al


programar, no siempre podremos predefinir el tamao de
un matriz, por eso, solicitaremos al usuario que ingrese
la cantidad de filas y columnas con las que desea
dimensionar una matriz:
inicio
leer cantfila, cantcolumna
dimesionar MAT(cantfila, cantcolumna)
desde fila=1 hasta cantfila
desde columna=1 hasta cantcolumna
leer MAT(fila,columna)
fin-desde
fin-desde
fin

inicio
leer cantfila, cantcolumna
dimensionar M (cantfila, cantcolumna)
desde I = 1 hasta cantfila
desde J=1 hasta cantcolumna
leer M(I, J)
fin-desde
fin-desde
desde I=1 hasta cantfila
desde J=1 hasta cantcolumna
suma  suma + M(I, J)
fin-desde
fin-desde
promedio f suma / (cantfila * cantcolumna)
desde I = 1 hasta cantfila
desde J=1 hasta cantcolumna
imprimir M(I, J)
fin-desde
fin-desde
fin
Una matriz que tiene la misma cantidad de filas y de
columnas
se
llama
matriz
cuadrada.

Este algoritmo solicita las dimensiones de la matriz, la


dimensiona y luego procede a cargarla.

1 2 3 4 5

Una matriz se imprime utilizando tambin dos ndices:

inicio
leer cantfila, cantcolumna
dimesionar MAT(cantfila, cantcolumna)
----- se dimensiona
desde fila=1 hasta cantfila
desde columna=1 hasta cantcolumna
leer MAT(fila,columna)
------- lectura
fin-desde
fin-desde
desde fila=1 hasta cantfila
desde columna=1 hasta cantcolumna
imprimir MAT(fila,columna)
----- impresin
fin-desde
fin-desde
fin

2
4

5
Esta es una matriz cuadrada de orden 5.
Las matrices cuadradas tienen ciertas caractersticas; por
ejemplo, los elementos en donde el nmero de filas es
igual al nmero de columnas se llama diagonal principal
(sealados en amarillo): Los elementos de la diagonal
principal tienen, entonces, la propiedad de que fila =
columna

---

Procesando una matriz.


Proceso de una matriz se realiza tambin forma anloga

La diagonal principal define as dos reas bien notorias,


una que est por encima y otra por debajo. La regin
determinada por los elementos situados sobre la diagonal

25

principal se llama matriz triangular superior que tiene la


propiedad de que fila < columna.

7 8 9 10 11 12
0

La matriz triangular inferior es la zona situada debajo de


la diagonal principal, cuyos ndices cumplen con la
propiedad: fila > columna.

- -3 21 22
1 2

33 3 0 5 12 4
Escalar: 5
Resultado de multiplicar la matriz A por el escalar
(numero) 5
Matriz D
5

10 15 20 15 30

35 40 45 50 55 60
0
Elementos de la Matriz Elementos de la Matriz
triangular superior
triangular inferior
Operaciones con Matrices
1- Suma de matrices: Si A y B son dos matrices de igual
dimensin (MxN), entonces la suma de Ay B existe y es
igual a una matriz C tambin de dimensin MxN en
donde cada C (i, j) = A (i, j) + B (i, j):
Matriz A
10 8 3 0

-5

- 105 110
10 15

165 15 0 25 60 20
3- Traspuesta de una matriz: Si A es una matriz de orden
MxN, la traspuesta de A, denotada como A, es otra
matriz de orden NxM donde cada B (i, j) = A (j,i). Una
matriz es simtrica si A = A:
Matriz A:
0

7 -3 33 45

9 10
11
Traspuesta de A, A:

9 15 71 29
Matriz B

10

11

1 6 9 69
14 22 56 7
3 5 80 1
A y B son de igual dimensin, por lo tanto existe una
matriz C que es la suma de A y B
11 14 13 69
21 19 89 52
12 20 151 30
2- Producto Escalar por una matriz: Si A es una matriz
de orden (dimensin) MxN y K es un escalar, el
producto de K*A es igual a otra matriz D tambin de
orden MxN en donde casa D (i, j) = K * A (i ,j):
Matriz A:

Ejercicios
5.1. Se tiene una tabla con los datos de matricula, peso,
estatura y sexo de los alumnos de una Universidad.
Construya un algoritmo que reciba los datos de la tabla
antes mencionada, calcule y genere como salida el
promedio de los pesos y de las estaturas. Su algoritmo
debe entregar estos valores considerando todos los
individuos y tambin diferenciando por sexo. Considere
fin de datos la matrcula en cero (0).
5.2. Se dispone de una tabla con las temperaturas
registradas a medio da durante el ao 2007. Se
desea determinar cul fue la mxima, cual fue la
mnima y cuantas veces se repiti cada una de estas
durante el ao 2007. Adems se desea saber el
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 nmeros y almacenar en un


vector el factorial de cada nmero de la lista.
5.5. Leer un vector de N componentes. Hallar la suma y
el promedio de los elementos del vector
5.6. Leer y almacenar en una matriz de m x n una
secuencia de nmeros.
5.7. Dadas 2 matrices a y b obtener la suma.
5.8. Dada una matriz determinar la posicin ( i , j ) del
mayor nmero y del menor.
5.9. Leer una secuencia de n nmeros almacenarlos en
un vector A (1 .. n) y mostrar la suma de los
elementos pares y el mayor de los impares.
5.10. Dada una matriz de m x n (1..4)(1..5) realizar el
proceso de ordenar la misma.
5.11. Dada una matriz [1..n] [1..m] realizar proceso
de ordenar solo por filas.
5.12. Dado un vector de nmeros determinada
aquellos que sean primos.
5.13. Calcular el promedio de los elementos de una
matriz.
5.14. Suma de Matrices
5.15. Producto Escalar por una matriz
5.16. Traspuesta de una matriz.
5.17. Desarrolla un algoritmo que lea por el teclado
una secuencia de n enteros y visualice por pantalla
los que sean pares.
5.18. Disear un programa que cree una lista de
nmeros enteros. Cada nmero se debe situar en
orden creciente. El programa visualizar tambin el
contenido de la lista

UNIDAD 6:
FUNCIONES Y PROCEDIMIENTOS.
En general un problema complejo puede ser resuelto de
manera ms fcil y eficiente si se divide en problemas
ms pequeos y concentrndonos en cada etapa en la
solucin de ese "subproblema". Esto implica que el gran
problema original ser resuelto por medio de varios
mdulos, cada uno de los cuales se encarga de resolver
un subproblema determinado. Esos mdulos, se conocen
con el nombre de subalgoritmos. Un subalgoritmo no es
ms que un algoritmo que tiene la funcin de resolver un
subproblema.
Los subalgoritmos se escriben slo una vez, luego es
posible hacer referencia a ellos ("llamarlos") desde
diferentes puntos del algoritmo. La ventaja obvia es que
nos permite reutilizacin y evita la duplicacin de
cdigos.

Los subalgoritmos son independientes entre si, en el


sentido de que se puede escribir y verificar cada mdulo
en forma separada sin preocuparse por los dems
mdulos. Por ello, es menos complicado localizar un
error y tambin se puede modificar el cdigo sin tener
que tocar o rehacer varias partes del mismo.
Los subalgoritmos pueden ser dos tipos: Funciones y
Procedimientos (tambin llamadas subrutinas o
subprogramas).
Notemos que al utilizar procedimientos y funciones se
establece un lmite para el alcance de las variables, unas
tendrn efecto y valor slo en el subalgoritmo y otras en
el algoritmo principal, tambin es posible especificar
que una variable tenga efecto en el algoritmo principal y
todos los subalgoritmos. Este punto lo estudiaremos con
ms detalle en la seccin mbito de variables.
Los subalgoritmos pueden recibir valores del algoritmo
principal (parmetros), trabajar con ellos y devolver un
resultado al algoritmo principal: No existen limitaciones
en cuanto a las acciones que pueda ejecutar un
subalgoritmo. Un subprograma puede, a su vez, invocar
o llamar a otros o a sus propios subprogramas, inclusive
puede llamarse a s mismo (esto se conoce como
recursividad).

FUNCIONES
Desde el punto de vista matemtico, una funcin es una
expresin que toma uno o ms valores llamados
argumentos y produce un valor que se llama resultado.
Este resultado es adems, nico. Ejemplos de funciones
matemticas
son
los
logaritmos,
funciones
trigonomtricas (seno, coseno, etc).
El en ambiente de programacin y diseo de algoritmos,
las funciones tienen exactamente el mismo significado.
Es decir, se realizan ciertos clculos con una o ms
variables de entrada y se produce un nico resultado. En
programacin y diseo de algoritmos, este resultado
podr ser un valor numrico, alfanumrico o lgico. Es
decir, una funcin puede devolver un resultado que
puede ser una cadena, un nmero o un valor de tipo
lgico (verdadero o falso). Esto hace que en los
lenguajes de programacin, debamos especificar de qu
tipo es una funcin. Una funcin ser de tipo numrica
cuando devuelva un nmero y ser de tipo alfanumrica
o string cuando devuelva una cadena. En el caso de las
funciones de tipo numrico se tienen subdivisiones que
estn dadas por los tipos de datos soportados por el
lenguaje (integer o entero, simple o single, doble
precisin o double, real, etc). O sea que cuando una
funcin numrica devuelva un valor numrico entero

27

(sin decimales) ser de tipo entera o integer. Si devuelve


un valor decimal ser doble o simple, dependiendo del
grado de exactitud que se desea; sin embargo como esto
es propio de lenguajes de programacin no se tendr en
cuenta en este tutorial (las funciones sern numricas
cuando devuelvan un dato numrico y de tipo string
cuando devuelvan una cadena, sin necesidad de
especificar esto previamente en el algoritmo). Puedes
consultar al profesor de la materia que te proporcione
ms detalles sobre los tipos de datos y su aplicacin en
las funciones.
Tomemos como ejemplo al funcin matemtica sen(x).
En este caso la funcin se llama sen (seno) y el
argumento o valor que se pasa a la funcin para que lo
procese es x. As sen(90)=1. Este valor es adems nico
(por eso se llama funcin), es decir no existe ningn otro
nmero que la funcin pueda procesar y devolver 1 ms
que 90.
Cuando utilicemos esta funcin en un algoritmo y
necesitemos el valor del sen(90), debemos asignarlo a
una variable, as:
valor  sen(90)
En este caso, la variable valor ser = 1, por la tanto
nuestra funcin es numrica.
La llamada a una funcin ser siempre:
variable  funcion (parmetros)
Ejemplos: La llamada a una funcin MES que devuelva
el nombre del mes, pasndole el valor numrico
correspondiente ser:
nombre_mes
devolvera "Febrero")

 MES(2)

(esto

La funcin es de tipo string porque devuelve una cadena


como resultado en la variable nombre_mes.
Ya sabemos como llamar a una funcin, ahora veremos
como se escribe la funcin.
Como las funciones y procedimientos no se escriben en
el algoritmo principal (en programacin existen espacios
destinados a ellos) todas las funciones y procedimientos
que utilicen un algoritmo se podrn escribir antes o
despus del algoritmo principal.
Para efectos de este curso las funciones y
procedimientos se escribirn siempre al final del
algoritmo principal.

Una funcin se identifica mediante su nombre. De la


misma manera que cuando escribimos un algoritmo
comenzamos poniendo: inicio y al final fin, debemos
hacer lo mismo para una funcin. Esto nos dir donde
comienza y donde termina la funcin. La sintaxis es:
Funcin nombre_funcion (parmetros)
<instrucciones>
<instrucciones>
Fin funcin
Todas las funciones devuelven un slo valor. Siempre
debemos indicar a la funcin mediante una instruccin
que devuelva el valor al algoritmo principal (recordemos
que la funcin ser llamada desde un algoritmo). Esto se
debe hacer en el cuerpo de la funcin cuando tengamos
el resultado. As que, tomando como ejemplo la funcin
MES, veremos como se escribe el algoritmo principal,
como se llama a la funcin desde el algoritmo principal
y cmo se declara la funcin:
Algoritmo principal
Inicio
leer numero_mes
mientras numero_mes <=0 numero_mes >12
imprimir "Debe ingresar un nmero entre 1 y
12" > Validacin del nmero entre 1 y 12
leer numero_mes
fin mientras
nombre_mes
MES
(numero_mes)
> Llamada a la funcin
MES
imprimir "El mes correspondiente es: ", nombre_mes
fin
Funcin MES (valor)
Segn sea valor
caso=1
nombre="Enero"
caso=2
nombre= "Febrero"
caso=3
nombre = "Marzo"
caso =4
nombre = "Abril"
caso=5
nombre = "Mayo"
caso=6
nombre = "Junio"
caso=7
nombre ="Julio"
caso=8
nombre="Agosto"
caso=9

28

nombre="Setiembre"
caso= 10
nombre = "Octubre"
caso=11
nombre= "Noviembre"
caso= "12"
nombre="Diciembre"
fin caso
MES  nombre > Le decimos a la funcin que
devuelva el resultado al algoritmo principal
Fin funcin
Debes notar como pasan los valores desde el algoritmo
principal a la funcin. En este caso, cuando se llama a la
funcin:
nombre_mes MES (numero_mes)
El valor que se pasa a la misma est en la variable
numero_mes que toma un valor comprendido entre 1 y
12.
Cuando se llama a la funcin, este valor debe ser
recibido por la misma, en este caso en el cuerpo de la
funcin se coloca entre parntesis el nombre de la
variable que recibir el valor:
Funcin MES (valor)
Si se pasan varios valores, todos deben ser recibidos en
sus correspondientes variables.
La funcin toma el valor pasado desde el algoritmo y lo
guarda en la variable valor para procesarlo. Luego de
que obtiene un resultado, en este caso el valor de
nombre_mes, se le ordena a la funcin que devuelva ese
valor al algoritmo principal:
MES  nombre
Esto es siempre as: nombre_funcion resultado
Es en este punto donde se retorna a la lnea siguiente a la
que llam a la funcin en el algoritmo principal:
imprimir "El mes correspondiente es: ",
nombre_mes
Resumiendo. Una funcin devuelve un slo valor, para
que funcione la funcin debe recibir uno o varios valores
desde el algoritmo principal, realizar el proceso y
devolver el resultado. La funcin se escribe de igual
forma que cualquier algoritmo, la diferencia consiste en
que en lugar de inicio y fin, ponemos:

Funcin <nombre_funcin>
fin_funcin
La llamada a la funcin se hace con su nombre y el o los
valores que le pasamos.
Cuando necesitemos procesar uno o varios valores y
ofrecer UN resultado, utilizaremos funciones.
Ejemplos de Funciones
A continuacin, estudiaremos ejemplos de funciones. De
esta forma comprenderemos mejor el su funcionamiento.
Ejemplo1: Escribir una funcin que devuelva la raz
cuadrada de un nmero ingresado por teclado.
Aunque todos los lenguajes de programacin tiene
instrucciones para calcular una raz cuadrada, como aqu
no estamos escribiendo cdigo, encontraremos la raz
cuadrada de un nmero elevando a la potencia 1/2. En
general, la raz x de un nmero se obtiene elevando ese
nmero a la potencia 1/x.
Llamaremos RAIZCUA a la funcin que vamos a
escribir. La funcin RAIZCUA debe obtener un valor
que se pasa desde el algoritmo principal (el nmero del
cual queremos calcular la raz cuadrada), elevarlo a la
potencia 1/2 y luego devolver este valor al algoritmo
principal. Recordemos que no podemos permitir el
ingreso de nmeros negativos.
inicio
leer numero
mientras numero < = 0
imprimir "Ingrese un nmero positivo"
leer numero
fin-mientras
resultado RAIZCUA(numero)
imprimir "La raiz cuadrada es:", resultado
fin
Funcin RAIZCUA(valor)
raiz  valor ^ 1/2
RAIZCUA  raiz
fin-funcin
Este algoritmo comienza leyendo el nmero, verifica
que sea un nmero positivo con la estructura repetitiva
mientras y luego hace el llamado a la funcin RAIZCUA
pasndole la variable numero. El valor de esa funcin se
recibe en una variable resultado.
La funcin RAIZCUA recibe el numero que el programa
le pasa en la variable valor, luego eleva ese numero a la
potencia 1/2 y lo asigna a la variable raz.

29

Para que la funcin devuelva el resultado del proceso al


algoritmo principal, se asigna la variable raiz a la
funcin, as: RAIZCUA  raiz (esto ser as para todas
las funciones que escribamos).
Observa que existen variables tanto en el algoritmo
principal como en la funcin. Hablemos de ellas.

MBITO DE LAS VARIABLES


En programacin existen dos tipos de variables, las
llamadas locales y las variables globales.
Variables Locales: Son aquellas que se encuentran
dentro de un subprograma (procedimiento o funcin)
y es distinta de las variables que estn en el algoritmo
principal. El valor se confina al subprograma en el
que est declarada.
Variables Globales: Son las que se definen o estn
declaradas en el algoritmo principal y tiene efecto
tanto en el algoritmo principal como en cualquiera de
sus subprogramas.
Tomando como referencia la funcin RAIZCUA, las
variables globales son: numero y resultado. Y las
variables locales son: valor y raz.
valor y raiz slo existen en la funcin RAIZCUA, si en
el algoritmo principal tratamos de utilizar estas variables
o imprimirlas, no obtendremos nada, ya que para el
algoritmo estas variables son locales y desde su punto de
vista NO EXISTEN.
numero y resultado son variables globales, es decir que
estn disponibles en el algoritmo principal y tambin en
la funcin RAIZCUA.
Una variable local (de un subprograma) no tiene ningn
significado en el algoritmo principal y otros
subprogramas. Si un subprograma asigna un valor a una
de sus variables locales, este valor no es accesible a
otros subprogramas, es decir, no pueden utilizar este
valor. Las variables globales tienen la ventaja de
compartir informacin de diferentes subprogramas.
En resumen: las variables locales son las que se definen
en subprogramas y solo tienen valor dentro de l. Las
variables locales son las definidas en el algoritmo
principal y tienen valor y se pueden utilizar en cualquier
parte de algoritmo o en cualquier subprograma.
Ejemplo 2: Disear una funcin que calcule la media de
tres nmeros.
inicio

leer numero1, numero2, numero3


prom
PROMEDIO(numero1,
numero3)
imprimir "El promedio es:", prom
fin

numero2,

Funcin PROMEDIO(valor1, valor2,valor3)


promedio  (valor1 + valor2 + valor3) / 3
PROMEDIO  promedio
fin-funcin

PROCEDIMIENTOS
Hemos visto que las funciones se utilizan para devolver
como resultado un valor Sin embargo, en ocasiones
necesitaremos devolver ms de un resultado o tambin
ejecutar las mismas lneas de cdigo varias veces en un
algoritmo (como por ejemplo una ordenacin, etc.) En
estas situaciones la funcin no es apropiada y se
utilizarn los procedimientos (tambin llamados
subrutinas).
Un procedimiento es un conjunto de sentencias o
instrucciones que realizan una determinada tarea y que
pueden ser ejecutados desde ms de un punto del
programa principal. Un procedimiento tiene una
llamada, cuando el procedimiento se ejecuta totalmente,
vuelve al punto desde donde fue llamado y se ejecuta la
siguiente instruccin.
El procedimiento se escribe como cualquier otro
algoritmo, solo existen diferencias en la parte inicial y
final. Para nombrar los procedimientos se deben seguir
las mismas reglas que para las variables. Notemos que el
objetivo de los procedimientos es ayudar en la
modularidad del programa y evitar la repeticin de
instrucciones ya que estas se pueden escribir en un
procedimiento y en lugar de repetirlas, llamar al
procedimiento cuantas veces sea necesario.
Desde el programa principal es posible pasar valores
(numricos, alfanumricos o combinacin de ambos) al
procedimiento. Este utilizar esos valores para realizar
un determinado proceso. Los valores que se pasan a un
procedimiento (en forma de variables) se llaman
parmetros (de igual forma que en las funciones).
Declaracin de un procedimiento
La sintaxis para la declaracin de un procedimiento es la
siguiente:
Procedimiento Nombre_procedimiento (parmetros)
<......acciones...>
<......acciones...>

30

Fin Procedimiento
La llamada a un procedimiento se hace simplemente por
su nombre:
Nombre_procedimiento(parmetros)
Tambin es posible que no se pase ningn parmetro al
procedimiento, en cuyo caso la llamada se hace as:
Nombre_procedimiento()
Cuando no se pasan parmetros se puede obviar los
parntesis.
Nombre_procedimiento
Podemos utilizar procedimientos, por ejemplo para
dibujar recuadros en la pantalla, mostrar mensajes de
error, realizar procesos en los que se debe devolver ms
de un resultado, colocar en un procedimiento las lneas
de cdigo que se repiten varias veces en un algoritmo.
Cuando necesitemos devolver ms de un valor en un
procedimiento, las variables que se devolvern los
resultados deben figurar en la lista de parmetros.
Ejemplo 1: Procedimiento para calcular el cociente y
resto de la divisin entre dos nmeros
inicio
leer numeroA, numeroB
DIVISION (numeroA, numeroB, P, Q)
imprimir P, Q
fin

Procedimiento DIVISION (dividendo, divisor, cociente,


resto)
cociente  dividendo / divisor
resto dividendo - cociente * resto
fin-procedimiento
En este ejemplo, se pasan los nmeros el dividendo y
divisor (numeroA y numeroB respectivamente) y
tambin en los parmetros de llamada al procedimiento
deben figurar las variables en las que se devolvern los
resultados de cociente y resto (P y Q respectivamente)
por eso la llamada es:
DIVISION (numeroA, numeroB, P, Q)
El procedimiento recibe los valores numeroA en
dividendo, numeroB en divisor y se colocan las variables
en las que se pasarn al programa principal el cociente y

resto. P recibir el valor de cociente y Q recibir el valor


del resto.
Es decir, que cuando necesitemos devolver ms de un
valor, los parmetros del procedimiento deben ser los
valores que se pasan al procedimiento y luego las
variables en las que se recibirn los resultados.
El objetivo de esta seccin es ayudar a comprender
cmo funcionan las funciones y procedimiento. Puedes
pedir a tu profesor ms ejemplos de procedimientos y
funciones.
Ejercicios
6.1. Utilizar una declaracin de tipos para una matriz de
nmeros reales de tamao DIMDIM, donde DIM es
una constante, declarada como tal, de valor 10.
Escribir las siguientes funciones:
a) Funcin traspuestaM: Acepta una matriz como nico
argumento y devuelve su matriz traspuesta.
b) Funcin simetricaM: Acepta una matriz como nico
argumento y devuelve 1 si dicha matriz es simtrica y 0
si no lo es. Para averiguar si la matriz es o no simtrica
se debe usar la funcin traspuestaM del apartado
anterior.
c) Funcin sumaM: Acepta tres matrices devolviendo en
la tercera de ellas la suma de las dos primeras.
d) Funcin restaM: Acepta tres matrices devolviendo en
la tercera de ellas la resta de las dos primeras.
e) Funcin multiplicaM: Acepta tres matrices
devolviendo en la tercera de ellas la multiplicacin de
las dos primeras.
6.2. Definir una funcin que tenga por argumento una
lista y devuelva el tercer elemento de dicha lista.
6.3. Definir una funcin que tomando como argumentos
una lista y un elemento, devuelva T si el elemento
aparece ms de una vez en la lista.

Generales
1. Construya un algoritmo que reciba como entrada dos
valores: a y b, donde a < b. Este algoritmo debe
generar como salida los mltiplos de a que son
menores que b.
2. La serie de Fibonacci permite aproximar la forma en
que se reproducen los conejos. Se sabe que una pareja
de conejos puede tener dos cras al mes, y esto se da a
partir del tercer mes de nacidos, en el cual los conejos
alcanzan su edad madura. La forma en que aumenta la
poblacin de conejos mes a mes se puede ver en la
siguiente tabla, si consideramos que no se mueren
conejos y que inicialmente se cuenta con una pareja de
conejos recin nacida:

31

mes
1
2
3
4
5
6

parejas
conejos
1
1
2
3
5
8

de

digito impar, la multiplicacin es mayor que 9,


se debe restar 9 a la multiplicacin obtenida)
Sumar
los
dos
resultados
obtenidos
anteriormente.
Buscar la decena igual o superior y restar la
suma obtenida a esta decena.
Comprobar que el dgito de control que hemos
calculado y el ltimo dgito del de la cedula
coinciden, de lo contrario no es vlida.

Ej: 100336275-1
Construya un algoritmo que dado un valor n,
correspondiente a un mes cualquiera, determine la
cantidad de conejos en ese mes. Indicacin: observe que
en cada mes, la cantidad de conejos corresponde a la
suma de los conejos de los dos meses anteriores a ese
mes.
3. Construya un algoritmo que genere los trminos de la
siguiente serie, y adems calcule su valor para un n
dado.

4. El siguiente es un men de una hamburguesera.


Disear un algoritmo capaz de leer nmero de cada
alimento ordenado y calcular la cuenta total:
Hamburguesa 1.50
Con queso 1.75
Refresco 1.25
Patatas 1.00
Ensalada 2.00
5. Elabore, un algoritmo que permitan calcular el
mximo comn divisor de dos nmeros enteros
positivos.
6. La cedula en Ecuador, es uno de los documentos ms
importantes que tiene una persona. Por este motivo es
muy importante que todo sistema informtico que
maneje la misma sea capaz de reconocer si la cedula es
valida.

1 0 0 3 3 6 2 7 5 1
2
0
6
4
1 13
0
3
6
7
16
29

Suma

Decena igual o superior

30

Resta

7. Convertir un nmero decimal a binario.


Ej:
134 2
134 67 2
Resto
0
66 33 2
1
32 16 2
1
16 8
2
0
8
4
0
4
0

Nmero
Binario: 1

Resto

75
74
1

2
37
36
1

La cedula consta de 10 dgitos, el ltimo digito es un


digito de control.

2
18
18
0

2
9
8
1

2
4
4
0

Para reconocer si una cedula es verdadera se debe


seguir el siguiente procedimiento:

Comprobar que la cedula tiene 10 dgitos y que


estos sean numricos. De no ser as no es
correcta.
Sumar los dgitos de los lugares pares.
Multiplicar por dos los dgitos de los lugares
impares y sumarlos. (Si al multiplicar por dos un

Nmero
Binario: 1

2
2
2
0

2
1

2
2
2
0

2
1

8. Transformar un nmero decimal en letras.


Ej: 134
Ciento treinta y cuatro.

32

9. El codigo EAN (European Article Number) es un


sistema de cdigo de barras para asignar un nmero
nico a cada producto. Los cdigos ms comunes
tienen 8 o 13 dgitos, especialmente 13 (sistemas
conocidos como EAN8 y EAN13). En ellos van
codificados el pas de origen del producto, la empresa
y el propio producto. El ltimo de los dgitos es un
dgito de control para evitar errores de trascripcin.
El algoritmo para comprobar que un cdigo EAN8 o
EAN13 ha sido trascrito correctamente es
extremadamente sencillo.
Podemos describirlo algortmicamente de esta manera:

Comprobar que el cdigo tiene 8 o 13 dgitos.


De no ser as, no es correcto.
Sumar los dgitos de lugares pares por un lado y
los de los impares por otro, pero sin incluir el
ltimo dgito.
Si el cdigo es EAN13, multiplicar la suma de
los pares por 3.
Si el cdigo es EAN8, es la suma de los impares
la que se multiplica por 3.
Sumar el resultado de los pares y el de los
impares y hallar el resto de la divisin por 10.
Realizar la operacin 10 menos ese resto y ese
es el dgito de control.
Si como resultado sale 10, entenderemos que el
dgito de control es 0.
Comprobar que el dgito de control que hemos
calculado y el ltimo dgito del cdigo EAN
coinciden

10. Un palndromo es una palabra que si se lee de


izquierda a derecha suena igual que de derecha a
izquierda, por ejemplo, ANILINA, RASAR,
NADAN. El trmino palndromo es a las palabras lo
mismo que capica es a los nmeros. El ejercicio
consiste en comprobar si una cadena dada es un
palndromo.
11. Ordenar una lista de mayor a menor o viceversa,
segn desee el usuario.
12. Descomposicin en factores primos. Cualquier
nmero entero positivo se puede representar de
forma nica (salvo el orden) como el producto de
una serie de factores primos.
A esto se le llama el teorema fundamental de la
aritmtica. Este teorema tiene aplicaciones prcticas en
muchos campos.
Un algoritmo simple para obtener la factorizacin de un
nmero entero en sus factores primos es:

Se coge un nmero natural n, y se prueba a


dividirlo por los nmeros primos, empezando
por el 2, luego el 3, luego el 5... cuando el resto
de la divisin es 0, hemos obtenido un factor,
hacemos que n valga ahora el cociente, y
seguimos probando por el ltimo primo en el
que estbamos. As indefinidamente hasta que
n=1.

Por ejemplo, para factorizar el 350, hacemos n=350... y


empezamos a probar a dividir por los nmeros primos.
Probamos a dividir n por 2... 350/2=175, y resto 0...
perfecto, hemos encontrado un factor: el 2. Hacemos
n=175
Lo volvemos a intentar 175/2 = 87 y resto 1... oops... el
2 no vuelve a ser factor primo.
Pasamos a probar con el 3.
175/3=58 y resto 1... el 3 no es factor primo. Pasamos al
5.
175/5=35 y resto 0 ... el 5 es factor primo. Tomamos
nota (ya tenemos el 2 y el 5), y hacemos n=35
Volvemos a probar el 5... 35/5=7 y resto 0. Otra vez el 5
es factor primo (ya tenemos 2, 5 y 5). Hacemos n=7
Volvemos a probar el 5... 7/5=1 y resto 2. Ya no hay
ms cincos. Probamos con el 7.
7/7=1 y resto 0. El siete es factor primo (ya tenemos 2,
5, 5, y 7). Hacemos n=1... ya hemos terminado.
As pues, 350 se puede expresar como 350=2 x 5 x 5 x 7.
El procedimiento es sencillo... pero... Seremos capaces
de encontrar un buen algoritmo que dado un nmero
natural n nos devuelva sus factores primos?
13. Algoritmo de Euclides: MCD y MCM.
El mximo comn divisor de dos o ms nmeros es el
nmero, ms grande posible, que permite dividir a esos
nmeros.

Para calcularlo. De los nmeros que vayas a


sacar el mximo comn divisor, se ponen uno
debajo del otro, se sacan todos los divisores de
los dos nmeros y el mximo que se repita es el
mximo comn divisor (M.C.D.)
Ejemplo: Sacar el M.C.D. de 20 y 10:

33

1, 2, 4, 5, 10 y
20
10: 1, 2, 5 y 10

20:

Forma rpida de calcular el Mximo comn Divisor


(M.C.D.).
Ejemplo: Sacar el M. C. D. de 40 y 60:
1 Tienes que saber las reglas divisibilidad. Haces la
descomposicin de factores poniendo nmeros
primos. Por ejemplo para 40, en la tabla de abajo, se va
descomponiendo en 2, 2, 2 y 5.
40
20
10
5
1

2
2
2
5

60
30
15
5
1

2
2
3
5

2 De los resultados, se cogen los nmeros repetidos de


menor exponente y se multiplican y ese es el M.C.D.
M.C.D. 40 = 2x2x2x5
M.C.D. 60 = 2x2x3x5

MCD = 2x2x5= 20

Ejemplo: Averiguar el m.c.m. de Sacar el


M.C.D. de 20 y 10:
20: 20, 40, 60, 80...
10: 10, 20, 30...

Para comprobar un ISBN:


1. Si el ISBN lleva guiones en su interior,
eliminarlos.
2. Multiplicar cada dgito -excepto el ltimo, que
puede ser un dgito o una X- por la posicin que
ocupa e ir sumndolos (el 1er dgito por 1,
sumado al 2 dgito por 2, sumado al 3er dgito
por 3...)
3. Obtener el mdulo de la divisin del resultado
obtenido en el paso 2 entre 11. Dicho mdulo
debe coincidir con el ltimo dgito del ISBN. Si
el mdulo fuera 10, el ltimo dgito es una X.

Para comprobarlo, obtenemos


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>
---> Coincide con el ltimo dgito del ISBN
---> Correcto.
15. La congruencia de Zeller es un algoritmo que
permite obtener, a partir de una fecha, el da de la
semana que le corresponde.

20 es el mltiplo menor que es comn a ambos nmeros.


Ejemplo: Calcular el m. c. m. de 4, 5 y 6.
Se hace la descomposicin de factores. Lo hacemos de
la siguiente forma:
4=
5=
6= 2x3

El ISBN consta de una serie de dgitos decimales (de 0 a


9), de los cuales, el ltimo es un carcter de control, que
puede ser bien un dgito decimal (de 0 a 9) o la letra "X".
A veces el ISBN lleva guiones. No se deben tener en
cuenta para validarlo.

Ejemplo:
ISBN=8472102629

El mnimo comn mltiplo (m. c. m.) de dos o ms


nmeros es el menor mltiplo comn distinto de cero.

14. El ISBN (International Standard Book Numbers)


sirve para identificar libros y otras publicaciones a
nivel mundial. Si abres un libro cualquiera, vers
que en sus primeras pginas consta este ISBN.

2x2
5

Se toman los factores comunes y no comunes con el


mayor exponente y se multiplican: 2x2 x3 x5 = 60. El
mcm de 4,5 y 6 es 60.

Se atribuye su creacin a Julius Christian Johannes


Zeller, un sacerdote protestante alemn que vivi en el
siglo XIX.
Zeller observ que exista una dependencia entre las
fechas del calendario gregoriano y el da de la semana
que les corresponda. A raz de esa observacin, obtuvo
(se dice que por tanteo), esta frmula, en apariencia
mgica, que lleva su nombre.
La frmula en s es muy sencilla, y se basa en algunas
operaciones de aritmtica modular (el resto, tambin
llamado mdulo, de las divisiones)

34

Es necesario tener en cuenta que la frmula presentada a


continuacin es vlida slo para el calendario
gregoriano, promulgado por el papa Gregorio XIII en
1582, pero adoptado en distintas fechas en cada pas.
Para calcular la congruencia de zeller, se parte de una
fecha del calendario gregoriano, que consideraremos
como tres enteros: ao, mes (1=enero, 12=diciembre) y
da.
Primeramente, es necesario hacer algunos ajustes en el
mes y el ao. Si el mes es enero o febrero (1 o 2) se
considerarn como el mes 13 o 14 del ao anterior. A
partir de ah, basta con aplicar la frmula.
Pasos:
-Sean ao, mes, da tres enteros que representan a una
fecha del calendario gregoriano
-Si mes<=2
-mes=mes+12
-ao=ao-1
-si no
-mes=mes-2
-a=ao mod 100
-b=ao / 100 //divisin entera
-d=( 700 +
(mes*26-2)/10 +
dia +
a+
a / 4 + //divisin entera
b / 4 - //divisin entera
b*2
) mod 7
//d es un entero que representa al dia de la semana
//tal que domingo es 0, lunes es 1... sbado es 6

16. Escribir un algoritmo que lea diez nombres y los


ponga en orden alfabtico.
17. El problema de las Torres de Hanoi consiste en lo
siguiente: Hay tres postes; en uno se encuentra una
torre con n discos, todos de diferentes tamaos,
colocados del ms grande en la base, hasta el ms
pequeo 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 ms grande encima de otro menor.
18. Un laberinto se puede definir como un recinto
rectangular formado por casillas cada una de las
cuales puede estar libre o ocupada por un obstculo.
El permetro del laberinto est formado por
obstculos excepto una o ms salidas. Resolver el

laberinto es encontrar un camino que lleve desde un


punto inicial a una de las salidas, desplazndose
siempre en sentido horizontal o vertical y
exclusivamente por casillas libres. Elaborar un
algoritmo capaz de resolver un laberinto.
19. El problema de las ocho reinas consiste en encontrar
una disposicin de ocho reinas en un tablero de
ajedrez de tal manera que ninguna de ellas amenace
a ninguna otra (en el juego del ajedrez una reina
amenaza a cualquier pieza que le sea accesible
mediante un desplazamiento horizontal, vertical o
diagonal de cualquier nmero de casillas).
Desarrollar un programa que nos muestre en pantalla
la disposicin de las reinas. Tras resolver el
problema, intentar generalizarlo a los casos
siguientes:

Colocar N reinas sobre un tablero de N filas y N


columnas.
Encontrar no solo una solucin, sino todas las
soluciones
posibles,
mostrndolas
sucesivamente en pantalla.
Elaborar un programa que nos diga el nmero de
soluciones existentes para los tableros de
dimensiones desde 4 x 4 hasta 11 x 11.

20. Camino
Todos los das Jos parte de su casa (ubicada en un
cruce) hacia su trabajo (ubicado en un cruce tambin),
recorriendo calles que unen estos cruces. Aunque Jos
puede realizar este recorrido usando diferentes rutas, ha
notado que existen cruces a los cuales le es imposible
evitar.
Tarea
A Jos le inquieta saber todos los cruces que
necesariamente tiene que visitar, por eso usted debe
escribir un programa que le ayude a identificarlos.
Suponga el siguiente mapa de calles y cruces:

Es fcil identificar los cruces 5 y 9 como los nicos que


tienen que ser siempre visitados sin importar que ruta se
tome para ir del cruce 1 (casa) al 1000 (trabajo).
Entrada: CAMINO.ENT

35

En la primera lnea del archivo CAMINO.ENT, un


nmero (1 < n < 2.000) indicando el nmero de calles
existentes en el mapa. En las siguientes n lneas 2
nmeros (1 < x, y < 1000) indicando la existencia de
una calle entre los cruces x y y. Las calles son de doble
va, si se indica la calle x-y es posible recorrerla de x a
y de y a x. El cruce 1 siempre designar la ubicacin
de la casa y el 1000 el del trabajo. Se garantiza que al
menos habr un camino del cruce 1 al cruce 1000.

entendiendo por comentario todo aquel texto que


aparece entre parntesis.
As al ingresar el siguiente texto:
Juan (mi mejor amigo) regresa a la Argentina el da 20.
se debe reescribir:
Juan regresa a la Argentina el da 20.
Debe tenerse en cuenta que los comentarios pueden estar
"anidados", como por ejemplo en el siguiente texto:

Salida: CAMINO.SAL
Un archivo CAMINO.SAL conteniendo la lista de
cruces solicitados, uno por lnea. Los cruces 1 y 1000
(casa y trabajo respectivamente) no deben ser
considerados en esta lista.
Ejemplo
CAMINO.ENT
CAMINO.SAL
14

15

12
13
14
25
35
45
56
59
67
68

Carlos (el hermano de Juan (mi mejor amigo) que


regresa a la Argentina el da 20) ir a esperarlo al
aeropuerto.
En este caso, el programa debe producir la siguiente
"salida":
Carlos ir a esperarlo al aeropuerto.
22. Una palabra es anagrama de otra cuando se obtiene
una de la otra por permutacin de sus letras. Por
ejemplo:
pote es anagrama de tope
saco es anagrama de cosa y de ocas
porta es anagrama de topar, de tropa y de parto
Escribir un programa que: dado un diccionario
castellano pueda determinar los conjuntos de anagramas.
Por ejemplo:
Si en el diccionario slo tuvisemos las palabras:
cava
empresa
pote
torta
tope
trota
vaca
los conjuntos de anagramas seran:
cava - vaca
empresa
pote - tope
torta trota

79
89

23. Pesca

9 1000

Historia
Limo se ha ido de pesca y ha observado que los peces se
encuentran distribuidos a los largo de un lago. El tiene
una red de tamao nxm. Un pez es atrapado si se

21. Escribir un programa que permita ingresar un texto y


luego lo reescriba eliminando los comentarios,

36

encuentra en el rea en donde Limo tire la red. Ayuda a


Limo a decidir donde tirar su red. La red siempre cubre
una superficie de n unidades en la vertical y m en lo
horizontal (Limo no sabe tirarla de otra manera).
Problema
Dado un arreglo de 0 k 1000 puntos de coordenadas
enteras 0 xi , yi 10000. Hallar el mayor nmero de peces
que puede atrapar Limo con su red de nxm con 1 n
10000 y 1 m 10000.
Entrada
El archivo de entrada consiste en k+1 lneas. La primera
lnea contiene tres enteros n, m y k. En las siguientes k
lneas vienen las coordenadas de los peces en formato
(X,Y).
Salida
El archivo de salida consiste en una nica lnea con un
solo entero que indica el nmero mximo de peces que
puede atrapar Limo con su red.
input.txt
435
00
01
21
44
10 0
output.txt
3
24. Pizzas
Historia
Durante el concurso intercolegial de programacin, los
entrenadores de los colegios Coln, Alpes y Veintimilla
se enfrentaron a un problema. Se queran encargar pizzas
para los concursantes, pero como ellos comen mucho y
son muy quisquillosos, tienen unas preferencias
alimenticias algo peculiares.
Para comenzar, Los concursantes de los Alpes comen
muy poco, y cada uno de ellos come exactamente un
cuarto () de pizza, y nada ms. Los del Coln estn un
poco ms mal alimentados, y requieren de media ()
pizza exactamente para llenarse, sin embargo, por
ningn motivo son capaces de comerse dos cuartos
sobrantes de pizzas distintas. Para terminar, los
concursantes de Veintimilla se alimentan con gran
apetito y requieren de tres cuartas partes () de pizza
para llenarse. Como es el caso de los del Coln, los del
Veintimilla no aceptan trozos que hayan sido dejados
por otros concursantes (de otras pizzas).

Es decir, lo que le toque a cada concursantes debe


provenir de la misma pizza, y nunca de dos o ms pizzas
distintas.
Problema
Dada la cantidad n de concursantes de los Alpes, m de
concursantes del Coln y k de concursantes del
Veintimilla, escribe la mnima cantidad de pizzas que es
necesario comprar para alimentar a todos los
concursantes. (NOTA: puede haber desperdicio, pero no
te preocupes, dado que los entrenadores se darn a la
abnegada tarea de comerse el resto).
Entrada
El archivo de entrada contiene una nica lnea de texto
con tres nmeros 0 n 100, y 0 m 100 y 0 k
100, separados entre ellos por un nico espacio.
Salida
El archivo de salida debe contener una sola lnea con un
nmero indicando la mnima cantidad de pizzas
necesarias para alimentar a los concursantes.
Ejemplo
Entrada (input.txt)
332
Salida (output.txt)
4
25. RESOLUCIN
MGICOS

DE

LOS

CUADRADOS

Un cuadrado mgico es la disposicin de una serie de


nmeros enteros en un cuadrado o matriz de forma tal
que la suma de los nmeros por columnas, filas y
diagonales sea la misma, la constante mgica
Hemos de distinguir, a la hora de aplicar una estrategia
para su construccin, entre los cuadrados mgicos de
orden par y los de orden impar.
Comenzaremos por estos ltimos dado que la dificultad
para resolverlos es menor.
El mtodo bsico consiste en aadir lateralmente a los
cuatro lados series virtuales de casillas, de forma
triangular, de manera que nos quede la figura de un
rombo. (Paso nmero 1)
Entonces, y comenzando desde el extremo superior,
situaremos todas las cifras (a partir del 1) siguiendo slo
las diagonales alternas formadas en el rombo, observad

37

que quedan, por tanto, lneas diagonales y casillas


interiores del cuadrado en blanco. (Paso nmero 2)

fciles de aplicar de lo que puede parecer en un primer


momento:

El cuadrado mgico se completa situando los nmeros


que han quedado en las casillas virtuales exteriores del
cuadrado, en las casillas interiores en blanco, siguiendo
primero una simetra horizontal, las del tringulo
superior pasan a completar la parte inferior, como si lo
recortsemos y lo pegsemos sin girarlo y las del
tringulo inferior en la parte superior; y una simetra
vertical, las de la parte exterior derecha en la interior
izquierda y al revs. (Paso nmero 3)

Utilizar, en primero lugar, un cuadrado de orden 4,


que es el menor de los de orden par, para aclararlo
mejor.
1. Comenzaremos por situar el nmero 1 (o la 1 cifra de
la serie) en el extremo superior izquierda y entonces
escribiremos, desplazndonos de izquierda a derecha,
slo las cifras correspondientes a las casillas que forman
las dos diagonales principales.
1>

Esta imagen ilustra claramente este procedimiento:

4
6
10

7
11

13

16

2. Ahora nos situaremos en la primera casilla inferior


derecha en blanco, vecina de la del extremo, dnde
pondremos el nmero 2 (o la 2 cifra de la serie) e
iremos desplazndonos 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
mgico de orden 4 ya ha quedado completamente
resuelto.
1
12
8
13

15
6
10
3

14
7
11
2

4
9
5
<16

Extrapolar, a continuacin, este mtodo a cuadrados


mgicos mayores de orden par. Pasaremos, pues, al
cuadrado de orden 6 y aplicaremos los dos pasos
descritos anteriormente:
Es increblemente sencillo!!

1>

6
8

11
15
21

Para resolver cuadrados mgicos de orden par


seguiremos los siguientes pasos, que son mucho ms
26

16
22
29

38

31
1

36
32
8

19
18
31

26
5

28
15
21
9

27
16
22
10

35
11

6
24
13

29
2

<36

Despus de esto ya llevaremos escritas 2n cifras, por


ejemplo, como este es de orden 6, ya llevamos 12.
3a. Nos situaremos, ahora, en el extremo superior
izquierda y con un desplazamiento siempre de derecha a
izquierda, iremos contando de uno en uno y escribiremos
slo los nmeros pares en las casillas correspondientes.
1
32 4
35
<6
12 8
28
27 11
19
15
16 14 24
18
21
22 20 13
30 26 9
10 29
34
31
5
2
36
3b. Finalmente nos situaremos en el extremo inferior
derecho y con un desplazamiento de derecha a izquierda,
iremos contando de uno en uno y escribiremos slo los
nmeros impares en las casillas correspondientes que
han de coincidir exactamente con las casillas que todava
quedaban en blanco.
(Los pasos 3a y 3b pueden invertirse de orden sin
afectar el resultado final)
1
12
19
18
30
31

32
8
23
17
26
5

4
28
15
21
9
34

33
27
16
22
10
3

35
11
14
20
29
2

6
25
24
13
7
<36

Una vez completado este cuadrado mgico de orden 6


se pueden extraer algunas conclusiones, dado que este
mtodo es recurrente y slo varan algunos detalles
dependiendo del orden del cuadrado.
Hay tres factores determinantes o que definen cada paso:
El primero es indicar el extremo de inicio: Superior (S)
/ Inferior (I), Derecha (D) / Izquierda (E)
El segundo el tipo de desplazamiento a seguir: de
izquierda a derecha (E-D), de derecha a izquierda (D-E)
o en zig-zag (Z-Z)

El tercero es la accin a aplicar: completar diagonales


(DG), interior diagonales (DGI), exterior diagonales
centro (DGE), escribir pares (EP), escribir impares (ES),
completar nmeros restantes (NR)
26. El rey blanco y 8 peones negros se encuentran
ubicados en un tablero de ajedrez (8 casilleros de
largo por 8 casilleros de ancho). El rey y cada uno
de los peones pueden "comerse" entre s. El rey
puede moverse de acuerdo a las reglas usuales del
ajedrez, esto es, un casillero por vez, en cualquier
direccin. Sin embargo, los peones no pueden
moverse salvo para "comer" al rey; para ello, el rey
debe ubicarse en cualquiera de los casilleros
diagonales adyacentes al que ocupa el pen.
Diremos que una "ruta" para el rey es SEGURA si el
rey puede recorrerla sin ser "comido" por ninguno
de los 8 peones. Se trata entonces de encontrar un
algoritmo que permita determinar si existe o no una
ruta segura para el rey desde el casillero A1 al H8
para una posicin dada de los 8 peones negros.
Escribir un programa que:
A- permita la entrada de las posiciones de los 8 peones
negros.
B- determine si existe o no una ruta segura para el rey,
con respecto a la posicin ingresada de los 8 peones
negros, desde el casillero A1 al H8.
C- si tal ruta existe, la describa.
27. Para un palabra dada encontrar todos sus anagramas.
28. Un equipo electrnico consta de un visor y dos
nicos botones sealados con "1" y "2".Al encender
el equipo aparece 0 en el visor. Si se oprime el botn
1 el nmero que est en la pantalla aumenta en 1,
mientras que si se oprime el botn 2, el nmero se
duplica. Escribir un programa que:
a) permita ingresar un nmero natural N.
b) muestre la cantidad de veces que deber apretarse el
botn 1 y la cantidad de veces que deber apretarse el
botn 2 para obtener, en la menor cantidad posible de
pasos, el nmero N en el visor.
c) indique la manera en que debern apretarse los
botones.
Por ejemplo: Si N = 25
Se deber apretar el botn 1: "3 veces"

39

Se deber apretar el botn 2: "4 veces"


Los botones debern apretarse en el siguiente orden: "12-1-2-2-2-1"
29. Escriba un programa que permita el ingreso de un
nmero natural N (N<=1000) y que encuentre el
nmero natural menor igual que N que tenga el
mayor nmero de divisores. Si hubiese varios de
tales nmeros, el programa deber imprimirlos todos
junto con los divisores de cada uno.
30. ChefEc S.A. se dedica a la preparacin de cenas
empresariales que se sirven en su saln del centro de
la ciudad. En este momento N empresas distintas
han requerido sus servicios. Cada una de ellas ha
fijado una cantidad de das a partir de hoy como
plazo mximo para realizar la cena. ChefEc no
puede atender a ms de una empresa por noche.
Debido a los mens y vinos seleccionados y a la
cantidad de invitados de cada empresa, la ganancia
que cada una de estas cenas le redituar a ChefEc no
es pareja. El Gerente General de ChefEc necesita dar
una respuesta a cada una de las N empresas
informndole si atender o no su pedido y, en caso
afirmativo, cundo se realizar la cena; dems est
decir que pretende que la ganancia obtenida por
ChefEc sea mxima.
Ud. es el programador que debe encargarse de dar una
solucin al Gerente General. Para ello, en un archivo de
entrada ASCII, CHEF.DAT, se han escrito distintos
juegos de datos. En cada uno de ellos figura:
N (el nmero total de empresas)
g1 d1 (la ganancia en $ y el plazo en das de la cena para
la empresa 1)
g2 d2 (la ganancia en $ y el plazo en das de la cena para
la empresa 2)
........
gN dN (la ganancia en $ y el plazo en das de la cena
para la empresa N)
donde los nmeros N, gi, di (1 <= i <= N) son enteros
positivos.

2. Determine a cules de las empresas se les responder


afirmativamente y fije el da en que se realizar la cena
de cada una de ellas respetando los plazos mximos
fijados de forma tal que la ganancia obtenida por ChefEc
sea mxima.
3. Escriba en un archivo ASCII de salida, CHEF.SOL:,
en forma cronolgica los das de las cenas junto con el
nmero de la empresa atendida. Deber agregarse
tambin la ganancia mxima obtenida mediante este
cronograma.
Las respuestas a los distintos juegos de datos debern
separarse con un registro en blanco.
Ejemplo:
CHEF.DAT
5
50 1
25 2
44 4
30 2
20 1
11
45 10
35 6
60 7
100 3
20 2
20 2
40 4
35 3

Escriba un programa que:


10 5
1. Lea en CHEF.DAT el siguiente juego de datos.
20 1

40

40 4
CHEF.SOL
Da 1: cena para la empresa 1
Da 2: cena para la empresa 4
Da 3: cena para la empresa 3
Total ganancia obtenida= $124
Da 1: cena para la empresa 4
Da 2: cena para la empresa 8
Da 3: cena para la empresa 7
Da 4: cena para la empresa 11
Da 5: cena para la empresa 9

- El primer y segundo caracter se colocan a izquierda y


derecha respectivamente, de lo que se obtuvo como
codificacin de la primera contrasea
- El tercer caracter se guarda a izquierda del primero.
- El cuarto a derecha del segundo.
- El quinto a izquierda del tercero.
- El sexto a derecha del cuarto.
En general los caracteres de la i-sima contrasea se
codifican usando el mtodo descrito, tomando como
base lo que resulta de codificar las (i-1) contraseas
anteriores.
Se debe escribir un programa CONTRA en que tome la
codificacin de las contraseas y obtenga todas las
contraseas correctamente escritas.
Datos de entrada
Se recibe una nica lnea, de no ms de 200 caracteres,
conteniendo las contraseas codificadas.
Datos de salida
El programa debe generar una respuesta con:

Da 6: cena para la empresa 2


Da 7: cena para la empresa 3
Da 8: cena para la empresa 1
Total ganancia obtenida= $365
31. Contraseas
Un seor debe manejar una gran cantidad de
contraseas, de exactamente 6 caracteres cada una, que
le permiten acceder a sus cuentas de mail, cuentas
bancarias, tarjetas, etc. Ante el temor de olvidarlas,
decide escribirlas en un archivo cambiando el orden
original de los caracteres en la contraseas, de forma tal
de evitar que alguien pueda verlas y usarlas.
Para ello usa el siguiente mtodo. La primera contrasea
se guarda de la siguiente manera:
- Los dos primeros caracteres quedan como estn.
- El tercer caracter se guarda a izquierda del primero.
- El cuarto a derecha del segundo.
- El quinto a izquierda del tercero.
- El sexto a derecha del cuarto.
Para la segunda contrasea se utiliza el mismo mtodo
pero tomando como base la codificacin de la primera
contrasea, es decir:

Una primera lnea con la cantidad total de contraseas


decodificadas.
A continuacin las contraseas decodificadas, una por
lnea, imprimidas en el mismo orden en que fueron
codificadas.
Notas
- La longitud de la lnea de entrada es un mltiplo de 6.
- Las contraseas estn formadas por letras y/o dgitos
del 0 al 9.
- Si desea puede guardar la respuesta en un archivo de
texto.
Ejemplo
En el caso de que la entrada fuera:
017AIComRtN7udr243
la salida debera ser:
3
RtmNo7
CuIdAr
721403
32. Las resistencias electrnicas suelen ir identificadas
por un cdigo de colores que permite marcar cada
resistencia con su valor (en Ohmios, W) y su
Tolerancia (en %). Este cdigo de colores viene
representado en la siguiente tabla:

41

ya creado y leer de teclado 4 nmeros que


correspondern 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. Quizs el ms famoso de todos los sistemas de
codificacin es el cdigo Morse, desarrollado por
Samuel Morse en 1832, para uso en el sistema
telegrfico. El cdigo Morse asigna una serie de
puntos y rayas a cada letra del alfabeto, a cada dgito
y a unos cuantos caracteres especiales. La
separacin entre palabras se indica por un espacio o
por la ausencia de un punto o una raya. La versin
internacional del cdigo Morse aparece en la tabla
siguiente:
El cdigo que suele emplearse en las resistencias es un
cdigo 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 nmero de 2 dgitos:
Esos dos dgitos vienen dados por el color de esas
bandas, segn la columna "Dgito" de la tabla.
La tercera banda es un valor por el que se multiplicar
el nmero 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-Marrn-Plata 220W, 10%
Segn todo lo anterior, implemente un subprograma que
permita calcular la resistencia y la tolerancia de una
resistencia, sabiendo los cdigos de colores. El
subprograma tendr, como mnimo, 4 argumentos, que
sern nmeros naturales, y que indicarn el color de las
bandas segn la columna "Dgito". Los colores Oro,
Plata y Ninguno tomarn los valores 10, 11 y 12
respectivamente.
Implementar otro subprograma que muestre por pantalla
el dgito que le corresponde a cada color (incluyendo los
dgitos 10, 11 y 12).
Implementar tambin un programa que pida los colores
de las 4 bandas y muestre los valores devueltos por el
anterior subprograma. El programa mostrar el dgito
que le corresponde a cada color usando el procedimiento

Escriba un programa que lea una frase escrita en espaol


y cifre dicha frase en cdigo Morse y que tambin lea
una frase en cdigo Morse y la convierta en el
equivalente en espaol. Utilice un espacio en blanco
entre cada letra codificada Morse y tres espacios en
blanco entre cada palabra codificada en Morse.
El programa deber incorporar una funcin Menu() que
muestre las siguientes opciones: 1) Pasar una frase a

42

cdigo Morse, lo cual se implementar en una funcin


que se llame Frase2Morse(),
2) Pasar cdigo Morse a una frase, implementando una
funcin que se llame Morse2Frase() y
3) Salir.
34. Anlisis de texto. La disponibilidad de
computadoras con capacidades de manipulacin de
cadenas nos proporciona interesantes mtodos para
analizar lo escrito por grandes autores. Se ha puesto,
por ejemplo, gran atencin al hecho de saber si
William Shakespeare alguna vez existi. Algunos
estudiosos creen que existen evidencias indicando
que Christopher Marlowe fue el que escribi las
obras maestras atribuidas a Shakespeare. Los
investigadores han utilizado ordenadores para
localizar similitudes en los textos de estos dos
autores. Realice un programa que lea varias lneas
de texto y analice las siguientes caractersticas del
texto:
a) Imprimir una tabla indicando el nmero de veces que
aparece cada letra del alfabeto en dicho texto.
b) Imprimir una tabla que indique el nmero de palabras
de una letra, de dos letras, de tres letras ... que aparecen
en el texto.
c) Imprimir una tabla indicando el nmero de
ocurrencias de cada palabra distinta en el texto. Para ello
supondremos que el texto tiene como mximo 100
palabras distintas, con lo que deber almacenarlas en un
array de estructuras de tamao 100. Cada estructura
deber contener una cadena de caracteres con la palabra
(mximo 20 caracteres) y otro campo con el nmero de
veces que aparece esa palabra en el texto. Considere
opcionalmente la posibilidad de que las palabras
aparezcan ordenadas alfabticamente. Para ordenarlas
puede utilizar cualquier algoritmo de ordenacin
teniendo en cuenta que hay que intercambiar estructuras
completas (la cadena y el nmero de ocurrencias).
Para comparar las cadenas de caracteres en la
ordenacin utilice la funcin 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) Nmero de instancias de
cada letra,
3) Nmero de palabras de cada longitud,
4) Nmero de ocurrencias de cada palabra distinta,
5) Salir.

El objetivo del juego es adivinar los dgitos as como sus


posiciones correctas con el menor nmero de intentos
posibles. Para cada intento, el jugador proporciona tres
dgitos para las posiciones 1, 2 y 3. El programa
responde con una pista que consta de rojo, amarillo y
verde. Si un dgito est en la posicin correcta, la
respuesta es verde. Si el dgito adivinado est en una
posicin incorrecta, la respuesta es amarillo. Si el dgito
para una posicin dada no coincide con ninguno de los
tres dgitos, la respuesta es rojo. A continuacin se
muestra un ejemplo de respuestas para los dgitos 6, 5 y
8 en las posiciones 1, 2 y 3, respectivamente:
INTENTO PISTA
1 2 5 rojo rojo amarillo
8 5 3 amarillo verde rojo
8 5 6 amarillo verde amarillo
6 5 8 verde verde verde
36. Implementar el juego del AHORCADO. El
programa dispondr de un men con tres opciones:
introducir palabra, adivinar palabra y salir. La
primera opcin permitir introducir la palabra que
otro jugador (o nosotros mismos, para probar el
programa) ha de adivinar. La segunda opcin slo
podr llevarse a cabo si ha sido introducida
previamente una palabra. De ser as aparecer una
cadena formada por guiones - (tantos como letras
contiene la palabra). El programa ir pidiendo una
letra tras otra. Si la letra es vlida aparecer en la
cadena en la posicin correspondiente, si no es as
contaremos un fallo. El programa termina cuando se
han destapado todas las letras o se ha fallado seis
veces (cabeza, tronco, brazo derecho, brazo
izquierdo, pierna derecha y pierna izquierda)

35. Escriba un programa que juegue al juego de ROJOAMARILLO-VERDE. El programa genera tres
dgitos aleatorios entre 0 y 9. A estos dgitos se le
asigna la posicin 1, 2 y 3.

43

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