Logo Studenta

Unidad_4_vectores_2018

¡Este material tiene más páginas!

Vista previa del material en texto

UNIDAD 4.- CONCEPTOS DE DATOS ESTRUCTURADOS 
Cátedra Algoritmos y Estructuras de Datos - 1 
 
 
UNIDAD 4.- CONCEPTOS DE DATOS ESTRUCTURADOS 
 
OBJETIVOS : 
� Que el alumno comprenda el concepto de dato, los seleccione adecuadamente y los 
organice en forma estructurada. 
 
� Que comprenda el concepto de estructura de datos y describa las aplicaciones 
adecuadas de los arreglos unidimensionales, bidimensionales y multidimensionales. 
 
� Que represente adecuadamente las estructuras de arreglo y registro. 
 
 
TEMAS: 
 Definición de dato estructurado. 
 Arreglos unidimensionales : definición, lectura e impresión, operaciones, vectores 
paralelos, métodos de búsqueda, método de ordenamiento con un vector y con 
vectores paralelos. Intercalación de vectores. Representación en un lenguaje C. 
 Arreglos bidimensionales : definición, lectura e impresión, operaciones (suma, resta, 
multiplicación de un escalar por una matriz, multiplicación de matrices), operaciones 
por fila, operaciones por columna, búsqueda, ordenamiento, tipos de matrices, 
elementos característicos de una matriz, representación en lenguaje C. 
 Arreglos Multidimensionales : definición, lectura e impresión, operaciones, 
representación en lenguaje C. 
 Cadenas de Caracteres : definición, lectura e impresión, representación en lenguaje C y 
funciones definidas en él. 
 Registros : definición, lectura e impresión, representación en lenguaje C. Registros 
jerarquizados, array de registros y registros de array. 
UNIDAD 4.- CONCEPTOS DE DATOS ESTRUCTURADOS 
Cátedra Algoritmos y Estructuras de Datos - 2 
 
 
 DEFINICIÓN DE DATO ESTRUCTURADO 
 
Se llama estructura de datos o tipo de dato estructurado a los tipos de datos construidos a 
partir de otros tipos de datos. Es un conjunto de datos. 
Pueden realizarse diferentes clasificaciones. Atendiendo al tipo de los datos que la 
componen. 
Desde el punto de vista de la gestión de memoria las estructuras de datos, se clasifican 
en: 
� Estáticas : si poseen un número fijo de elementos. Los ejemplos más típicos son los 
arrays y registros. Su mayor desventaja es la necesidad de tener que definir el número 
máximo de elementos que podrá tener la estructura. Su mayor ventaja es la rapidez de 
acceso a cada elemento individual de la estructura. Estas estructuras reservan la 
gestionan la memoria en tiempo de compilación del programa. 
� Dinámicas: si el número de elementos que contienen puede variar durante la 
ejecución del programa. Su principal inconveniente es la lentitud en el acceso, ya que 
normalmente se realiza de forma secuencial. La ventaja es sin embargo importante, la 
posibilidad de aumentar o disminuir en tiempo de ejecución el número de elementos 
que componen la estructura. La gestión de memoria se realiza en tiempo de ejecución 
del programa. 
 
 
 ARREGLOS UNIDIMENSIONALES 
 
El array es la estructura de datos más usual y más extendida en los lenguajes de 
programación. 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. 
 
El array es una estructura de datos estática y homogénea. Al definir un array en un 
programa se especifica su tamaño (número de elementos que la constituyen) con lo cual el 
compilador del lenguaje reserva memoria para el array. Dentro de la memoria, el array se 
almacena de forma contigua. 
 
Una de las características principales de los arrays es que permiten el acceso directo o 
aleatorio a sus elementos. En un array unidimensional para alcanzar una determinada posición i, 
basta con dar ese valor al índice. 
 
Las operaciones básicas son la lectura y escritura de datos en las distintas posiciones. 
 
Prácticamente todos los lenguajes de alto nivel permiten la utilización de variables con 
subíndice. 
 
Ejemplo de asignación de valor: variable simple B=1 
 
Ejemplo de asignación de valor: variable con subíndice A[5]=1 
 
Un arreglo es un tipo de dato estructurado, en el cual todos los elementos son de la misma 
naturaleza, es decir que son homogéneos, además presenta la característica de que sus 
elementos se almacenan en memoria RAM; por lo que al apagar la computadora estos datos se 
pierden. 
UNIDAD 4.- CONCEPTOS DE DATOS ESTRUCTURADOS 
Cátedra Algoritmos y Estructuras de Datos - 3 
 
 
Un arreglo unidimensional se denomina vector y posee una sola dimensión. 
 
Aquí es fundamental poder distinguir: 
 
� Orden del Vector : indica la cantidad de elementos del mismo. 
 
� Nombre del vector : indica la forma de distinguir un vector de otro; por lo que dos 
vectores serán distintos si poseen nombres diferentes y no subíndices diferentes. 
Ejemplo: 
Vector A 
Vector B 
 
� Subíndice : indica la posición de un elemento. 
 
� El subíndice puede ser una constante entera. Ejemplo A[31] 
 
� El subíndice puede ser una variable entera, A[k] 
 
� El subíndice puede ser una expresión aritmética cuyo resultado sea un valor entero 
positivo Ejemplo A[k+1+2*N] 
 
Por ejemplo: 
A[i] representa el elemento i-ésimo del vector A. 
A[2] representa el elemento de posición 2 del vector A. 
A[i+1] representa el i-ésimo +1 elemento. 
 
