0% encontró este documento útil (0 votos)
78 vistas59 páginas

Programacion - Tte (Unid 2)

Este documento presenta la unidad 2 de un programa de estudios sobre comunicaciones y electrónica. La unidad cubre temas relacionados con algoritmos, diagramas de flujo y estructuras de control. Se divide en 6 lecturas que explican nociones básicas de algoritmos, herramientas de representación como diagramas de flujo y pseudocódigo, estructuras de control como secuencial, condicional y repetitiva, estructuras de datos y operadores lógicos. Adicionalmente incluye actividades de aprendizaje para reforzar la comprensión de los
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
78 vistas59 páginas

Programacion - Tte (Unid 2)

Este documento presenta la unidad 2 de un programa de estudios sobre comunicaciones y electrónica. La unidad cubre temas relacionados con algoritmos, diagramas de flujo y estructuras de control. Se divide en 6 lecturas que explican nociones básicas de algoritmos, herramientas de representación como diagramas de flujo y pseudocódigo, estructuras de control como secuencial, condicional y repetitiva, estructuras de datos y operadores lógicos. Adicionalmente incluye actividades de aprendizaje para reforzar la comprensión de los
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 59

UNIVERSIDAD NACIONAL EXPERIMENTAL POLITÉCNICA DE LA FUERZA ARMADA

NACIONAL BOLIVARIANA
(UNEFA) 2009

PR
P RO
OGGR
RA MA
AM AC
CIIÓ
ÓNN
C
CO OD
D:: S
SYYC
C--1
1551
1223
3
P
PRRIIM
MEERRS SE
EMME ES
STTR
REE
T
TSSU
UCCO
OMMU
UNNIIC
CAAC ON
CIIO NE
ESSY
YEEL
LEEC
CTTR
RÓÓN
NIIC
CAA

U
Unniid
daad
d22

1
UNIDAD 2

ÍNDICE DE CONTENIDO
Pág.
GUÍA DIDÁCTICA – ACTIVIDADES DE APRENDIZAJE 3
SELECCIÓN DE LECTURAS 14
UNIDAD Nº 2:
LECTURA 2. NOCIONES ELEMENTALES DE ALGORITMOS Y SUS 14
HERRAMIENTAS DE REPRESENTACIÓN
LECTURA 3. ESTRUCTURAS DE CONTROL 32
LECTURA 4. ESTRUCTURA DE DATOS 43
LECTURA 5. VALORES DE VERDAD DE LOS OPERADORES LÓGICOS 51
LECTURA 6. VALORES DE VERDAD DE LOS OPERADORES LÓGICOS 57

2
GUÍA DIDÁCTICA
ACTIVIDADES DE APRENDIZAJE
UNIDAD 2
ALGORITMOS Y DIAGRAMAS DE FLUJO

CONOCE EL NORTE DE TU APRENDIZAJE

¡Enhorabuena! has llegado al segundo escalafón del contenido de esta materia; aquí
podrás aprender cómo se resuelven problemas de la vida cotidiana a través del uso de
de los Algoritmos, así como de las herramientas más usadas para la representación y/o
creación de los mismos…. A medida que vayas viendo cada uno de estos conceptos te
darás cuenta que es sumamente importante relacionarlos con los conocimientos
básicos que posees sobre computación, para que de esta forma puedas logar
comprender la utilidad de los Algoritmos y su representación dentro del diseño de los
sistemas de comunicación y electrónica.
Al finalizar esta unidad estarás en capacidad de:

AApplliiccaarr llaass ttééccnniiccaass ddee A Allggoorriittm


mooss ppaarraa llaa rreessoolluucciióónn
pprrááccttiiccaa ddee pprroobblleem maass eenn eell áárreeaa ddee llaa ccoom muunniiccaacciióónn yy
eelleeccttrróónniiccaa

CONOCE EL CAMINO A SEGUIR

Dentro de esta franja te proporcionaremos una serie de lineamientos que te ayudarán a


obtener el aprovechamiento máximo de los contenidos que se presentan aquí, para esto
necesitas tener a mano los siguientes instrumentos y/o recursos:
Î Cuaderno o libreta de apuntes
Î Lápices, borrador, sacapuntas
Î Colores o Marcadores de Color

3
Î Reglas
Î Y sobre todo disposición y ganas de aprender!!!
Para comenzar a estudiar esta unidad es imprescindible que leas de forma detallada
cada sección que conforma esta Lectura nº 2, 3 y 4 y luego de esto, reflexiones para
qué te sirve lo aprendido y cómo lo puedes aplicar en tu vida cotidiana; es necesario
que analices cada concepto allí presentado y además de ello, realices un horario de
estudio que te permita organizar tu tiempo, y establecer así tu propio ritmo de
aprendizaje, en el cual puedas afirmar así cada uno de los conocimientos obtenidos
hasta ahora.
Es importante señalar que para tener este tiempo de estudio es recomendable que
selecciones un lugar tranquilo, en el cual puedas concentrarte para aprovechar al
máximo cada minuto de tu tiempo, y así, producir un aprendizaje significativo de esta
Unidad.
Por último, te sugerimos que puedas frecuentar con regularidad la biblioteca del núcleo
en dónde estudias con el propósito de ampliar tus conocimientos en el área de Diseño
de Algoritmos, además de ello también es recomendable que hagas uso del Internet y
los distintos materiales en línea que allí puedas conseguir…. Éxitos!!!

VERIFICA TU COMPRENSIÓN LECTORA

Dentro de esta franja es necesario corroborar cuánto has comprendido después de


realizar las lecturas de cada objetivo que conforma la Unidad 2, tomando en cuenta que
es necesario que este proceso de lectura lo hagas de de forma secuencial, es decir en
el mismo orden que se presenta, inmediatamente, te animamos a realizar los ejercicios
indicados a continuación:
Realiza la Lectura nº2 y seguidamente elabora:
1. Define: Algoritmo, Algoritmo Cualitativo y Algoritmo Cuantitativo.
2. Indica cuales son las características de un algoritmo y su estructura.
3. Define Diagrama de Flujo. Indica cuáles son sus ventajas y desventajas. Coloca en
una ficha la representación y significado de cada uno de sus símbolos.
4. ¿Qué es Pseudocódigo? Lista sus características, ventajas y desventajas.
5. ¿Qué es Dato?. Define los diferentes tipos de datos.
6. Definir: Variables y Constantes. Además incluye algunos ejemplos.
7. Indica cuales son los operadores numéricos y cual es el orden de prioridad.

4
8. Define cada uno de los operadores lógicos y construye la tabla de verdad de cada
uno de ellos.
9. ¿Qué son las palabras reservada?. Indica algunas.
10. Lista y explica en una tabla cuál es la operación que permite:
a. Proporcionar datos al computador.
b. Mostrar datos al usuario.
c. Mandar mensajes al usuario.
d. Escribir mensajes en un programa.
e. Asignar valor a una variable.
Hacerlo tanto en Diagrama de flujo como en Pseudocódigo.

A continuación realiza la Lectura Nº 3 y responde las siguientes preguntas:


11. ¿Qué es una estructura de control?
12. Defina las tres estructuras de control y escriba la sintaxis de cada una de ellas.
13. Escribe un algoritmo donde describas en detalle cuál es el procedimiento para la
búsqueda de un contacto almacenado en tu teléfono celular.
14. Diseñe un algoritmo que permita calcular el promedio de dos notas cualesquiera.

“Recuerda” que es sumamente importante que dentro de estos dos Algoritmos reflejes
la Estructura que debe tener el mismo, según lo explicado en la Lectura Nº 4.
A continuación después de haber culminado estas dos bloques de actividades, te
recomendamos realizar la Lectura Nº 4 y responder las siguientes preguntas, no
olvides que en estas actividades te estamos reforzando los conceptos más importantes
de esta Unidad.

15. ¿Qué es una estructura de datos ?


16. Cuáles son los tipos de datos estructurados.
17. Define y ejemplifica:
a. Arreglo : Unidimensional y Bidimensional.
b. Registro.
c. Archivo.
d. Base de Datos.
18. ¿Cuándo una estructura de datos es homógenea y cuando es heterogenea?

5
REFLEXIONA

Al llegar a esta franja, nos indica que hemos avanzado en cuanto al aprendizaje
obtenido, ahora pues, es necesario, que demuestres a través de tus reflexiones
personales cómo podrías aplicar dicho aprendizaje en tu vida diaria, para resolver
problemas; es por ello entonces que te animamos a meditar en las siguientes
preguntas:

1. ¿Cada una de las cosas que puedo hacer diariamente se pueden representar a
través de un Algoritmo?.
2. ¿Normalmente cuando me desenvuelvo en mis labores diarias, lo hago de manera
sistematizada, siguiendo siempre una serie de pasos predefinidos para obtener una
solución adecuada?.
3. ¿Habías utilizado antes datos lógicos y operadores lógicos?.
4. ¿Has utilizado alguna vez datos estructurados? ¿homogéneos o heterogéneo?
5. En base a esto, elabora un resumen en el que puedas reflejar cada uno de los
análisis hechos acerca de estas interrogantes, luego, muéstralo a tu Facilitador para
compartir ideas y obtener retroalimentación.

CONSTRUYE TU PROPIO CONOCIMIENTO

Has llegado a la franja que te da la oportunidad de crear conocimientos significativos


para ti y para tus compañeros, e, incluso para todos aquellos que deseen explorar los
beneficios que provee hacer uso frecuente de algoritmos. Te invitamos a aplicar los
conceptos ya vistos en las lecturas, y construir los siguientes algoritmos, en Diagrama
de Flujo y Pseudocódigo:
1. Leer un número y calcular su cuadrado.
2. Calcular el área y el volumen de un cilindro circular recto, leyendo su radio y su
altura. .
3. Leer dos números x, y , calcule y muestre el resultado de la siguiente expresión:
x2 + y − 8y3
w=
x3

6
4. Leer dos números x, y , calcule y muestre el resultado de la siguiente expresión:

z = 5 x5 + 9x − 4 y 2 x3 + 5 y 4

5. Calcular el área de un triángulo en función de la longitud de sus lados:


Área = p ( p − a )( p − b)( p − c )
Donde p = (a + b + c) / 2 y a, b y c son los lados del triángulo.

Utilizar estructuras selectivas para escribir los siguientes algoritmos:


6. Leer tres números enteros y muestre el menor de ellos.
7. Leer un número, calcule y muestre la raíz cuadrada del número si éste es positivo,
en caso contrario, que muestre un mensaje indicando que no es posible calcular la raíz
cuadrada de dicho número.
8. Leer tres notas y determinar cuantas son mayores a 15 puntos. (Ayuda: utilizar un
contador)
9. Leer 5 números y mostrar cuantos son:
a. Mayores a 95
b. Menores a 50 y mayor a 35
c. Menores a 18

A partir de ahora utilizarán estructuras repetitivas:


10. Calcular la suma de 50 números leídos. (Ayuda: utilizar un acumulador).
11. Leer 20 notas y calcular el promedio de dichas notas.
12. Sumar los números enteros del 1 al 100 mediante :
a. Estructura repetir … hasta
b. Estructura Para … hasta … hacer
c. Estructura Mientras … hacer
13. Se desea conocer una serie de datos de una empresa que tiene 50 empleados:
a. ¿Cuántos ganan mas de 2200 BsF?
b. ¿Cuántos ganan entre 1420 BsF y 220 BsF.? Incluyéndo los extremos.
c. ¿Cuántos ganan menos de 1420 BsF?
14. Leer un arreglo unidimensional de 20 posiciones y mostrar la suma de los valores
del vector.

