You are on page 1of 61

LENGUAJES ALGORÍTMICOS

Apuntes de la materia

Por Víctor Castillo


CAPÍTULO I

ALGORITMOS

1.1 Procesos.

1.1.1 Definición.
Para poder dar una definición de proceso, debemos adentrarnos un poco
en los sistemas.

La definición de un sistema hace referencia a un conjunto de dispositivos


que se relacionan con el fin de llevar a cabo una tarea. La Teoría General de los
Sistemas presentada por Bertalanfy en el año 1812 brinda un panorama muy
claro sobre la importancia que tienen los sistemas en la vida cotidiana.

Si pusiéramos atención a todo lo que nos rodea, veríamos que estamos


sumergidos en muchos sistemas, y que todos ellos conviven, de alguna u otra
manera, con el fin de hacer que nuestra vida sea “normal”. Por ejemplo, el
cuerpo humano es un sistema global formado por el sistema nervioso, el sistema
cardiovascular, sistema respiratorio, etcétera, cada uno de los cuales trabaja en
conjunto con los otros a fin de mantenernos vivos. Si escarbáramos en los
sistemas, veríamos a su vez, que todos ellos están formados de procesos. Por
ejemplo, el sistema nervioso, entre otros, cuenta con un proceso de sensibilidad
al mundo exterior, el cual nos ayuda, a sentir cuando el ambiente es frío o cálido.

Un proceso es un conjunto de actividades desarrolladas con el fin de


llevar a cabo una tarea específica.

Gracias a los procesos, las computadoras ha llegado a ser tan útiles en la


vida actual. Los procesos de cómputo están enfocados a transformar ciertos
datos en otros datos o en información a velocidades muy grandes, a final de
cuentas esa es la virtud principal de las computadoras.

1.1.2 Componentes.
Un proceso de cómputo se compone de tres partes básicas: entrada,
procesamiento y salida.

La entrada es la parte de un proceso que se encarga de recibir los datos


que serán manejados en el mismo. Es una etapa muy importante, ya que la
información o los datos que genera el proceso dependen en gran medida de qué
tan buenos sean los datos en este fase. El procesamiento es la etapa
fundamental de un proceso, en esta se realizan ciertas operaciones (que
dependen del proceso que se esté siguiendo) para transformar los datos de
entrada en ciertos datos o información de salida (vea figura 1.1).

Figura 1.1. Las partes de un proceso de cómputo.

Entrada Procesamiento Salida


La salida es la parte de un proceso en la que se presentan los resultados
de la etapa de procesamiento.

Las computadoras son menos inteligentes de lo que parecen, la gran


capacidad de procesamiento que muchas veces escuchamos al respecto de las
mismas se debe a la velocidad a la que estas llevan a cabo procesos simples y
no a la complejidad de los mismos.

Ejemplo: Elaborar un proceso para sumar dos números.

Parte I. Entrada de datos: Conocer los elementos a sumar:


A=3
B=5
Parte II. Procesamiento de los datos. Se lleva a cabo la operación que transformará los
datos de entrada (A, B) en un resultado de salida (la suma de los números).
C=A+B
Parte III. Salida de datos. Se presenta el resultado del procesamiento de los datos de
entrada
C=8

Como puede observar, el proceso de suma es muy sencillo. En la mayoría


de los aspectos de informática, los datos son mencionados con nombres de
variables (en este ejercicio usamos las variables A, B y C, de las cuales A y B
son variables de entrada y C es la variable de proceso, la cual es presentada
como salida). Este es un ejemplo típico de un proceso y aunque la mayoría de
los procesos de computadora tienen más variables de entrada, más etapas de
procesamiento y más variables de salida, las partes fundamentales de los
mismos siempre serán las tres mencionadas anteriormente (entrada,
procesamiento y salida).

1.2 Algoritmos.

1.2.1 Definición.

Un algoritmo es un conjunto ordenado y finito de pasos usados en la


solución de un problema o realización de una tarea.
Como podrá notar, esta definición tiene qué ver con la de procesos, detalle
que también observaremos en el párrafo siguiente.

Un algoritmo está compuesto de tres partes principales, cada una con


funciones muy particulares. La etapa de entrada indica los datos que son
necesarios para la solución del problema en cuestión. En la etapa de proceso o
procesamiento, es donde se realizan las operaciones que tienen que ver con la
solución del problema, mientras que en la etapa de salida es donde se mostrarán
los resultados obtenidos en el procesamiento.

Con estos pasos tan sencillos es como se construyen los programas más
sofisticados. Los lenguajes algorítmicos nos proporcionan metodologías que
permiten representar cualquier problema (o casi cualquiera) para posteriormente
expresarlo en un lenguaje de computadora. De lo anterior podemos concluir que,
expresando correctamente un problema mediante un algoritmo, podemos
representarlo en cualquier lenguaje de programación, esta es la razón por la que
interesa el estudio de la presente materia.

1.2.2 Características de los algoritmos.


a) Un algoritmo debe ser preciso, e indicar el orden de realización de cada
paso.

b) Un algoritmo debe estar definido. Si se sigue un algoritmo dos veces, se


debe obtener el mismo resultado cada vez.

c) Un algoritmo debe ser finito, si se sigue un algoritmo se debe terminar en


algún momento.

Ejercicio: Escriba un algoritmo para calcular el promedio de 4 números.


La solución se lleva a cabo estructurando el problema en las partes que conforman el
algoritmo, así tenemos:

ENTRADA

PASO 1: Conocer los números a promediar: A =2, B =3, C =4, D =5

PROCESAMIENTO

PASO 2: S =A + B + C + D
PASO 3: P = S/4

SALIDA

PASO 4: P
Se debe observar en la solución que existe una secuenciación, esto es, la
solución se va dando en forma de pasos bien definidos: después del paso 1, sigue
el 2, luego el 3, para finalmente dar el resultado de salida en el paso 4.
Ejercicio: Elabore un algoritmo para ayudar a una persona a cruzar la calle.
ENTRADA

