Programacion - Tte (Unid 2)
Programacion - Tte (Unid 2)
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
¡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:
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!!!
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.
“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.
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.
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
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.
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]
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
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]
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
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:
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:
Paso 1: Entrada desde periférico de entrada (por ejemplo, teclado) de base y altura.
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
16
Conector: conexión entre dos puntos del organigrama situado
en páginas diferentes.
Símbolos Secundarios
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 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:
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:
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.
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.
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:
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).
algoritmo MEDIA
cosnt
Pi = 3.141592
var
NUMERO, MEDIA, SUMA : real
CONTADOR, N : entera
inicio
<acciones>
Fin
Operaciones aritméticas
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
7/2 = 3.5
7.0 / 2 = 3.5
7 / 2.0 = 3.5
7 / 2 = 3 (cociente) y 1 (resto)
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:
^ (mayor) Potenciación
*, / Multiplicación, División
+, - Suma, Resta
* En algunos lenguajes como Pascal, estos operadores tienen mayor prioridad que los
operadores +, -
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
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.
Salida de datos: escritura de los resultados en un dispositivo de salida: pantalla, impresora, etc.
Ejemplos:
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:
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
Escribir S
algoritmo Suma
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
inicio
leer (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:
algoritmo Perímetro_Superficie
inicio
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
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
algoritmo resultado_obtenido
variables
X, Y, Z: enteras
inico
X ← 15
Y ← 30
Z ← Y-X
escribir (X, Y)
escribir (Z)
fin
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
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.
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
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
variable DIA:1..7
inicio
leer (DIA)
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:
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
Solución:
Leer (nota)
S = S + nota Estas dos instrucciones están dentro del ciclo repetitivo
La sintaxis es la siguiente:
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
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
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)
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:
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
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.
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
45
Figura 2. Figura 3. Vista de un Arreglo
Bidimensional
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
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).
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.
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.
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:
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
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
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 → , ↔
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.
57
p q Posibilidades
V V 1ra
V F 2da
F V 3ra
F F 4ta
margen
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
59