7
15. En un arreglo unidimensional se colocaron los valores de la temperatura de cada
una de las 24 horas de un día. Calcular la temperatura promedio, indicar cual es
la mayor y menor temperatura del día.
16. Dado un arreglo unidimensional de 30 posiciones, mostrar el menor valor del
arreglo e indicar en que posición se encuentra.
17. A continuación se plantea la siguiente situación, la cual debes resolver para
tener de esta forma, el producto esperado en esta sección:
Imagina que te encuentras en una ciudad muy grande, en donde hay
avenidas grandes, una de ellas cuenta con seis (6) canales de circulación,
tres (3) en un sentido ascendente y tres (3) en sentido contrario, en los
cuales circulan muchos vehículos a gran velocidad y el único instrumento que
logra que dichos vehículos paren por un momento es el semáforo. Estas
ubicado entonces en un extremo y te urge pasar al otro. Realiza un algoritmo
cualitativo (es decir describir la solución con tus propias palabras, pero
respetando siempre la estructura que debe seguir todo algoritmo) que te
permita cruzar la avenida, tomando en cuenta que debes aprovechar la
oportunidad cuando los carros se encuentran en espera por el cambio de
luces del semáforo. Es importante señalar que la avenida esta dividida por
una isla y que en cada lado de la isla se encuentra un semáforo.

Además de la búsqueda de un valor en un vector, es necesario con frecuencia ordenar


sus elementos en un orden en particular, es decir organizar los datos de un vector en
una secuencia específica.
A continuación mostramos la siguiente corrida de un algoritmo que ordena un vector,
llamado método de intercambio o de la burbuja:
18. Burbuja: Consiste en comparar pares de elementos adyacentes e
intercambiarlos entre sí hasta que estén todos ordenados. Con el siguiente
arreglo: {40,21,4,9,10,35}:

Primera pasada:
{21,40,4,9,10,35} <-- Se cambia el 21 por el 40.
{21,4,40,9,10,35} <-- Se cambia el 40 por el 4.
{21,4,9,40,10,35} <-- Se cambia el 9 por el 40.
{21,4,9,10,40,35} <-- Se cambia el 40 por el 10.
{21,4,9,10,35,40} <-- Se cambia el 35 por el 40.

Segunda pasada:
{4,21,9,10,35,40} <-- Se cambia el 21 por el 4.
{4,9,21,10,35,40} <-- Se cambia el 9 por el 21.
{4,9,10,21,35,40} <-- Se cambia el 21 por el 10.

Ya están ordenados, pero para comprobarlo habría que acabar esta segunda comprobación y
hacer una tercera.

8
A continuación mostramos el algoritmo burbuja en pseudocódigo que permite ordenar un vector
en forma creciente:

algoritmo burbuja
variables aux: real
i, j , n : entero
x : Arreglo[1..10] reales
inicio
n ← 10
{lectura de un vector}
para i ← 1 hasta n hacer
leer x[i]
fpara
{clasificación del vector}
para i ← 1 hasta n − 1 hacer
para j = i hasta n − 1 hacer
si x[ j ] > x[ j + 1] entonces
{intercambiar}
aux ← x[ j ]
x[ j ] ← x[ j + 1]
x[ j + 1] ← aux
fsi
fpara
fpara
{imprimir vector ordenado}
para i ← 1 hasta n hacer
escribir x[i]
fpara
fin
a. Hacer una corrida del algoritmo para el siguiente vector:
x[i] = [−1, 13, − 4, 7, − 9, 10, − 12, 8, − 2, 0]
b. ¿Cómo escribiría el algoritmo si queremos ordenar un vector en forma
decreciente?.

9
COMPARTE Y APRENDE DE OTROS

En esta etapa, te darás cuenta que al compartir los conocimientos adquiridos con tus
compañeros, miembros de la familia y/o comunidad en general, podrás mejorar tu
aprendizaje y descubrir otros, en los que tal vez no habías pensado.
Es por ello, que te animamos a realizar la siguiente actividad:
1. Basándote en las actividades de la franja anterior, reúnete en grupo con tus
compañeros para hacerles conocer tus respuestas y a su vez conocer las de
ellos, sí descubres alguna estrategia que te permita resolver los problemas
planteados de una manera más fácil, anótala y medita en ella.
2. Comparte con tus compañeros la solución que le diste al problema 17 de la franja
anterior y expresa de forma gráfica las diferencias entre las distintas soluciones.
3. Hacer una corrida del algoritmo burbuja, pero en orden decreciente para el
siguiente vector:
x[i] = [−1, 13, − 4, 7, − 9, 10, − 12, 8, − 2, 0]

ELABORA UN PRODUCTO PROPIO

A todo ser humano le encanta dar a conocer a otros los hallazgos o descubrimientos
que ha tenido, es propicio entonces qué muestres lo aprendido hasta ahora, a través
de la creación de un producto amigable y de fácil comprensión para la comunidad que
te rodea.
Basándote en los conocimientos previos que tienes sobre los pasos que realiza un
computador para llevar a cabo el procesamiento de datos o información
1. Realiza un algoritmo en el cual puedas reflejar un proceso específico de tu
comunidad, como por ejemplo: imprimir un trabajo, realizar una presentación en
Power Point, hacer una solicitud de servicio a la alcaldía o ente proveedor del
servicio, el proceso de gestión de un consejo comunal entre otros; es necesario,
que delimites bien tu situación, con el propósito de evitar confusiones. Luego de
ello elabora un rompecabezas en el cual muestres la solución de tu problema a
través de un diagrama de flujo y compartas el mismo con los miembros de tu
familia y comunidad en general, tomándote tiempo para explicarles de que trata
tu novedoso producto.

10
2. Registra en un arreglo unidimensional, la cantidad de horas que empleas cada
día en realizar actividades de estudio semanalmente. Hacer un algoritmo que
sume la cantidad de horas semanales de estudio, el promedio de horas de
estudio y la menor y mayor cantidad de tiempo que empleaste en estas
actividades y el día.

“Recuerda” mostrar los avances de este trabajo a tu Facilitador para aclarar las dudas
y obtener mejoras, si es necesario.

CONCIENTIZA TU APRENDIZAJE

Al llegar a esta franja has demostrado un crecido sustancial dentro de la materia y


posees entonces un cúmulo de conocimientos que al principio de esta unidad eran
desconocidos para ti; es momento pues, de que medites en el antes y el ahora y
entonces puedas tomar conciencia de cuánto has aprendido realmente hasta este
momento. Es por ello que te animamos a responder las siguientes interrogantes:
1. ¿Cómo te sentiste la primera vez que empezaste a realizar la lectura de esta
unidad?
2. ¿Cómo te sientes ahora?, ¿es difícil?
3. ¿Conocías algunos de los aspectos mencionados en estas lecturas antes de
comenzar a estudiarla?
4. ¿Qué conoces ahora?, menciona al menos 10 conceptos que han sido
significativos para ti.
5. En una escala del 0 al 9 que puntaje te colocarías al inicio de este trayecto, y
que puntaje te colocas ahora.
6. Realiza un escrito en donde puedas expresar tus conclusiones acerca de cómo
has logrado tu aprendizaje, si este recorrido se te ha hecho fácil o difícil, cómo te
preparas para enfrentar las siguientes lecciones y sobre todo que es lo que
realmente te ha motivado más durante el estudio de esta unidad.

11
AUTOEVALÚATE

En esta franja demostrarás que realmente manejas lo que has afirmado saber en la
franja anterior, aquí realizarás una serie de ejercicios, que te permitirán explicar lo que
realmente conoces hasta ahora:
2. ¿Qué es un Algoritmo?
3. ¿Cuáles son las características principales de un algoritmo?
4. ¿Cuáles son las herramientas más usadas para representar un algoritmo?
5. ¿Cuando es recomendable utilizar los Diagramas de Flujo?
6. ¿Qué ventajas tiene el uso del Pseudocódigo frente a los Diagramas de Flujo?
7. Realiza, en cada uno de los casos, un algoritmo que te permita:
a. Cambiar los canales de televisión a través del control remoto del mismo. Utiliza
Diagramas de Flujo y Pseudocódigo.
b. Leer las notas definitivas de un curso de Informática, promediar las notas y
contar el número total de aplazados y aprobados en dicho curso. (Ayuda: Utilizar
EOF:end of file).
c. Calcular el factorial de un número natural
(Ayuda: el factorial de un número n ∈ N , n!= 1 ⋅ 2 ⋅ 3 ⋅ 4 ⋅ ⋅ ⋅ ⋅(n − 1) ⋅ n )
d. Dado un arreglo unidimensional de 30 posiciones, mostrar el mayor valor del
arreglo e indicar en que posición se encuentra.
e. Ordene, en forma creciente el siguiente vector, usando el algoritmo burbuja.
x[i] = [1.75, − 13.48, − 4, − 7, 1, − 10.3, 12, − 8, 2, 0.5]

“Recuerda” mostrar estos ejercicios a tu Facilitador con la finalidad de recibir


retroalimentación y corrección de los resultados obtenidos.

12
AMPLÍA Y PROFUNDIZA TUS CONOCIMIENTOS

Siempre en la vida se necesita estar actualizado y no conformarse con una sola opinión,
en esta franja tienes la oportunidad de ampliar en gran manera cada uno de los
conocimientos que tienes acerca de las definiciones presentadas en las lecturas de esta
unidad; es por ello que te recomendamos revisar la siguiente literatura:
1. Fundamentos de la Programación, Algoritmos y Estructuras de Datos de Luis
Joyanes Aguilar.
2. Las páginas web:
o http://www.algoritmia.net/
o http://www.fdi.ucm.es/profesor/manu.ortega/Tema%201%5CEjercicios%20
algoritmia.pdf
o http://docencia.50webs.com/Logica.htm
Es importante además, revisar de forma concienzuda cada material que puedas
conseguir en Internet relacionado a estos tópicos; así como también, mantener una
constante comunicación con tu Facilitador, con el propósito de aclarar cualquier duda
que se pueda presentar, y puedas saber que otras fuentes bibliográficas te recomienda
para continuar así en la búsqueda de nuevos saberes relacionados con esta segunda
unidad.

13
SELECCIÓN DE LECTURAS
UNIDAD 2

ALGORITMOS Y DIAGRAMAS DE FLUJO

LECTURA Nº 2: NOCIONES ELEMENTALES DE ALGORITMOS Y


SUS HERRAMIENTAS DE REPRESENTACIÓN
Material compilado y modificado con fines
instruccionales por:
Vera, M (2009). Nociones Elementales de Algoritmos y sus
herramientas de representación. [Compilación]. Trabajo no
publicado. UNEFA – Cojedes.

A diario cada una de las personas, animales, plantas, entre otros, suelen realizar ciertas
actividades y/o procesos que le ayudan a lograr una meta trazada, o bien resolver una situación
problemática; dichas actividades normalmente se rigen por un conjunto de instrucciones
organizadas y bien definidas para cumplir su propósito, y que al tratar de seguirla varias veces
se puede llegar a la misma solución. Es curioso entonces que cuando se menciona el término
Algoritmo, se produzca cierta tensión con respecto al aprendizaje del mismo, cuando
diariamente estos se aplican para solucionar nuestras necesidades, tal es el caso de una receta
de cocina, el proceso de cepillado dental, entre otros. Cada uno de ellos es pues, una
representación de esta útil herramienta que conforma los pilares conceptuales de esta unidad.
Algoritmo
Un algoritmo es un conjunto de instrucciones que conducen a la solución del problema. La idea
de algoritmo es natural como la vida misma, ya que siempre encierra un conjunto de pasos
exento de ambigüedades que lleva a la solución de un problema. Un ejemplo clásico de un
algoritmo es la receta para realizar un plato de cocina; otro algoritmo típico son los pasos
necesarios para construir un típico juego de rompecabezas o un puzzle.
Las características que debe cumplir un algoritmo son:
a) Un algoritmo debe ser preciso e indiciar el orden de la 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.
Existen dos tipos de Algoritmos:

Algoritmo Cualitativo: Son los algoritmos descritos mediante palabras. Ej.:


• La elaboración de una receta de cocina
• El tejido a mano de un abrigo

14
• Búsqueda de un número telefónico
• El cambio de una llanta
• El cambio de un foco quemado
a) Algoritmos Cuantitativos: Son los algoritmos que se basan en cálculos numéricos. Por
ejemplo:
• Pasos a seguir para resolver una ecuación de segundo grado
• Pasos a seguir para calcular los sueldos de los empleados de una empresa
• Instrucciones para calcular los impuestos a pagar de los vecinos de un municipio
Un algoritmo debe constar de tres partes:

Entrada (información dada al algoritmo).


Proceso (cálculos necesarios para encontrar la solución del problema)
Salida (respuestas dadas por el algoritmo o resultados finales de los cálculos)
Y describe en realidad una transformación de los datos de entrada (brutos) en datos de salida
(netos) y sus instrucciones o acciones deberán ser claras y no ambiguas, terminando en
número finito de pasos. La secuencia de instrucciones del algoritmo se puede expresar en
lenguaje natural o en forma gráfica. Por ejemplo, el algoritmo para calcular la superficie el
rectángulo en el primer diseño (lenguaje natural) es:
Algoritmo superficie_rectángulo

Paso 1: Entrada desde periférico de entrada (por ejemplo, teclado) de base y altura.

Paso 2: Calcular superficie = base x altura

Paso 3: Salida de base, altura y superficie

El lenguaje algorítmico suele ser independiente de cualquier lenguaje de programación en


particular, aunque evidentemente existirán influencias obvias. Lo importante es que el lenguaje
algorítmico permita una traducción clara del algoritmo al programa.
Las herramientas de programación empleadas como lenguajes algorítmicos son:
• Diagramas de flujo.
• Pseudocódigos
• Diagramas de Nassi-Sheiderman
Diagramas de Flujo:

Un diagrama de flujo (flowchart) es un diagrama que utiliza símbolos estándar y en el que cada
paso del algoritmo se visualiza dentro del símbolo adecuado y el orden en que estos pasos se
ejecutan se indican conectándolos con flechas llamadas líneas de flujo porque indican la
secuencia lógica del algoritmo.
Los diagramas de flujo han sido la herramienta de programación por excelencia y, aun hoy,
siguen siendo muy empleados. Son fáciles de diseñar porque el flujo lógico del algoritmo se

15
muestra en un dibujo en lugar de con palabras. Sin embargo los diagramas de flujo tienen una
limitación grande: son difíciles de actualizar y complejos de leer si ocupan varias páginas;
cuando se han de modificar los diagramas de flujos resultan difíciles precisamente por su
carácter gráfico. Los símbolos principalmente usados para realizar estos diagramas son:
Símbolos Principales

Terminal: representa el comienzo “inicio” y el final “fin” de un


programa. Puede representar también una parada o
interrupción programada que sea que sea necesario realizar en
un programa.

Entrada/Salida: cualquier tipo de introducción de datos en la


memoria desde los periféricos, “entrada”, o registro de la
información procesada en un periférico, “salida”.

Proceso: cualquier tipo de operación que pueda originar


cambio de valor, formato o posición de la información
almacenada en memoria, operaciones aritmética, de
transferencias, etc.