PASO 1: Checar la luz del semáforo. Ir a paso 2.

PROCESO

PASO 2: Preguntar Æ Si L = Verde, ir a paso 3. De lo contrario ir a paso 1

SALIDA

PASO 3: Cruzar calle

1.3 Datos.

1.3.1 Definición.
La forma más sencilla de definir un dato, es como aquel hecho que nos da
una idea básica de algo, es cualquier carácter que produce una imagen en nuestro
cerebro. Muy bien, aunque esto es una definición poco formal, es muy útil, ya que
un dato es una secuencia de símbolos (letras, números, etcétera) que representan
un valor y que por sí solos no tienen un significado. Como ejemplos de datos,
tenemos los siguientes: perro, 345, 86-1841, tapa, i. Todos estos datos no nos
dicen o no representan algo útil si no son procesados o relacionados de alguna
manera. De la definición de dato, se puede pasar a la definición de información.
Reafirmando, diremos que los datos son hechos, conceptos disponibles para ser
procesados o convertidos en información mediante un sistema de procesamiento.
Muchos autores afirman que los datos son la materia prima de la información. De
aquí que la información es el proceso que se hace de los datos.

Vamos a suponer que tenemos los siguientes datos: pizarrón, gis, borrador,
bancos, escritorio, silla, treinta jóvenes, una persona adulta. Muy bien, ¿ De qué
estamos hablando? Si relacionamos los datos es muy probable que tengamos la
información de que hacemos referencia a un salón de clase, si necesitáramos
alguna otra información (si es un salón con alumnos de preparatoria o secundaria,
por ejemplo) tendríamos que proporcionar más datos (la edad).

El ejemplo anterior es elemental, pero proporciona una idea clara de la


diferencia entre dato e información. Aunque parezca una cuestión simple, existe
un gran estudio respecto a la información que se conoce como Teoría de la
Información, mismo que se encuentra sustentado en gran medida en el trabajo
del norteamericano Claude Shannon presentado en 1948.
1.3.2 Tipos de datos.
Internamente, los datos que maneje una computadora deben ser
representados de la forma más clara posible, por esta razón, se clasifican de
manera que puedan representar varios rangos. Estos rangos determinan lo que se
conoce como tipos, mismos que determinan las operaciones que cada uno puede
soportar (por ejemplo, no es posible obtener el cociente de dos nombres de
personas, operación matemática que sí sería válida para dos números). La
definición de los tipos de datos que utilizaremos en lenguajes algorítmicos o
diagramación es la más sencilla (cabe señalar que todos los lenguajes de
computadora manejan muchos tipos de datos).

1.3.2.1 Datos numéricos.

Los datos numéricos, cómo su nombre lo indica, serán aquellos que sólo
pueden representar números. De esta manera diremos que existen datos
numéricos enteros y reales (con decimales). Las variables que representen datos
numéricos serán identificadas sólo con su nombre. Ejemplos: A, Edad, X1,
etcétera.

1.3.2.2 Datos alfanuméricos.

Este tipo permite manipular datos que contengan números y letras. Las
variables alfanuméricas deben representarse con un signo de pesos antes de la
mismas. Por ejemplo: $A, $Nombre, $Y2, etcétera.

1.2.3.2 Datos lógicos.

Los datos lógicos sólo permiten almacenar dos tipos de valores: cierto y
falso. Por lo general, los datos lógicos son devueltos por expresiones dónde se
realiza alguna condición o pregunta.

1.3.3 Operaciones.
Las operaciones que pueden realizarse entre los datos tendrán que hacerse
por medio de operadores. Como mencionábamos en puntos anteriores, no todos
los operadores pueden aplicarse a todos los tipos de datos. Enseguida lo
veremos.

De esta forma, en la tabla 1.1 presentamos los operadores aritméticos que


son válidos en lenguajes algorítmicos.
Tabla 1.1. Los operadores aritméticos y su orden de precedencia.

PRECEDENCIA OPERADOR OPERACIÓN


Más alta ↑ Exponenciación
* Multiplicación
/ División
+ Suma
- Resta
Más baja % Módulo

En la Tabla 1.1 podemos ver la columna llamada precedencia, la cual nos


indicará el orden en que se ejecutan los operadores cuando son encontrados en
una expresión (este asunto se tratará con más detalle en el punto 1.4).

La tabla 1.2 nos muestra los operadores relacionales. Estos tienen el mismo
orden de precedencia y debe hacerse una diferenciación entre el operador
relacional igual(=) y el operador de asignación igual(=).

Tabla 1.2. Operadores relacionales.

OPERADOR OPERACIÓN
= Igual
> Mayor que
< Menor que
>= Mayor o igual que
<= Menor o igual que

Los operadores lógicos, por otra parte, se muestran en la tabla 1.3. En ellos
si existe orden de precedencia.
Tabla 1.2. Operadores lógicos.

PRECEDEDENCIA OPERADOR OPERACIÓN


Más alta NOT Negación
AND Conjunción
Más baja OR Disyunción

Para finalizar la parte de operadores mencionaremos que existe el operador


asignación, el cual permite representar el paso del valor de una expresión a una
variable. El operador ← indica que el resultado de la expresión que esté a su
lado derecho será pasada a la variable que se localiza en su lado izquierdo:

A←4+5

en la anterior expresión asignamos a la variable A el valor de 4+5 (esto es, A


vale 9). Lo cual difiere de preguntar si la variable A es igual a nueve, en cuyo
caso se expresaría con el operador de relación = de la forma:

A=4+5

en el caso anterior estamos haciendo la pregunta: ¿ Es la variable A igual a


4+5?, lo cual nos devolverá un valor lógico cierto o falso dependiendo cuánto
vale dicha variable A.

1.4 Constantes, variables y expresiones.


Cuando referimos un tipo de datos, lo hacemos en forma de constantes o
variables. Una variable es un objeto (dato en la memoria de la computadora) que
puede cambiar su valor a lo largo de la ejecución o funcionamiento de un
programa. El caso contrario lo representan las constantes, las cuales mantienen
fijo su valor mientras un programa se ejecuta.

