Problemas Algoritmos Eunrn
Problemas Algoritmos Eunrn
Problemas Algoritmos Eunrn
Problemas
y algoritmos
Un enfoque práctico
Edith Lovos
Martín Goin
Problemas y algoritmos
Lecturas de Cátedra
Problemas y algoritmos
Un enfoque práctico
Edith Lovos
Martín Goin
Utilice su escáner de
código qr para acceder
a la versión digital
Índice
Dedicatorias................................................................................................9
Agradecimientos ........................................................................................10
Prólogo.........................................................................................................11
Capítulo 1. Conceptos básicos de programación.....................................13
1. 1. Etapas en la programación.......................................................15
1. 1. 1. Definición del problema ............................................................. 16
1. 1. 2. Análisis del problema ................................................................. 16
1. 1. 3. Diseño del algoritmo ................................................................... 16
1. 2. Pre y poscondiciones de un algoritmo....................................17
1. 3. Ejercicios propuestos................................................................18
1. 4. Expresión de algoritmos...........................................................19
Capítulo 2. Diagramación lógica...............................................................21
2. 1. Programa FreeDFD ...................................................................23
2. 2. ¿Qué son las variables?..............................................................27
2. 2. 1. Cómo darle valor a una variable ................................................ 28
2. 2. 2. Intercambio de variables ............................................................ 29
2. 3. Estructuras de control ..............................................................30
2. 3. 1. Estructura de control de decisión o selección.......................... 30
2. 3. 1. 1. Estructura de control de decisión simple......................... 30
2. 3. 1. 2. Estructura de control de decisión doble........................... 32
2. 3. 1. 3. Estructura de control de decisiones anidadas ................ 35
2. 3. 1. 4. Estructura de control de decisiones independientes.... 36
2. 4. Operadores de relación.............................................................37
2. 5. Operadores lógicos....................................................................37
2. 5. 1. Conjunción lógica o producto lógico «and»............................. 38
2. 5. 2. Disyunción lógica inclusiva o suma lógica «or»...................... 39
2. 5. 3. Negación o complemento lógico «not»..................................... 39
2. 6. Otros operadores matemáticos especiales.............................43
2. 7. Problemas: Diagramación lógica – Estructura de control
de decisión...............................................................................48
2. 8. Estructura de control de repetición.........................................50
2. 8. 1. Estructura de control de repetición (sentencia «para»)......... 53
2. 8. 2. Variables como acumuladores .................................................. 55
2. 8. 3. Variable contadora ...................................................................... 55
2. 8. 4. Máximos y mínimos................................................................... 62
2. 8. 5. Problemas: Diagramación lógica – Estructura de control
de repetición «para».................................................................... 65
2. 8. 6. Estructura de control de repetición (sentencia «mientras»).66
2. 8. 7. Problemas: Diagramación lógica – Estructura de control de
repetición «mientras»................................................................. 72
Capítulo 3. Pseudocódigo...........................................................................73
3. 1. PSeInt.........................................................................................73
3. 2. Operadores lógicos....................................................................80
3. 3. Ejercicios: pseudocódigo..........................................................87
Capítulo 4. Entorno de programación visual...........................................89
4. 1. Variables del programa DaVinci ..............................................93
4. 2. Conociendo la ciudad del robot ...............................................94
4. 2. Repetición..................................................................................97
4. 3. Modularización .........................................................................106
4. 4. Parámetros formales y reales...................................................110
4. 5. Variables globales y locales.......................................................112
4. 6. Ejercicios Da Vinci ....................................................................114
Dedicatorias
Dedicatoria |9
Agradecimientos
10 | Lovos y Goin
Prólogo
Prólogo | 11
De esta forma se ofrecen diversas herramientas de asistencia en el
aprendizaje de los conceptos básicos de programación, sumado a un con-
junto de ejemplos.
En el libro se presentan ejemplos prácticos resueltos. Además se pro-
pone un conjunto de situaciones problemáticas que le permitirán al lector
desarrollar las habilidades de resolución de problemas usando algoritmos.
12 | Lovos y Goin
Capítulo 1
Conceptos básicos de programación
Aprender a programar
es programar para aprender
Mitchel Resnick (1956)
La frase pertenece al destacado profesor, físico,
informático, periodista y programador. Participó
del diseño y desarrollo del Scratch (lenguaje
de programación para educación, 2005).
Los programadores
son los magos del futuro
Gabe Newell (1962)
Director general de Valve Software (empresa
desarrolladora de videojuegos)
El verbo programar tiene varios usos. Se refiere a idear y ordenar las ac-
ciones que se realizarán en el marco de un proyecto, como por ejemplo la
preparación de máquinas para cumplir con una cierta tarea específica, la
preparación de un espectáculo deportivo o artístico, la preparación de da-
tos necesarios para obtener la solución de un cálculo a través de una calcu-
ladora, el diseño del sistema y la distribución de materias para una carrera
o de temas para un curso o asignatura, etcétera.
En la actualidad, la noción de programación se encuentra más asocia-
da a la programación en ciencias informáticas. En este sentido, programar
14 | Lovos y Goin
podría resumirse como el proceso por el cual un programador escribe,
prueba, depura y mantiene un código a partir del uso de un lenguaje de
programación. Así, aprender a programar implica aprender ciencia y tec-
nología. La tecnología puede verse como el conjunto de herramientas, téc-
nicas y estándares que permiten llevar adelante la programación. Al hablar
de ciencia se hace referencia a una teoría amplia y profunda que permite
entender la programación. Ambos conocimientos son importantes, ya que
posibilitan enfrentar los retos de la evolución tecnológica.
Por otra parte, en estos tiempos, como señalan Patricia Compañ-Rosique
y otros (2015), la programación es una vía posible para el desarrollo del pen-
samiento computacional. Es decir, hacer uso de conceptos fundamentales de
la informática para resolver problemas del quehacer cotidiano.
1. 1. Etapas en la programación
Esta fase está dada por la especificación del problema, el cual requiere una
definición clara y precisa. Es importante saber lo que se desea que realice la
computadora; mientras esta definición no sea lo suficientemente clara, no
tiene mucho sentido continuar con la siguiente etapa.
En esta etapa se determina cómo debe ser el proceso que lleva a la resolución
del problema. La palabra algoritmo deriva del nombre de un matemático
árabe del siglo ix, llamado Al-Khuwarizmi, quien describió varios métodos
para resolver cierto tipo de problemas aritméticos.
El diseño de algoritmos es un recurso fundamental que permite resol-
ver problemas relacionados con casi todas las disciplinas.
La intención de este libro es que el lector adquiera las bases necesarias
para poder diseñar e implementar, de manera fácil y rápida, soluciones
algorítmicas.
Definición de algoritmo: es una secuencia no ambigua, finita y ordena-
da de pasos para poder resolver un problema.
• No ambigua implica que cada paso del algoritmo debe poder ser in-
terpretado de una única forma.
• Finita significa que la cantidad de pasos que componen el algoritmo
está limitada. El algoritmo empieza y termina.
16 | Lovos y Goin
• Orden. Los pasos del algoritmo deben seguirse en una determinada
secuencia para llegar a la solución del problema.
Ejemplos
1. 3. Ejercicios propuestos
18 | Lovos y Goin
Algoritmo 1 Algoritmo 2
Me visto rápidamente. Traer las herramientas que voy a usar.
Me levanto por la mañana. Hacer el arreglo con esmero.
Tomo una ducha de 10 minutos. Localizar el desperfecto
Tomo un té con leche y me voy. del depósito.
Termino de ducharme a las 7:25. Pasar la factura por el trabajo hecho.
Llego temprano al colegio. Organizar cómo voy a hacer el trabajo.
El reloj marca las 7:15. Ver qué tipo de arreglo necesita.
Comprobar la eficiencia del arreglo.
1. 4. Expresión de algoritmos
La computadora es el Proteo de
las máquinas. Su esencia es su
universalidad, su poder de simular.
Seymour Papert (1928-2016)
La frase pertenece al destacado científico
en computación, matemática y educación.
Es uno de los pioneros de la inteligencia
artificial y creador del Logo (lenguaje
de programación para educación).
Fuente: Adaptado de ak_mardini, 2006.
20 | Lovos y Goin
Capítulo 2
Diagramación lógica
Comienza el algoritmo.
Diagramación lógica | 21
Salida de datos (en este caso se
imprime lo que contiene la variable C)
Termina el algoritmo.
22 | Lovos y Goin
Nota: En la salida se pueden alternar carteles (mensajes) y datos, mien-
tras los primeros estén entre comillas y ambos separados por comas. En
este caso será “El Perímetro es “,P,” y el Área es “,A.
Ejemplo: si ingresamos b y h como 3 y 5 entonces la salida imprime lo
siguiente: El Perímetro es 16 y el Área es 15
Atención: Las operaciones aritméticas en los algoritmos deben expresar-
se siempre en una línea, por ejemplo si queremos realizar la siguiente
operación:
−B + 9
C=
2A
es necesario escribirla de la siguiente manera: C = (-B+9)/(2*A). El asterisco *
representa la multiplicación y la barra inclinada a derecha / la división.
2. 1. Programa FreeDFD
Diagramación lógica | 23
Figura 1. 3. Pantalla FreeDFD
En la parte superior tenemos el menú principal para acceder a todas las op-
ciones posibles y, debajo, la barra de herramientas que funcionan como atajos.
Más abajo, el sector de edición de trabajo. Siempre comienza con los
conectores «inicio» y «fin».
Respecto a la barra de herramientas o botones:
24 | Lovos y Goin
1. Para introducir entre los conectores «inicio» y «fin» el símbolo de
ingreso, primero hacemos click en el ícono «lectura» de la barra «ob-
jetos» y luego nos acercamos con el mouse al destino deseado (a).
La mano nos indica el sector permitido para colocar el objeto, de lo
contrario aparecerá un cartel de prohibido (b).
Luego de elegir la ubicación del objeto aparecen las marcas que indi-
can que está seleccionado (c).
a b c
Diagramación lógica | 25
4. Luego de armar por completo el diagrama de flujo como se observa
en el primer ejemplo, hay que ponerlo a prueba, aunque se reco-
mienda primero guardar el archivo («Archivo» – «Guardar como»).
26 | Lovos y Goin
7. Si el programa funcionó sin generar errores, FreeDFD nos mostrará
la siguiente ventana:
Diagramación lógica | 27
Ejemplos válidos: A, a , B1 , A20 , AA1 , Aa1 , B2B , Promedio , SUMATORIA
, A_1 , b1_2
Ejemplos no validos: 1B , 2c , _S , ¿A, La variable
28 | Lovos y Goin
2. 2. 1. Cómo darle valor a una variable
Diagramación lógica | 29
Importante: Una cuestión problemática con las variables es su va-
lor o contenido inicial. En algunos lenguajes si una variable se usa
sin antes haberle asignado un valor, se le dará un valor por defecto,
mientras que en otros lenguajes eso podría generar un error duran-
te la ejecución del programa. Entonces para evitar estas situacio-
nes, siempre que usemos una variable debemos darle un valor inicial.
Sugerencia: Editar y ejecutar los problemas propuestos en el software
FreeDFD para una mejor comprensión.
2. 2. 2. Intercambio de variables
2. 3. Estructuras de control
30 | Lovos y Goin
2. 3. 1. Estructura de control de decisión o selección
Diagramación lógica | 31
En este caso, si al ejecutar el algoritmo se ingresa un valor de radio
negativo o cero, el programa simplemente termina, ya que solo funciona
cuando la condición radio > 0 (expresión lógica) es verdadera.
Cuando se cumple la condición dentro del rombo el flujo de datos va
para el lado del Sí, caso contrario se dirige hacia el No.
Lo cual es incorrecto.
32 | Lovos y Goin
2. 3. 1. 2. Estructura de control de decisión doble
Nota: Los carteles en la salida siempre van entre comillas, en este caso
“ERROR”.
Diagramación lógica | 33
Veamos otro ejemplo.
Problema 5: Se pide ingresar dos números y luego mostrar por mensaje cuál es
el mayor.
Nota: ¿Qué sucede si ingresamos dos números iguales? ¿Cuál sería el re-
sultado? Lo verificamos ejecutando el algoritmo.
34 | Lovos y Goin
2. 3. 1. 3. Estructura de control de decisiones anidadas
Problema 6: Mostrar el número más grande (entre dos) ingresado por teclado.
Si los dos números son iguales mostrar el cartel “Son iguales”.
Diagramación lógica | 35
2. 3. 1. 4. Estructura de control de decisiones independientes
Problema 7: Ingresar dos números por teclado y sumarlos. En caso que los
números sean negativos, previo a la suma se debe cambiar su signo.
Nota: En este caso tenemos dos decisiones simples que son independien-
tes (podrían estar en cualquier orden). La operación N = (-1)*N hace cam-
biar el signo de negativo a positivo.
36 | Lovos y Goin
2. 4. Operadores de relación
2. 5. Operadores lógicos
Diagramación lógica | 37
Es decir que una decisión depende de la anterior.
38 | Lovos y Goin
resultado el valor falso, puesto que basta con que una de las dos variables
tenga valor falso para que ambas no sean simultáneamente verdaderas.
Diagramación lógica | 39
Problema 8: Solicitar al usuario un número natural y verificar que el número
ingresado se encuentre dentro de la primera docena de números naturales,
es decir entre el 1 y el 12.
40 | Lovos y Goin
Nota: Si al evaluar (A=B) se obtiene un resultado falso entonces no es
necesario evaluar la expresión (A=C). Esto se denomina evaluación de
circuito corto, si la primera expresión es falsa como el operador que las
vincula es un and aunque la segunda sea verdadera el resultado será falso,
de ahí que no tenga sentido realizar la evaluación.
Diagramación lógica | 41
La expresión lógica: (Cat=’A’)or((Ant>=10)and(Ant<=20)) permite ase-
gurar que el socio cumple con las condiciones impuestas.
42 | Lovos y Goin
Es común cometer errores usando operadores lógicos, por ejemplo:
Potencia ^ N1^N2
Diagramación lógica | 43
Problema 10: Se lee desde el teclado el valor de un ángulo en grados. Se desea
mostrar el coseno y el seno.
44 | Lovos y Goin
Problema 11: Se ingresan por teclado los catetos de un triángulo rectángulo. Se
desea hallar y mostrar su hipotenusa.
Problema 12: Ingresar un número natural por teclado. Se desea saber y mostrar
si es par o impar.
Diagramación lógica | 45
El operador «mod» nos devuelve el resto de la división entre números
enteros. Para este caso cualquier número natural (1,2,3,..,∞) dividido 2 nos
da un 1 o un 0 (cero), entonces los números pares tendrán como resultado
un 0, mientras que los impares un 1.
46 | Lovos y Goin
Ejemplos Rango de valores obtenidos
random(2) 0y1
radom(10)+1 Del 1 al 10
random(21)-10 Del -10 al 10
random(100)/10 Del 0,0 al 9,9
random(101)/10 Del 0,0 al 10,0
random(1001)/100-5 Del -5,00 al 5,00
random(10)*2 0, 2, 4, 6, 8, 10,…,18
Diagramación lógica | 47
Sabemos que son 6 las caras de un dado, entonces la expresión ran-
dom(6)+1 genera números del 1 al 6. ¿Qué podría suceder si cambiamos la
primera instrucción de asignación por dado ← random(7)?
Problema 15: Generar aleatoriamente una temperatura entre los -20º y los 40º
y mostrar el resultado.
48 | Lovos y Goin
5. Diseñar un algoritmo que pida un número por teclado y luego im-
prima el número siguiente al ingresado.
6. Diseñar un algoritmo que genere un número aleatorio del 0 al 200,
lo muestre y luego calcule y muestre el mismo número aumentado
en un 30 %.
7. Diseñar un algoritmo que genere un número aleatorio del 10 al 50,
lo muestre y luego calcule y muestre el mismo número disminuido
en un 15 %.
8. Diseñar un algoritmo que, dados tres números enteros, calcule e im-
prima el promedio entre ellos.
9. Diseñe un algoritmo para ingresar dos palabras (A, B) y luego realice
el intercambio de sus valores. Finalmente mostrar el contenido de
A y de B.
10. Diseñar un algoritmo que imprima el área y el perímetro de un rec-
tángulo ingresando su base y altura.
11. Realice un algoritmo que calcule el volumen de un cilindro a partir
de los valores de su radio y altura.
12. Crear un algoritmo que convierta y muestre un valor ingresado en
centímetros a yardas, metros, pies y pulgadas.
13. Diseñar un algoritmo que convierta y muestre la temperatura en
Fahrenheit ingresando la temperatura en Celsius.
14. Diseñar un algoritmo que calcule el volumen de un cilindro dados su
radio y altura (primero el programa deberá verificar si son positivas).
15. Crear un algoritmo que calcule si dos números son divisibles. Para
ello, se piden un primer número y un segundo número, entonces
mostrar un cartel que diga “es divisible” si el segundo número es
divisible al primero.
16. Diseñar un algoritmo para calcular el porcentaje de hombres y de
mujeres que hay en un grupo, dados los totales de hombres y de
mujeres.
17. Diseñar un algoritmo que indique con carteles si el número ingresa-
do es negativo, positivo o nulo.
18. Ingresar tres números y mostrar el mayor (asuma que todos son dis-
tintos entre sí).
19. Realice un algoritmo para mostrar un cartel que indique si un trián-
gulo es «escaleno», «equilátero» o «isósceles» ingresando sus lados.
20. Diseñar un algoritmo que imprima con un cartel el número de do-
cena («primera», «segunda» o «tercera») dado el resultado de una
jugada de ruleta (del 0 al 36). Utilizar el operador lógico and.
21. Crear un algoritmo que permita obtener y mostrar la cantidad de dígi-
tos de un número ingresado, sabiendo que el máximo permitido es 4.
Diagramación lógica | 49
22. Crear un algoritmo que muestre cada uno de los dígitos de un nú-
mero ingresado por el usuario. El máximo permitido es de 4 dígitos.
Por ejemplo: si se ingresa el número 187, entonces debe mostrar en
un único cartel lo siguiente: “d1 = 0, d2 = 1, d3 = 8 y d4 =7”.
23. Ídem al anterior pero se pide que muestre la suma de los dígitos del
número ingresado (máximo 4 dígitos).
24. Diseñar un algoritmo que imprima con un cartel «Correcto» según
el siguiente caso: si el numero N es múltiplo de 5 y se encuentra en-
tre los 25 primeros números. N debe ser obtenido aleatoriamente
entre números del 1 al 1000. Primero debe mostrar N.
25. Diseñar un algoritmo que ingresando un numero de 5 dígitos detec-
te si es capicúa y muestre un cartel «Es capicúa» o «No es capicúa»
según el resultado.
26. Crear un algoritmo que muestre las soluciones de una ecuación cua-
drática (usando Bhaskara), a partir del ingreso de los valores de los co-
eficientes del polinomio. El polinomio tiene la forma: P(x) = ax2+bx+c
27. Probar con: a) P(x) = x2+3x+2 b) P(x) = 2x2+4x+2 c) P(x) = 3x2+2
50 | Lovos y Goin
Problema 16: Ingresar 10 números (edades de personas) y luego hallar y
mostrar su promedio.
Solución 1
Diagramación lógica | 51
Solución 2
52 | Lovos y Goin
La primera solución resuelve el problema en pocas líneas, pero utiliza
una gran cantidad de variables. La segunda solución utiliza pocas variables,
pero muchas líneas de comando que se repiten de a pares (leer y sumar).
Basta imaginar si el algoritmo en vez de resolver el promedio con diez
números debiera resolverlo para cien, necesitaríamos para la solución 1
cien variables y para la solución 2 más de doscientas líneas de trabajo.
Para poder tratar con este tipo de situaciones, existen las estructuras de
control de repetición: «para», «mientras» y «hacer-mientras».
Diagramación lógica | 53
De esta manera todo lo que encierra desde Para hasta Fin (Para) se re-
pite tantas veces como lo indica el control de repetición.
La variable S funciona como sumador o acumulador de A.
54 | Lovos y Goin
2. 8. 2. Variables como acumuladores
Es una variable que, como su nombre lo indica, va a ser usada para sumar
sobre sí misma un conjunto de valores. Cuando se utiliza dentro de un ciclo
de repetición Para, al finalizar el mismo, esta variable contendrá la suma-
toria de todos los valores que cumplen una determinada condición (tam-
bién puede servir para decrementar valores variables). Es necesario haber
inicializado su valor antes del comienzo de un ciclo de repetición «para».
La inicialización consiste en asignarle al sumador un valor inicial, es de-
cir el valor desde el cual necesitamos se inicie la sumatoria (por lo general
comienzan en cero).
Ejemplo: S = 0
S=S+N
2. 8. 3. Variable contadora
Diagramación lógica | 55
Problema 18: En una veterinaria se desea saber el promedio de edad de gatos
y perros (por separados) que fueron asistidos durante un mes. En total se
registraron 30 animales y la veterinaria solo atiende gatos y perros.
56 | Lovos y Goin
Problema 19: Se pide lo mismo que el problema anterior, pero la diferencia
radica en que no solo la veterinaria atiende gatos y perros, puede que sean
otros animales también. Justamente lo que se pide es además contar la
cantidad de esos animales que no son ni gatos y ni perros.
Diagramación lógica | 57
Es decir que, por descarte, otro tipo de animal caería en el último No de
la decisión y, entonces, incrementaría en uno la variable CA.
58 | Lovos y Goin
Problema 20: Solicitar al usuario que ingrese un número entero N, luego
generar en forma aleatoria N números enteros comprendidos entre 1 y 100
y determinar cuántos son pares y cuántos impares.
Diagramación lógica | 59
Pregunta: ¿Qué precondición debe cumplir N? ¿Qué sucede si el número
que ingresa el usuario es -1?
Problema 21: Solicitar al usuario que ingrese un valor N y mostrar todos los
valores comprendidos entre N y 1, comenzando desde N.
60 | Lovos y Goin
Problema 22: El factorial de un número entero se denota de la siguiente manera
«n!» y su resultado es n!=n*(n-1)*(n-2)*…*1. Por ejemplo: 5!=5*4*3*2*1
siendo el resultado 120. Se pide desarrollar un programa que lee un valor N
y determine su factorial.
Diagramación lógica | 61
2. 8. 4. Máximos y mínimos
Problema 23: Hallar la persona de mayor edad, sabiendo que se leen datos
correspondientes a 20 muestras.
62 | Lovos y Goin
Tomar en cuenta que si se produce el caso de empate la condición es
falsa, por lo tanto, no sufre efecto.
Si el ejercicio además solicitara hallar la mínima edad entre las 20 per-
sonas, entonces será necesario agregar otra variable, por ejemplo EMIN
y asignarle un valor extremadamente grande de entrada (por ejemplo:
EMIN = 1000) y la condición (E < EMIN) para la decisión.
A continuación se muestra un ejemplo de cómo hallar el mínimo.
Problema 24: Hallar la persona de menor altura, sabiendo que se leen datos
correspondientes a las alturas de 30 personas. El ingreso es en números
enteros y en cm.
Diagramación lógica | 63
El valor absurdo de entrada será AMIN=1000 (ninguna persona mide 10 m).
¿Qué sucede si además de registrar la mínima altura de la persona, se
desea conocer en qué ubicación (orden dentro de la lista de valores leídos)
se encuentra tal persona?
64 | Lovos y Goin
A la variable UMIN se le asigna el valor de la variable de iteración i del
Para. Por ejemplo, si la altura mínima se produce en la vuelta 8 significa que
i es igual a 8.
De esta manera se tiene el registro de cuándo se produce la última con-
dición verdadera de la decisión.
En caso de empate, el único registro que se produce es el primero que llega.
Diagramación lógica | 65
2. 8. 6. Estructura de control de iteración (sentencia «mientras»)
Problema 26: Calcular la suma de los números ingresados por teclado hasta
que se ingrese un cero.
66 | Lovos y Goin
Es necesario leer el valor de la variable N antes de comenzar con el bucle
«mientras», porque se debe evaluar la condición al entrar al ciclo de repeti-
ción. Luego es importante no olvidarse de volver a leer N dentro del bucle,
porque si no lo hacemos caeremos en un ciclo de repetición infinito.
¿Cuál será el resultado si arrancamos ingresando un cero?
Problema 27: Hallar el promedio de números ingresados por teclado hasta que
se lea un número impar o uno menor a 20.
Diagramación lógica | 67
Nota: También se puede introducir en la salida la combinación de un car-
tel y un cálculo, como en el caso anterior donde se realiza el promedio S/C
sin depender de otra variable: prom ← S/C.
Esto es así porque estamos dividiendo por cero, ya que C nunca pudo
incrementarse. ¿Cómo podríamos solucionar este problema? ¿En qué casos
es posible hallar el promedio?
Nota: Para poder solucionar este problema tendremos que recurrir a una
decisión antes de efectuar la división, de la siguiente manera:
68 | Lovos y Goin
Problema 28: Se leen números que ingresa el usuario desde teclado, hasta que
llega un valor negativo. Se pide que determine cantidad de impares y pares
leídos. El cero no se cuenta.
Diagramación lógica | 69
Mientras la condición del ciclo de repetición cumpla con N mayor o
igual a cero, se determina si dicho número es distinto a 0 y luego si es par o
impar para incrementar CP o CI respectivamente.
Nota: No olvidarse de leer N antes del ciclo y dentro del mismo. ¿Qué
sucedería si no leemos dentro del ciclo?
Problema 29: Diseñar un algoritmo que calcule cuánto es el cociente entre dos
números (únicamente dos números pares). Si el usuario ingresa un número
impar, le pide otra vez el número hasta ingresar uno que sea par.
70 | Lovos y Goin
Nota: Se asignan al inicio del algoritmo a las variables N1 y N2 el valor 1
(uno) para que puedan entrar a los ciclos de repetición «mientras» y así
pedir el nuevo valor.
Prueben ingresar valores impares y verán como repite el ingreso hasta
que se lea un valor par.
Problema 30: Diseñar usando FreeDFD un algoritmo que muestre por pantalla
10 números impares generados al azar (del 1 al 9, solo impares). Si el número
obtenido al azar es par debe continuar hasta hallar un impar.
Diagramación lógica | 71
Nota: Antes de entrar al ciclo de repetición Para se le asigna a la variable N un
valor 2 obligando a entrar al ciclo «mientras» hasta encontrar un número N
impar. Esto sucede 10 veces porque se encuentra dentro del Para.
72 | Lovos y Goin
Capítulo 3
Pseudocódigo
Pseudo deriva del griego seudo, que significa ‘falso’, mientras que código pro-
viene del latín: codices, codex. Estos se empleaban para referirse a los docu-
mentos o libros donde los romanos tenían escritas todas y cada una de sus
leyes. En definitiva pseudocódigo significa ‘falso lenguaje’.
Como se explicó en el capítulo introductorio, el diseño del algoritmo es
independiente del lenguaje de programación, es decir, una solución a un
problema puede ser escrita en diferentes lenguajes. Así, el pseudocódigo
está diseñado para facilitar la comprensión de la solución algorítmica. En
pocas palabras, es una herramienta que facilita el proceso de programar.
Aunque no existe una sintaxis estándar para el pseudocódigo, las dife-
rentes versiones utilizan un lenguaje similar al lenguaje natural y, en gene-
ral, su escritura exige la indentación (sangría en el margen izquierdo) de
diferentes líneas. En el caso de este libro, se usará la sintaxis provista por el
aplicativo PSeInt.
3. 1. PSeInt
Pseudocódigo | 73
Una vez descargado e instalado se puede ejecutar a través del icono:
74 | Lovos y Goin
Se describen con detalle todos los pasos a seguir en PSeInt para resolver
el problema 1.
Pseudocódigo | 75
Una vez terminado el programa en el sector de trabajo es necesario
probarlo ejecutándolo con el ícono o directamente con la tecla F9.
Importante:
i) Evitar dejar líneas de comando en blanco.
ii) Tener en cuenta al nombrar variables que no se diferencian mi-
núsculas de mayúsculas.
iii) Las palabras reservadas del programa aparecen en negrita.
iv) Guardar los archivos.
v) Probar el funcionamiento de cada programa.
vi) Para empezar un nuevo algoritmo hacer un click en el ícono .
Nota: Realizar en PSeInt el problema 2 (del capítulo 2).
76 | Lovos y Goin
Atención: Es muy importante tomar en cuenta las tabulaciones que se
presentan. En este caso, lo que va dentro del Si y Sino se tabula. Esta
acción tiene por nombre indentación y PSeInt la realiza automáticamente.
La indentación es lo que permite determinar un bloque de acciones que
se ejecutarán juntas. Luego, cada lenguaje de programación usará sus
propios símbolos para esto, por ejemplo, en el lenguaje C se usan las llaves
{}; en Pascal, las palabras reservadas «Begin-End». Es muy importante
acostumbrarse a escribir código indentado ya que facilita la lectura y la
detección de errores.
Pseudocódigo | 77
A continuación, se muestra el problema 4, donde se presenta un caso de
decisión doble.
Problema 4 (del capítulo 2): Igual al ejemplo anterior pero en el caso de ingresar
un radio erróneo (cero o negativo) indicarlo con el cartel “Error”.
78 | Lovos y Goin
Problema 6 (del capítulo 2): Mostrar el número más grande (entre dos) ingresado
por teclado. Si los dos números son iguales mostrar el cartel “Son iguales”.
Pseudocódigo | 79
Problema 7 (del capítulo 2): Ingresar dos números por teclado y sumarlos, con
la condición de que cada uno sea positivo (de lo contrario cambiar el signo).
No olvidarse de comentar las variables en uso.
3. 2. Operadores lógicos
80 | Lovos y Goin
Problema 8 (del capítulo 2): Verificar que el número ingresado por teclado se
encuentra dentro de la primera docena de números naturales, es decir entre
el 1 y el 12.
Pseudocódigo | 81
Problema 12 (del capítulo 2): Ingresar un número natural por teclado. Se desea
saber y mostrar si es par o impar.
82 | Lovos y Goin
Para el caso de la estructura de control de repetición «para», el comando
del PSeInt es:
Pseudocódigo | 83
Nota: En el problema 18 se utilizan variables de diferentes tipos; entero,
decimales y alfanuméricos. Con la intención de mejorar la lectura del
código se han agrupados los tipos por línea.
84 | Lovos y Goin
Nota: Realice los problemas 20, 21 y 22 directamente utilizando el programa
PSeInt sin depender del diagrama de flujo.
Pseudocódigo | 85
Para el caso de la estructura de control de repetición «mientras» el co-
mando del PSeInt es:
Nota: Realizar los problemas 27, 28, 29 y 30 del capítulo anterior utilizando
directamente el software PSeInt (sin la necesidad de recurrir al diagrama
de flujo).
86 | Lovos y Goin
3. 3. Ejercicios: pseudocódigo
46. Se ingresan por teclado 10 pares de temperaturas (T1 y T2) para hallar
el promedio de las temperaturas que están entre 5° y 15° (incluidos).
47. Se ingresan 10 números por teclado para hallar tres datos:
a. La cantidad de números negativos.
b. La suma de los números que se encuentran entre el 1 y el 10 (no
incluidos).
c. El promedio de todos los números.
48. Se generan números enteros en forma aleatoria entre [0 y 200] hasta
que la sumatoria de los mismos sea mayor a 500. Al finalizar indicar:
a. La cantidad de números nulos (0) leídos.
b. La sumatoria de los números que se encuentran entre el 10 y el 100
(incluidos).
c. El promedio de los números menores a 150.
d. El número mayor generado.
49. La sucesión de Fibonacci genera la siguiente secuencia de números:
1, 1, 2, 3, 5, 8, etcétera. Es decir que se obtiene de sumar los dos nú-
meros anteriores.
El siguiente es el término general: an=an-1+an-2
Se pide que diseñe un programa que le solicite al usuario un número
entero positivo K y luego muestre en pantalla el K-ésimo término
de la sucesión de Fibonacci. Por ejemplo, si el usuario ingresa por
teclado el número 10 entonces el algoritmo debe mostrar el valor
correspondiente a a10
50. Realice los ejercicios 25, 37, 38, 43 y 46 del capítulo anterior en
pseudocódigo.
Pseudocódigo | 87
Capítulo 4
Entorno de programación visual
90 | Lovos y Goin
Figura 4.1. Entorno gráfico del programa DaVinci
DaVinci PSeInt
Programa Proceso
Pedir Leer
Informar Mostrar por pantalla
Fin FinProceso
92 | Lovos y Goin
Ejemplo 2: Pedimos que el usuario ingrese los lados de un rectángulo para
mostrar el perímetro y área del mismo en un único cartel de salida “El períme-
tro es __ y el área es __“
Las asignaciones difieren en el símbolo “:=” (en PSeInt es) A ← L1*L2 (en Da-
Vinci es) A := L1*L2
Al igual que en el PSeInt se pueden alternar en la salida texto y variables con
la instrucción «informar».
Operaciones
Tipo Contenido
Aritmética Comparación
Número Números enteros +-*/% <= >= ><<> =
Combinación entre +
Texto <= >= ><<> =
números y letras (para concatenar)
Lógico v/f (verdadero/falso) &|! = <>
94 | Lovos y Goin
Figura 4.3. Configuración de ciudad
Dado que el robot solo puede girar a la derecha es necesario moverlo 3 veces a
derecha para orientar el robot a la izquierda y para eso utilizamos repetir 3.
96 | Lovos y Goin
Ejemplo 5: Recorrer en forma de escalera desde avenida 2 y calle 4, comenzando
horizontalmente hasta llegar a la avenida 7 y calle 8 e informar la posición final.
Los comandos posAV y posCA nos brindan la posición del robot, en este caso,
al finalizar el recorrido.
4. 2. Repetición
98 | Lovos y Goin
La primitiva hayflorenlaesquina devuelve verdadero si en la esquina
hay alguna flor o falso en caso contrario.
Ejemplo 8b: ¿Qué sucede si deseamos que el robot cuente la cantidad de flo-
res halladas pero sin alterar el estado de la ciudad? Es decir, dejando flores y
papeles en el mismo sitio.
El robot también puede moverse teletransportándose, es decir, sin la necesi-
dad de caminar a la esquina deseada, simplemente usando el comando pos.
A continuación, presentamos un ejemplo relacionado.
Atención: Primero, para dirigir el robot hacia abajo debemos girar dos
veces 90º con derecha derecha. La estructura de repetición se efectúa 5
veces para recorrer las avenidas impares 1,3,5,7 y 9 que se incrementan de
dos en dos con la asignación avenida:=avenida+2.
Ejemplo 12: Recorrer todas las esquinas de las avenidas 4 y 8 e informar la can-
tidad de esquinas donde hay flores y no papeles.
En este caso, el robot recorre las dos avenidas dejando la marca porque
estamos usando la instrucción mover.
Nota: Podemos agregar una por esquina y el límite está determinado por
la cantidad total de esquinas de la ciudad.
Nota: Por cada paso que da el robot, se evalúa la estructura de control mien-
tras y se decide si avanza o no el ciclo dependiendo de dos situaciones:
a) Que no se pase del límite de la ciudad avenida<11.
b) Que no aparezca en su camino un obstáculo !hayobstaculo.
Atención: Para probar la solución, previo a la ejecución, agregar a la
ciudad por lo menos un obstáculo.
4. 3. Modularización
Ejemplo 15: Juntar todas las flores de las esquinas de la avenida 6. Tenga en
cuenta que podría existir más de una flor.
Ejemplo 18: El robot se dirige a una esquina elegida por el usuario para contar la
cantidad de papeles y flores. Además, indique pre y poscondiciones para el módulo.
Nota: El robot primero solicita la esquina elegida por el usuario y luego llama
(invoca) al procedimiento ContarPapelFlor que tiene dos parámetros de en-
trada (av, calle) y dos parámetros de salida (Papeles, Flores). ¿Cuáles son las
precondiciones que deben cumplir los parámetros de entrada?