Por ejemplo si tenemos un vector como el siguiente: 
V N=4 
 
2 15 7 78 
 
� N=4 es la cantidad de elementos del vector. 
� V es el nombre del vector. 
� Con i se indicará el subíndice. 
� V[0]=2 es el primer elemento 
� V[N-1]=78 es el elemento que se encuentra en la posición N-1. 
UNIDAD 4.- CONCEPTOS DE DATOS ESTRUCTURADOS 
Cátedra Algoritmos y Estructuras de Datos - 4 
 
 
int v[100]; 
DEFINICIÓN, LECTURA E IMPRESIÓN 
 
Un concepto a tener en claro es que al ser un vector un conjunto de datos, tanto su lectura 
como su impresión se realizan con una estructura de iteración cuyo corte de control será i < N 
(orden del vector), siempre que se utilice una estructura while y la variable contador 
correspondiente al subíndice se inicialice con el valor 0. 
 
Sólo se podrá realizar la impresión o lectura fuera del ciclo de repetición si lo que se pretende 
leer o imprimir es un único valor (correspondiente a un elemento del vector). 
 
El siguiente programa en C, muestra la definición de un vector de 100 elementos de tipo 
entero, y la lectura de un vector de orden N. 
 
 
PROGRAMA PARA DEFINICIÓN – LECTURA E IMPRESIÓN 
 
#include<stdio.h> 
#include<conio.c> 
 
main (void) 
{ 
clrscr (); 
int i,n; 
 
Realiza la definición del vector 
 
printf (“Ingrese la cantidad de elementos”); 
scanf(“%d”,&n); 
for(i=1;i<=n;i++) 
{ 
printf(“Ingrese un elemento: “); 
Ingresa cada uno de los elementos del vector 
 
Muestra cada uno de los elementos del vector 
} 
getch(); 
} 
 
 
EJEMPLO DE APLICACIÓN 
 
/****************************************************************************************** 
Se tiene las notas de examen de 4 alumnos. Se quiere hacer un programa que determine 
cuantos alumnos sacaron una nota mayor al promedio 
******************************************************************************************/ 
#include<stdio.h> 
#include<conio.c> 
main (void) 
printf("%d",v[i]); 
scanf("%d",&v[i]); 
UNIDAD 4.- CONCEPTOS DE DATOS ESTRUCTURADOS 
Cátedra Algoritmos y Estructuras de Datos - 5 
 
 
Los números 
en negrita son 
los datos 
ingresados por 
teclado 
{ 
clrscr (); 
int i,c; 
float nota[4],suma; 
float promedio; 
suma=0; 
c=0; 
for (i=0;i<4;i++) 
{ 
printf("\n Nota[%d]= ",i); 
scanf("%f",&nota[i]); 
suma=suma+nota[i]; 
} 
promedio=suma/4; 
pintf("\nPromedio= %.2f",promedio); 
 
for (i=0;i<4;i++) 
{ 
If (nota[i]>promedio) 
c=c+1; 
} 
printf("\nSon %d los alumnos que tienen una nota mayor que el promedio",c); 
printf("\n\n"); 
getch(); 
} 
////////////////////////////////////////////////////////////////////// 
 
Lo que se ve en pantalla si se ejecuta el programa: 
Nota[0] = 8 
Nota[1] = 6 
 
Nota[2] = 6 
 
Nota[3] = 7 
 
Promedio = 6.750000 
Son 2 los alumnos que tienenuna nota mayor que el promedio 
 
 
OPERACIONES CON VECTORES 
 
Con vectores se pueden realizar las siguientes operaciones: 
1. Suma de dos o más vectores. 
2. Resta de dos o más vectores. 
3. Multiplicación de dos o más vectores. 
UNIDAD 4.- CONCEPTOS DE DATOS ESTRUCTURADOS 
Cátedra Algoritmos y Estructuras de Datos - 6 
 
 
4. División de dos vectores. 
5. Multiplicación de un vector por un escalar. 
 
 
1. SUMA DE DOS O MÁS VECTORES 
 
Para sumar dos o más vectores, los mismos deben ser del mismo orden, es decir 
deben tener la misma cantidad de elementos. 
 
Supongamos dos vectores A y B de orden N, se ingresan los elementos del vector A y 
y del vector B, luego se realiza la suma en el correspondiente elemento del vector C. 
 
En forma genérica: C[i]=A[i]+B[i] 
Vector A 
 
Vector B 
3 8 6 
 
Vector C 
8 15 16 
 
Programa en Lenguaje C para ingresar y sumar dos vectores 
#include<stdio.h> 
#include<conio.c> 
 
main (void) 
{ 
clrscr (); 
int n,i,a[50],b[50],c[50]; 
printf("Ingrese el orden del vector: "); 
scanf("%d",&n); 
 
for (i=0;i<n;i++) 
{ 
printf("\n A[%d]= ",i); 
scanf("%d",&a[i]); 
printf("\n B[%d]= ",i); 
scanf("%d",&b[i]); 
c[i]=a[i]+b[i]; 
} 
 
pintf("\nLos valores del vector C son:\n"); 
for (i=0;i<n;i++) 
{ 
printf("\n C[%d]=%d",i,c[i]); 
5 7 10 
UNIDAD 4.- CONCEPTOS DE DATOS ESTRUCTURADOS 
Cátedra Algoritmos y Estructuras de Datos - 7 
 
 
} 
getch(); 
} 
 
 
 
2. RESTA DE DOS O MÁS VECTORES 
 