Como observará el lector, hemos venido manejando desde puntos


anteriores el concepto de expresión, la cual definimos como un conjunto de
constantes, variables y operadores. Las expresiones se componen de operadores
y operandos.

La siguiente es una expresión:

A+3
en la cual apreciamos dos operandos (la variable A y la constante 3) y un operador
(el operador que representa una suma “+” entre los operandos).

Existen dos tipos de expresiones: aritméticas y lógicas. Las expresiones


aritméticas arrojan valores numéricos, las lógicas valores lógicos(cierto o falso).

Veamos ahora unos ejemplos de expresiones. Suponga que las variables


tienen los siguientes valores:

A←3, B←5, C←10, D←1

EXPRESIÓN VALOR DEVUELTO


A+C-D 12
B+C/2 10
A+D-B↑2 -21
A+B=3 FALSO

La primera expresión no tiene problema alguno. En la segunda quizá se


pueda observar alguna ambigüedad, pero queda liberada cuando recordamos el
orden de precedencia: como encontramos el operador “/”,el cual tiene mayor orden
de precedencia que la suma, este se realiza primero que “+”, por tal razón el
resultado es 10. En la tercera expresión el resultado es -21 porque primero se
efectúa la exponenciación de B↑2 (que es igual a 25), luego se realiza la resta a
la suma de A+D (igual a 4) y se le resta el resultado B↑2 dándonos –21. La cuarta
expresión, a diferencia de las anteriores que son aritméticas, devuelve un valor
lógico de falso: estamos preguntando ¿Es la suma de A+B (la cual es 8) igual a
3?, lo cual como observamos es falso.

Las expresiones suelen tomar aspecto un poco más complejos,


observemos las siguientes suponiendo:

A←2, B←4, C←10, D←1

EXPRESIÓN VALOR DEVUELTO


B+C+D/2 14.5
(B+C+D)/2 7.5
A↑2/2+D-B/2↑2 13
((A+B)=3) AND (C↑3>1000) FALSO

Las primeras dos expresiones nos indican que el uso de paréntesis puede
alterar el orden de precedencia (siempre se evalúan primero los paréntesis más
internos), de allí que ambas expresiones aunque similares en apariencia difieran
drásticamente en el resultado. En la tercera expresión nos volvemos a encontrar
con la precedencia de los operadores: recordando, primero se evalúan las
potencias, luego las divisiones y finalmente las sumas y restas en el mismo orden.
En la cuarta expresión, se realiza una conjunción que involucra dos operadores
relaciones, uno de igualdad y otro de mayor, la expresión (A+B)=3 es falsa(4+3 no
es igual a 3), también lo es C↑3>1000 (1000 no es mayor que 1000), de tal forma
que la conjunción de estas expresiones lógicas resulta en un valor lógico final
falso.

Ejercicios propuestos para el capítulo.


1.- Elabore los siguientes algoritmos:

a).- Que tenga por entrada una variable numérica que represente una
cantidad en grados cenígrados (°C) y la convierta a su equivalente en grados
farenheit (°F). Recuerde °F=1.8°C+32.

b).- Que acepte como entrada una variable numérica que represente la
edad de una persona e indique mediante un mensaje si dicha persona puede o no
votar.

c).- Que en su entrada acepte una cantidad numérica que indique un valor
en dólares y que lo convierta a pesos mexicanos. Considere un dólar=9.5 pesos.

d).- Que tome por entrada tres variables numéricas que representen las
calificaciones de un alumno. El algoritmo debe calcular el promedio de dicho
alumno e indicar mediante un mensaje si su promedio es aprobatorio o no.

2.- Suponga los siguientes valores para las variables indicadas:

A←3, B←5, C←10, D←1

y encuentre el valor de las expresiones siguientes:

a).- (A+B/2-1)-(B↑2)*2 _______


b).- (A↑2+B↑2) ↑(1/2) _______
c).- C-D*5/A+4↑2*4 _______
d).- (C-5)=B _______
e).- 8-10%2+C _______
f).- 4*C-B _______
g).- (A/2+3*C-(4*B/(C-B)*7) )↑3 _______
CAPÍTULO II

DIAGRAMAS DE FLUJO

2.1 Definición
Un diagrama de flujo es la representación gráfica de un algoritmo, por esta
razón, cada parte de un algoritmo tiene un equivalente en un diagrama de flujo.
Esta es una forma más explícita de representar problemas, la cual, se ajusta a las
estructuras lógicas de todos los lenguajes de programación existentes.

2.2 Símbolos usados en los diagramas de flujo


En los diagramas existen bloques funcionales que representan las
operaciones descritas para los algoritmos en el Capítulo I. La figura 2.1 nos
muestra las equivalencias que existen entre los algoritmos y diagramas de flujo.
Figura 2.1. Simbología básica equivalente para algoritmos y diagramas de flujo.

Etapa en un algoritmo Figura equivalente en diagramas de flujo

Entrada:

Proceso:

Salida:

Generalmente un diagrama de flujo deberá tener la identificación tanto de


su inicio como su fin. En ambos casos, se utilizará el siguiente símbolo:

Inicio
Fin

Cada uno de los bloques funcionales deben ser unidos mediante flechas
que indiquen el flujo de la lógica del problema en cuestión.

2.3 Implementación de diagramas de flujo a partir de algoritmos.


En este punto describiremos la implementación de diagramas de flujo
tomando como referencia algunos de los algoritmos del capítulo pasado.

Ejemplo: Elaborar un diagrama de flujo que tenga por entrada (lea) dos variables
numéricas y que calcule e imprima su suma.

La solución se formula como sigue, a la izquierda tenemos el algoritmo y a


la derecha el diagrama de flujo equivalente:
ALGORITMO:
INICIO
ENTRADA:
PASO 1: A, B
A,B
PROCESO:
PASO 2: C = A + B
C ← A+B
SALIDA:
PASO 3: C
C

FIN

