Capitulo V Estructuras de Datos Estaticas: Arreglos Unidimensionales (Vectores)
Capitulo V Estructuras de Datos Estaticas: Arreglos Unidimensionales (Vectores)
Capitulo V Estructuras de Datos Estaticas: Arreglos Unidimensionales (Vectores)
CAPITULO V
ESTRUCTURAS DE DATOS ESTATICAS
Un array es un identificador que referencia un conjunto de datos del mismo tipo.
Imagina un tipo de dato int; podremos crear un conjunto de datos de ese tipo y
utilizar uno u otro con sólo cambiar el índice que lo referencia. El índice será un valor
entero y positivo. En C los arrays comienzan por la posición 0.
Representación gráfica:
………..
Los arreglos están compuestos elementos, donde cada elemento, a su vez, está
formado por los índices y datos, los índices hacen referencia a la cantidad de
elementos del arreglo y a la posición en la cual se localizan, los datos se refieren a la
información que se almacena en cada una de las casillas, por lo tanto para hacer
referencia a un dato de un arreglo se utiliza el nombre del arreglo y el índice del
elemento.
Ejemplo
Programación I 66 Dossier
Universidad Salesiana de Bolivia Ingeniería de Sistemas
Declaración
En Diagrama de Flujo
En Lenguaje C
tipo_datos nombre_vector[tamaño]
Donde:
Programación I 67 Dossier
Universidad Salesiana de Bolivia Ingeniería de Sistemas
Ejemplos
Ejemplos:
Una particularidad con los vectores de tipo char (cadena de caracteres), es que
deberemos indicar en que elemento se encuentra el fin de la cadena mediante el
caracter nulo (\0). Esto no lo controla el compilador, y tendremos que ser nosotros los
que insertemos este caracter al final de la cadena.
Asignación de un Valor
A[4] Å 17 A[4] = 17
A= 81 57 22 -3 17
0 1 2 3 4 5
Programación I 68 Dossier
Universidad Salesiana de Bolivia Ingeniería de Sistemas
Modificación de un Valor
A= -3 57 22 -3 17
0 1 2 3 4 5
Lectura de un Valor
scanf(“%d”, &A[5]);
A[5]
cin << A[5];
A= -3 57 22 -3 17 1
0 1 2 3 4 5
Escritura de un Valor
printf(“%d”, A[2]);
A[2]
cout >> A[2];
Mostrar
A= -3 57 22 -3 17 1
0 1 2 3 4 5 22
Programación I 69 Dossier
Universidad Salesiana de Bolivia Ingeniería de Sistemas
Programación I 70 Dossier
Universidad Salesiana de Bolivia Ingeniería de Sistemas
/* Procedimiento de impresión de
MostV(NÈ, A [ ]È) valores almacenados en un vector,
en este caso, el vector ejemplo
agrupa un conjunto de valores
I Å 0, N – 1, +1 enteros */
void MostV(int n, int a[ ])
{
A[I] int i;
//Mensaje para el usuario
cout<<”Los elementos de V son:\n”
for (i = 0; i < n; i ++)
{
/***************** P R O TO T I P O S *******************/
int LeerDim(void)
{
int n;
Programación I 71 Dossier
Universidad Salesiana de Bolivia Ingeniería de Sistemas
do
{
scanf("%d",&n);
if (n<=0)
{
printf("\n\n E R R O R ! ! !");
printf("\n\n Debe introducir un número entero mayor que
cero");
printf("\n\n Intente de nuevo...");
}
else
{
if (n > MAX)
{
printf("\n\n E R R O R ! ! !");
printf("\n\n Debe introducir un número entero menor que
%d", MAX);
printf("\n\n Intente de nuevo...");
}
}
return(n);
}
/******************************************************/
void MostrarV(int num[MAX], int n)
{
int i;
/************************ M A I N ************************/
int main(void)
{
int t[MAX]; /* declaracion del vector t de enteros de tamaño MAX */
int a, i;
clrscr();
printf("Cuantos elementos desea generar?? ");
a=LeerDim();
for(i=0; i<a;i=i+1)
{
t[i] = i;
Programación I 72 Dossier
Universidad Salesiana de Bolivia Ingeniería de Sistemas
}
printf("\n\nLos primeros %d numeros naturales son:\n\n", a);
MostrarV(t, a);
printf("\n\n");
getch();
return(0);
}
Fila 0
Fila 1
Fila 2
Fila 3
Fila 4
Columna 5
Columna 4
Columna 3
Columna 2
Columna 1
Columna 0
Programación I 73 Dossier
Universidad Salesiana de Bolivia Ingeniería de Sistemas
Una matriz puede considerarse como un vector de vectores. Es, por consiguiente, un
conjunto de elementos, todos del mismo tipo, en el cual el orden de los componentes
es significativo y se necesitan dos índices para especificar uno de sus elementos, un
subíndice de renglón o fila y un subíndice de columna.
0 ……..
1 B[i][j]
………
2 ……..
…. ……..
B= ……..
i ……….
….. ………
N-1 ……
0 1 2 3 4 5 ….. j …. M-1
El arreglo B se dice que tiene N por M elementos ya que existen M elementos en cada
fila y N elementos en cada columna.
Declaración
En Diagrama de Flujo
nomb_const = valor
Programación I 74 Dossier
Universidad Salesiana de Bolivia Ingeniería de Sistemas
PROCESOS
fin
En Lenguaje C
tipo_datos nombre_matriz[tamaño_filas][tamaño_columnas]
Donde:
Ejemplos
1. int notas[6][50];
2. float ventas[10][12];
3. int miss[10][10];
Programación I 75 Dossier
Universidad Salesiana de Bolivia Ingeniería de Sistemas
int i, j;
J Å 0, c - 1, +1 cout<<”\nLos elementos de la
matriz son:\n”;
Programación I 76 Dossier
Universidad Salesiana de Bolivia Ingeniería de Sistemas
Fin_ MostrarM
Programación I 77 Dossier
Universidad Salesiana de Bolivia Ingeniería de Sistemas
Ejemplo
/***************** P R O TO T I P O S *******************/
/******* D E F I N I C I O N D E S U B P R O G R A M A S *******/
int LeerDim(void)
{
int n;
do
{
scanf("%d",&n);
if (n<=0)
{
printf("\n\n E R R O R ! ! !");
printf("\n\n Debe introducir un numero entero mayor que cero");
printf("\n\n Intente de nuevo...");
}
else
{
if (n > MAX)
{
printf("\n\n E R R O R ! ! !");
printf("\n\n Debe introducir un numero entero menor que %d",
MAX);
printf("\n\n Intente de nuevo...");
}
}
return(n);
}
Programación I 78 Dossier
Universidad Salesiana de Bolivia Ingeniería de Sistemas
/******************************************************/
void MostrarM(int n, int m, int num[MAX][MAX])
{
int i, j;
}
/*****************************************************/
void Pausa(void)
{
printf("Presione cualquier tecla para continuar...");
getch();
}
/************************ M A I N ************************/
int main(void)
{
int t[MAX][MAX]; /* declaracion de la matriz t de tamaño MAX*MAX */
int a, b;
clrscr();
printf("Ingrese la cantidad de filas de la matriz...");
a=LeerDim();
printf("Ingrese la cantidad de columnas de la matriz...");
b=LeerDim();
printf("\n\n Introduzca los elementos de la matriz...");
LeerM(a, b, t);
Programación I 79 Dossier
Universidad Salesiana de Bolivia Ingeniería de Sistemas
return(0);
}
Si al declarar una matriz también queremos inicializarla, habrá que tener en cuenta el
orden en el que los valores son asignados a los elementos de la matriz. Veamos
algunos ejemplos:
0 1 2 3
0 1 2 3 4
numeros = 1 5 6 7 8
2 9 10 11 12
char dias[7][10]={"lunes","martes","miércoles","jueves","viernes",
"sábado","domingo"};
printf("%s",dias[i]);
Programación I 80 Dossier
Universidad Salesiana de Bolivia Ingeniería de Sistemas
CAPÍTULO VI
MÉTODOS DE BÚSQUEDA
Introducción
La búsqueda es una operación que tiene por objeto la localización de un elemento
dentro de la estructura de datos. A menudo un programador estará trabajando con
grandes cantidades de datos almacenados en arreglos y pudiera resultar necesario
determinar si un arreglo contiene un valor que coincide con algún valor clave o
buscado.
Siendo el array de una dimensión o lista una estructura de acceso directo y a su vez
de acceso secuencial, encontramos dos técnicas que utilizan estos dos métodos de
acceso, para encontrar elementos dentro de un array: búsqueda lineal y búsqueda
binaria.
El método de búsqueda lineal funciona bien con arreglos pequeños o para arreglos no
ordenados. Si el arreglo está ordenado, se puede utilizar la técnica de alta velocidad
de búsqueda binaria, donde se reduce sucesivamente la operación eliminando
repetidas veces la mitad de la lista restante.
ind Å 0
sw Å 0
mientras (sw = 0) Λ (ind < N) hacer
si arreglo[ind] = valor_buscado
entonces
sw Å 1
si_no
ind Å ind + 1
Programación I 81 Dossier
Universidad Salesiana de Bolivia Ingeniería de Sistemas
fin_si
fin_mientras
si sw = 1
entonces
Mostrar “Encontrado”
si_no
Mostrar “No encontrado”
fin_si
sw Å 0
primero Å 0
ultimo Å N - 1
mientras (primero <= ultimo) Λ (sw = 0) hacer
mitad Å (primero + ultimo)/2
si arreglo[mitad] = valor_buscado
entonces
sw Å 1
si_no
si arreglo[mitad] > valor_buscado
entonces
ultimo Å mitad - 1
si_no
primero Å mitad + 1
fin_si
fin_si
fin_mientras
si sw = 1
entonces
Mostrar “Encontrado”
si_no
Mostrar “No encontrado”
fin_si
Programación I 82 Dossier
Universidad Salesiana de Bolivia Ingeniería de Sistemas
Programación I 83 Dossier
Universidad Salesiana de Bolivia Ingeniería de Sistemas
CAPÍTULO VII
METODOS DE ORDENACIÓN
Introducción
Uno de los procedimientos más comunes y útiles en el procesamiento de datos, es la
clasificación u ordenación de los mismos. Se considera ordenar al proceso de
reorganizar un conjunto dado de objetos en una secuencia determinada. Cuando se
analiza un método de ordenación, hay que determinar cuántas comparaciones e
intercambios se realizan para el caso más favorable, para el caso medio y para el caso
más desfavorable.
Tal operación se puede hacer de manera más eficiente después de que la lista ha sido
ordenada. Existen varios métodos para ordenamiento, clasificados en tres formas:
• Intercambio
• Selección
• Inserción.
Programación I 84 Dossier
Universidad Salesiana de Bolivia Ingeniería de Sistemas
serie de pasadas ("burbujeo") que termina con una en la que ya no se hacen cambios
porque todo está en orden.
Ejemplo:
Programación I 85 Dossier
Universidad Salesiana de Bolivia Ingeniería de Sistemas
Entonces
elemento [J + 1] Å aux
Fin_si
Fin_desde
Fin_desde
Programación I 86 Dossier
Universidad Salesiana de Bolivia Ingeniería de Sistemas
Ejemplo
aux Å elemento[I]
kÅI-1
sw Å 0
Entonces
kÅk–1
Si_no
Programación I 87 Dossier
Universidad Salesiana de Bolivia Ingeniería de Sistemas
sw Å 1
Fin_si
Fin_mientras
Fin_desde
Ejemplo
kÅI
Entonces
Programación I 88 Dossier
Universidad Salesiana de Bolivia Ingeniería de Sistemas
kÅj
Fin_si
Fin_desde
Fin_desde
Programación I 89 Dossier
Universidad Salesiana de Bolivia Ingeniería de Sistemas
Ejemplo
d=n
Mientras d<>1
d = |d/2|
sw = 1
Mientras sw = 1
sw = 0
Para (i = 1, i <= n – d, i++)
Si (v[j] > v[i + d])
aux = v[i]
v[i] = v[i + d]
v[i + d] = aux
sw = 1
FinSi
Programación I 90 Dossier
Universidad Salesiana de Bolivia Ingeniería de Sistemas
FinPara
FinMientras
FinMientras
Programación I 91 Dossier
Universidad Salesiana de Bolivia Ingeniería de Sistemas
CAPITULO VIII
ESTRUCTURAS
Concepto de estructura
Una estructura es un conjunto de una o más variables, de distinto tipo, agrupadas
bajo un mismo nombre para que su manejo sea más sencillo.
Declaración
struct tipo_estructura
{
tipo_campo1 nombre_campo1;
tipo_campo2 nombre_campo2;
tipo_campo3 nombre_campo3;
};
Donde:
Ejemplos
1. struct reglib
{
char titlib[40];
char autlib[30];
int npag;
int aned;
};
2. struct regalu
{
char nomb[30];
char ape[30];
int edad;
char fecnac[8];
int ci;
};
Programación I 92 Dossier
Universidad Salesiana de Bolivia Ingeniería de Sistemas
struct trabajador
{
char nombre[20];
char apellidos[40];
int edad;
char puesto[10];
};
Otra forma:
struct trabajador
{
char nombre[20];
char apellidos[40];
int edad;
char puesto[10];
} fijo, temporal;
Ejemplos
1. struct reglib
{
char titlib[40];
char autlib[30];
Programación I 93 Dossier
Universidad Salesiana de Bolivia Ingeniería de Sistemas
int npag;
int aned;
} libro;
2. struct regalu
{
char nomb[30];
char ap[30];
int edad;
char fecnac[8];
int ci;
};
struct alumno;
nomb_registro.nomb_campo
Ejemplos
1. Sea la variable libro de tipo reglib del ejemplo anterior, podemos asignarle valores
a algunos de sus campos de la siguiente forma:
libro.npag = 200;
libro.aned = 1998;
fgets(libro.titlib, 40, stdin);
fgets(libro.autlib, 30, stdin);
2. Sea la variable alumno de tipo regal del ejemplo anterior, podemos asignarle
valores a algunos de sus campos de la siguiente forma:
alumno.edad = 18;
alumno.ci = 5887456;
fgets(alumno.nomb, 30, stdin);
fgets(alumno.ap, 30, stdin);
Programación I 94 Dossier
Universidad Salesiana de Bolivia Ingeniería de Sistemas
/**************************************************************
Programa que pemite la introduccion de un registro y luego muestra
su contenido por pantalla
**************************************************************/
#include <stdio.h>
#include <conio.h>
#include "lineas.c"
struct reglib
{
char titlib[50];
char autlib[40];
char edlib[30];
int aned;
int npag;
}libro;
char Menu(void);
void LeerR(void);
void MostrarR(void);
char Menu(void)
{
char resp;
clrscr();
Margen(29, 5, 50, 7, 2);
Wxy(33,6, "MENU PRINCIPAL");
Margen(20, 8, 60, 15, 2);
Wxy(28, 9, "[L]eer el registro");
Wxy(28, 11, "[M]ostrar el registro");
Wxy(28,13, "[S]alir");
Margen(25, 16, 55, 18, 1);
Wxy(30, 17, "Digite su opcion... ");
gotoxy(51,17);
resp=(char)toupper(getch());
return resp;
}
/**********************************************************/
void LeerR(void)
Programación I 95 Dossier
Universidad Salesiana de Bolivia Ingeniería de Sistemas
{
int i;
clrscr();
Margen(28, 1, 52, 3, 2);
Wxy(30, 2, "LECTURA DEL REGISTRO");
/* TITULO */
Wxy(1, 5,"Titulo del Libro : ");
fgets(libro.titlib, 50, stdin);
fflush(stdin);
/* AUTOR */
Wxy(1, 7, "Autor del Libro : ");
fgets(libro.autlib, 40, stdin);
fflush(stdin);
/* EDITORIAL */
Wxy(1, 9,"Editorial del Libro : ");
fgets(libro.edlib, 30, stdin);
fflush(stdin);
/* ANIO DE EDICION */
Wxy(1, 11,"Anio de Edicion : ");
scanf("%d", &libro.aned);
/* CANTIDAD DE PAGINAS */
Wxy(1, 13,"Cantidad de Paginas : ");
scanf("%d", &libro.npag);
}
/**********************************************************/
void MostrarR(void)
{
clrscr();
Margen(1, 3, 79, 20, 2);
Programación I 96 Dossier
Universidad Salesiana de Bolivia Ingeniería de Sistemas
Wxy(2, 9,"TITULO");
gotoxy(24, 9);
printf(": %s", libro.titlib);
int main(void)
{
char opcion = '0';
do
{
opcion = Menu();
switch(opcion)
{
case 'L' : /* Lectura del registro */
LeerR();
break;
case 'M' : /* Mostrar el registro */
MostrarR();
break;
} /*fin switch*/
}while(opcion != 'S');
return 0;
}
Programación I 97 Dossier