Para restar dos o más vectores, los mismos deben ser del mismo orden, es decir 
deben tener la misma cantidad de elementos. 
 
Supongamos dos vectores A y B de orden N, se ingresan los elementos del vector A y 
y del vector B, posteriormente se realiza la resta en el correspondiente elemento del 
vector C. 
 
En forma genérica: C[i]=A[i]-B[i] 
Vector A 
 
Vector B 
3 8 6 
 
Vector C 
2 -1 4 
 
Programa en Lenguaje C para ingresar y restar dos vectores 
#include<stdio.h> 
#include<conio.c> 
 
main (void) 
{ 
clrscr (); 
int n,i,a[50],b[50],c[50]; 
 
printf("Ingrese el orden del vector: "); 
scanf("%d",&n); 
 
for(i=0;i<n;i++) 
{ 
printf("\n A[%d]= ",i); 
scanf("%d",&a[i]); 
printf("\n B[%d]= ",i); 
scanf("%d",&b[i]); 
c[i]=a[i]-b[i]; 
} 
 
pintf("\nLos valores del vector C son:\n"); 
5 7 10 
UNIDAD 4.- CONCEPTOS DE DATOS ESTRUCTURADOS 
Cátedra Algoritmos y Estructuras de Datos - 8 
 
 
for (i=0;i<n;i++) 
{ 
printf("\n C[%d]=%d",i,c[i]); 
} 
getch(); 
} 
 
 
 
 
 
3. MULTIPLICACIÓN DE DOS O MÁS VECTORES 
 
Para multiplicar dos o más vectores, los mismos deben ser del mismo orden, es decir 
deben tener la misma cantidad de elementos. 
 
Supongamos dos vectores A y B de orden N, se ingresan los elementos del vector A y 
y del vector B, a continuación se realiza el producto en el correspondiente elemento 
del vector C. 
 
En forma genérica: C[i]=A[i]*B[i] 
Vector A 
 
Vector B 
3 8 6 
 
Vector C 
15 16 18 
 
 
Programa en Lenguaje C para ingresar y multiplicar dos vectores 
#include<stdio.h> 
#include<conio.c> 
 
main (void) 
{ 
clrscr (); 
int n,i,a[50],b[50],c[50]; 
printf("Ingrese el orden del vector: "); 
scanf("%d",&n); 
 
for (i=0;i<n;i++) 
{ 
printf("\n A[%d]= ",i); 
scanf("%d",&a[i]); 
printf("\n B[%d]= ",i); 
5 2 3 
UNIDAD 4.- CONCEPTOS DE DATOS ESTRUCTURADOS 
Cátedra Algoritmos y Estructuras de Datos - 9 
 
 
scanf("%d",&b[i]); 
c[i]=a[i]*b[i]; 
} 
 
pintf("\nLos valores del vector C son:\n"); 
for (i=0;i<n;i++) 
{ 
printf("\n C[%d]=%d",i,c[i]); 
} 
getch(); 
} 
 
 
 
 
 
4. DIVISIÓN O COCIENTE ENTRE DOS VECTORES 
 
Para dividir dos vectores, los mismos deben ser del mismo orden, es decir deben tener 
la misma cantidad de elementos, y es condición necesaria que el vector B no tenga 
elementos nulos, ya que no es posible la división por cero. 
 
Supongamos dos vectores A y B de orden N, se ingresan los elementos del vector A y 
del vector B, a continuación se realiza el cociente en el correspondiente elemento del 
vector C. 
 
En forma genérica: C[i]=A[i]/B[i] 
Vector A 
 
Vector B 
3 2 4 
 
Vector C 
3 5 5 
 
Programa en Lenguaje C para ingresar y dividir dos vectores 
#include<stdio.h> 
#include<conio.c> 
 
main (void) 
{ 
clrscr (); 
int n,i,a[50],b[50],c[50]; 
 
printf("Ingrese el orden del vector: "); 
scanf("%d",&n); 
9 10 20 
UNIDAD 4.- CONCEPTOS DE DATOS ESTRUCTURADOS 
Cátedra Algoritmos y Estructuras de Datos - 10 
 
 
for (i=0;i<n;i++) 
{ 
printf("\n A[%d]= ",i); 
scanf("%d",&a[i]); 
printf("\n B[%d]= ",i); 
do 
{ 
scanf("%d",&b[i]); 
} 
while (b[i]==0); 
c[i]=a[i]/b[i]; 
} 
 
pintf("\nLos valores del vector C son:\n"); 
for (i=0;i<n;i++) 
{ 
printf("\n C[%d]=%d",i,c[i]); 
} 
getch(); 
} 
 
 
 
5. MULTIPLICACIÓN DE UN ESCALAR POR UN VECTOR 
 
Para multiplicar un vector A por un escalar k, se debe realizar el producto de cada 
elemento del vector A por el escalar k. 
 
En forma genérica: C[i]=A[i]*k 
Vector A 
 
Escalar 
K=3 
 
Vector C 
15 21 30 
 
 
Programa en Lenguaje C para ingresar y multiplicar un vector por un escalar 
#include<stdio.h> 
#include<conio.c> 
 