Como podemos observar en el ejemplo anterior, al algoritmo le corresponde


exactamente un bloque funcional en el diagrama. El símbolo de lectura de las
variables A, B indica que un programa esperará a que el usuario, vía teclado,
introduzca dos valores numéricos, los cuales serán asignados a las respectivas
variables. Una vez asignados los valores a las variables en el bloque de lectura se
elaborará un proceso de asignación de la suma de A, B a la variable C, la cual se
imprimirá seguidamente para terminar. Observe el lector también como existen los
símbolos de inicio y fin del diagrama y que el flujo de la ejecución de cada una de
sus partes lo ilustran claramente las flechas, es decir, después del inicio sigue una
lectura, luego un proceso de asignación para después imprimir o dar salida a un
resultado, enseguida se nos indica que el diagrama termina.

Los símbolos que usaremos a lo largo del curso varían de significado


ligeramente por parte de algunos autores, por ejemplo, el símbolo de salida puede
tener una connotación diferente si se usa para dar salida a pantalla o impresora,
nosotros generalizaremos usando sólo el mostrado previamente.

Ejemplo: Hacer un diagrama de flujo que lea tres números y que calcule e
imprima su promedio.
ENTRADA:
A, B, C INICIO

PROCESO:
P = (A + B + C)/3 A,B,C

SALIDA:
P P ←(A+B+C)/3

FIN

2.4 Reglas para la construcción de diagramas de flujo.


Es necesario advertir al lector que no existen recetas concretas para
solucionar problemas mediante diagramas de flujo o algoritmos, pero sí podemos
decir que siguiendo algunos consejos prácticos, esta tarea se facilitará. También
debemos dejar claro que hay problemas que pueden tener muchas
representaciones en diagramas, pero no por eso algunas serán incorrectas. Las
siguientes líneas son algunas reglas que ayudan a la estructuración de diagramas
de flujo(las cuales fueron tomadas del libro de Joyanes):

1.- Todo diagrama debe tener un principio y un fin.

2.- Las líneas de conexión siempre deben ser rectas, y si es posible que
sean sólo verticales y horizontales (no deben cruzarse ni estar inclinadas). Así
mismo, se deben usar los conectores sólo en casos estrictamente necesarios.

3.- Las líneas que enlazan símbolos entre si deben estar todas conectadas.

4.- Se deben dibujar todos los símbolos de modo que se pueda seguir el
proceso visualmente de arriba abajo (diseño top down) y de izquierda a derecha.

5.- Realizar un diagrama claro y estructurado procurando que la parte


central del diagrama sea la parte central de la hoja de papel.

6.- Evitar la utilización de terminología específica de un lenguaje de


programación.

7.- En las operaciones lógicas recurrir preferentemente a la lógica positiva y


que a la lógica negativa.
2.5 Comprobación de diagramas de flujo.
Según Joyanes, terminado un diagrama de flujo se deben tomar un
conjunto de datos significativos y comenzar la lectura del mismo en el orden arriba
abajo/izquierda derecha y seguir paso a paso todos los símbolos, con sus
operaciones correspondientes, introduciendo los datos tomados inicialmente en
los momentos oportunos y ver cómo responde el diagrama de flujo y si los
resultados son correctos y coherentes. Este fase ayudará a comprobar si el
diagrama tiene algún fallo y en su caso a corregirlo.

A la metodología descrita la llamaremos corrida a mano y suele ser muy útil


en la comprensión de problemas representados mediante diagramas.

Ejemplo: Hacer un diagrama de flujo que lea una variable A y otra B que
representen los coeficientes de una ecuación de 1er grado, de la forma Bx + A = 0
El diagrama debe imprimir el valor de la raíz ( x = - A / B).

INICIO

A, B

X ← - A/B

FIN

Comprobación del diagrama: Suponiendo que damos los valores 4 y 2


respectivamente a las variables A, B en el bloque de entrada, proseguimos con
el bloque de proceso donde podemos ver que a la variable X se le asigna el
valor de –A/B, lo cual corresponde a un valor de –2. Si sustituimos el valor
obtenido de X en la ecuación original (Bx + A = 0) veremos que la igualdad se
cumple. Al lector le corresponderá probar el diagrama con otros valores.

2.5 Ventajas y desventajas de los diagramas de flujo.


Como hemos dicho hasta el momento, los diagramas de flujo presentan
características favorables para ser usados en la solución de problemas que serán
traducidos a un lenguaje de computadora, pero aún con todo esto, existen algunos
inconvenientes en su uso, los cuales deben tenerse presentes. La siguiente es
una lista de ventajas y desventajas tomadas también del autor Joyanes:
Como ventajas principales tenemos:

1.- Rápida comprensión de las relaciones.

2.- Análisis efectivo de las diferentes secciones del programa.

3.- Documentación adecuada de los programas.

4.- Codificación eficaz de los programas.

5.- Depuración y pruebas ordenadas de los programas.

Las desventajas que se pueden observar se resumen así:

1.- Los diagramas complejos y detallados suelen ser laboriosos en


planteamiento y elaboración.

2.- No existen normas fijas para la elaboración de diagramas de flujo que


permitan incluir todos los detalles que el usuario desea introducir.

2.6 Pseudocódigo.
Al igual que los diagramas de flujo, el pseudocódigo es otra herramienta
muy útil para implementar programas de computadora y podemos definirlo como
una técnica para expresar en lenguaje natural la lógica de un programa, es decir,
su flujo de control (Joyanes).

Analicemos la definición dada con un ejemplo. El siguiente diagrama lee


dos variables numéricas A, B y mediante un proceso calcula su suma y luego el
promedio de las mismas. Seguido, imprime dicho valor previamente calculado. Por
otra parte, al lado derecho del diagrama tenemos su codificación en el lenguaje de
programación Pascal. Lo que aparece en este programa es un conjunto de
instrucciones que puede ser interpretado por una computadora para realizar la
tarea de leer dos números y calcular e imprimir en pantalla su promedio. Pero
suponga el lector que ya tiene su diagrama debidamente probado y que aún no
sabe en qué lenguaje se va a codificar, bueno, para esta situación es posible
utilizar pseudocódigo y dejarlo listo para codificar en el lenguaje que se decida
posteriormente.