Decisión: (indica operaciones lógicas o de comparación entre


datos, normalmente dos y en función del resultado de la misma
determina cuál de los distintos caminos alternativos del
programa se debe seguir; normalmente tiene dos salidas,
respuestas sí o no, pero puede tener tres o más según los
casos.

Decisión múltiple: en función del resultado de la comparación


se seguirá uno de los diferentes caminos de acuerdo con dicho
resultado.

Conector: sirve para enlazar dos partes cualesquiera de un


ordinograma a través de un conector en la salida y otro
conector en la entrada. Se refiere en la conexión en la misma
página del diagrama.

Indicador de dirección o línea de flujo: indica el sentido de


ejecución de las operaciones.

Línea conectora: sirve de unión entre dos símbolos

16
Conector: conexión entre dos puntos del organigrama situado
en páginas diferentes.

Llamada a subrutina o aun proceso predeterminado: Una


subrutina es un módulo independiente del programa principal,
que recibe una entrada procedente de dicho programa, realiza
una tarea determinada y regresa, al terminar, al programa.

Símbolos Secundarios

Pantalla: se utiliza en ocasiones en lugar del símbolo de E/S.

Impresora: se utiliza en ocasiones en lugar del símbolo de E/S

Teclado: se utiliza en ocasiones en lugar del símbolo de E/S.

Comentarios: se utiliza para añadir comentarios clasificadores


a otros símbolos del diagrama de flujo. Se pueden dibujar a
cualquier lado del símbolo.

Para comprender un diagrama de flujo, se deben entender primero las dos partes básicas del
diagrama de flujo: los símbolos y las líneas de flujo que conentan estos casos. Por consiguiente
la dirección del flujo es: arriba - abajo/izquierda-derecha. Así pues un diagrama de flujo es una
serie de símbolos, cada uno de los cuales representa un función en el programa, cada una
conectada a la siguiente en dirección descendente por las líneas de flujo.
A continuación se presentan algunos ejemplos sobre el uso de estos diagramas:
Sumar dos números enteros y visualizar el resultado.
Ejemplo 1. Sumar dos números enteros y visualizar el resultado

17
Inicio Inicio

Introducir Leer A y B
2 números

Sumar Suma A+ B
2 números

Visualizar Escribir
Suma Suma

Fin Fin

Método 1 Método 2

Pseudocódigo
Se concibió para superar las dos principales desventajas del diagrama de flujo: el diagrama de
flujo es lento de crear y es difícil de modificar sin un nuevo redibujo. Por otra parte el
pseudocódigo es más fácil de utilizar ya que es similar al lenguaje natural, lo cual implica que es
fácil de mantener, ya que sus modificaciones se pueden hacer incluso con procesadores de
texto.
El pseudocódigo es una mezcla de lenguaje natural y símbolos, términos y otras características
comúnmente utilizadas en uno o más lenguajes de alto nivel.
Por fortuna, aunque el pseudocódigo nació como un sustituto del lenguaje de programación y
por consiguiente sus palabras reservadas se conservaron o fueron muy similares a las de
dichos lenguajes, y por consiguiente al inglés, el uso del pseudocódigo se ha extendido en la
comunidad hispana con términos en español como: inicio, fin, parada, leer, escribir, si-entonces-
sino, mientras-fin-mientras, repetir-hasta-que; etc., sin duda el uso de la terminología del
pseudocódigo en español ha facilitado y facilitará considerablemente el aprendizaje y uso diario

18
de la programación. A continuación se mostrará como se simplifica el ejercicio hecho con
diagramas de flujo a través del pseudocódigo:
Ejemplo 2. Algoritmo: Sumar dos enteros

Inicio

Leer A y B

Suma ← A+B

Escribir suma

Fin
A continuación, se presentarán una serie de ejercicios resueltos que hacen contraste entre la
Técnica de los diagramas de Flujo y la del pseudocódigo:
Ejemplo 3. Algoritmo que realiza el producto entre dos números cualesquiera A y B.

Diagrama de Flujo

Inicio

Pseudocódigo

Leer A, B

Inicio
Leer A, B;
P ← A*B; P ← A*B;
Visualizar P;
Fin
Visualizar
P

Fin

Algoritmo que permite especificar los pasos necesarios para volver a casa después de ir al cine,
considerando los diferentes casos de tener mucho, poco o ningún dinero.

19
Diagrama de Flujo

Inicio

si ¿Bastante no
dinero?

Tomar si Tiene dinero no


un taxi para el Bus

Tomar Volver
el bus a pie

Fin

Pseudocódigo:
Inicio
Si (¿Bastante dinero?) entonces
Tomar un taxi
Sino
Si (tiene dinero para el bus) entonces
Tomar el bus
Sino
Volver a pie
Fin_si
Fin_si
Fin

20
Los datos y las operaciones básicas
Datos
Son objetos sobre los cuales opera una computadora. Los tipos de datos que manipulan las
computadoras se dividen en:
• Simples
• Estructurados
• Definidos por el Usuario.
Los datos simples (sin estructura) se clasifican en los siguientes tipos: Numéricos. Lógicos y
Carácter.
Los datos estructurados están constituidos por datos de tipo simple: Cadenas (string), Vectores
y matrices (arrays), registros (record), Archivos o ficheros (files), Punteros (pointers).
Otros tipos de datos usados hoy en día son los datos definidos por el usuario, como por ejemplo
los enumerados (enum).

Datos Numéricos
Estos son relativos a las diferentes clases de números, entre ellos enteros y reales.
Los enteros, denominados en ocasiones números de coma o punto fijo, son números que no
tiene parte decimal y forman parte del conjunto de los números enteros.
Los reales son números con parte entera y parte decimal que pertenecen al conjunto de
números reales, ejemplo:
7.0 es un número real y no un número entero
7 es un número entero y no un número real.
Note como el punto (como en notación numérica) sirve para separar la parte entera de la parte
decimal y es además la representación que entienden los computadores.
Datos tipo carácter
Los datos de tipo de tipo carácter son los caracteres que pueden interpretar la computadora ya
sean alfabéticos (A, B, C,….Z, a, b, c,…z), dígitos (0, 1, 2,…,9), especiales ($,^, *, <,>,…). Un
dato de tipo carácter es sólo un carácter. Estos se organizan en cadenas que son secuencias
de caracteres válidos encerrados entre caracteres especiales denominados delimitadores que
por lo general son comillas o dobles comillas. Ejemplo:
‘12 de octubre de 1492’ lenguajes FORTAN, Pascal y Modula-2
“12 de octubre de 1492” lenguajes BASIC, Modula-2
El número de caracteres que posee una cadena se le denomina longitud de la cadena; que
pueden variar de una computadora a otra, aceptándose normalmente 255 caracteres. (Joyanes,
2005)

21
Datos Lógicos
También conocidos como booleanos son aquellos que sólo pueden tomar dos valores: cierto o
verdadero (true) y falso (false); estos se utilizan para representar condiciones que influyen en
las estructuras de control, aunque también, se pueden utilizar para representar objetos de tipo
binario digital (estados 0 y 1).
Sobre los valores lógicos pueden actuar los llamados operadores lógicos. Los operadores
lógicos fundamentales son: Y, O, y NO (en inglés AND, OR, y NOT, respectivamente). La
definición de las operaciones se hace indicando los resultados para las cuatro posibles
combinaciones de los valores de los argumentos. La tabla 1 muestra la definición de algunas
operaciones lógicas.
En algunos lenguajes de programación hay definidos sobre los datos de tipo lógico otros
operadores booleanos, como son: NO-Y, NO-O, y NO-exclusivo (en inglés NAND, NOR y XOR).
La tabla 1 muestra la descripción de estas funciones
a b a^b Avb a b a b a b ã
(a y b) (a o b) (a NoY b) (a NoO b) (a Xor b) (No a)

0 0 0 0 1 1 0 1
0 1 0 1 1 0 1 1
1 0 0 1 1 0 1 0
1 1 1 1 0 0 0 0
Tabla 1. Operadores y Funciones Lógicas (Prieto, Lloris y Torres, 2002)
Para estudiar con más detalle cada una de las tablas de la verdad en las cuales se
fundamentan estos tipos de datos lógicos es recomendable realizar las Lecturas n° 4 y 5,
tituladas: VALORES DE VERDAD DE LOS OPERADORES LÓGICOS y TABLAS DE
VERDAD.
Datos definidos por el Usuario
Un tipo enumerado es un conjunto de datos que conservan un orden, tal que cada elemento
tiene sucesor y predecesor, excepto el primero que no tiene predecesor y el último que no tiene
sucesor. Se suelen definir en las cabeceras de los programas, en una sección de definición de
tipos, como por ejemplo:

Tipo Arcoiris = (blanco, amarillo, rojo, verde, azul, violeta, gris )

Automóviles=(BMW, Fiat, Opel, Peugeot, Saab, Volkswgen)

Naipes = (oros, copas, espadas, bastos).

22
Identificadores y Palabras Reservadas
Cuando se escriben programas de computadoras en un lenguaje de alto nivel se necesita
utilizar nombres para identificar los objetos que se desea manipular: variables, constantes,
procedimientos, funciones, etc.
Identificadores
Son los nombres que se le dan a los programas, constantes, variables, subprogramas y otros
objetos o entidades de dígitos, pero deben comenzar con una letra. Ello permitirá elegir
identificadores significativos que sugieran lo que representan. Estos identificadores se
construyen de acuerdo a las reglas de sintaxis del lenguaje específico.
Palabras Reservadas
(Key Word) son las palabras clave y propias de un lenguaje de programación que constituyen la
base de de las sentencias, funciones, expresiones y órdenes.
La regla algorítmica que seguiremos para construir un identificador es:
• Primer carácter de la letra (a hasta la z).
• Segundo y posteriores caracteres (letras y dígitos), admitiendo el subrayado.
• Longitud de identificador (número de caracteres) ilimitado.
Ejemplo de identificadores válidos:

NUM1 AB456 NOMBRE_MAX


NOMBRE _ APELLIDO NOTA _ FÍSICA Alfa
Salario profesión EdadMeses

Ejemplo de identificadores no válidos:

1AB 1NUM5 4NOMBRE-45*

Nota: el carácter subrayado no es válido en todos los lenguajes. Algunos en que existen
son: Turbo Pascal, Turbo BASIC, C, entre otros.
En nuestro lenguaje algorítmico utilizaremos también palabras reservadas, pero con
nombres en español, al contrario de lo que sucede con los lenguajes de programación que
están en inglés.

Palabras reservadas en algoritmos: inicio, fin, si, entonces. Mientras


Palabras reservadas en Pascal: begin, end, if, then, while

Nota:

23
En las lecturas posteriores se verán las palabras reservadas que se tiene en
lenguaje C.

Encabezado
Empezar con la palabra ALGORITMO seguida por una descripción adecuada de acuerdo al
problema a resolver Ej.: ALGORITMO Calcular área del circulo
Inicio del algoritmo
Se debe indicar el inicio del Algoritmo Ej.: INICIO
Constantes
Son datos cuyo valor no cambia durante la ejecución del programa y podemos encontrar tantos
tipos de constantes como tipos de datos.

Constante entera: 0 137 -2518 +17745

Constante real: 1.234 -0.1536 +564473.24

Constantes con nombres


Existen lenguajes, como Pascal, en los que ciertas constantes que son muy frecuentes pueden
recibir un nombre (identificador) con el que se les reconocerá a lo largo de todo el programa.
Como por ejemplo tenemos:

PI = 3.141592 constante pi (π)

e = 2.71828 base de los logaritmos naturales

Los nombres (identificadores) de estas constantes serían pi y e . La declaración de las


constantes hace que su valor se almacene en una posición de memoria de la computadora.
Variables
A diferencia de las constantes las variables pueden cambiar de valor durante la ejecución del
programa. Para nombrar las variables se utilizan identificadores que deben seguir las reglas de
formación ya explicadas. La declaración de una variable origina una reserva de una posición en
la memoria de la computadora y que sea etiquetada con el correspondiente identificador; sin
embargo, el contenido de una posición de memoria (y por consiguiente, el valor de la variable)
se puede cambiar. Y, normalmente, ningún valor inicial se almacena en la posición de memoria.
Esto significa que el uso de una variable antes de almacenar o asignar en ella un valor produce
un valor no definido (esta es así en Pascal, por ejemplo, pero no en BASIC donde las variables
que no han sido asignadas toman como valor inicial cero o cadena vacía)
El valor de una variable en un momento dado (valor actual o real) es el valor almacenado en la
posición particular de la memoria en este momento.

24
El tipo de una variable debe ser uno de los cuatro tipos de datos descritos anteriormente: real,
entera, lógica, carácter o cadena.
Es buena práctica de programación utilizar nombres de variables significativos que sugieran lo
que representan ya que eso hará los algoritmos/programas más legibles y fáciles de
comprender.
Ejemplo:

Nombres de variables significado


Numero _ empleo número identificación del empleo
Horas Horas trabajadas
Tasa Porcentaje de impuestos
Paga _ mes Salario mensual
PagaMes Salario mensual

Nota: el carácter blanco no se admite como identificador, si se desea utilizar como nombre de
una variable un nombre compuesto deberá hacerlo de alguna de estas tres formas (siempre que
lo admita su lenguaje).

PagaMes Paga _ mes Paga.mes


nombreApellido Nombre_apellidos nombre.apellidos

Cabecera del Programa


La cabecera de un programa o algoritmo consta de las siguientes partes:
• Nombre del programa o algoritmo
• Declaraciones de constantes, variables y tipos de datos definidos por el usuario
• Declaraciones de subprogramas (su situación en el programa depende del lenguaje)
Por declaración se entiende la instrucción que con ayuda de la palabra reservada var, const,
tipo, etc., permite asignar a cada variable o constante con nombre, un determinado tipo de
datos o un valor respectivamente. La cabecera típica de un algoritmo será:

algoritmo nombre del algoritmo (IDENTIFICADOR)


const
constante1=valor1
constante2=valor2
var
lista de variables1 : real
lista de variables2 : entera
lista de variables3 : lógica
lista de variables4 : carácter
inicio
<acciones>
fin
25
Un ejemplo es:

algoritmo MEDIA

cosnt

Pi = 3.141592

var
NUMERO, MEDIA, SUMA : real
CONTADOR, N : entera

NOMBRE, DIRECCION : carácter

inicio

<acciones>

Fin

Operaciones aritméticas

Las variables y constantes pueden ser procesadas utilizando operaciones y funciones


adecuadas a sus tipos. En esta sección examinaremos las operaciones que se utilizan con
datos numéricos. Consideremos la siguiente operación: 8 + 5

El símbolo + representa la adición y se conoce como operador aritmético. Los valores 8 y 5 se


llaman operandos. El valor de la expresión 8 + 5 se conoce como resultado de la operación.

Las operaciones aritméticas usuales en todos los lenguajes de programación se indican en la


Tabla 2 con indicación de los tipos de operandos.

Símbolo Operación Tipos de operandos Tipo de resultado

^ Potenciación Entero o real Entero o real

* Multiplicación Entero o real Entero o real

/ División Real Real

+ Suma Entero o real Entero o real

- Resta Entero o real Entero o real

div (\) División Entera Entero Entero (cociente división)

mod Modulo (resto) Entero Entero (residuo división)

* según los lenguajes de programación se utiliza div o bien \

Tabla 2. Operadores Aritméticos (Joyanes, 2008)

26
Las expresiones que contienen variables, constantes y operaciones aritméticas se llaman
expresiones aritméticas.

Ejemplos:

2+3 = 5

4 + 5.0 = 9.0

4.0 + 7.5 = 11.5

El operador / produce un resultado real con independencia del tipo de operando

7/2 = 3.5

7.0 / 2 = 3.5

7 / 2.0 = 3.5

7.0 / 2.0 = 3.5

En las operaciones div y mod los operandos deben ser enteros

7 div 2 = 3 12 div 3 = 4 0 div 5 = 0

7 mod 2 = 1 12 mod 3 = 0 0 mod 5 = 0

7 / 2 = 3 (cociente) y 1 (resto)

Prioridad de las operaciones aritméticas

Las expresiones aritméticas que implican más de un operador (tal como 4 * 5 + 7) pueden ser
evaluadas de diferentes formas, dependiendo del operador que ejecuta primero la computadora.
El orden en que ejecutan las operaciones depende de la prioridad o jerarquía de los
operadores. El orden que seguiremos se muestra a continuación:

Símbolo Orden Operación

^ (mayor) Potenciación

*, / Multiplicación, División

+, - Suma, Resta

div (\), mod * (menor) División (entera), Modulo

* En algunos lenguajes como Pascal, estos operadores tienen mayor prioridad que los
operadores +, -

Tabla 3. Orden de Prioridades para la ejecución de operaciones (Joyanes, 2008)

Las reglas de prioridad son:

• La prioridad más alta es el operador de potenciación o exponenciación que se ejecutará


primero. Los operadores de más baja prioridad son el div y el mod.

27
• Si una expresión contiene subexpresiones encerradas entre paréntesis, éstas se evalúan
primero, utilizando el orden de la tabla 2.2. si existen paréntesis anidados las
subexpresiones internas se evalúan primero.

Ejemplo

Evaluar las siguientes expresiones:

a) 4 * 3 + 5 = 12 +5 = 17

b) (7 * (10 – 5) mod 3) * 4 + 9 =

(35 mod 3) * 4 + 9

2 * 4 + 9 = 8 + 9 = 17

Entrada / Salida

Los cálculos que realizan las computadoras sólo tiene sentido si existe la posibilidad de
proporcionales datos y de conocer los resultados. Estas operaciones de entrada/ salida se
realizan desde dispositivos de entrada/salida como teclados, pantallas, impresoras, discos, etc.

Entrada de datos: lectura de datos de un dispositivo de entrada: teclado, disco.

Instrucción de lectura de datos: leer Read (en inglés)

Salida de datos: escritura de los resultados en un dispositivo de salida: pantalla, impresora, etc.

Instrucción de escritura de datos: escribir Write (en inglés)

Los formatos de las instrucciones de entrada/salida son:

Leer (lista de variables)

Escribir (lista de variables)

Ejemplos:

Leer (A, B, C) entrada de datos desde un dispositivo de entrada, correspondiente a las


variables A, B, C.

Escribir (M, N) salida de datos hacia un dispositivo de salida, donde se escribirán los
valores de las variables M y N.

Comentarios