main (void) 
{ 
clrscr (); 
int k,n,i,a[50],c[50]; 
5 7 10 
UNIDAD 4.- CONCEPTOS DE DATOS ESTRUCTURADOS 
Cátedra Algoritmos y Estructuras de Datos - 11 
 
 
printf("Ingrese el valor de k: "); 
scanf("%d",&k); 
printf("Ingrese el orden del vector: "); 
scanf("%d",&n); 
 
for (i=0;i<n;i++) 
{ 
printf("\n A[%d]= ",i); 
scanf("%d",&a[i]); 
c[i]=a[i]*k; 
} 
 
pintf("\nLos valores del vector C son:\n"); 
for (i=0;i<n;i++) 
{ 
printf("\n C[%d]=%d",i,c[i]); 
} 
getch(); 
} 
 
 
 
 
 
 
VECTORES PARALELOS 
 
Dos o más arreglos que utilizan el mismo subíndice para acceder a elementos de distintos 
arreglos, se denominan arreglos paralelos. Estos arreglos pueden procesarse simultáneamente. 
 
 
orden. 
En los vectores paralelos la información se corresponde por posición y todos tienen el mismo 
 
Por ejemplo supongamos que se registra la información de los productos en 3 vectores: 
1. Vector cod: contiene los códigos de los productos. 
2. Vector can : contiene la cantidad que hay en stock de cada producto. 
3. Vector pre : contiene el precio de cada producto. 
 
cod 
 
1256 2135 6235 
can 
pre 
10 15 30 
2.50 3.15 6.20 
UNIDAD 4.- CONCEPTOS DE DATOS ESTRUCTURADOS 
Cátedra Algoritmos y Estructuras de Datos - 12 
 
 
Así en el ejemplo anterior el código 1256, se corresponde con cantidad igual a 10 y precio 
igual a 2.50. 
 
Se deben ingresar todos los elementos de los vectores y luego realizar el trabajo solicitado 
con ellos. 
 
Ejercicio 
Realizar la codificación en Lenguaje C, a fin poder ingresar los vectores cod, can y pre, todos 
de orden N, e indicar cuál es código del producto que posee el precio más alto. 
 
Programa en Lenguaje C 
#include<stdio.h> 
#include<conio.c> 
 
main (void) 
{ 
clrscr (); 
int n,i,cod[50],can[50]; 
float pre[50]; 
 
printf("Ingrese el orden del vector: "); 
scanf("%d",&n); 
may=0; 
 
for (i=0;i<n;i++) 
{ 
printf("\n cod[%d]= ",i); 
scanf("%d",&cod[i]); 
 
printf("\n can[%d]= ",i); 
scanf("%d",&can[i]); 
 
printf("\n pre[%d]= ",i); 
scanf("%f",&pre[i]); 
 
if (pre[i]>may) 
{ 
may=pre; 
pos=i; 
} 
} 
 
pintf("\nEl producto con el precio más alto es %d:\n",cod[pos]); 
getch(); 
} 
UNIDAD 4.- CONCEPTOS DE DATOS ESTRUCTURADOS 
Cátedra Algoritmos y Estructuras de Datos - 13 
 
 
 
 
MÉTODOS DE ORDENAMIENTO 
 
Aunque a lo largo de los años se han desarrollado muchos algoritmos de ordenamiento, los 
usados con mas frecuencia son: método de la burbuja, de selección, de la burbuja mejorada, 
shell. Todos ellos realizan el ordenamiento en memoria RAM, por ello se denominan métodos de 
ordenamiento interno. 
 
PRINCIPIOS GENERALES DEL ORDENAMIENTO 
 
Los algoritmos que se presentan comparan elementos de un mismo vector, y, si los doselementos están desordenados se realiza una transferencia bidireccional entre estos valores. 
 
if (A [ i ] > A[i+1] ) 
{ 
AUX=A[i]; 
A[i] = A [i+1]; 
A[i+1]= AUX; 
} 
 
En la condición anterior, se debe incluir el operador de relación: 
� > si quiere realizar un ordenamiento en forma ascendente. 
� < si quiere realizar un ordenamiento en forma descendente. 
 
 
MÉTODO DE LA BURBUJA 
 
El método es muy clásico y sencillo, pero poco eficiente. 
Se basa en la comparación de elementos adyacentes en el vector, e intercambiando sus 
valores si están desordenados. 
 
Análisis: 
 
� Comienza de izquierda a derecha, comparando a[0] con a[1], si están desordenados se 
intercambian entre si. 
� A continuación se compara a[1] con a[2] y así sucesivamente. 
 
Programa en Lenguaje C para ordenar un vector de N elementos con Método de la Burbuja 
#include<stdio.h> 
#include<conio.c> 
 
main (void) 
{ 
clrscr (); 
UNIDAD 4.- CONCEPTOS DE DATOS ESTRUCTURADOS 
Cátedra Algoritmos y Estructuras de Datos - 14 
 
 
int n,i,a[50],aux,b; 
 
printf("Ingrese el orden del vector: "); 
scanf("%d",&n); 
 
for (i=0;i<n;i++) 
{ 
printf("\n a[%d]= ",i); 
scanf("%d",&a[i]); 
} 
 
do 
{ 
b=0; 
for (i=0;i<n;i++) 
{ 
if (a[i]>a[i+1]) 
{ 
aux=a[i]; 
a[i]=a[i+1]; 
a[i+1]=aux; 
b=1; 
} 
} 
} 
while (b==1); 
pintf("\nEl vector ordenado es:\n"); 
for(i=0;i<n;i++) 
{ 
printf("\n a[%d]= %d\n",i,a[i]); 
} 
getch(); 
} 
 
 
ORDENAMIENTO EN VECTORES PARALELOS 
Para poder ordenar los vectores paralelos, se debe en primer lugar, ingresar todos los 
vectores, en segundo lugar se debe tener en claro por cuál o cuáles de los vectores se realizará 
el ordenamiento; siendo el primer vector la clave principal de ordenamiento y los demás se 
denominan claves secundarias. 
 
