Programación Lógica M.3 Resumen
Programación Lógica M.3 Resumen
Programación Lógica M.3 Resumen
Programación Lógica
1.Arreglos Unidimensionales
Una estructura de datos es una colección de datos organizados para usarse eficientemente,
son muy importantes. Pueden ser simples y estructurados
Los datos estructurados se clasifican en estáticos y dinámicos, los estáticos la memoria se
gestiona en tiempo de compilación y las estructuras dinámicas se gestionan en tiempo de
ejecución. Ambos tipos existen en los lenguajes reales.
Una estructura de datos estática es un arreglo y representa un conjunto finito, ordenado y
homogéneo de elementos. Estos pueden ser unidimensionales (vectores), bidimensionales
(matrices) o multidimensionales. Cada arreglo tiene su identificador y cada elemento del
arreglo se identifica por la posición que ocupa, a través de índices. Los arreglos se utilizan
cuando es necesario manipular varios valores como parte de un conjunto. Estos vectores se
pueden representar gráficamente, abajo un ejemplo dónde el arreglo se llama datos con 4
elementos.
El número de elementos se llama rango del vector, este vector llamado datos es de rango 4.
Los arreglos pueden contener datos numéricos y no numéricos. El rango se debe indicar
previamente a su uso dentro de un programa y en pseudocódigo se declara así:
Algoritmo declaración_arreglo
tipo
array [límite inferior…límite superior] de <tipo de dato>:<nombre estructura arrelgo>
var
<nombre estructura arreglo>:<nombre variable de tipo de arreglo>
inicio
…
Hay una sección llamada tipo en dónde se declaran las estructuras de datos de arreglos y
otros tipos de datos definidos por el usuario. Se usa la palabra array seguido de un par de
corchetes con el rango del arreglo donde se pone el límite inferior y superior (el primer y
último número), seguido de esto se coloca el tipo de datos de los elementos del arreglo y el
nombre. Luego hay que declarar la variable que contendrá el arreglo.
Ejemplo de un arreglo
Algoritmo declaración_arreglo
tipo
array [1…4] de entero: arreglo_enteros
var
arreglo_enteros:datos
inicio…
Cada elemento del vector se puede procesar como si fuera una variable simple. Por ejemplo
datos[4] ← 8 almacena el valor entero 8 en el vector datos, en la posición 4.
Se pueden crear dos vectores distintos pero con la misma estructura, ejemplo
…
tipo
array [1…10] de entero: lista
var
lista: origen, destino
inicio
…
Ahí se declararon dos arreglos distintos llamados origen y destino, de tipo de dato lista (el
arreglo es un tipo de dato que creamos, dónde las variables pueden ser de ese tipo). El
límite inferior no siempre tiene que iniciar en 1, puede ser de 0 a 3 (y serán 4 los elementos
para ingresar valores, el rango seguirá siendo de 4).
2.Arreglos Bidimensionales
Existen escenarios en los que la información es mejor organizarla en forma de matriz con
dos subíndices: uno para las filas y otro para las columnas. Un arreglo bidimensional es un
vector de vectores.
Algoritmo declaración_arreglo_bidimensional
tipo
array [límite inferior filas… límite superior filas] [límite inferior columnas… límite
superior columnas] de <tipo de dato>: <nombre estructura arreglo>
var
<nombre estructura arreglo>: <nombre variable de tipo arreglo>
inicio
….
Ejemplo
Para recorrer arreglos
bidimensionales, es necesario tener
dos estructuras repetitivas
anidadas, generalmente se utiliza la
estructura desde/fin-desde. Si se
quiere leer datos desde el teclado y
luego recorrerlo para mostrar los
elementos en pantalla se puede
utilizar el siguiente pseudocódigo.
Algoritmo recorrer_arreglo_bidimensional
tipo
array [1…5][1…3] de entero:lista
var
lista:notas
entero: i, j
inicio
//cargamos el arreglo
desde i ← hasta 5 hacer
desde j ← 1 hasta 3 hacer
leer (notas[i,j])
fin-desde
fin-desde
La estructura repetitiva externa recorre las filas y para cada una de ellas la estructura
interna recorre cada una de las columnas.
3.Algoritmos de ordenamiento
4. Búsqueda secuencial
Existen distintos algoritmos que pueden ser utilizados para buscar un elemento y su
elección dependerá de cómo estén organizados los elementos.
leer(k)
para i ← 1 hasta N hacer
si A[i] == k entonces
escribir(“Elemento encontrado en la posición”, i)
fin-si
fin-para
Cada vez que se encuentre el valor K en el arreglo A se mostrará un mensaje indicando la
posición.
La búsqueda secuencial puede resultar muy lenta si el número de elementos del conjunto
es grande. La búsqueda binaria es mucho más rápida pero se necesita que los elementos
estén ordenados. Se compara el elemento central del arreglo, si es ese, se finaliza la
búsqueda; y si no lo es se debe verificar si el valor que se busca es más chico que el
central, si lo es se busca en la primera o segunda parte del arreglo dependiendo cómo esté
ordenado. Se debe repetir el proceso de comparación con el resto de la sublista de
elementos, hasta determinar la existencia del valor.
leer (k)
BAJO ← 1
ALTO ← N
CENTRAL ← (BAJO + ALTO) div 2
mientras (BAJO<=ALTO) Y ( X[CENTRAL] <> K) hacer
si K < X [CENTRAL] entonces
ALTO ← CENTRAL - 1
si-no
BAJO ← CENTRAL + 1
fin-si
CENTRAL ← (BAJO + ALTO) div 2
fin-mientras
si K == X [CENTRAL] entonces
escribir (“Valor encontrado en la posición”, CENTRAL)
fin-si
1+log2(N +
1)