Los algoritmos deben incluir comentarios aclaratorios de las partes más importantes. Estos
comentarios deben ser concretos y encerrados entre llaves ({ }) o entre corchetes ([ ]) (existen

28
lenguajes de programación en los que se representan los comentarios por REM, apóstrofo (‘),
exclamación (¡), entre otros. Los comentarios son parte significativa de un algoritmo y se deben
incluir cuantos sean necesarios para conseguir la mayor legibilidad posible del mismo. Lo más
recomendables es que en un programa se incluyan sólo aquellos comentarios de carácter
imprescindible, pero que sean aclaratorios.

Una vez estudiado cada uno de estos conceptos, se presentan a continuación una serie de
ejercicios que muestran de forma práctica la aplicación de los mismos:

Ejemplo 4. Realizar un algoritmos que sume dos números

Sean dos números A y B. Se necesitan leer dos números por teclado y asignar el valor de su
suma a una variable S. Las operaciones necesarias son:

Leer A, B

Sumar A, B y asignar su valor a una variable S

Escribir S

Transformando lo anteriormente explicado, en pseudocódigo es:

algoritmo Suma

variables A,B,S: reales

inicio

leer (A,B)

S ← A+B

escribir (S)
fin
Ejemplo 5. Escribir un algoritmo que lea un número y escriba su cuadrado

Pseudocódigo

algoritmo cuadradro_numero

variables numero, cuadrado : reales

inicio

leer (numero)

cuadrado ← numero * numero

escribir (cuadrado)
fin

29
Ejemplo 6. Calcular el perímetro y la superficie de un rectángulo dada la base y altura
del mismo.
Análisis
Las fórmulas de la superficie y perímetro de un rectángulo son:
S = Base * Altura

Altura
P = 2 * (Base + Altura)
Base
La codificación correspondiente es:

SUPERFICIE (S) = Base * Altura

PERIMETRO (P) = 2 * (Base + Altura)

Las variables de entrada son: BASE, ALTURA (de tipo real)

Las variables de salida son: SUPERFICE, PERIMETRO (de tipo real)

El algoritmo expresado en pseudocódigo es:

algoritmo Perímetro_Superficie

variables BASE, ALTURA, SUPERFICIE, PERIMETRO: reales

inicio

{Entrada de datos} Comentario


leer (BASE, ALTURA)

PERIMETRO ← 2* (BASE + ALTURA)

SUEPERFICIE ← BASE * ALTURA


{Salida de datos - resultado} Comentario

escribir (‘Perímetro =’, PERIMETRO)


escribir (‘Superficie =’, SUPERFICIE)
fin
Ejercicios Propuestos:

• Realizar un algoritmo que calcule el área de un triángulo.

• Determinar la hipotenusa de un triángulo rectángulo conocidas las longitudes de los


catetos.

• Calcular la superficie de un círculo

30
Aunado con lo anteriormente explicado, dentro de la codificación de algoritmos muchas veces
es necesario intercambiar valores entre dos variables es decir

A ← B

B ← A
El procedimiento para conseguir intercambiar los valores de dos variables entre sí, debe
recurrir a una variable “auxiliar”, que en adelante llamaremos aux, y las instrucciones de
asignación son las siguientes:

aux ← A

A ← B
B ← aux
Si se considera que A ← 10; B ← 5. El seguimiento de las instrucciones son las
siguientes:
Instrucción A B aux Observaciones

A ← 10 10 - - A toma el valor de 10

B←5 10 5 - B toma el valor de 5

aux ← A 10 5 10 La variable aux toma el valor de la variable A

A←B 5 5 10 A toma el valor de B, que es 5

B ← aux 5 10 10 B toma el valor de lavariable aux , que era el


valor inicial de A, es decir, 10

En base a lo anterior, realice los siguientes ejercicios

• ¿Qué se obtiene en las variables A, B, y C, después de ejecutar las instrucciones


siguientes?

A←3

B ← 20
C ← A+B
B ← A+B
A←B
• Se tienen tres variables, A, B y C. escribir las instrucciones necesarias para intercambiar
entre sí sus valores de modo siguiente:

B toma el valor de A

31
C toma el Valor de A

A toma el valor de C

Nota: Sólo se debe utilizar una variable auxiliar (aux)

• Deducir los resultados que se obtienen del siguiente algoritmo:

algoritmo resultado_obtenido

variables

X, Y, Z: enteras

inico

X ← 15

Y ← 30

Z ← Y-X

escribir (X, Y)

escribir (Z)

fin

LECTURA Nº 3: ESTRUCTURAS DE CONTROL

Ma ter ia l esc rito, co mp ilad o y mo dificad o con fines


ins tr ucciona les por :
Vera, M (2009). Estructuras De Control . [Compilación]. Trabajo no
publicado. UNEFA – Cojedes.

Por lo regular en un programa los enunciados son ejecutados uno después del otro, en el orden
en que aparecen escritos. Esto se conoce como ejecución secuencial. Sin embargo, existen
enunciados que le permiten al programador especificar que el enunciado siguiente a ejecutar
pueda ser otro diferente al que sigue en secuencia. Esto se conoce como transferencia de
control.
Todos los programas pueden ser escritos en términos de solo tres estructuras de control, a
saber, la estructura de secuencia, la estructura de selección y la estructura de repetición o
bucle.
La estructura de secuencia: Es aquella en la una acción (instrucción) sigue a otra en
secuencia. Tiene una entrada y una salida.

32
inicio
.acción1
. acción2
.
.acción n
.
fin

La estructura de selección Si..entonces (if)


Dado que las expresiones lógicas toman el valor verdadero y falso, se necesita una sentencia
de control para la toma de decisiones, cuando se desea ejecutar una acción si una expresión es
verdadera o falsa.
Para ello utilizaremos la sentencia de selección if (si), el enunciado en pseudocódigo es el
siguiente:
Si (exp_lógica simple o compuesta)
Realizar acciones
Fin si

Cuando la expresión lógica contenida por los paréntesis es verdadera, se ejecutan las
instrucciones dentro de la estructura de selección, cuando es falsa, el programa ignora la
estructura y se sigue ejecutando la instrucción siguiente a la estructura de control.

La estructura de Selección si/sino (if/else)


La estructura de selección Si ejecuta una acción indicada solo cuando la condición es
verdadera, de lo contrario la acción es pasada por alto. La estructura de selección si/sino (en
algunos textos de programación puede aparecer como si/de_lo_contrario) permite que el
programador especifique la ejecución de una acción distinta cuando la condición es falsa.
Ejemplo 1. Hacer una secuencia de pasos en pseudocódigo que realice la siguiente acción :
imprime "Aprobado", si la calificación del alumno es mayor o igual a 60, e imprime "Reprobado"
si la calificación es menor que 60.

Si (nota >= 60) entonces


Escribir (“Aprobado”)
Sino (de lo contrario)
Escribir (“Reprobado”)
Fin_si

En cualquiera de los casos, después de haber impreso alguno de los mensajes, el programa
ejecutará el enunciado siguiente al si.

33
Otro ejemplo sería, realizar la división de dos números enteros, tomando en cuenta que si el
divisor es igual al cero (0), entonces la división no puede llevarse a cabo

algoritmo división_numeros_enteros
variables
dividendo, divisor: entero
cociente: real
leer (dividendo, divisor)
inicio
si (divisor = 0) entonces
escribir (‘una división entre 0 no se puede realizar, inténtalo nuevamente con
otro número’)
sino
cociente ← dividendo / divisor;
escribir (‘El resultado de la división es’, cociente)
fsi
fin

Sentencias Selectivas Anidadas


Dentro de las sentencias que figuran dentro de una sentencia if, pueden colocarse también
otras sentencias selectivas. De esta manera:
Ejemplo 2. Dado tres números enteros encontrar el mayor de ellos.
El algoritmo quedaría de esta manera:

algoritmo mayor
variables
a, b, c : entero
inicio
leer (a, b, c)
si ((a > = b) ^ (a > =c)) entonces
escribir (‘el mayor es’,a)
sino
si ((b > = a) ^ (b > =c)) entonces
escribir (‘el mayor es’,b)
sino
si ((c > = a) ^ (c > = b)) entonces
escribir (‘el mayor es’,c)
fsi
fsi
fsi
fin
Es muy importante que se utilice un buen sangrado en cada sentencia selectiva, para que sea
más legible el código, y además que se comente el código, para que no te pierdas si llevas
escritas varias líneas, y también por si alguna otra persona, desea actualizar tu código.

34
La Sentencia de Selección Según Sea (Case o swicht)
Esta sentencia se utiliza para elegir entre diferentes alternativas. Esta se compone de varias
sentencias simples, cuando se ejecuta, una y solo una de las sentencias simples se selecciona
y ejecuta.
La sintaxis es la siguiente:
según sea (selector) hacer
caso1, caso2,..: sentencia1
.... : .....
caso1n, caso2n,.: sentencian
sino
sentencia opcional
fin_según

El valor de selector debe ser un tipo ordinal, y los valores constantes deben tener el mismo tipo
que el selector.
Se pueden utilizar sentencias if anidadas, pero la sentencia según sea es mas legible.
A continuación se desea diseñar un algoritmo que escriba los nombres de los días de la
semana en función de una variable DIA introducida por teclado
Los días de la semana son 7, por consiguiente, el rango de valores DIA será del 1 .. 7 ( es decir
del 1 al 7), y caso de que DIA tome un valor fuera de este rango se deberá producir un mensaje
de error advirtiendo la situación anómala

Ejemplo 3. algoritmo dias_semana

variable DIA:1..7

inicio

leer (DIA)

según sea (DIA) hacer

1: escribir (‘Lunes’)
2: escribir (‘Martes’)
3: escribir (‘Miércoles’)
4: escribir (‘Jueves’)
5: escribir (‘Viernes’)
6: escribir (‘Sábado’)
7: escribir (‘Domingo’)
fin_segun
fin

35
Es de hacer notar que, se ha omitido la cláusula sino del algoritmo, esta es opcional y se puede
omitir.
Por otro lado los números de 1 al 7 representan los posibles valores que tendrá la variable DIA
dependiendo de las preferencias que tenga el usuario
Estructuras de Control Repetitivas
Las computadoras están especialmente diseñadas para ejecutar tareas repetidamente. Las
estructuras de control repetitivas son aquellas en las que una sentencia o grupos de sentencias
se repiten muchas veces.
Una estructura de control que permite la repetición de una serie determinada de sentencias se
denomina bucle (lazo o ciclo). El cuerpo del bucle contiene las sentencias que se repiten.
La acción o acciones que se repiten en un bucle se denominan el cuerpo del bucle, y cada
repetición del cuerpo del bucle se denomina iteración.
Para poder entender cómo funciona un proceso repetitivo, se necesita conocer el concepto de
dos expresiones: acumulador y contador
Contador: es una variable cuyo valor se incrementa o decrementa en una cantidad constate o
fija en cada iteración. La forma de representar un contador es:

contador ← contador + 1 ó
contador ← contador - 1
Esta expresión debe interpretarse como: asignar a la variable contador el valor que tenía
anteriormente más o menos una, dependiendo del caso, si se quiere incrementar o decrementar
Nota: en todo contador es necesario que exista una instrucción que inicializa la variable que va
a tener la función de contador y esta variable puede ser cualquier identificador
Ejemplo 1: Contador que incrementa de uno en uno. En este caso la variable que funciona
como contador se llama “contador”

Incialización
contador ← 1 de la variable
contador ← contador +1

Ejemplo 2. Contador que decrementa en una en uno. En este caso la variable que funciona
como contador se llama “cont”

Incialización
cont ← 10 de la variable
cont ← cont -1
Ejemplo 3. Contador que se incrementa de dos en dos. En este caso la variable que funciona
como contador se llama “c”

36
Incialización
c ← 0 de la variable
c ← c +2
Ejemplo 4. Contador que se decrementa de cinco en cinco. En este caso la variable que
funciona como contador se llama “contador”

Incialización
contador ← 57 de la variable
contador ← contador - 5

Acumulador: es una variable cuya misión es almacenar cantidades variables. Realiza la misma
función que un contador pero con la diferencia de que el incremento o decremento es variable y
no constante como el contador. La forma de representar el acumulador es:

acumulador ← acumulador + valorVariable

Nota: en todo acumulador es necesario que exista una instrucción que inicializa la variable que
va a tener la función de acumulador y esta variable puede ser cualquier identificador

Ejemplo 5. Calcular el promedio de notas de 10 alumnos, primero debemos utilizar una


variable acumulador para ir sumando las 10 notas (cantidades variables) y luego dividir este
valor entre diez. La variable S va a tener la función de ser acumulador.

Solución:

S← 0 Inicialización de la variable acumulador

Leer (nota)
S = S + nota Estas dos instrucciones están dentro del ciclo repetitivo

Prom ← S/ 10 Instrucción para hallar el promedio

Sentencia Mientras..hacer (while)


La estructura repetitiva mientras es aquella en la que el número de iteraciones no se conoce
por anticipado y el cuerpo del bucle se repite mientras se cumple una determinada condición.
Por esta razón a estos bucles se les denomina bucles condicionales.

La sintaxis es la siguiente:

Mientras (condicion) hacer


Sentencias
fin_mientras

37
Cuando la sentencia mientras se ejecuta, el primer paso es la evaluación de la expresión
lógica. Si el resultado es falso, ninguna acción se realiza y el programa prosigue en la siguiente
sentencia después del bucle. Si la expresión lógica se evalúa a verdadera, entonces se ejecuta
las sentencias contenidas dentro del cuerpo del bucle y se evalúa de nuevo la expresión. Este
proceso se repite mientras que la expresión lógica sea verdadera.
Después de cada iteración, la expresión lógica se evalúa y se verifica de nuevo, y si es
verdadera, el bucle se repite de nuevo; si cambia de verdadera a falsa, la sentencia mientras
finaliza y el programa prosigue en la siguiente sentencia del programa:
Ejemplo 6. Calcular la suma de una lista de números enteros ingresados por el usuario

Algoritmo Sumar
Variables
contador, num, sum, N: enteros
Inicio
Escribir ("Este programa suma números")
Escribir ("Cuantos números desea sumar")
Leer (N)
Escribir ("Ingrese los números:")
contador <-- 0
suma <-- 0
Mientras (contador < N) hacer
Leer (num)
suma <-- suma + num
contador <-- contador + 1
fin_mientras
Escribir ("La suma de los",N,"números es",suma)
Fin.

Al implementar este código en un lenguaje de programación, por ejemplo: Pascal, este sería el
resultado en pantalla en pantalla, al ejecutarlo.
Este programa suma números
Cuántos números desea sumar
3
Teclee los números enteros:
864
La suma de los 3 números es 18

38
Ejemplo 7. Diseñar un algoritmo que lea N números e indique cuántos de ellos son positivos,
negativos y cero. Además de ello, que muestre al final el resultado de la suma de todos los
número leídos.

algoritmo identificar_numeros
variables
n, cont1, cont2, cont3, suma, contador: entero
numero: real
inicio
cont1 ← 0
cont2 ← 0
cont3 ← 0
contador ← 1
suma ← 0
leer(n)
mientras (contador<= n) hacer
leer(numero)
si (numero > 0) entonces {número es positivo}
cont1 ← cont1 +1
sino
si (numero < 0) entonces {número es negativo}
cont2 ← cont2 +1
sino
cont3 ← cont3 +1 {número es igual a cero}
fsi
fsi
suma ← suma + numero
fmientras
escribir (‘Cantidad de números positivos’, cont1)
escribir (‘Cantidad de números negativos’, cont2)
escribir (‘Cantidad de números iguales a cero’, cont3)
escribir (‘La suma de todos ellos es’, suma)
fin

La Sentencia Repetir.. hasta


Una variante de la sentencia mientras, es la sentencia repetir. Una de las características de la
sentencia mientras es que la condición lógica se evalúa al principio de cada iteración.
En particular, si la condición es falsa cuando la sentencia comienza, entonces el bucle no se
ejecuta nunca.
La sentencia repetir.. hasta especifica un bucle condicional que se repite hasta que la
condición se hace verdadera.

39
Después de cada iteración el cuerpo del bucle evalúa la condición. Si la condición es verdadera,
el bucle se termina y se sale de él, ejecutándose la siguiente sentencia, si la condición es falsa
el bucle se repite.
El pseudocódigo es el siguiente:

repetir
sentencias
hasta (expresión lógica)

Ejemplo 8. Volvamos a realizar el ejemplo anterior, donde se desea obtener la suma de tres
números ingresados por el usuario. Para acortar, solo colocaré la parte donde se efectúa la
suma

Escribir ("Cuántos números desea ingresar")


leer (Total_num)
contador <-- 0
suma <-- 0
repetir
leer (num)
suma <-- suma + numero
contador <-- contador + 1
hasta (contador = Total_num)

Otro ejemplo sería realizar un algoritmo para obtener la suma de los números pares hasta
1000 inclusive
algoritmo suma_num_pares
variables
suma, numero: entero
inicio
suma ← 0
numero ← 2
repetir
suma ← suma + numero
numero ← numero + 2
hasta (numero > 1000)

Sentencia Para (For)


En numerosas ocasiones se desea un bucle que se ejecute un número deseado de veces, y
cuyo número de iteraciones se conozca por anticipado. Para este tipo de aplicaciones se utiliza
la sentencia para.

40
La sentencia para (o desde) requiere que conozcamos por anticipado el número de veces que
se ejecutan las sentencias del interior del bucle.
El pseudocódigo es el siguiente:

desde cont <-- valor inicial hasta valor final hacer


sentencias
fin_desde

Al ejecutarse la sentencia para (o desde) la primera vez, el valor inicial se asigna a cont, que se
denomina variable de control, y a continuación se ejecuta la sentencia del interior del bucle. Al
llegar al final del bucle se verifica si el valor final es mayor que el valor inicial; en caso negativo
se incrementa el valor de la variable de control en uno y se vuelven a ejecutar todas las
sentencias del interior del bucle, hasta que la variable de control sea mayor que el valor final, en
cuyo momento se termina el bucle.
Ejemplo 9. Hacer la secuencia de instrucciones que permita mostrar los números del 1 al 10.
Desde i <-- 1 hasta 10 hacer
Escribir (i)
fin_desde

En pantalla, este sería el resultado 1 2 3 4 5 6 7 8 9 10


Ejemplo 10. Calcular los cuadrados y cubos de los 100 primeros números enteros

algoritmos cudrados_cubos
variables
i : entero
inicio
desde i ← 1 hasta 100 hacer
escribir (i, i*i, i*i*i)
fin_desde
fin

Reglas
• Las variables de control, valor inicial y valor final deben ser todas del mismo tipo, pero el
tipo real no esta permitido. Los valores inicial y final pueden ser tanto expresiones como
constantes.
• Es ilegal intentar modificar el valor de la variable de control, valor inicial y el valor final
dentro del bucle.
Al igual que en las sentencias de selección, las sentencias repetitivas se pueden anidar.

41
Ejercicios Propuestos
• Escribir un algoritmo que calcule la suma de los n primeros números naturales. Razonar si
se puede implementar con al menos dos tipos de bucles diferentes.
• Escribir un algoritmo que calcule la suma de los cuadrados de los n primeros números
naturales: 1 + 22 + 32 +42 + ….. n2
• Realizar un algoritmo que calcule el producto de dos números enteros (n*m) haciendo sólo
sumas.
• Leer sucesivamente números del teclado, hasta que aparezca un número comprendido
entre el 1 y el 5
• Realizar un algoritmo que permita calcular la tabla de multiplicar a través de bucles
anidados desde (o mejor conocidos como ‘para’)

42
LECTURA Nº 4: ESTRUCTURA DE DATOS

M a ter ia l es c r i to , c om p il ado y m od i f ic ad o c on f in es
ins tr ucciona les por :
Vera, M (2009). Estructura de Datos. [Compilación]. Trabajo no
publicado. UNEFA – Cojedes.

Es un tipo de datos construido a partir de otros tipos de datos. Así, un tipo de datos complejo,
que representa al conjunto de los números complejos, es un par ordenado de datos reales y,
por tanto, un tipo de dato estructurado.
Un datos de tipo estructurado está compuesto por una serie de datos de tipos elementales y
alguna relación existe entre ellos. Normalmente, la relación suele ser de orden aunque puede
ser de otro tipo.
Una estructura de datos se dice que es homogénea cuando todos los datos elementales que la
forman son del mismo tipo. En caso contrario se dice que la estructura es heterogénea. Por
ejemplo, el tipo de datos complejo es una estructura homogénea, tanto la parte real como la
parte imaginaria se representan con datos reales.
Los tipos de datos más utilizados, y que se verá aquí, son: arreglos (arrays), cadena de
caracteres, registros, entre otros.
Arreglos (arrays)
El array (también llamado formación o matriz) es la estructura de datos más usual.
Un array es una estructura de datos formada por una cantidad fija de datos de un mismo tipo,
cada uno de los cuales tiene asociado uno o más índices que determinan de forma unívoca la
posición del dato en el array. Cada índice es un tipo de datos subrango. Para cada
combinación posible de valores de índices existe uno y sólo un dato del tipo constituyente, o
elemento del array.
Podemos imaginar un array como una estructura de celdas donde puedan almacenar valores.
En general, al número de índices del array se le denomina número de dimensiones del array.
La dimensión de la formación está dada por los valores máximos de los índices, y el número
total de elementos es el producto de estos valores máximos.
La principal operación que se puede realizar con arrays es la selección. La selección consiste
en especificar un elemento determinado del array.
Un array es una estructura de datos estática. Esto es, al definirla se especifica el número de
elementos que la constituyen. Este dato lo utiliza el compilador para reservar el espacio
necesario para almacenarla. Las matrices se almacenan en memoria ocupando un área
contigua. Cada elemento ocupa el mismo número de palabras, que será el que corresponda al

43
tipo de datos de estos. Los elementos se colocan en la memoria según un orden prefijado de
los índices.
ARREGLOS UNIDIMENSIONALES: VECTORES
Los elementos de un arreglo lineal se almacenan en posiciones sucesivas de memoria, es decir,
un elemento al lado del otro. Si cada elemento de un arreglo de dimensión k, ocupa x
posiciones, entonces el arreglo ocupa en total x * k posiciones. El almacenamiento es igual al
de las variables, con la particularidad que ahora el conjunto de variables ocupa posiciones
sucesivas o contiguas de la memoria.

Índice o Dimensión del Arreglo


Elementos del Arreglo

Figura 1. Vista de un Arreglo


Unidimensional
Siendo cada casilla ( ) una variable.
A continuación se presentarán ejemplos alusivos a la gestión de arreglos
Ejemplo 11. Ingresar 20 números reales en un arreglo y luego mostrarlos ordenados en
forma decreciente.

algoritmo Orden_decreciente
varibles
i,j,numero,aux:entero
num: arreglo [1 .. 20] de enteros
inicio
para i ← 1 hasta 20 hacer
escribir (ingrese un numero)
leer (numero)
num[i] ← numero
fpara
para i ← 1 hasta 19 hacer
para j ← i+1 hasta 20 hacer
si (num[i] < num [j]) entonces
aux ← num[i]
num[i] ← num [j]
num[j] ← aux
fsi
fpara
fpara
para i ← 1 hasta 20 hacer
escribir (num[i])
fpara
fin

44
Ejemplo 12. Se ingresan 30 números enteros ordenados en forma creciente y un valor
N. Se desea saber si el valor N coincide con algún elemento del arreglo; si es así,
indicar la posición en que fue encontrado, sino exhibir cartel aclaratorio.
algoritmo encontrar_elemento
varibles
i, inf, sup, med, numero, n: entero
vec: arreglo [1 .. 30] de enteros
inicio
para i ← 1 hasta 30 hacer
escribir (‘ingrese un numero’)
leer (numero)
vec[i] ← numero
fpara
escribir(‘ingrese el número a encontrar’)
leer (n)
inf ← 1
sup ← 30
med ← 15
mientras (inf <= sup) ^ (n <> vec [med]) hacer
si (n < vec [med]) entonces
sup ← med -1
sino
inf ← med + 1
fsi
med ← (inf + sup) div 2
fmientras
si (n <> vec [med]) entonces
escribir (‘El valor’, n, ‘no fue encontrado’)
sino
escribir (‘El valor’, n, ‘se encuentra en la posición’, med)
fsi
fin

ARREGLOS BIDIMENSIONALES: MATRICES


Las matrices pertenecen al conjunto de estructuras de datos compuestas homogéneas.
Podríamos hacer una primera aproximación a estas estructuras definiéndola así: Una matriz es
un vector de vectores; un arreglo lineal donde cada elemento es a su vez un vector. Por
supuesto que dichos vectores son todos de igual tipo, precisión y dimensión.
El problema de este esquema es que se hace complicado referenciar un elemento: primero hay
que determinar cual vector se quiere trabajar, y luego cual es el elemento dentro del mismo.
Para simplificar esto, se visualiza gráficamente a la matriz como una cuadrícula:

45
Figura 2. Figura 3. Vista de un Arreglo

Bidimensional

En donde las líneas horizontales = filas y las líneas verticales = columnas


Con este esquema se simplifica el concepto de matriz: es un conjunto de vectores. Cada fila
representa un vector, asimismo, cada columna representa un vector. De esta forma es más
sencillo el acceso: se determina primero cual de todas las columnas o filas interesa, y luego se
usa el elemento deseado como se hace con cualquier vector. Podemos ver entonces, que todo
dato que se guarde en esta cuadrícula debe ser referenciado a través de un índice de fila y uno
de columna: cada elemento tiene dos entradas, una horizontal o de fila, y una vertical o de
columna; en la intersección de fila y columna se hallará el dato. En forma similar a un arreglo
lineal, la matriz tiene un nombre único y genérico, que respeta las normas de declaración de
variables, y para designar a sus elementos es necesario usar 2 índices.
Así, el nombre de la matriz, seguido de los 2 índices separados con coma (el primero para la
fila; el segundo para la columna), y encerrados entre corchetes, denota un elemento de la
matriz en particular. EJ: Mat [2,3] es el elemento de la matriz Mat que se halla en la intersección
se la 2da. Fila y la 3er. Columna.
Por ser un arreglo homogéneo, sus elementos son todos del mismo tipo y precisión. La
dimensión de una matriz (cantidad total de elementos) se calcula haciendo el producto entre la
cantidad total de filas por la cantidad total de columnas. En forma genérica, cada matriz de M
filas y N columnas tendrá (M*N) elementos.
Ejemplo 13. Se tiene las notas de 4 parciales tomados a 30 alumnos ordenados en forma
creciente por NRO DE ALUMNO. El nro de alumno es un valor entero entre 1 y 12000. Se
desea ingresar un NRO DE ALUMNO y buscarlo por medio de la búsqueda dicotómica dentro
del arreglo. Si se encuentra, dar el nro de alumno junto con las notas de los 4 parciales; sino
exhibir cartel aclaratorio.

46
algoritmo matriz_uno
varibles
i, j, inf, sup, med, nro: entero
al: arreglo [1 .. 30, 1 .. 5] de enteros
inicio
escribir (`ingrese nro y 4 notas de los 30 alumnos`)
para i ← 1 hasta 30 hacer
para j ← 1 hasta 5 hacer
leer (al [i,j])
fpara
escribir un salto de línea
fpara

escribir(ingrese el número a buscar)


leer (nro)
inf ← 1
sup ← 30
med ← 15

mientras (inf <= sup) ^ (n <> al [med, 1]) hacer


si (n < al [med, 1]) entonces
sup ← med -1
sino
inf ← med + 1
fsi
med ← (inf + sup) div 2
fmientras

si (n <> al [med, 1]) entonces


escribir (‘Error en el número del Alumno’)
sino
escribir (‘Alumno Nota 1 Nota 2 Nota 3 Nota 4’)
para i ← 1 hasta 5 hacer
escribir (al [med, 1])
fsi
fin

Registro
En un arreglo podemos almacenar información del mismo tipo, es decir homogénea. Pero la
realidad nos conduce a veces a situaciones en donde la información que manejamos no es toda
del mismo tipo. Ello nos demuestra que en ciertas ocasiones es necesario trabajar datos que se
hallan relacionados lógicamente, pero que no son homogéneos.
Consideremos el siguiente ejemplo: Los siguientes datos le pertenecen a un alumno, NUMERO
DE ALUMNO, NOMBRE Y APELLIDO, CARRERA, DOCUMENTO, DIRECCIÓN. Podemos ver
que por cada dato genérico alumno, hay una mezcla de datos numéricos y alfabéticos que lo
definen unívocamente como tal entidad. Para almacenar esta información heterogénea vamos a
usar estructuras de datos compuestas, que reciben el nombre de registros. O sea que, bajo un
mismo nombre genérico, vamos a manejar un conjunto de datos como un todo, y que serán
almacenados sobre variables y/o arreglos de distinto tipo.

47
Así, el registro nos permitirá almacenar en un conjunto de variables y/o arreglos, información
relacionada lógicamente. Cada una de estas variables y arreglos constituye un campo del
registro. Un campo es la unidad mínima de información de un registro. Cada campo recibe un
nombre que respeta las normas de declaración de variables y arreglos. Además, para cada
campo se especifica el tipo y la longitud de los datos que en ellos se almacenan.

Ejemplo 14.
Escribir un algoritmo que almacene en un arreglo de registros los nombres de los alumnos, sus
notas parciales y finales. Calcular la nota promedio y mostrar un mensaje de APTO si el alumno
supera o iguala la calificación de 5 o NO APTO si no lo alcanza. Hacerlo para un número de 5
alumnos.

algoritmo registro_notas

constante

numalumnos ← 5

Tipos

tipo_notas ← registro
nombre: cadena
parcial, final: real
fin
notaclase ← arreglo [1 .. numalumnos] de tipo_notas
variables
arr : notaclase
nota1, nota2 : real
alumno : cadena
index : entero
inicio
para index ← 1 hasta numalumnos hacer
escribir (‘Nombre de alumno (,‘index’):’)
leer (alumno)
escribir (‘Nota del examen parcial:’)
leer (nota1)
escribir (‘Nota del Examen Final:’)
leer (nota 2)
insertar un salto de línea

48
arr [index].nombre ← alumno
arr [index].parcial ← nota1
arr [index].final ← nota2
fpara
escribir (‘Nombre: ’, ’Parcial: ’, ’Media: ’, ’Calificación’)
para index ← 1 hasta 75 hacer
escribir (‘-’)
insertar salto de línea
fin_para
para index ← 1 hasta numalumnos hacer
nota1 ← (arr [index].parcial + arr [index].final)/2
escribir (arr [index].nombre, arr [index].parcial, arr [index].final)
escribir (nota1)
si (nota >=5) entonces
escribir (‘***APTO***’)
sino
escribir (‘NO APTO’)
fsi
fpara
fin

Archivos:
Hasta el momento hemos visto todas estructuras de datos que nos permitían guardar o
mantener datos en la memoria principal de una computadora. Pero existen varias razones por
las cuales no siempre es posible mantener toda la información necesaria en dicha memoria, a la
vez. Entre ellas podemos mencionar:
• La cantidad de datos que manipula un programa es muy grande y no hay suficiente espacio
en la memoria principal;
• Es frecuente que el resultado o salida de un programa sirva de entrada para otro, por lo cual
es necesario guardarlo en forma permanente;
• Es engorroso y lleva mucho tiempo tener que cargar datos a cada rato cuando el conjunto
de los mismos es muy grande.
Para lograr un mejor y más provechoso manejo de tales datos, necesitaremos una memoria
externa o secundaria. Este dispositivo de memoria externa permite almacenar los datos y
recuperarlos mediante operaciones de escritura y lectura respectivamente. Entre esos
dispositivos, podemos mencionar al disco duro, los diskettes, cintas, etc.

49
Para poder hacer uso de esos dispositivos, surge la necesidad de organizar o estructurar los
datos que allí se almacenan; con ese fin usaremos los registros; los registros se agruparán,
formado archivos.
Un conjunto de registros con ciertos aspectos en común, y organizados para algún propósito
particular, constituye un archivo. Al mismo se lo identifica con un nombre genérico.
Físicamente, un archivo se almacena como una sucesión de datos estructurados por el diseño
del registro. La información se guarda con el formato especificado por el registro, y se recupera
con ese mismo formato.
En forma transparente al usuario, además, la máquina agrega al final de cada registro físico,
una marca de fin de registro, y al final de todos los registros, una marca especial llamada
MARCA DE FIN DE ARCHIVO, o EOF (end of file).

Figura 4. Marca de fina de Archivo


Algunos conceptos y definiciones
BASES DE DATOS
Una colección de archivos a los que puede accederse por un conjunto de programas y que
contienen, todos ellos, datos relacionados, constituye una base de datos.
ESTRUCTURA JERÁRQUICA
Las estructuras de datos se organizan de modo jerárquico, de modo tal que el nivel mas alto lo
constituye la base de datos, y el nivel mas bajo el carácter.
CLAVE
Una clave o indicativo es un campo de datos que identifica al registro, y lo diferencia de otros
registros. Esta clave debe ser diferente para cada registro. Claves típicas son nombres o
números de identificación.
REGISTRO FÍSICO o BLOQUE
Un registro físico es la cantidad más pequeña de datos que puede transferirse en una operación
de entrada/salida entre la memoria central y los dispositivos periféricos o viceversa. Un bloque
puede contener uno o mas registros lógicos. Un registro lógico puede ocupar menos de un
registro físico, un registro físico, o más de un registro físico.
FACTOR DE BLOQUEO
El número de registros lógicos que puede contener un registro físico se denomina factor de
bloqueo o blocaje. Se pueden dar las siguientes situaciones:

50
• Registro lógico > Registro físico. En un bloque se contienen varios registros físicos por
bloque: se denominan registros expandidos.
• Registro lógico = Registro físico. El factor bloqueo es 1 y se dice que los registros están
bloqueados.
• Registro lógico < Registro físico. El factor de bloqueo es mayor que 1 y los registros están
bloqueados.
No se deben incluir todos los registros en un solo bloque ya que las operaciones de
entrada/salida que se realizan por bloques, se hacen a través de la memoria central
denominada memoria intermedia (buffer), y entonces el aumento del bloque implicará el
aumento de la memoria intermedia y, por consiguiente, se reducirá el tamaño de la memoria
central.

LECTURA N° 5: VALORES DE VERDAD DE LOS


OPERADORES LÓGICOS
Tomada con fines instruccionales

Gómez, T., González, N., Lorenzo J. (2007) Valores de verdad de los Operadores
Lógicos. Artículo no publicado. (p.1-6). Caracas.

Dada la importancia de los conectivos señalados en la lectura anterior, es pertinente establecer


los valores de verdad (v ó f) de cada proposición compuesta (molecular o resultante) para
cada conectivo. A tal efecto, se utiliza la Tabla de Verdad, la cual se construye partiendo de la
valoración de cada una de las proposiciones componentes (atómicas).
Negación
Es útil para estas lecturas, tener en cuenta que el signo utilizado para negar una proposición es
variable según el autor. Presentamos a continuación algunos signos utilizados para negar una
proposición.
Distintas notaciones de la negación
No p p p' ~p ¬p −p
Dada una proposición p, se denomina la negación de p a otra proposición denotada por p (se
lee "no p") que le asigna el valor de verdad contrario al de p . Por ejemplo:
p: Luis habla inglés
p: No es cierto que Luis habla inglés
Por lo que nos resulta sencillo construir su tabla de verdad:

51
p p Observamos que
V F Si p es V (verdadera entonces, la negación le
corresponde el valor de F (falsa)
F V Si p es F entonces, la negación le corresponde el valor
de V
Se trata de una operación unitaria, pues a partir de una proposición se obtiene otra, que es su
negación.
Ejemplo: La negación de p : todos los peces viven en el océano es
p : no es cierto que todos los peces viven en el océano.
o bien
p : no todos los peces viven en el océano.
o bien
p : Los peces no todos viven en el océano.
Conjunción
Dadas dos proposiciones p y q, se denomina conjunción de estas proposiciones a la
proposición p ∧ q (se lee " p y q "), que establece que la conjunción es verdadera sólo si las
dos proposiciones componentes son verdaderas. Cuando una de ellas no se cumple, es decir,
es falsa, la proposición resultante es falsa.
A continuación presentamos la tabla de verdad de la conjunción p ∧ q :
p q p∧q
Si las dos son verdaderas V V V La conjunción es verdadera
V F F
Si por lo menos una de
F V F La conjunción es falsa
ellas es falsa
F F F
Ejemplo: Sea la proposición molecular:

8 es múltiplo de 2 {y 9 es un número impar


14442444 3 144424443
p ∧ q

p : 8 es múltiplo de 2;
q : 9 es un número impar
Por ser ambas verdaderas, la conjunción entre ellas, es verdadera.
Ejemplo: Sea la proposición molecular:
La fresa es una fruta y 3 es un número par.
Esta conjunción es falsa, pues:
p : La fresa es una fruta, es verdadera, mientras que
q : 3 es un número par, es falsa.

52
Por tanto, esta proposición p ∧ q es falsa, ya que ambas proposiciones no pueden ser
simultáneamente verdaderas.

Disyunción Inclusiva:
Dadas dos proposiciones p y q, se denomina disyunción inclusiva de estas proposiciones a la
proposición p ∨ q (se lee " p o q "), que establece que la disyunción inclusiva es verdadera si al
menos una de las dos proposiciones componentes es verdadera. Cuando todas ellas son
falsas, la proposición resultante es falsa.
A continuación presentamos la tabla de verdad de la disyunción inclusiva p ∨ q :
p q p∨q
V V V
Si por lo menos una es La disyunción es
V F V
verdadera verdadera
F V V
Si las dos son falsas F F F Es falsa

Ejemplo: Sea la proposición molecular:


El cielo es azul o el Centro Banaven lo llaman El Cubo Negro.
Esta disyunción es verdadera, pues:
p : El cielo es azul, es verdadera y
q : Centro Banaven lo llaman El Cubo Negro es verdadera, por tanto, esta proposición
p ∨ q es verdadera, ya que ambas proposiciones son simultáneamente verdaderas.
Ejemplo: Sea la proposición molecular:
El número uno, es el elemento neutro de la suma o el número 44 es par.
Esta disyunción es verdadera, pues:
p : El número uno es el elemento neutro de la suma, es falsa y
q : el número 44 es par es verdadera, por tanto,
la proposición p ∨ q es verdadera, pues por lo menos una de ellas es verdadera
Ejemplo: Sea la proposición molecular:
Los Carnavales se celebran en el mes de Diciembre o La navidad es en
el mes de Agosto.
Esta disyunción es falsa, pues:
p : Los Carnavales se celebran en el mes de Diciembre, es falsa y
q : La Navidad es en el mes de Agosto, es falsa, por tanto,
la proposición p ∨ q es falsa, ya que las dos proposiciones son falsas.

53
La disyunción exclusiva
Dadas dos proposiciones p y q, se denomina disyunción exclusiva de estas proposiciones a la
proposición p ∨ q (se lee " o p o q "), la misma establece que la disyunción exclusiva es
verdadera si sólo una de las dos proposiciones componentes es verdadera. Cuando ambas
proposiciones son verdaderas o ambas falsas, la proposición resultante es falsa.
A continuación presentamos la tabla de verdad de la disyunción exclusiva p ∨ q :

p q p∨ q

V V F
V F V
F V V
F F F
Ejemplo: Sea la proposición molecular:
O el número uno es el elemento neutro de la multiplicación o el número
44 es par.
Esta disyunción exclusiva es falsa, pues:
p : El número uno, es el elemento neutro de la multiplicación, es verdadera y
q : el número 44 es par es verdadera, por tanto, la proposición p ∨ q es falsa, ya
que ambas proposiciones son verdaderas y por definición, sólo una debe ser verdad.
Ejemplo: Sea la proposición molecular:
Los Carnavales se celebran en el primer trimestre del año o La navidad
es en el mes de Agosto.
Esta disyunción exclusiva es verdadera, pues:
p : Los Carnavales se celebran en el primer trimestre del año, es verdadera y
q : La Navidad es en el mes de Agosto, es falsa, por tanto, la proposición p ∨ q
es verdadera, pues una y sólo una de las dos proposiciones es verdadera.
El Condicional
El condicional de las proposiciones " p y q " es la proposición p → q (si p entonces q ) cuya
tabla de verdad es:

p q p→q
V V V
V F F
F V V
F F V

54
La proposición p se llama antecedente, y la proposición q se llama consecuente del
condicional. La tabla nos muestra que la implicación sólo es falsa si el antecedente es
verdadero y el consecuente es falso.
Ejemplo: Supongamos la implicación
R: Si
14 entreno,
243 entonces
3 me
1424 inscribo en la competencia
1444442444443
p → q
El condicional R está compuesto de las proposiciones
p : entreno
q : me inscribo en la competencia
Nos interesa conocer la verdad o falsedad de la proposición condicional R, en relación a la
verdad o falsedad de las proposiciones p y q . El enunciado puede pensarse como un
compromiso, condicionado por p , y podemos asociar su verdad al cumplimiento del
compromiso.
Es evidente que si p es F, es decir, si no entreno, quedo liberado del compromiso y me
inscriba o no en la competencia, el condicional es verdadero.
Si p es verdadera, es decir si entreno, y no me inscribo en la competencia, el compromiso no
se cumple y la proposición R es falsa.
Si p y q son verdaderas, entonces la proposición R es verdadera pues el compromiso se
cumple.
Ejemplo: 1² = (–1)² → 1 = –1 (F)
La proposición resulta ser falsa por ser el antecedente verdadero, 1² = (–1)² y el consecuente
(1 = –1) falso.

El Bicondicional
El si y sólo si de las proposiciones p y q es la proposición p ↔ q (se lee "p si y sólo si q")
cuya tabla de verdad es:
p q p↔q
V V V

V F F

F V F

F F V
Si y sólo si o el bicondicional sólo es verdadera si ambas proposiciones tienen el mismo valor
de verdad. El bicondicional puede definirse como la conjunción de una implicación y su
recíproca. De este modo, la tabla de valores de verdad de p ↔ q puede obtenerse mediante la
tabla de ( p → q ) ∧ (q → p ) , como vemos:

55
p q p→q q→ p ( p → q ) ∧ (q → p )
V V V V V

V F F V F

F V V F F

F F V V V

Ejemplo: Sea R: a = b si y sólo si a2 = b2


El enunciado está compuesto por las proposiciones:
p : a = b;
q : a2 = b2
Este bicondicional a = b ↔ a2 = b2 es falso.
Si p es F, es decir a ≠ b, y q es V, es decir a2 = b2. En los demás casos es V.
Hacer la tabla de verdad para este bicondicional
p q
2 2
p↔q
a=b a=b

V V

V F

F V

F F
En las próximas lecturas trabajaremos con fórmulas proposicionales, para ello es indispensable
el uso de las prioridades de los conectivos y los signos de agrupación, que listaremos a
continuación:

Prioridad
1) Signos de agrupación () [ ]
2) La Negación ~p
3) La conjunción, la ∧ , ∨ , ∨
disyunción inclusiva y
exclusiva
4) Condicional y Bicondicional → , ↔