Ejemplo: 
Ingresar 2 vectores de orden N correspondientes a los datos de legajo y promedio de los alumnos. 
A partir de él mostrar un listado de los legajos con sus correspondientes promedios ordenados en 
forma descendente por promedio. 
UNIDAD 4.- CONCEPTOS DE DATOS ESTRUCTURADOS 
Cátedra Algoritmos y Estructuras de Datos - 15 
 
 
Solución: 
Los pasos a seguir para poder realizar este trabajo es: 
� Ingresar todos los vectores: la lectura puede realizarse dentro del mismo ciclo de 
repetición ya que todos son del mismo orden. 
� Establecer cuál es el vector clave del ordenamiento, ya que por él se realizará la 
comparación del elemento que se encuentra en la posición [i], con el que se encuentra 
en la posición [i+1]. 
� Establecer si el ordenamiento será ascendente o descendente a fin de determinar el 
operador de relación (< o >) que comparará los elementos de las posiciones [i] e [i+1]. 
 
Programa en Lenguaje C para ordenar vectores paralelos de N elementos con Método de la Burbuja 
#include<stdio.h> 
#include<conio.c> 
 
main (void) 
{ 
clrscr (); 
int n,i,leg[50],b,auxl; 
float pro[50],auxp; 
 
printf("Ingrese la cantidad de alumnos: "); 
scanf("%d",&n); 
 
for (i=0;i<n;i++) 
{ 
printf("\n leg[%d]= ",i); 
scanf("%d",&leg[i]); 
printf("\n pro[%d]= ",i); 
scanf("%f",&pro[i]); 
} 
 
do 
{ 
b=0; 
for (i=0;i<n;i++) 
{ 
if (pro[i]<pro[i+1]) 
{ 
auxl=leg[i]; 
leg[i]=leg[i+1]; 
leg[i+1]=auxl; 
 
auxp=pro[i]; 
pro[i]=pro[i+1]; 
pro[i+1]=auxp; 
UNIDAD 4.- CONCEPTOS DE DATOS ESTRUCTURADOS 
Cátedra Algoritmos y Estructuras de Datos - 16 
 
 
b=1; 
} 
} 
} 
while (b==1); 
pintf("\nEl vector ordenado es\n"); 
for(i=0;i<n;i++) 
{ 
 
 
} 
getch(); 
} 
printf("\n leg[%d]= %d\n",i,leg[i]); 
printf("\n pro[%d]= %.2f\n",i,pro[i]); 
 
 
ORDENAMIENTO CON DISTINTAS CLAVES DE ORDENAMIENTO 
Si se poseen vectores paralelos, se puede realizar el ordenamiento por uno o más de ellos. 
Se debe establecer cuál será la clave primaria y los otros vectores pueden llegar a ser claves 
secundarias. 
 
Ejemplo: 
Ingresar 2 vectores con la información de equipos de fútbol, uno de ellos contiene los puntos 
obtenidos por el equipo, y otro que contiene la diferencia de goles. 
Ambos vectores son de orden N. 
A partir de los datos ingresados se debe mostrar la tabla de posiciones. 
 
Solución: 
Para poder dar a conocer la tabla de posiciones se deben establecer cuáles serán las claves 
del ordenamiento. 
En este caso se conoce que las tablas de posiciones se ordenan primero por los puntos 
(clave primaria), si hay dos equipos que tengan igual cantidad de puntos, se ordenan por la 
diferencia de goles (clave secundaria). 
Los pasos a seguir para poder realizar este trabajo es: 
� Ingresar todos los vectores: la lectura puede realizarse dentro del mismo ciclo de 
repetición ya que todos son del mismo orden. 
� Establecer cuál es vector clave primaria o principal del ordenamiento, ya que por él se 
realizará la comparación del elemento que se encuentra en la posición [i], con el que 
se encuentra en la posición [i+1]. (Clave primaria: Puntos). 
� Establecer si el ordenamiento será ascendente o descendente a fin de determinar el 
operador de relación (< o >) que comparará los elementos de las posiciones [i] e [i+1]. 
En este caso el ordenamiento debe ser descendente: el operador será de <. 
UNIDAD 4.- CONCEPTOS DE DATOS ESTRUCTURADOS 
Cátedra Algoritmos y Estructuras de Datos - 17 
 
 
� Si al comparar los elementos de la posición [i] con el de la posición [i+1] fueran iguales, 
se debe preguntar por la clave secundaria por la rama negativa de la estructura de 
selección, que será por la diferencia de goles 
 
Programa en Lenguaje C para ordenar un vector de N elementos con Método de la Burbuja 
#include<stdio.h> 
#include<conio.c> 
 