Veamos primero el diagrama:


INICIO

A, B Codificación:

Program promedio;
Var s, a, b: integer;
S ← A+B p: real;
P ← S/2 Begin
Write(‘Teclee el primer número:‘);
readln(a);
Write(‘Teclee el segundo número:’);
P readln(b);
S:= A + B;
P:= S/2;
Write(‘El promedio es: ’,p:10:2);
FIN End.

Ahora bien, si deseáramos escribir pseudocódigo para el diagrama, lo


haríamos así:

Inicio
Escribir mensaje “Teclea el primer número”
Leer variable A
Escribir mensaje “Teclea el segundo número”
Leer variable B
Procesar : hacer la variable S igual a la suma de A+B
Procesar : hacer la variable P igual a S/2
Escribir el mensaje “El promedio es “ y el valor de P
Fin

Como vemos, el pseudocódigo es un paso cercano a la codificación del


programa (su escritura en un lenguaje de programación), pero concretamente no
representa alguna instrucción de un lenguaje, es decir, sólo expresa en lenguaje
más común la posible escritura de código.

2.7 Ejemplos y solución de problemas relacionados.


a).- Hacer un diagrama de flujo que lea una cantidad en dólares y que la convierta
en su equivalente en pesos (suponiendo que un dólar = $ 9.50).
INICIO INICIO

D D, A

P ← D*9.5 P ← D*A

P P

FIN FIN

Nota: Observe las dos soluciones alternativas planteadas.

b).- Hacer un diagrama de flujo que lea una cantidad que represente una
temperatura en grados Celsius ( ° C) y que los convierta en grados Farenheit (°F).

INICIO

F ←1.8*C+32

FIN
c).- Hacer diagrama de flujo que lea una cantidad en pesos y que la convierta en
dólares (suponiendo que el dólar = $ 10).

INICIO

D ← P/10

FIN

d).- Hacer diagrama de flujo que lea una cantidad en ° C y que la convierta en ° K.

INICIO

K ← C+273

FIN
e).- Hacer diagrama de flujo que lea una cantidad en ° C y que imprima su
equivalente en grados ° F y en ° K.

INICIO

K ← C+273
F ← 1.8*C+32

K, F

FIN

f).- Hacer diagrama de lujo que lea los lados de A, B de un triángulo y que calcule
e imprima la hipotenusa.

INICIO

A,B

C ← (A↑2 + B↑2)↑(1/2)

FIN
g).- Hacer diagrama de flujo que lea e imprima el promedio de 3 calificaciones de
un alumno.
INICIO

A,B,C

P ←(A+B+C)/3

FIN

h).- Hacer diagrama de flujo capaz de resolver una ecuación de segundo grado.

INICIO

A, B, C

DIS ← (B↑-4*A*C)↑(1/2)

X1 ← (-B + DIS) /2*A

X2 ← (B + DIS)/2*A

X1 , X2

FIN
Ejercicios propuestos para el capítulo.
1.- Elabore un diagrama de flujo que lea una variable numérica que represente el
radio de un círculo y que calcule e imprima su área.

2.- Haga un diagrama de flujo que lea una variable numérica X y que calcule e
imprima el valor de Z, suponiendo que

Z =√(X + 7)2 + 4

3.- Construya un diagrama de flujo que lea una variable numérica que represente
la masa de un objeto. El diagrama debe calcular e imprimir la posible energía que
puede liberar ese objeto según la teoría general de la relatividad.

4.- Elabore un diagrama de flujo que lea dos variables numéricas que representen
respectivamente la velocidad y el tiempo que dura el recorrido de un móvil. El
diagrama debe calcular e imprimir la distancia que recorre dicho móvil.

5.- Realice un diagrama de flujo que lea tres variables numéricas X, Y, Z y


determine el valor de la ecuación W, donde:

W = XY+3YX-[3/4Z-(Y2+Z3)]

6.- Hacer diagrama de flujo que lea dos cantidades numéricas que representen las
dimensiones de los lados de un rectángulo. Estas dimensiones deben ser dadas
en centímetros y el diagrama debe imprimir el área de dicho rectángulo en metros
cuadrados.

7.- Hacer un diagrama de flujo que lea una cantidad numérica que indique cierto
número de años. El diagrama debe imprimir la cantidad equivalente en minutos.
CAPÍTULO III

CONCEPTOS DE
DIAGRAMAS DE FLUJO

3.1 Contador.
Existen algunas formas de asignación que gozan de mucha utilidad en
programación. Obviamente, estas formas de asignación manipulan variables, las
cuales reciben nombres técnicos, una de esas formas es el contador.

En los procesos repetitivos es necesario contar los sucesos que ocurren


dentro de un ciclo, estos sucesos pueden ser de muy diversos tipos, y por ahora
no son parte de atención. Pues bien, para llevar un control de esos eventos se
hace uso de un contador, el cual reside en una parte de la memoria de la
computadora y se incrementa o decrementa cada vez que se entra al ciclo. El
incremento (ya sea positivo o negativo) en un contador siempre es constante.
Como ejemplos de contador tenemos:

C ← C+1
N ← N+1

3.2 Sumador.
Este tipo de variable almacena cantidad variables resultantes sumas
sucesivas (Joyanes, 1987). En este tipo de variables, el incremento es siempre
una variable, veamos ahora unos ejemplos de sumadores:

C ← C+T
S ← S+N

3.3 Multiplicador.
Una variable tipo multiplicador, como su nombre lo indica, es aquella que
multiplica valores, sea constantes o variables. Ejemplos:

C ← C*2
N ← N*X

Las tres herramientas mencionadas en lo que va de estos apuntes, tienen