Esta tabla nos indica que:

56
1) Primero resolvemos las fórmulas parciales que se encuentran entre paréntesis, de
adentro hacia fuera.
2) Luego resolvemos las negaciones
3) Después los conectivos, conjunción y disyunción inclusiva o exclusiva
4) Por último el condicional y/o bicondicional.
Para la siguiente fórmula: ( p ∧ ~ (q ∨ r )) → s
• Se resuelve primero el paréntesis más interno (q ∨ r ) ( Prioridad 1)
• Luego negamos el resultado de (q ∨ r ) (Prioridad 2)
• Después usamos el conectivo ∧ con p y el resultado anterior (Proridad 3)
• Finalmente el resultado obtenido se resuelve con el condicional

( p ∧ ~ (q ∨ r )) → s
1ero.
2do.

3ero.
4to.

LECTURA N° 6: VALORES DE VERDAD DE LOS


OPERADORES LÓGICOS
Tomada con fines instruccionales

Gómez, T., González, N., Lorenzo J. (2007). Construcción de Tablas de Verdad.


Artículo no publicado. (p.1-2). Caracas.

Para la construcción de la tabla, la dividimos en dos partes. La parte izquierda la llamaremos


margen y a la derecha la llamaremos cuerpo.
En el margen colocaremos los valores de verdad de las variables proposicionales que
intervienen. El número de dichas componentes determina la cantidad de posibles
combinaciones de valores de verdad que aparecerán en la tabla. Este número total de
combinaciones se calcula con la operación 2 n , donde la base indica los únicos dos valores que
puede asumir una variable proposicional (V o F), y el exponente el número de variables
proposicionales que intervienen, ejemplo:
En la proposición (~ p ∨ q ) ∧ ~ q , intervienen dos variables proposiciones (p y q), el número
de combinaciones para construir la tabla
sería 2 n = 2 2 = 4 , por lo tanto el margen queda como lo muestra la figura a la derecha