main (void) 
{ 
clrscr (); 
int n,i,puntos[50],dife[50],b,auxp,auxd; 
 
printf("Ingrese la cantidad de equipos:”); 
scanf("%d",&n); 
 
for (i=0;i<n;i++) 
{ 
printf("\n puntos[%d]= ",i); 
scanf("%d",&puntos[i]); 
printf("\n dife[%d]= ",i); 
scanf("%d",&dife[i]); 
} 
 
do 
{ 
b=0; 
for (i=0;i<n;i++) 
{ 
if (puntos[i]<puntos[i+1]) 
{ 
auxp=puntos[i]; 
puntos[i]=puntos[i+1]; 
puntos[i+1]=auxp; 
 
auxd=dife[i]; 
dife[i]=dife[i+1]; 
dife[i+1]=auxd; 
 
 
} 
else 
{ 
b=1; 
 
 
if (puntos[i]==puntos[i+1]) 
{ 
if (dife[i]<dife[i+1]) 
{ 
UNIDAD 4.- CONCEPTOS DE DATOS ESTRUCTURADOS 
Cátedra Algoritmos y Estructuras de Datos - 18 
 
 
auxp=puntos[i]; 
puntos[i]=puntos[i+1]; 
puntos[i+1]=auxp; 
 
auxd=dife[i]; 
dife[i]=dife[i+1]; 
dife[i+1]=auxd; 
 
b=1; 
} 
} 
} 
} 
} 
while (b==1); 
 
pintf("\nEl vector ordenado es\n"); 
for (i=0;i<n;i++) 
{ 
 
 
} 
getch(); 
} 
printf("\n puntos[%d]= %d\n",i,puntos[i]); 
printf("\n dife[%d]= %d\n",i,dife[i]); 
 
MÉTODOS DE BÚSQUEDA 
 
Los métodos de búsquedas, tratan de determinar si un determinado elemento se encuentra 
dentro de un vector o no. 
 
La búsqueda de un elemento dentro de un array es una de las operaciones más 
importantes en el procesamiento de la información, y permite la recuperación de datos 
previamente almacenados. 
 
El tipo de búsqueda se puede clasificar como interna o externa, según el lugar en el que 
esté almacenada la información (en memoria o en dispositivos externos). Todos los algoritmos de 
búsqueda tienen dos finalidades: 
 
� Determinar si el elemento buscado se encuentra en el conjunto en el que se busca. 
� Si el elemento está en el conjunto, hallar la posición en la que se encuentra. 
 
 
MÉTODOS DE BÚSQUEDA SECUENCIAL 
 
El método de búsqueda en un vector desordenado trata de determinar si el elemento k está 
o no en el vector, para lo cual debe recorrer indefectiblemente el vector completo para saber si no 
está. 
UNIDAD 4.- CONCEPTOS DE DATOS ESTRUCTURADOS 
Cátedra Algoritmos y Estructuras de Datos - 19 
 
 
En este método se utiliza una variable bandera (b) a la cual se le definen dos valores 
posibles, en este caso b=0 significa que el elemento k no está en el vector; en cambio b=1 
significa que k está. 
Programa en Lenguaje C para buscar el valor K dentro en un vector 
#include<stdio.h> 
#include<conio.c> 
 
main (void) 
{ 
clrscr (); 
int n,i,v[50],k,b; 
 
printf("Ingreseel orden del vector: "); 
scanf("%d",&n); 
 
printf("Ingrese el elemento k que desea buscar: "); 
scanf("%d",&k); 
 
for (i=0;i<n;i++) 
{ 
printf("\n v[%d]= ",i); 
scanf("%d",&v[i]); 
} 
 
for(i=0;i<n;i++) 
{ 
if (v[i]==k) 
{ 
printf("\n %d está en la posición %d”,k,i); 
b=1; 
} 
} 
 
if (b==0) 
{ 
printf(“%d no está en el vector”,k); 
} 
getch(); 
} 
 
 
 
 
MÉTODOS DE BÚSQUEDA BINARIA 
 
La búsqueda binaria consiste en dividir el array por su elemento medio en dos subarrays 
más pequeños, y comparar el elemento con el del centro. Si coinciden, la búsqueda termina. Si el 
elemento es menor, debe estar (si está) en el primer subarray, y si es mayor está en el segundo; 
UNIDAD 4.- CONCEPTOS DE DATOS ESTRUCTURADOS 
Cátedra Algoritmos y Estructuras de Datos - 20 
 
 
se descarta la mitad en la que no está y nuevamente en la mitad en la que se puede encontrar el 
valor k se encuentra el valor medio y se repite el trabajo. 
Programa en Lenguaje C para buscar el valor K dentro en un vector con Búsqueda Binaria 
#include<stdio.h> 
#include<conio.c> 
 
main (void) 
{ 
clrscr (); 
int n,i,v[50],k,iz,de,c; 
 
printf("Ingrese el orden del vector: "); 
scanf("%d",&n); 
printf("Ingrese el elemento k que desea buscar: "); 
scanf("%d",&k); 
 
for (i=0;i<n;i++) 
{ 
printf("\n v[%d]= ",i); 
scanf("%d",&v[i]); 
} 
 
iz=0; 
de=n-1; 
b=0; 
while (iz<=de && b=0) 
{ 
c=(iz+de)/2; 
if (v[c]==k) 
{ 
 
} 
else 
{ 
b=1; 
 
 
if (k>v[c]) 
{ 
 
} 
else 
{ 
 
} 
} 
} 
iz=c+1; 
 
 
de=c-1; 
UNIDAD 4.- CONCEPTOS DE DATOS ESTRUCTURADOS 
Cátedra Algoritmos y Estructuras de Datos - 21 
 
 
if (b==1) 
{ 
 
} 
else 
{ 
 
} 
printf(“El elemento se encontró en la posición %d”,c); 
 
 
printf(“El elemento no se encontró”,c); 
getch(); 
} 
 
 
INTERCALACIÓN DE VECTORES 
 
Este método se utiliza para generar un vector ordenado de datos a partir de otros vectores 
también ordenados. 
 
El proceso consiste en seleccionar sucesivamente los elementos de cada uno de los 
vectores primitivos y compararlos. 
 
En el presente programa se emplean dos vectores A y B de orden N y M respectivamente, 
ambos ordenados; a partir de ellos se genera un tercer vector C, también ordenado, en el cual 
figuran lo elementos de A y de B. 
 
Programa en Lenguaje C para intercalar dos vectores 
#include<stdio.h> 
#include<conio.c> 
 
main (void) 
{ 
clrscr (); 
int n,m,p,i,j,k,a[50],b[50],c[100]; 
 
printf("Ingrese el orden del vector A: "); 
scanf("%d",&n); 
 
for (i=0;i<n;i++) 
{ 
printf("\n a[%d]= ",i); 
scanf("%d",&a[i]); 
} 
 
printf("Ingrese el orden del vector B: "); 
scanf("%d",&m); 
 
for(j=0;j<m;j++) 
{ 
printf("\n b[%d]= ",,j); 
UNIDAD 4.- CONCEPTOS DE DATOS ESTRUCTURADOS 
Cátedra Algoritmos y Estructuras de Datos - 22 
 
 
scanf("%d",&b[j]); 
} 
 
i=0; 
j=0; 
k=0; 
while (i<n && j<m) 
{ 
if (a[i]==b[j]) 
{ 
 
 
} 
else 
{ 
c[k]=a[i]; 
i=i+1; 
j=j+1; 
 
 
if (a[i]<b[j]) 
{ 
 
 
} 
else 
{ 
 
 
} 
} 
c[k]=a[i]; 
i=i+1; 
 
 
c[k]=b[j]; 
j=j+1; 
k=k+1; 
} 
 
while (i<n) 
{ 
c[k]=a[i]; 
i=i+1; 
k=k+1; 
} 
 
while (j<m) 
{ 
c[k]=b[j]; 
j=j+1; 
k=k+1; 
} 
 
p=k; 
printf("El vector C es: "); 
for (k=0;k<p;k++) 
{ 
printf("\n c[%d]= %d ",k,v[k]); 
UNIDAD 4.- CONCEPTOS DE DATOS ESTRUCTURADOS 
Cátedra Algoritmos y Estructuras de Datos - 23 
 
 
} 
 
getch(); 
} 
 
PROBLEMAS EJEMPLOS 
 
En esta sección se pretende que el alumno tenga las herramientas mínimas necesarias 
para poder encarar cualquier solución de un problema informático que comprenda arreglos 
unidimensionales (vectores). 
 
Generalmente se conoce el orden del vector y por ello se trabaja con un ciclo de repetición 
(estructura while o for). 
En todos los casos se presenta la solución en términos de Diagrama de Flujo y Codificación 
en Lenguaje C. 
 
 
Ejercicio Nº 1. 
Introduzca un vector de N números enteros. 
Solución 
En este caso particular se poseen datos pero no resultados, ya que no se especifica el trabajo 
a realizar con los elementos del vector. 
Datos 
N : orden del vector 
V : nombre del vector 
i : subíndice de los elementos del vector 
V[i] : cada uno de los elementos del vector 
Codificación en Lenguaje C 
 
#include<stdio.h> 
#include<conio.c> 
 
main (void) 
{ 
clrscr (); 
int n,i,v[50]; 
printf("Ingrese el orden del vector: "); 
scanf("%d",&n); 
i=0; 
while (i<n) 
{ 
 
 
} 
getch(); 
} 
printf("\n v[%d]= ",i); 
scanf("%d",&v[i]); 
i=i+1; 
N 
i<N 
NO 
SI FIN 
V[i] 
i=i+1 
i=0 
UNIDAD 4.- CONCEPTOS DE DATOS ESTRUCTURADOS 
Cátedra Algoritmos y Estructuras de Datos - 24 
 
 
Ejercicio Nº 2. 
Introduzca un vector de N números enteros y muestre la suma de los mismos. 
Solución 
Datos 
N : orden del vector 
V : nombre del vector 
i : subíndice de los elementos del vector 
V[i] : cada uno de los elementos del vector 
Resultado 
S: identificador que indica la suma de los valores introducidos en el vector. 
Codificación en Lenguaje C 
 
#include<stdio.h> 
#include<conio.c> 
main (void) 
{ 
clrscr (); 
int n,i,v[50],s; 
s=0; 
printf("Ingrese el orden del vector: "); 
scanf("%d",&n); 
i=0; 
while (i<n) 
{ 
printf("\n v[%d]= ",i); 
scanf("%d",&v[i]); 
s=s+v[i]; 
i=i+1; 
} 
printf("\n La suma de los valores es %d = ",s); 
getch(); 
} 
 
 
 
 
 
Ejercicio Nº 3. 
Introduzca N números enteros y muestre la cantidad de números positivos ingresados. 
Solución 
Datos 
N : orden del vector 
V : nombre del vector 
i : subíndice de los elementos del vector 
V[i] : cada uno de los elementos del vector 
i<N N 
v[i] SI S 
FIN 
i=i+1 
S=S+v[i] 
i=0 
N 
S=0 
UNIDAD 4.- CONCEPTOS DE DATOS ESTRUCTURADOS 
Cátedra Algoritmos y Estructuras de Datos - 25 
 
 
 
Resultado 
CP: identificador que indica la cantidad de números positivos introducidos en el vector. 
 
Condiciones Vinculantes 
Condición lógica para ver si un elemento V[i] del vector es positivo: v[i]>0 
Codificación en Lenguaje C 
 
#include<stdio.h> 
#include<conio.c> 
main (void) 
{ 
clrscr (); 
int n,i,v[50],cp; 
 
printf("Ingrese el orden del vector: "); 
scanf("%d",&n); 
i=0; 
cp=0; 
while (i<n) 
{ 
printf("\n v[%d]= ",i); 
scanf("%d",&v[i]); 
if (v[i]>0) 
{ 
cp=cp+1; 
} 
i=i+1; 
} 
printf("\n La cantidad de valores positivos es %d = 
",cp); 
getch(); 
} 
 
 
Ejercicio Nº 4. 
Introduzca un vector de N números naturales y determine el mayor de ellos. 
Solución 
Datos 
N : orden del vector 
V : nombre del vector 
i : subíndice de los elementos del vector 
V[i] : cada uno de los elementos del vector 
Resultado 
may: identificador que indica el mayor de los elementos del vector. 
i<N 
N 
SI CP 
v[i] 
FIN 
N V[i] >0 SI 
i:=i+1 
CP:=CP+1 
N 
i=0 
CP=0 
UNIDAD 4.- CONCEPTOS DE DATOS ESTRUCTURADOS 
Cátedra Algoritmos y Estructuras de Datos - 26 
 
 
Condiciones Vinculantes 
En el caso de vectores se pueden utilizar las siguientes técnicas: 
a) se asignará a la variable May (mayor) el menor valor posible si es que se conoce el rango 
del conjunto de datos, sabiendo el menor valor que puede tomar; en este caso es el valor 0 
(cero). 
b) se asignará el primer elemento del vector a la variable May (mayor), para que a partir de 
ella se puedan comenzar a realizar las comparaciones. 
 
 
Codificación en Lenguaje C 
 
#include<stdio.h> 
#include<conio.c> 
 
 
N 
i<N 
SI 
v[i] 
 
N SI 
may>v[i] 
 
 
 
may 
 
FIN 
main (void) 
{ 
clrscr (); 
int n,i,v[50],may; 
 
printf("Ingrese el orden del vector: "); 
scanf("%d",&n); 
i=0; 
may=0; 
while (i<n) 
{ 
printf("\n v[%d]= ",i); 
scanf("%d",&v[i]); 
if (may>v[i]) 
{ 
may=v[i]; 
} 
i=i+1; 
} 
printf("\n El mayor elemento es %d = ",may); 
getch(); 
} 
 
 
Ejercicio Nº 5. 
Introduzca una cantidad no determinada de valores, cuyo final está determinado por el valor cero, 
almacene estos valores en un vector y determine el orden del vector y la suma de sus elementos. 
 
Solución 
En este problema de repetición el corte de control es gobernado por una condición de 
negación a la dada en el ciclomientras (estructura while). En este ejemplo la condición de 
corte será: X!=0. 
 
Dato 
X: identificador que indica a cada uno de los números. 
N 
may=v[i] 
i=i+1 
i=0 
may=0 
UNIDAD 4.- CONCEPTOS DE DATOS ESTRUCTURADOS 
Cátedra Algoritmos y Estructuras de Datos - 27 
 
 
Resultado 
S: Suma de los valores ingresados 
V: nombre del vector 
V[i]: cada uno de los elementos del vector 
 
 
 
 
Codificación en Lenguaje C 
 
 
 
X 
 
N 
X!=0 
SI 
 
 
 
 
 
 
 
S, i 
#include<stdio.h> 
#include<conio.c> 
 
main (void) 
{ 
clrscr (); 
int s,i,x,v[50]; 
s=0; 
i=0; 
scanf("%d",&x); 
while (x!=0) 
{ 
FIN 
X 
s=s+x; 
v[i]=x; 
i=i+1; 
scanf("%d",&x); 
} 
printf("\n La suma de los valores es = %d\n",s); 
printf("\n El orden del vector es = %d",i); 
getch(); 
} 
 
 
Ejercicio Nº 6. 
Genere un vector con los números impares menores a 100 y dé a conocer el producto de ellos. 
 
Solución 
Los valores generados se asignan a cada uno de los elementos del vector y se realiza el 
trabajo solicitado. 
 
Dato 
No se poseen datos, pues no se ingresa ninguna variable, todos los valores deben ser 
generados. 
 
Resultado 
V: nombre del vector 
V[i]: cada uno de los elementos del vector 
P: Producto de los valores generados. 
 
Condiciones Vinculantes 
Se comienza con el contador C=1 y se lo incrementa de a dos. 
S=S+X 
V[i]=X 
i=i+1 
 
S=0 
i=0 
UNIDAD 4.- CONCEPTOS DE DATOS ESTRUCTURADOS 
Cátedra Algoritmos y Estructuras de Datos - 28 
 
 
 
 
Codificación en Lenguaje C 
 
#include<stdio.h> 
#include<conio.c> 
 
main (void) 
{ 
clrscr (); 
int c,i,v[50]; 
float p; 
c=1; 
p=1; 
i=1; 
while (c<100) 
{ 
p=p*c; 
v[i]=c; 
i=i+1; 
c=c+2; 
} 
printf("\n La producto de todos los valores es = %.2f\n",p); 
getch(); 
} 
C<=100 
P 
FIN 
C=C+2 
P=P*C 
V[i]=C 
i=i+1 
C=1 
P=1 
i=1

Continuar navegando

Materiales relacionados

38 pag.
LEC MATE 0003 2021

SIN SIGLA

User badge image

Isante T

106 pag.
IntroducciónR

User badge image

Central de Apuntes

13 pag.
resumen unidad 1-2

SIN SIGLA

User badge image

Pedro Emi