infinidad de aplicaciones, las cuales veremos cuando toquemos el tema de ciclos y
arreglos. Por ahora sólo es importante saber que existen y que cuentan con
características que las identifican claramente. La figura 3.1 muestra en forma
gráfica los tres tipos de variables descritas previamente.
Figura 3.1. De izquierda a derecha, tenemos diagramas que implementan un contador, un sumador y un multiplicador,
respectivamente.

INICIO INICIO
INICIO

C← 1 X← 1
X← 1
C← C+1 S← 1
X← X*1
C S← S+X

X
S
FIN
FIN
FIN

3.4 Control de flujo en un diagrama.


Hasta este momento la lógica de ejecución de instrucciones, en los
diagramas que se han visto, no ha sido interrumpida, es decir, se ejecuta todas
ellas de manera lineal ( de arriba hacia abajo).

Muchas veces será necesario cambiar el flujo de un diagrama tomando en cuenta


ciertas condiciones. Para llevar a cabo sentencias condicionales –el control del
flujo en un diagrama-, se utiliza el siguiente símbolo:

FALSO CIERTO
CONDICIÓN
Dependiendo cuál es la respuesta resultante a la condición, el flujo del
problema irá, a la izquierda, si es falsa o a la derecha si es verdadera.

3.5 Ejemplos y resolución de problemas relacionados.

Ejemplo: Hacer un diagrama de flujo que lea una variable que represente la edad
de una persona y que escriba un mensaje que indique si la persona puede o no
votar en las elecciones.

INICIO

NO SI
"LO SIENTO" E>=18 "FELICIDADES"

FIN
Ejemplo: Hacer diagrama de flujo que lea un número que represente una
temperatura en ° C y que la convierta a ° F. El diagrama debe determinar si la
temperatura convertida es mayor a 300 ° F.

INICIO

F ← 1.8 * C + 32

NO SI
"Es menor a 300 ° C" F>=300 "Es mayor a 300° C"

FIN

Ejemplo: Hacer diagrama de flujo que lea un número y que compare si ese
número es mayor a mil, en cuyo caso debe imprimir el cuadrado del número y en
caso contrario debe imprimir la raíz cúbica del mismo.

INICIO

NO SI
A ← X↑(1/3) X>=1000 A ← X↑2

FIN
Ejemplo: Hacer diagrama de flujo que lea un número y que determine si es
múltiplo de tres, en este cado debe calcular e imprimir respectivamente su
cuadrado y raíz cuadrada. En caso contrario que calcule e imprima su valor
cubicado.
INICIO

M ← N MOD 3

NO SI
X1 ← SQR (N)
X1 ← N * N * N M= 0
X2 ← SQRT (N)

X1 X1, X2

FIN
Ejemplo: Hacer diagrama de flujo que lea dos variables numéricas y que evalúe
la propiedad de tricotomía en dichos números.

INICIO

X, Y

SI
X=Y "Son Iguales"

NO

NO SI
"Y es mayor que X" X>Y "X es mayor que Y"

FIN

Ejemplo: Hacer diagrama de flujo que lea dos variables (X, Y) y que determine si
se satisface la siguiente ecuación.
3X+5Y≥4
INICIO

X, Y

NO SI
"No satisface la ecuación" 3 X + 5 Y >=4 "Si satisface la ecuación"

FIN
Ejemplo: Hacer diagrama de flujo que lea cuatro variables: X1,X2,Y1,Y2. El
diagrama debe calcular la media aritmética de las variables (X, Y) e indicar sus
respectivas medias son iguales o cual de ellas es la mayor.

INICIO

X1, X2, Y1, Y2

SX = X1 + X2
PX = SX / 2

SY = Y1 + Y2
PY = SY / 2

SI
PX = PY "Las m edias son iguales"

NO

SI
"La media de Y's es mayor NO "La media de X's es mayor
que la media de X's" PX < PY que la media Y's"

FIN
CAPÍTULO IV

ESTRUCTURAS ITERATIVAS

4.1 Introducción.
Las estructuras iterativas (también llamadas “bucles”), son procesos que
ejecutan una serie de instrucciones en un número determinado de veces. Las
operaciones, o instrucciones, serán siempre las mismas, pero con datos y
resultados diferentes. En el caso de un programa de computadora, el “bucle” o
“lazo” es un conjunto de instrucciones que deben ser ejecutadas un cierto
números de veces(cada repetición también se conoce como iteración), en una
entrada y una salida; la entrada se producirá con una o varias instrucciones y la
salida del bucle – fin del proceso repetitivo-, se producirá cuando se cumple o no
una condición.

Un bucle que no controle su fin, recibe el nombre de bucle infinito o sin fin,
tiene la forma mostrada en la Figura 4.1.
Figura 4.1. Estructura general de un bucle infinito.

Acción 1

Acción 2

Lo más deseable en un programa es que nunca se caiga en un ciclo infinito,


ya que no tendría mucho sentido no poder detener procesos.

En general, un bucle que no es infinito, es decir, uno que es finito, contará


con las siguientes partes:

• Preparación y arranque.
• Cuerpo.
• Modificación.
• Comprobación de la condición.

El esquema de un bucle finito se muestra en la Figura 4.2.

Figura 4.2. Estructura general de un bucle finito tipo repetir-mientras.

Falso
¿Condición?

Cierto

Proceso(s)

4.2 Estructura repetir-mientras.


La Figura 4.2 ilustra que el proceso o los procesos del bucle serán repetidos
mientras se cumpla la condición, es decir, mientras que esta sea evaluada como
verdadera. Un ciclo tipo de este tipo no asegura que los procesos que pertenecen
a él sean ejecutados, ya que si la condición de entrada no es satisfecha, nunca se
ejecutarán el o los procesos.

4.3 Estructura repetir-hasta.


En Figura 4.3 observamos otra estructura de bucle conocida como repetir-
hasta, en la podemos apreciar que el o los procesos serán ejecutados mientras
que la condición no sea satisfecha. Esta clase de bucle asegura la entrada a el
mismo al menos una vez, a diferencia de las estructuras de bucle tipo repetir-
mientras.