57
p q Posibilidades
V V 1ra
V F 2da
F V 3ra
F F 4ta
margen

El cuerpo se va formando con las proposiciones parciales hasta llegar a la proposición


compuesta final, es decir, se agregan tantas columnas como proposiciones atómicas
se encuentren agrupadas (en paréntesis), leyendo la fórmula de izquierda a derecha
para iniciar el cuerpo de la tabla, y respetando las prioridades de los conectivos y signos
de agrupación. Siguiendo el ejemplo anterior tenemos:

• Primero agregamos al cuerpo de la p q ~p


V V F
tabla la proposición ~ p V F F
F V V
F F V

• Luego agregamos al cuerpo de p q ~p ~ p∨q


V V F V
la tabla , (~ p ∨ q ) V F F F
F V V V
F F V V
Agregamos ~ q
p q ~p ~ p∨q ~q
V V F V F
V F F F V
F V V V F
F F V V V
• Y por último, agregamos la fórmula (~ p ∨ q ) ∧ ~ q y valoramos el conectivo ∧
p q ~p ~ p∨q ~q (~ p ∨ q)∧ ~ q
V V F V F F
V F F F V F
F V V V F F
F F V V V V

margen cuerpo

58
Ejemplo 1: Construir la tabla de verdad correspondiente la proposición compuesta
r ∧ ~ ( p → q)
Solución:
Observe que la proposición posee 3 componentes (p, q y r), por lo que tiene 8 combinaciones
( )
23 y se sigue el mismo procedimiento del ejemplo anterior para construir el margen y el
cuerpo.
p q r p→q ~ ( p → q) r ∧ ~ ( p → q)
V V V V F F
V V F V F F
V F V F V V
V F F F V F
F V V V F F
F V F V F F
F F V V F F
F F F V F F

margen cuerpo

Ejercicios. Construya la tabla de verdad para las siguientes proposiciones compuestas:


1. ~ [ p → (q ∧ r )] ; 2. [~ p ∨ ~ q ] → [~ p ∧ (~ q ↔ ~ p )]

59

También podría gustarte