Estructuras de Datos y Algoritmos Básicos
Estructuras de Datos y Algoritmos Básicos
Tema N.º 1:
Tema N.º 1: Representación de datos
UNIDAD I
Representación de datos
Introducción al tema
El objetivo de esta primera unidad es brindar los conceptos fundamentales sobre los
que se elaboran los demás contenidos de la asignatura. Por ello, en este primer tema
se describe en qué consisten las estructuras de datos y qué relación guardan con los
Introducción al tema
algoritmos. A continuación, se detallan las formas de representar los datos en el
computador, diferenciando entre datos simples y datos estructurados. Asimismo, es
El objetivo de esta primera
primordial, para launidad es brindar losde
implementación conceptos fundamentales
tales estructuras sobre los que se
la comprensión delelaboran
tema delos demás
Tema N.º 1
contenidos
las denominadas estructuras de control, las cuales se abordan como último acá[Link] datos
de la asignatura. Por ello, en este primer tema se describe en qué consisten las estructuras
y qué relación
Se debe guardan
aclararcon los algoritmos.
que, aunque tenganA continuación,
un nombrese detallan las formas
relacionado de representar
al título del curso,los datos en el
más
computador,
están diferenciando
vinculadas alentre datos
diseño desimples y datos estructurados. Asimismo, es primordial, para la imple-
algoritmos.
mentación de tales estructuras la comprensión del tema de las denominadas estructuras de control, las cuales
1. ¿En
se abordan como qué consiste
último acápite. la
Seestructura de datos?
debe aclarar que, aunque tengan un nombre relacionado al título del curso,
más están vinculadas al diseño de algoritmos.
Posiblemente a usted le resulten familiares algunas de estas frases: “se cayó el
sistema”, “el programa está lento”, “se colgó el software, reinicia la máquina”, entre
otras. Descartando la existencia de problemas técnicos con el computador y la red
1. ¿En qué consiste la estructura de datos?
de datos, el siguiente factor que puede afectar el rendimiento de un software es la
calidad de los algoritmos que emplea para procesar la información. Precisamente, la
Posiblemente a usted
estructura de le resulten
datos familiares
se refiere al algunas
conjunto de de
estas frases: para
técnicas “se cayó el sistema”
desarrollar , “el programa
software, o está
lento”, “se colgó el software, reinicia la máquina” , entre otras. Descartando
exactamente algoritmos, que utilicen de una manera eficiente los recursos de la la existencia de problemas técnicos
con el computadora.
computador y laTal red eficiencia
de datos, elessiguiente
medida, factor que puede afectar
principalmente, el rendimiento
en términos de un software
de tiempo de es
la calidad de los algoritmos
procesamiento y usoquedeemplea para procesar la información. Precisamente, la estructura de datos se
memoria.
refiere al conjunto de técnicas para desarrollar software, o exactamente algoritmos, que utilicen de una manera
Weiss
eficiente (2000)deconsidera
los recursos la [Link] Tal
muchos algoritmos
eficiencia es medida,requieren
principalmente,una enrepresentación
términos de tiempo de
apropiada de los
procesamiento y uso de [Link] para lograr ser eficientes. Esta representación junto con las
operaciones permitidas se llama estructura de datos.
Weiss (2000) considera que muchos algoritmos requieren una representación apropiada de los datos para lograr
ser eficientes.
RECUERDA:Esta representación junto con las operaciones permitidas se llama estructura de datos.
RECUERDA:
Un algoritmo es “un conjunto de instrucciones claramente especificadas que el
ordenador debe seguir para resolver un problema” (Weiss, 2000, p. 103).
Un algoritmo es “un conjunto de instrucciones claramente especificadas que el ordenador debe seguir para
resolver
Launfigura
problema” (Weiss,
1 ilustra esta2000, p. 103).
descripción.
La figura 1 ilustra esta descripción.
Figura 1 Representación de un algoritmo
Algoritmo
Usted recordará que por definición todo computador transforma datos en información útil para el usuario; por
ejemplo, si se ingresa la operación (5 + 2) se espera que el computador lo interprete, lo procese y devuelva el
resultado 7. En lenguaje C++ podría trabajarse un programa como el siguiente:
void main()
{
int a, b;
cin>> a;
cin>> b;
Tema N.º 1
Programa 1.1
¿Pero qué sucede cuando se debe procesar mayor cantidad de datos, por ejemplo, calcular la cantidad de notas
aprobatorias de una lista de 50 estudiantes?
1ª opción: Se elabora un programa que solicite cada nota (una por una), mientras un contador va incrementándo-
se en la unidad cada vez que identifica una nota mayor que 10.
2ª opción: Se puede solicitar cada nota y guardarla en una variable independiente; al final se compran por sepa-
rado para determinar si son aprobatorias.
Entonces, frente a estos inconvenientes se propone disponer los datos en estructuras (de ahí “estructura de
datos”) como, por ejemplo, arreglos —o arrays por su denominación en inglés—, a fin de agilizar las tareas de
lectura y escritura de los mismos, mientras se minimiza el esfuerzo de procesamiento, la cantidad de líneas de
código, el tiempo de programación, etc.
3. Representación de datos
Sahni (2005) denomina a este universo de posibles valores como “objetos de datos” (o Data Objects), y lo define
como un conjunto de instancias o valores.
12
Estructura de Datos
MANUAL AUTOFORMATIVO INTERACTIVO
UNIDAD I
Figura
el software 2. Representación
reserva unaPalabra de
de estas celdas. la memoria
Observe de un
la siguiente computador
figura:
Dato de tipo entero
Dato de tipo cadena 5
Palabra
Dato de tipo entero
Fuente: Elaboración propia
Dato de tipo cadena
Tema N.º 1
Para recuperar al valor correspondiente
Fuente: Elaboración bastará
propia con referenciar (llamar) al
nombre de laFigura
variable creada.
2. Representación de la memoria de un computador
Fuente: Elaboración propia
ParaEl recuperar
programa al 1.2valor
muestra un ejemplo debastará
correspondiente cómo crear una variable,
con referenciar asignarle
(llamar) al un
valor
nombre y
de luego
la recuperarlo.
variable creada.
Para recuperar al valor correspondiente bastará con referenciar (llamar) al nombre de la variable creada.
El programavoid main()un ejemplo de cómo crear una variable, asignarle un valor y luego recuperarlo.
El1.2 muestra
programa 1.2 muestra un ejemplo de cómo crear una variable, asignarle un
{
valor y luego recuperarlo.
void main() int a; // Declarar la variable “a” de tipo entero
a=5; // La variable recibe el valor de 5
void main()
{ cout<<“El valor ingresado es: ”<< a << endl; // Recuperar el
{
int a; // a;
Declarar//laDeclarar
variablela“a” de tipo“a” entero // valor de a
int variable de tipo entero
}
a=5; a=5; // La//variable recibe
La variable el valor
recibe de 5 de 5
el valor
Programa 1.2
cout<<“El valorvalor
cout<<“El ingresado es: ”<<
ingresado es: a”<<<< aendl;
<< endl;// Recuperar
// Recuperar el
el
// valor de a // valor de a
} } 3.2. Datos simples y datos estructurados
Programa 1.2
Programa 1.2 Según manifiesta Cruz (2011, p. 8), “la principal característica de los datos
[Link]
Datos es que ocupan
simples y datos solo una casilla de la memoria, por lo tanto, hacen
estructurados
referencia a un único valor a la vez”, mientras que “los datos estructurados se
3.2. Datos simples
Según y datospor
caracterizan
manifiesta estructurados
Cruzel hecho
(2011, dep. que conprincipal
8), “la un solo característica
nombre (o también de los datosllamado
identificador
simples es que de variables)
ocupan solo se hace
una referencia
casilla de la amemoria,
un grupo de porcasillas de memoria”;
lo tanto, hacen
Según manifiestaa suCruz
veza
referencia cada
(2011, uno
p.
un único8), de
“la los elementos
principal
valor vez”, omientras
componentes
a la característica de los
quedatos desimples
“los un dato
datos es estructurado
que ocupan solo
estructurados puede
seuna casi-
caracterizan por el hecho de que con un solo nombre (o también llamadoesta
ser
lla de la memoria, un
por dato
lo simple
tanto, hacen u otro estructurado.
referencia a un único Comparando
valor a la vez” , las figuras
mientras que 2 y
“los 3, notará
datos estructurados
se caracterizan diferencia.
identificador de de
por el hecho variables)
que con se un hace referencia
solo nombre a un grupo
(o también llamado deidentificador
casillas de de memoria”;
variables) se hace
referencia aa un
su grupo
vez cada uno dedelos
de casillas elementos
memoria”; a suo vez
componentes
cada uno dede losun dato estructurado
elementos o componentespuede de un dato
Figura
ser un dato 1.3. Representación
simple de un dato
u otro uestructurado. estructurado
Comparando las en la memoria de un
estructurado puede ser un dato simple otro estructurado. Comparando lasfiguras
figuras 22 y 3,notará
y 3, notará esta
esta diferencia.
diferencia. computador
Nombre del arreglo
Figura 1.3. Representación de un dato estructurado en la memoria de un
computador
Mi_arreglo
Nombre del arreglo
0 1 2 3
Mi_arreglo
Índices
0 1 2 3
Cabe1.3.
Figura precisar que ladefigura
Representación un dato3estructurado
es sólo una en larepresentación, ya que las casillas
memoria de un computador
de un dato estructurado, si bien operan en conjunto, Índices no necesariamente son
adyacentes.
Cabe precisar Es3 precisamente
que la figura esta característica
es sólo una representación, ya que laslacasillas
que permite realizar
de un dato una primera
estructurado, si bien ope-
clasificación
Cabe
ran en conjunto, de las
no necesariamenteestructuras
precisar que la sonfigura de datos:
3 es sólo
adyacentes. una representación,
Es precisamente ya quelalas
esta característica quecasillas
permite realizar
de un
una primera dato estructurado,
clasificación si bien
de las estructuras operan en conjunto, no necesariamente son
de datos:
• Basadas
adyacentes. en arreglosesta
Es precisamente (o Arrays), también
característica denominadas
la que ”contiguas”.
permite realizar una primera
• Basadas •
clasificaciónBasadas en punteros
de las(oestructuras
en arreglos (o Linked),
de datos:
Arrays), también también denominadas
denominadas ”contiguas”. ”enlazadas”.
La segunda forma de clasificarlas es según la “figura” que describen al graficarlas, pudiendo ser lineales y no
UNIDAD I
• Estructuras lineales
o Arreglos
o Pilas
o Colas
Tema N.º 1
o Listas
• Estructuras no lineales
o Árboles
o Grafos
Todos estos tipos de estructuras serán descritos al detalle a lo largo del presente manual.
• La lista de arribos de vuelos aéreos, ordenados del más reciente al más antiguo
a) Crear la lista
b) Destruir la lista
14
Estructura de Datos
MANUAL AUTOFORMATIVO INTERACTIVO
UNIDAD I
3.3.2. Abstracción de una lista lineal:
Es posible representar una lista lineal al margen de algún lenguaje de programación (de ahí el término “abstrac-
to”) de la siguiente forma:
Lista Lineal
{
Instancias
Tema N.º 1
Colección finita ordenada de cero o más elementos.
Operaciones
Empty() : Retorna verdadero si la lista está vacía; de lo contrario, falso.
Size() : Retorna el número de elemento de la lista (tamaño)
Get(índice) : Retorna el elemento de la posición (índice) especificada.
IndexOf(x) : Retorna el índice del elemento x (primera ocurrencia). Si el elemento no existe,
devuelve -1.
Erase(índice) : Borra el elemento cuyo índice es especificado.
Insert(índice, x) : Inserta el elemento x en la posición indicada como índice.
Output() : Muestra (imprime) la lista de elementos de izquierda a derecha.
}
Tomada de Data Structures, Algorithms, and Applications in C++, por Sahni (2005), p. 141.
Por ejemplo, al declarar la siguiente lista lineal L = {Apple, HP, Toshiba, Vaio}, los resultados de las operaciones
indicadas serían (considerar L original para cada caso):
[Link]() : Falso
[Link]() : 4
[Link](2) : “HP”
[Link](“Toshiba”) : 2 (el primer elemento tiene índice 0)
[Link](1) : {Apple, Toshiba, Vaio}
[Link](3, “Assus”) : {Apple, HP, Toshiba, Assus, Vaio}
[Link]() : {Apple, HP, Toshiba, Vaio}
[Link]() :
[Link]() :
[Link](0) :
[Link](2) :
[Link](-3) :
[Link](“c”) :
[Link](“q”) :
[Link](1) :
[Link](0, “e”) :
[Link](2, “f”) :
[Link]() :
Cada elemento de un arreglo puede ser asignado o localizado empleando una fórmula matemática; la más sen-
cilla, y usada de forma natural, es la siguiente:
15
Ubicación (i) = i formula (a)
UNIDAD I
Esta fórmula significa que el i-ésimo elemento de la lista se encuentra en la posición i. Observe el siguiente caso:
Se decide guardar la lista [5, 2, 4, 8, 1] en un arreglo de tamaño 10. Haciendo uso de la fórmula los elementos,
Figura
se ubicarían como 4. Ubicación de elementos en un arreglo con la fórmula (a)
sigue:
5 2 4 8 1
Figura 4. Ubicación de elementos en un arreglo con la fórmula (a)
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
Figura
5 4. Ubicación
2 4 de elementos
8 1 en un arreglo con la fórmula (a)
Esto debido a que,
Figura si se reemplazan
4. Ubicación de elementos los valores
en un de la
arreglo con i, fórmula
se tiene:
(a)
Tema N.º 1
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
5 2 4 8 1
• Ubicación(0) = 0
Esto debido
[0] a que, [1]
Estosi debido
se reemplazan
[2] a que, los
[3] si valores
[4] de i, se
se reemplazan tiene:
[5] [6]
los valores de[7] [8]
i, se tiene: [9]
• Ubicación(1) = 1
• • =
Ubicación(0) Ubicación(2)
0 a que, si= 2
Esto •debido
Ubicación(0) =se0reemplazan los valores de i, se tiene:
• Ubicación(3) = 3
• Ubicación(1) = 1
• • =
Ubicación(1) Ubicación(4)
1 =4
• Ubicación(0)
• Ubicación(2) =0 =2
• Ubicación(1)
• Ubicación(3) =1 =3
• ¿Le= pareció
Ubicación(2) 2 demasiada obvia la primera fórmula? Cuando se trata de
• Ubicación(2)
• Ubicación(4) =2 =4
estructurar datos, no es la única que existe.
• Ubicación(3) = 3
• Ubicación(3) = 3
• Ubicación(4)
¿Le pareció =demasiada
4 obvia la primera fórmula? Cuando se trata de
Si se emplea la fórmula:
• estructurar
Ubicación(4) = 4 datos, no es la única que existe.
¿Le pareció demasiada obvia la primera fórmula? Cuando se trata de
Ubicación(i) es=laTamaño del existe.
arreglo – i – 1 formula(b)
¿Le parecióestructurar
demasiada datos,
Si se emplea
obvia nofórmula:
la la
primera única que
fórmula? Cuando se trata de estructurar datos, no es la única que existe.
Si se emplea seAl
Si la asignarlalos
emplea
fórmula:
valores se ubicarían de derecha a izquierda, así:
fórmula:
Ubicación(i) = Tamaño del arreglo – i – 1 formula(b)
Figura 5. Ubicación de elementos en un arreglo con la fórmula (b)
Al Ubicación(i) = Tamaño
asignar los valores del arreglo
se ubicarían de –derecha
i – 1 a izquierda,
formula(b)
así:
16
Estructura de Datos
MANUAL AUTOFORMATIVO INTERACTIVO
Paso a)
UNIDAD I
5 2 4 8 1
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
Paso b)
5 2 4 8 1
Tema N.º 1
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
Paso c)
5 2 7 4 8 1
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
Por el
Figura contrario,
6. Proceso al eliminar
de inserción de unun elemento,
nuevo elementotodos los que
en un arreglo queseemplea
ubiquen a la derecha
la fórmula (a)
de él deberán correr una posición hacia la izquierda.
#include
El programa <iostream>
1.3 muestra la implementación de la operación de inserción de un nuevo elemento a partir de la
using
fórmula (a). namespace std;
const
#include int N = 10; // Tamaño del arreglo
<iostream>
int miArreglo[N];
using namespace std; // Creación del arreglo con N elementos
17
return vacío;
};
UNIDAD I
mento
{
int i = 0;
while ((N-1)-i >= indice)
{
miArreglo[(N-1)-i] = miArreglo[(N-1)-(i+1)];
i++;
}
}
// Insertar el nuevo valor
miArreglo[indice] = elemento;
};
// PROGRAMA PRINCIPAL
void main()
{
init(); // Insertar valores iniciales
Output(); // Mostrar en pantalla
Insert(2,7); // Insertar, en la posición 2, el elemento 7
Output(); // Mostrar en pantalla
Insert(5,9); // Insertar, en la posición 5, el elemento9
Output(); // Mostrar en pantalla
system(“Pause”);
};
Programa 1.3
Como se vio, en el caso anterior la dirección es determinada por una fórmula matemática; en este tipo de repre-
sentación las direcciones están distribuidas a lo largo de la lista.
18
Estructura de Datos
MANUAL AUTOFORMATIVO INTERACTIVO
UNIDAD I
#d1 #d2 #d3
e0
(Primer d1
nodo) e1 d2 e2 d3 en nodo)
(Ultimo NULL
#d1 #d2 #d3
(Primer nodo) (Ultimo nodo)
ei di+1
Campo
Campo de #dx
datos ei di+1 enlace
Campo de Campo
#dx
datos enlace
Tema N.º 1
Dirección
del nodo
Dirección
del nodo
Como puede apreciar, a diferencia de una lista de tipo arreglo, en esta
representación cada elemento (ei) ocupa su propio nodo. A su vez, cada nodo
Como puede apreciar, Figura a diferencia
7. Representación de lista
de una una listaen punteros
basada de tipo arreglo, en esta
tiene un “campo enlace” donde se almacena la dirección (en memoria) del
representación
siguiente elemento cada(d1, d2, …).(ei) ocupa su propio nodo. A su vez, cada nodo
elemento
tiene un “campo enlace”
Como puede apreciar, a diferencia de una lista donde se arreglo,
de tipo almacena la representación
en esta dirección (encada memoria)
elementodel(ei) ocupa
siguiente
Asimismo,
su propio nodo. elemento
A su vez,para
cadaubicar (d1,
nodo tiene d2, …).
un determinado
un “campo enlace”elementodondedesela lista es lanecesario
almacena ubicarse
dirección (en memoria) del
en el primer
siguiente elemento (d1, d2,nodo
…). y “saltar” hasta el nodo del elemento deseado a través de los
Asimismo,
campos enlace. para ubicar un determinado elemento de la lista es necesario ubicarse
Asimismo, paraen elubicar
primer nodo y “saltar”
un determinado hastadeellanodo
elemento lista esdelnecesario
elemento deseado
ubicarse en ela primer
travésnodo
de los
y “saltar”
campos
La lista enlace.
mostrada en la figura 7 es
hasta el nodo del elemento deseado a través de los campos enlace. llamada “Lista enlazada simple” debido a que
cada nodo tiene solo un enlace; también es denominada “estructura tipo cadena”
La
La lista mostrada lista
debido en amostrada
que los
la figura 7 es en
nodosla figura
llamada están 7 dispuestos
“Lista es llamada
enlazada “Lista
de
simple” enlazada
izquierda
debido simple”
a derecha
a que cada nodo debido
y a que
el valor
tiene solo de enlace;
un
cada
enlace nodo
del tiene
último solo
nodo un enlace;
es NULL. también es denominada “estructura
también es denominada “estructura tipo cadena” debido a que los nodos están dispuestos de izquierda a dere- tipo cadena”
cha y el valordebido
de enlacea que los nodos
del último nodo es están
[Link] de izquierda a derecha y el valor de
enlace del Eliminar
3.4.1. último nodo es NULL. de una lista enlazada
elementos
3.4.1. Eliminar elementos de una lista enlazada
3.4.1.
Observe Eliminar
el siguiente elementos de unapara
procedimiento listaeliminar,
enlazada por ejemplo, el elemento 1
Observe el siguiente de una lista enlazada:
procedimiento para eliminar, por ejemplo, el elemento 1 de una lista enlazada:
Observe el siguiente procedimiento para eliminar, por ejemplo, el elemento 1
• de• una
Ubicar segundo Ubicar listasegundo
nodo enlazada:
(elemento nodo
1). (elemento 1).
• Capturar el valor de su campo enlace.
• Capturar el
•• valor de susegundo
Ubicar
Vincular campo
el nodo enlace.
nodo
1 con(elemento
el nodo 3.1).
• Capturar el valor de su campo enlace.
• Vincular el•Analice
nodo 1 con
Vincular elelnodo
nodo3.1 conlaelfigura
cuidadosamente nodo 8.3.
Paso Figura
a) 8. Proceso para eliminar un elemento de una lista enlazada
Paso
e a) d1 e1 d2 e2 d3 en NULL
0
#d1 #d2 #d3
e0Nodo 1d1 e1Nodo 2d2 e2Nodo 3d3 enNodoNULL
4
#d1 #d2 #d3
Nodo 1 Nodo 2 Nodo 3 Nodo 4
Paso b)
Paso
e b) d2 e1 d2 e2 d3 en NULL
0
#d1 #d2 #d3
e0Nodo 1d2 e1 d2 e2Nodo 2d3 enNodoNULL
3
#d1 #d2 #d3
Nodo 1 Figura 8. Proceso para eliminar un elementoNodo 2 lista enlazada
de una Nodo 3
19
Note que, al eliminar un nodo, automáticamente el índice de todos los nodos siguientes decrece en 1 (círculos
entrecortados en la figura). A diferencia de un arreglo, este índice es solo referencial.
UNIDAD I
Para insertar en elemento en la posición i, es necesario ubicarse en el nodo anterior (i-1) e insertar el nodo justo
después de él.
El programa 1.4 permite implementar una lista enlazada e insertarle nuevos elementos.
#include <iostream>
#include <stdlib.h>
using namespace std;
Tema N.º 1
struct nodo{
int nro; // en este caso es un número entero
struct nodo *sgte;
};
q->nro = valor;
q->sgte = NULL;
if(lista==NULL)
{
lista = q;
}
else
{
t = lista;
while(t->sgte!=NULL)
{
t = t->sgte;
}
t->sgte = q;
}
}
while(lista != NULL)
{
cout <<’ ‘<< i+1 <<”) “ << lista->nro << endl;
lista = lista->sgte;
i++;
}
}
20
Estructura de Datos
MANUAL AUTOFORMATIVO INTERACTIVO
void menu1()
{
cout<<”\n\t\tLISTA ENLAZADA SIMPLE\n\n”;
UNIDAD I
cout<<” 1. INSERTAR AL INICIO “<<endl;
cout<<” 2. INSERTAR AL FINAL “<<endl;
cout<<” 3. REPORTAR LISTA “<<endl;
cout<<” 4. SALIR “<<endl;
Tema N.º 1
int main()
{
Tlista lista = NULL;
int op; // opción del menu
int _dato; // elemenento a ingresar
int pos; // posición a insertar
system(“color 0b”);
do
{
menu1(); cin>> op;
switch(op)
{
case 1:
case 2:
case 3:
system(“pause”); system(“cls”);
}while(op!=4);
system(“pause”);
return 0;
}
Programa 1.4
21
}
Programa 1.4
Tema n.º 2:
UNIDAD I
Estructuras de control
Tema n.º 2: Estructuras de control
Introducción al tema
IntroducciónEnaleste
tema
y el siguiente tema se abordarán las denominadas estructuras de control.
Joyanes, 2005, p. 41) considera que “son métodos de especificar el orden en que las
En este y el siguiente temade
instrucciones seun
abordarán
algoritmolassedenominadas
ejecutarán. Elestructuras de control.
orden de ejecución de(Joyanes, 2005, p. 41) consi-
las sentencias
dera que “son(lenguaje)
métodos deo instrucciones
especificar eldeterminan
orden en queel flujo de control. Estas
las instrucciones de unestructuras
algoritmodesecontrol
ejecutarán. El orden
de ejecución son,
de laspor consiguiente,
sentencias fundamentales
(lenguaje) en losdeterminan
o instrucciones lenguajes de programación
el flujo de control.y Estas
en losestructuras de
Tema n.º 2
Tarea 1
Tarea 2
Tarea 3
Por ejemplo:
Por ejemplo: el algoritmo
el algoritmo para sumar para sumarsería
dos valores doselvalores sería el siguiente:
siguiente:
Imprimir la respuesta
22
Lo cierto es que los problemas que resuelven los computadores son más complejos
Estructura de Datos
MANUAL AUTOFORMATIVO INTERACTIVO
Lo cierto es que los problemas que resuelven los computadores son más complejos (con ese fin se crearon),
por lo tanto, es necesario el empleo de algoritmos capaces de tomar decisiones, es decir, elegir qué tareas eje-
cutar, qué tareas repetir, etc. Para esto se cuenta con las denominadas estructuras de control, que permiten a
UNIDAD I
los lenguajes de programación ejecutar ciertas instrucciones en el orden y momento especificados, en tiempo
de ejecución.
• Estructuras condicionales
o De control simple
o De control doble
Tema n.º 2
o De control múltiple
• Estructuras repetitivas
o Condicionada
o Predefinida
Tal comparación puede ser interpretada como una pregunta literal. Por ejemplo:
Por lo tanto, tiene una respuesta, pudiendo ser esta: verdad o falso.
En palabras de Severance (2009, p. 33) “una expresión booleana es aquella que puede ser verdadera (True) o
falsa (False)”.
En consecuencia, las estructuras de control simple evalúan una expresión lógica dada, y si esta resulta verdade-
ra, ejecuta determinadas acciones (una o varias); de lo contrario, las obvia, pasando a las siguientes instrucciones
si las hubiere. La figura 10 ilustra lo expresado.
Figura 10. Representación de una estructura de control simple
(entonces)
V Expresión lógica
Tarea(s)
F
Fuente:
Figura 10. Representación Elaboración
de una propia
estructura de control simple
Fuente: Elaboración propia
RECUERDA
“Verdadero y Falso son valores especiales que pertenecen al tipo bool (booleano);
no son cadenas” (Severance, 2009, p. 33). 23
Su estructura en pseudocódigo es como se muestra a continuación:
Tarea(s)
no son
2009, p. 33). cadenas” (Severance, 2009, p. 33).
Su estructura
Su estructura en pseudocódigo
en pseudocódigo esmuestra
es como se como se muestra a continuación:
a continuación:
} Este tipo de estructura puede ser útil, por ejemplo, en un escenario en el que se
desee restar el 10 % al valor de una venta, siempre y cuando esta sea mayor que
1000. Observe la figura 11.
Este tipo de estructura puede ser útil, por ejemplo, en un escenario en el que se desee restar el 10 % al valor de
una venta, siempre y cuando
Figura [Link] sea mayor
Ejemplo de que 1000. Observe
estructura la figura simple
de control 11.
(entonces)
V Si la venta es mayor
Venta > 1000
que 1000
Fuente:
Figura Elaboración
11. Ejemplo propia
de estructura de control simple
Fuente: Elaboración propia
La variable
La variable “Venta” “Venta” es contrastada
es contrastada con“>”
con el operador el para
operador “>”
verificar quepara verificar
sea mayor que sea
que 1000. Si se comprueba
mayor que 1000. Si se comprueba ello, inmediatamente se procede a reescribir
ello, inmediatamente se procede a reescribir la variable con el nuevo valor (descuento de 10 %).
la variable con el nuevo valor (descuento de 10 %).
El programa 2.1 muestra la implementación de este algoritmo en C++.
El programa 2.1 muestra la implementación de este algoritmo en C++.
void main()
{ void main()
{ float venta;
cout<<”Digite un valor de venta:”<<endl;
cin>>venta;
if (venta > 1000) // Expresión lógica o condición
{
venta = venta - (venta * 0.10); // Tarea a realizar si
// la expresión
// resulta verdadera
}
cout<<”El valor de la venta: “<<venta<<endl;
}
Programa 2.1
24
Estructura de Datos
MANUAL AUTOFORMATIVO INTERACTIVO
UNIDAD I
A diferencia de la estructura de control simple donde se escriben instrucciones únicamente para el caso en que
la expresión lógica resulte verdadera, en una estructura de control doble se deben especificar instrucciones
también para el caso en que resulte falsa.
Tema n.º 2
Conjunto de instrucciones “A” a realizar
}
Sino
{
Conjunto de instrucciones “B” a realizar
}
(entonces) (sino)
V F
Expresión lógica
Tarea(s) A Tarea(s) B
Ejemplo: Enviar un mensaje de alerta indicando si la edad ingresada corresponde a la de una persona mayor o
menor de edad. Gráficamente sería:
(entonces) (sino)
V F
Edad >= 18
Imprimir: Imprimir:
Mayor de edad Menor de edad
void main()
UNIDAD I
{
int edad;
cout<<”Digite la edad de la persona”<<endl;
cin>>edad;
if (edad >= 18) // Expresión lógica o condición
cout<<”Mayor de edad”<<endl; // Expresión verdadera
else
cout<<”Menor de edad”<<endl; // Expresión falsa
}
Tema n.º 2
Programa 2.2
26
Estructura de Datos
MANUAL AUTOFORMATIVO INTERACTIVO
UNIDAD I
Expresión lógica
V Tarea(s) A
1 lógica
Expresión Tarea(s) A
1
F
F
V
Expresión lógica V Tarea(s) B
2 lógica
Expresión Tarea(s) B
2
Tema n.º 2
F
F V
Expresión lógica V Tarea(s) n
n lógica
Expresión Tarea(s) n
n
V
Numero = 1 V Imprimir “A”
Numero = 1 Imprimir “A”
F
F
V
Número = 2 V Imprimir “E”
Número = 2 Imprimir “E”
F
F
V
Número = 3 Imprimir “I”
V
Número = 3 Imprimir “I”
F
F
V
Número = 4 V Imprimir “O”
Número = 4 Imprimir “O”
F
F V
Número = 5 V Imprimir “U”
Número = 5 Imprimir “U”
F
F
Imprimir “No existe”
Imprimir “No existe”
27
Su versión en código de C++ es como se muestra en el programa 2.3.
#include <iostream>
#include <string>
UNIDAD I
void main()
{
int valor;
string vocal;
cout<<”Digite un valor: “;
cin>>valor;
if (valor == 1)
Tema n.º 2
vocal = “a”;
else if (valor == 2)
vocal = “e”;
else if (valor == 3)
vocal = “i”;
else if (valor == 4)
vocal = “o”;
else if (valor == 5)
vocal = “u”;
else
vocal = “No existe”;
cout<<”La vocal es: “<<vocal<<endl;
system(“Pause”);
}
Programa 2.3
void main()
{
int valor;
string vocal;
cout<<”Digite un valor: “;
cin>>valor;
switch(valor)
{
case 1: vocal = “a”; break;
case 2: vocal = “e”; break;
case 3: vocal = “i”; break;
case 4: vocal = “o”; break;
case 5: vocal = “u”; break;
default: vocal = “No existe”; break; //Si se digita un
valor
//fuera del rango [1, 5]
}
cout<<”La vocal es: “<<vocal<<endl;
system(“Pause”);
}
Programa 2.4
En C++ la instrucción Switch-Case ejecutará todos aquellos bloques de código donde la expresión lógica resulte
verdadera. Por ello es necesario agregar la palabra reservada “Break” (“detener” en español) al final de cada
instrucción.
28
Estructura de Datos
MANUAL AUTOFORMATIVO INTERACTIVO
Tema n.º 3:
UNIDAD I
Estructuras de control repetitivas
Introducción al tema
La reutilización de código es una forma de optimizar tanto el tiempo de programación, el de mantenimiento y,
Tema n.º 3
por supuesto, el de ejecución de un aplicativo. En esa línea, las estructuras de control repetitivas permiten eje-
cutar un bloque de instrucciones tantas veces sea necesario o hasta que una condición dada se cumpla (o sea
verdadera en términos técnicos).
Con lo expuesto a continuación, usted podrá conocer el funcionamiento y modo de implementación de este tipo
de estructuras.
Conjunto de instrucciones
Hacer
Conjunto de instrucciones
29
Mientras (expresión lógica)
i) ii)
UNIDAD I
Tarea(s)
Expresión lógica
Expresión lógica
Tarea(s)
Tema n.º 3
Instrucción Descripción
El uso más frecuente de este tipo de bucles se produce cuando el número de repeticiones se
For
conoce por anticipado y la condición del bucle puede ser controlada por un contador.
El uso más frecuente se produce cuando la repetición del bucle no está controlada por un
contador, sino por una cierta condición (simple y compleja).
While
Ejemplo 1:
#include <iostream>.
using namespace std;
void main()
{
string palabra;
palabra = “”;
do
{
cout<<”Digite la palabra a imprimir: ”;
cin>>palabra;
cout<<”La palabra es: “<<palabra<<endl;
}
while (palabra!=”Salir”);
system(“Pause”);
};
Programa 3.1
30
Estructura de Datos
MANUAL AUTOFORMATIVO INTERACTIVO
Ejemplo 2:
UNIDAD I
#include <iostream>
using namespace std;
void main()
{
int número;
int divisor;
int i;
Tema n.º 3
cout<<”Indique número: “;
cin>>número;
divisor = número;
i = 1;
while (divisor > 0)
{
if (número%divisor==0) //El operador % devuelve el resto de
//una división
{
cout<<”Divisor[“<<i<<”]: “<<divisor<<endl;
i++; //Incrementar en una unidad "<<divisor<<endl;
cout<<"Divisor["<<i<<"]:
} i++; //Incrementar en una unidad
divisor--;
} //Disminuir en una unidad
} divisor--; //Disminuir en una unidad
system(“Pause”);
}
}; system("Pause");
};
Programa 3.2
Programa 3.2
2. La instrucción FOR
La instrucción
2. La instrucción FORFOR es una variante de estructura repetitiva, la cual puede usarse
cuando se conoce de antemano la cantidad de repeticiones que debe tener el bucle.
La instrucción FOR es18
La figura una variante su
describe de estructura
estructura:repetitiva, la cual puede usarse cuando se conoce de antemano
la cantidad de repeticiones que debe tener el bucle.
La figura 18 describe
Figura su18.
estructura:
Representaciones de una estructura de control repetitiva
condicionada
VALOR MÁXIMO
“<N” permite definir el valor
máximo que tomará i.
Ejemplo 3:
Imprimir una serie numérica hasta un número especificado.
31
void main()
En los siguientes ejemplos se detalla cómo implementar esta instrucción:
Ejemplo 3:
UNIDAD I
void main()
{
int i;
int cantidad;
cout<<”Indique cantidad: “;
cin>>cantidad;
Tema n.º 3
for (i=1;i<=cantidad;i++)
cout<<i<<endl;
system(“Pause”);
};
Programa 3.3
Ejemplo 4:
Imprimir la tabla de multiplicar de un número dado. Note que en este caso la declaración de la variable auxiliar
“i” se realiza en la misma instrucción FOR.
void main()
{
int numero;
cout<<”Indique número de reportar: “;
cin>>numero;
for (int i=0;i<=10;i++)
cout<<número<<”*”<<i<<”=”<<número*i<<endl;
system(“Pause”);
};
Programa 3.4
Es posible anidar dos instrucciones FOR para realizar recorridos simultáneos. En el programa 3.5 se aprecia
cómo aprovechar esta cualidad para realizar una impresión de datos en forma tabular.
#include <iostream>
using namespace std;
void main()
{
int columnas;
int filas;
columnas = 9;
filas = 5;
for (int i=0; i<=filas; i++)
for (int j=0; j<=columnas; j++)
{
cout<<i<<j<<” “;
if (j==columnas)
cout<<endl; //Salto de línea si se llegó a la última colum-
na
}
system(“Pause”);
};
32
Estructura de Datos
MANUAL AUTOFORMATIVO INTERACTIVO
Resultado:
00 01 02 03 04 05 06 07 08 09
UNIDAD I
10 11 12 13 14 15 16 17 18 19
20 21 22 23 24 25 26 27 28 29
30 31 32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47 48 49
50 51 52 53 54 55 56 57 58 59
Como se verá a partir de la siguiente unidad, los bucles son ideales para recorrer por cada uno de los elementos
Tema n.º 3
de un arreglo (de una o más dimensiones) mientras se hacen operaciones con o sobre ellos.
Quetglás, G., Toledo, F., & Cerverón, V. (2002). Estructura de datos. En Fundamentos de Informática y Programa-
ción (pp. 171–211). Disponible en [Link]
Actividad N.º 1
Participe en un foro de discusión sobre listas basadas en arreglos y basadas en punteros.
Instrucciones:
a)
Lea y analice detenidamente los siguientes casos:
i. Los nombres de los jugadores participantes de un partido de futbol. Solo un partido, una vez finalizado
este, los datos pueden ser eliminados.
ii. Las placas de los vehículos que llegan a diario a una caceta de control policial en carretera. Una vez
terminado el día, la lista puede ser eliminada.
b)
Basado en su análisis, responda en el foro:
Entre los dos tipos de listas: basada en arreglos y basada en punteros, ¿cuál de ellas se adecúa mejor a
cada caso? Fundamente su respuesta.
33
Glosario de la Unidad I
UNIDAD I
A
Algoritmo. Conjunto ordenado de pasos que llevan a la solución de un problema.
C
Tema n.º 3
D
Dato. Unidad mínima de información que carece de significado por sí misma.
I
Información. Conjunto de datos ordenados y con sentido semántco.
M
Memoria (en informática). Es un dispositivo que almacena datos informáticos durante algún intervalo de tiempo.
P
Procesador. De la familia de los circuitos integrados, es un dispositivo electrónico responsable de convertir da-
tos de entrada en datos de salida.`l + l
Programa (en informática). Conjunto de instrucciones que realizan una tarea específica.
V
Variable. En un lenguaje de programación es un espacio de memoria, identificado por un nombre y reservado
para almacenar un dato específico a la vez.
34