Figura 4.3. Estructura general de un bucle finito tipo repetir-hasta.

Proceso(s)

Falso
¿Condición?

Cierto

En la mayoría de los problemas que se resuelvan con estructuras tipo


repetir-mientras y repetir-hasta es frecuente encontrar, dentro de los procesos que
contiene el bucle, un contador que sea la variable de control que indique cuántas
veces ser ejecutará el ciclo.

4.4 Ciclos automáticos.


Este tipo de bucles se les llama automáticos porque la variable que controla
el número de iteraciones es incrementada de manera interna por el bucle, es decir,
no necesita incrementarse de manera explícita dentro del mismo. La Figura 4.4
ilustra una estructura general de un ciclo automático.
Figura 4.4. Estructura general de un ciclo automático.

var=inicio,fin, incremento

Proceso(s)

En un ciclo automático, el o los procesos serán ejecutados mientras que la


variable de control (var) pasa del valor inicial al valor final en el incremento
especificado.

4.5 Ejemplos y resolución de problemas relacionados.

Ejemplo: Hacer un diagrama de flujo que genere números pares desde 2 hasta
infinito.

INICIO

C← 0

C← C+2

C
Ejemplo: Hacer diagrama de flujo que genere números impares desde 1 hasta
infinito.

INICIO

C ← -1

C← C+2

Ejemplo: Hacer diagrama de flujo que genere números enteros sucesivos desde
1 hasta infinito.

INICIO

C← 0

C← C+1

C
Ejemplo: Hacer diagrama de flujo que genere números de tres en tres hasta
infinito.

INICIO

C← 0

C← C+3

C
Ejemplo: Hacer diagrama de flujo que lea 1000 números y que lea e imprima su
promedio.

INICIO

C← 0
S← 0

C← C+1

S← S+N

NO
C = 1000

SI

P ← S / 1000

FIN

I
Ejemplo: Hacer diagrama de flujo que genere números pares de 2 hasta 200.

INICIO

C← 0

C← C+2

NO
C = 200

SI

FIN
Ejemplo: Hacer diagrama de flujo que genere números enteros sucesivos de uno
en uno hasta N.

INICIO

C← 0

C← C+1

NO
C=N

SI

FIN
Ejemplo: Hacer diagrama de flujo que calcule la media aritmética de N números.

INICIO

C← 0
S← 0
P← 0

C← C+1

S← S+M

NO
C=N

SI

P← S/N

FIN
Ejemplo: Hacer diagrama de flujo que lea un número y que determine si es par o
impar, si el número es par, el diagrama debe generar números pares de 2 – 20 y si
no, impares de 1-19.

INICIO

NO SI
"Número impar" C MOD 2 = 0 "Número par"

C ← -1 C← 0

SI SI
C = 19 C = 20

NO NO

C← C+2
C ← C +2

C C

FIN
Ejemplo: Hacer diagrama de flujo que lea n números y que determine cual de
ellos es el mayor.

INICIO

MAY ← -32000
C← 0

C← C+1

NO
X > MAY

SI

MAY ← X

NO
C=N

SI

MAY

FIN
Ejemplo: Hacer diagrama de flujo que imprima la sucesión de Fibonacci:
0,1,1,2,3,5,8,13,21,…

INICIO

A← 0
B← 1

A,B

C ← A+ B

A← B
B← C

Ejemplo: Hacer diagrama de flujo que imprima números múltiplos de cinco desde
cinco hasta quinientos.

INICIO

C← 0

C← C+5

NO
C = 500

SI

FIN
Ejemplo: Hacer diagrama de flujo que imprima números de uno en uno hasta 50
y que imprima el cuadrado de cada uno.

INICIO

C← 0

C← C+1

N← C*C

NO
C = 50

SI

FIN
Ejercicios propuestos para el capítulo.
1.- Hacer un diagrama de flujo que lea un número N y que genera la siguiente
secuencia:

1 .. 1
2 .. 3
3 .. 9
4 .. 16
. .
. .
N .. N2

2.- Elabore un diagrama de flujo imprima 500 veces la cadena “Hola”.

3.- Hacer un diagrama de flujo que lea un número N y que genere una secuencia
de números primos menores o iguales que N.

4.- Hacer un diagrama de flujo que lea un número N y que genere la sucesión de
Fibonacci para números menores o iguales que N.

5.- Elabore un diagrama de flujo que lea N números y que indique cuántos de ellos
son pares y cuántos múltiplos de 3.

6.- Hacer un diagrama de flujo que lea un número N y que genere una secuencia
de números impares menores o iguales que N.
CAPÍTULO V

ESTRUCTURAS DE
DATOS BÁSICAS

5.1 Vectores.
Un vector es un conjunto de elementos relacionados. En la mayoría de los
lenguajes de computadora, todos los elementos de un vector(o arreglo
unidimensional) son del mismo tipo.

Para poder hacer referencia a los elementos de un vector es necesario que


exista un nombre para el mismo. A cantidad máxima de elementos que podemos
almacenar en un vector se le llama dimensión.

No es posible acceder a todos los datos de un arreglo al mismo tiempo, en


vez de ello se tiene que usar un nombre de arreglo y un número, llamado índice,
que indica a qué elemento del vector se está haciendo referencia.
Figura 5.1. Representación esquemática de un vector.

X= 457 324 3 55
[1] [2] [3] [4]

La Figura No. 5.1 muestra un arreglo de enteros llamado X que tiene una
dimensión de 4. Si queremos hacer referencia al segundo elemento del arreglo X
(el número 324) tendríamos que especificar X[2](se lee como X de 2), es decir,
X[2]=324. Cada uno de estos elementos individuales puede ser tratado como
cualquier variable.

5.2.1 Ejemplos y resolución de problemas relacionados con


vectores.

Ejemplo: Hacer diagrama de flujo que lea e imprima un arreglo de N elementos.

INICIO

K ← 1, N

X[K]

X[K]

FIN
Ejemplo: Hacer diagrama de flujo que lea un arreglo de N elementos y que
imprima su media aritmética.
INICIO

S← 0

K ← 1, N

X[K]

S ← X[K] + S

P← S/N

FIN
Ejemplo: Hacer diagrama de flujo que lea un vector numérico de N elementos y
que indique cuántos de ellos son negativos.

INICIO

P← 0

K ← 1, N

X[K]

K ← 1, N

NO
X[K] < 0

SI

P← P+1

FIN
Ejemplo: Hacer un diagrama de flujo que lea un vector de N elementos que
calcule la siguiente norma:
(X1-M)+ (X1-M)+...+ (XN-M)
Norma = -----------------------------------------
N
Donde M es la media aritmética del vector X.

INICIO

S← 0

K ← 1, N

X[K]

S ← S + X[K]

M← S / N
S2 ← 0

K ← 1, N

S2 ← S2 + (X[K] - M)

DM ← S2 / N

DM

FIN
Ejemplo: Hacer diagrama de flujo que lea dos vectores de dimensión N y que
calcule e imprima la suma de ambos.

INICIO

K ← 1, N

X[K]

Y[K]

K ← 1, N

Z[K] ← X[K] + Y[K]

Z[K]

FIN
5.2 Matrices.
Un matriz es un arreglo bidimensional, es decir, para hacer referencia a
cualquiera de sus elementos son necesarios dos índices.

Las matrices están organizadas en filas y columnas, por lo tanto la


dimensión de las mismas será dada en la forma NxM, donde N representa la
cantidad de renglones(llamados también filas) y M las columnas.

Figura 5.2. Representación esquemática de una matriz.

[1] 457 324 3


[2] 34 34 0
X= [3] 2 342 13
[4] 21 3 32
[1] [2] [3]

En la Figura 5.2 podemos observar la representación esquemática de una


matriz de enteros llamada X, la cual tiene una dimensión 4x3. En la matriz X, el
acceso a los elementos individuales debe hacerse en la forma X[i,i], donde i
representa el número de renglón y j el número de columna, por lo tanto X[3,2] es
342.

5.2.1 Ejemplos y resolución de problemas relacionados con


matrices.

Ejemplo: Hacer diagrama de flujo que lea una matriz de tres por dos (3 X 2).

INICIO

I ← 1, 3

J ← 1, 2

X[I,J]

FIN
Ejemplo: Hacer diagrama de flujo que lea e imprima una matriz de N X M
elementos.

INICIO

N,M

I ← 1, N

J ← 1, M

X[I,J]

I ← 1, N

J ← 1, M

X[I,J]

FIN
Ejemplo: Hacer diagrama de flujo que lea matriz de dimensión NxM y un escalar
. El diagrama debe calcular e imprimir el producto escalar de ambos.

INICIO INICIO

N , M, K N , M, K

I ← 1, N I ← 1, N

J ← 1, M J ← 1, M

X[I,J] X[I,J]

I ← 1, N I ← 1, N

equivale a ....
J ← 1, M J ← 1, M

Y[I,J] ← K*X[I,J] Y[I,J] ← K*X[I,J]

Y[I,J]

I ← 1, N

FIN
J ← 1, M

Y[I,J]

FIN
Ejemplo: Hacer diagrama de flujo que lea una matriz de dimensión NxM y
imprima su diagonal principal.
Ejercicios propuestos para el capítulo.

1.- Hacer diagrama de flujo que lea un vector de N elementos y que indique
cuantos de ellos son pares.

2.- Hacer diagrama de flujo que lea una matriz de N X 3. El diagrama debe
calcular el promedio por fila e cual de tales promedios es el mayor.

3.- Hacer diagrama de flujo que lea un vector de N elementos y que indique
cuantos de ellos múltiplos de tres y cuántos múltiplos de 5.

4.- Hacer un diagrama de flujo que lea un vector de dimensión N y que calcule la
siguiente norma:
(X1-M)2+ (X1-M) 2+...+ (XN-M) 2
Norma = -----------------------------------------
N2
Donde M es la media aritmética del vector X.

5.- Hacer un diagrama de flujo que lea dos matrices y que calcule su producto.

6.- Hacer un diagrama de flujo que lea dos matrices y que calcule su suma.

7.- Hacer un diagrama de flujo que lea una matriz entera de dimensión NxM y que
calcule su matriz transpuesta.

8.- Hacer un diagrama de flujo que lea una matriz entera de dimensión NxM y que
calcule el promedio de sus elementos.

9.- Hacer una diagrama de flujo que lea una matriz de caracteres de dimensión
NxM y que indique cuántos de los caracteres de tal matriz son letras “a”.

10.- Que lea dos vectores numéricos de dimensión N y que indique cuál de ellos
tiene la mayor media aritmética de sus elementos.
CAPÍTULO VI

SUBRUTINAS

6.1 Definición.
La programación estructurada consiste en descomponer sucesivamente un
problema en módulos que tratarán y programarán independientes unos de otros. A
estos módulos también se les llama subprogramas.

El manejo de subprogramas en diagramación se observa el esquema


mostrado en la Figura 6.1.
Figura 6.1. Esquema para el uso de subprogramas en diagramación.

Subprogram a A Subprogram a B

?
Operación 1 Operación 1
Operación 2 Operación 2
. .
. .

Subprogram a
Subprogram a B
A

Fin Fin
Ejemplo: Elaborar un diagrama de flujo que genere un menú con tres opciones:
1.- Suma de dos números
2.- Promedio de N números
3.- Terminar el algoritmo

El diagrama debe desarrollar las opciones 1 y 2 como subprogramas.

Inicio
Subprogram a A Subprogram a B

Menu
N
1.- Sum a de dos núm eros a,b
2.- P rom edio de N núm eros
3.- T erm inar algorit m o

s=0
c=a+b

Opc
i=1, N

c
X[i]

Según Opc

1 2 s=s+x[i]
Fin
Ot ro

P =s/N
Subprogram a
Subprogram a B
A

Falso
Opc=3 Fin

Ciert o

Fin

You might also like