Logo Studenta

Unidad_4_-_Vectores

¡Este material tiene más páginas!

Vista previa del material en texto

UNIDAD 4.- CONCEPTOS DE DATOS ESTRUCTURADOS 
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: 
4.1. Definición de dato estructurado. 
4.2. 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. 
4.3. 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. 
4.4. Arreglos Multidimensionales: definición, lectura e impresión, operaciones, representación en lenguaje C. 
4.5. Cadenas de Caracteres: definición, lectura e impresión, representación en lenguaje C y funciones definidas en él. 
4.6. Registros: definición, lectura e impresión, representación en lenguaje C. Registros jerarquizados, array de registros y registros de array.
Esp Ing Sandra Valla – Esp Lic Rafael Montesinos – Departamento Sistemas - 1 
UNIDAD 4.- CONCEPTOS DE DATOS ESTRUCTURADOS 
4.1. 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. 
4.2. 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. 
Esp Ing Sandra Valla – Esp Lic Rafael Montesinos – Departamento Sistemas - 2 
UNIDAD 4.- CONCEPTOS DE DATOS ESTRUCTURADOS 
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.
Esp Ing Sandra Valla – Esp Lic Rafael Montesinos – Departamento Sistemas - 3 
UNIDAD 4.- CONCEPTOS DE DATOS ESTRUCTURADOS 
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; 
	int v[100];
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: “); 
	scanf("%d",&v[i]);
	printf("%d",v[i]);
} 
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) 
Esp Ing Sandra Valla – Esp Lic Rafael Montesinos – Departamento Sistemas - 4 
UNIDAD 4.- CONCEPTOS DE DATOS ESTRUCTURADOS 
{ 
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 
Los números 
Nota[1] = 6 
Nota[2] = 6 
Nota[3] = 7 
Promedio = 6.750000 
en negrita son los datos 
ingresados por teclado
Son 2 los alumnos que tienen una nota mayor que el promedio 
OPERACIONES CON VECTORES 
Con vectores se pueden realizar las siguientesoperaciones: 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. 
Esp Ing Sandra Valla – Esp Lic Rafael Montesinos – Departamento Sistemas - 5 
UNIDAD 4.- CONCEPTOS DE DATOS ESTRUCTURADOS 
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 
	5 
	7 
	10
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]);
Esp Ing Sandra Valla – Esp Lic Rafael Montesinos – Departamento Sistemas - 6 
UNIDAD 4.- CONCEPTOS DE DATOS ESTRUCTURADOS 
} 
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 
	5 
	7 
	10
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");
Esp Ing Sandra Valla – Esp Lic Rafael Montesinos – Departamento Sistemas - 7 
UNIDAD 4.- CONCEPTOS DE DATOS ESTRUCTURADOS 
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 
	5 
	2 
	3
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);
Esp Ing Sandra Valla – Esp Lic Rafael Montesinos – Departamento Sistemas - 8 
UNIDAD 4.- CONCEPTOS DE DATOS ESTRUCTURADOS 
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 
	9 
	10 
	20
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);
Esp Ing Sandra Valla – Esp Lic Rafael Montesinos – Departamento Sistemas - 9 
UNIDAD 4.- CONCEPTOS DE DATOS ESTRUCTURADOS 
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 
	5 
	7 
	10
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]; 
Esp Ing Sandra Valla – Esp Lic Rafael Montesinos – Departamento Sistemas - 10 
UNIDAD 4.- CONCEPTOS DE DATOS ESTRUCTURADOS 
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. 
En los vectores paralelos la información se corresponde por posición y todos tienen el mismo orden. 
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 
	10 
	15 
	30
pre
	2.50 
	3.15 
	6.20
Esp Ing Sandra Valla – Esp Lic Rafael Montesinos – Departamento Sistemas - 11 
UNIDAD 4.- CONCEPTOS DE DATOS ESTRUCTURADOS 
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(); 
}
Esp Ing Sandra Valla – Esp Lic Rafael Montesinos – Departamento Sistemas - 12 
UNIDAD 4.- CONCEPTOS DE DATOS ESTRUCTURADOS 
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 dos elementos 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 quiererealizar 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 ();
Esp Ing Sandra Valla – Esp Lic Rafael Montesinos – Departamento Sistemas - 13 
UNIDAD 4.- CONCEPTOS DE DATOS ESTRUCTURADOS 
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.
Esp Ing Sandra Valla – Esp Lic Rafael Montesinos – Departamento Sistemas - 14 
UNIDAD 4.- CONCEPTOS DE DATOS ESTRUCTURADOS 
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;
Esp Ing Sandra Valla – Esp Lic Rafael Montesinos – Departamento Sistemas - 15 
UNIDAD 4.- CONCEPTOS DE DATOS ESTRUCTURADOS 
b=1; 
} 
} 
} 
while (b==1); 
pintf("\nEl vector ordenado es\n"); 
for(i=0;i<n;i++) 
{ 
printf("\n leg[%d]= %d\n",i,leg[i]); 
printf("\n pro[%d]= %.2f\n",i,pro[i]); 
 } 
 getch(); 
} 
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 <.
Esp Ing Sandra Valla – Esp Lic Rafael Montesinos – Departamento Sistemas - 16 
UNIDAD 4.- CONCEPTOS DE DATOS ESTRUCTURADOS 
▪ 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; 
b=1; 
} 
else 
{ 
if (puntos[i]==puntos[i+1]) 
{ 
if (dife[i]<dife[i+1]) 
{
Esp Ing Sandra Valla – Esp Lic Rafael Montesinos – Departamento Sistemas - 17 
UNIDAD 4.- CONCEPTOS DE DATOS ESTRUCTURADOS 
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++) 
{ 
printf("\n puntos[%d]= %d\n",i,puntos[i]); 
printf("\n dife[%d]= %d\n",i,dife[i]); 
 } 
 getch(); 
} 
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á.
Esp Ing Sandra Valla – Esp Lic Rafael Montesinos – Departamento Sistemas - 18 
UNIDAD 4.- CONCEPTOS DE DATOS ESTRUCTURADOS 
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("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]); 
} 
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 binariaconsiste 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; 
Esp Ing Sandra Valla – Esp Lic Rafael Montesinos – Departamento Sistemas - 19 
UNIDAD 4.- CONCEPTOS DE DATOS ESTRUCTURADOS 
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) 
{ 
b=1; 
} 
else 
{ 
if (k>v[c]) 
{ 
iz=c+1; 
} 
else 
{ 
de=c-1; 
} 
} 
 }
Esp Ing Sandra Valla – Esp Lic Rafael Montesinos – Departamento Sistemas - 20 
UNIDAD 4.- CONCEPTOS DE DATOS ESTRUCTURADOS 
if (b==1) 
{ 
printf(“El elemento se encontró en la posición %d”,c); 
} 
else 
 { 
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);
Esp Ing Sandra Valla – Esp Lic Rafael Montesinos – Departamento Sistemas - 21 
UNIDAD 4.- CONCEPTOS DE DATOS ESTRUCTURADOS 
scanf("%d",&b[j]); 
} 
i=0; 
j=0; 
k=0; 
while (i<n && j<m) 
 { 
if (a[i]==b[j]) 
{ 
c[k]=a[i]; 
i=i+1; 
j=j+1; 
} 
else 
{ 
if (a[i]<b[j]) 
{ 
c[k]=a[i]; 
i=i+1; 
} 
else 
{ 
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]);
Esp Ing Sandra Valla – Esp Lic Rafael Montesinos – Departamento Sistemas - 22 
UNIDAD 4.- CONCEPTOS DE DATOS ESTRUCTURADOS 
} 
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 
N 
#include<stdio.h> 
#include<conio.c> 
i=0 
i<N 
V[i] i=i+1 
NO
SI 
FIN 
main (void) 
 { 
clrscr (); 
int n,i,v[50]; 
printf("Ingrese el orden del vector: "); scanf("%d",&n); 
i=0; 
while (i<n) 
{ 
printf("\n v[%d]= ",i); 
scanf("%d",&v[i]); 
i=i+1; 
} 
getch(); 
} 
Esp Ing Sandra Valla – Esp Lic Rafael Montesinos – Departamento Sistemas - 23 
UNIDAD 4.- CONCEPTOS DE DATOS ESTRUCTURADOS 
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 
S=0 
N 
i=0 
i<N 
v[i] 
N 
O
SI 
#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) 
{ 
S 
printf("\n v[%d]= ",i); 
scanf("%d",&v[i]); 
S=S+v[i] 
i=i+1 
Ejercicio Nº 3. 
FIN 
s=s+v[i]; 
i=i+1; 
} 
printf("\n La suma de los valores es %d = ",s); getch(); 
} 
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 
Esp Ing Sandra Valla – Esp Lic Rafael Montesinos – Departamento Sistemas - 24 
UNIDAD 4.- CONCEPTOS DE DATOS ESTRUCTURADOS 
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 
N 
#include<stdio.h> 
#include<conio.c> 
N O 
i=0 
CP=0 
i<N 
v[i] 
V[i] >0 
N 
O 
SI 
SI
CP FIN 
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]); 
CP:=CP+1 
i:=i+1 
Ejercicio Nº 4. 
if (v[i]>0) 
{ 
cp=cp+1; 
} 
i=i+1; 
} 
printf("\n La cantidad de valores positivos es %d = ",cp); 
getch(); 
} 
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. 
Esp Ing Sandra Valla – Esp Lic Rafael Montesinos – Departamento Sistemas - 25 
UNIDAD 4.- CONCEPTOS DE DATOS ESTRUCTURADOS 
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. 
N 
i=0 
may=0 i<N 
v[i] 
N 
O 
SI 
may FIN 
Codificación en Lenguaje C 
#include<stdio.h> 
#include<conio.c> 
main (void) 
 { 
clrscr (); 
int n,i,v[50],may; 
printf("Ingrese el orden del vector: "); scanf("%d",&n); 
i=0; 
N SI 
may=0; 
O
may>v[i] 
may=v[i] 
i=i+1 
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 ciclo mientras (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. 
Esp Ing Sandra Valla – Esp Lic Rafael Montesinos – Departamento Sistemas - 26 
UNIDAD 4.- CONCEPTOS DE DATOS ESTRUCTURADOS 
Resultado 
S: Suma de los valores ingresados V: nombre del vector 
V[i]: cada uno de los elementos del vector S=0 
Codificación en Lenguaje C 
i=0
X 
X!=0 
N 
O 
SI 
S, i 
#include<stdio.h> #include<conio.c> 
main (void) 
 { 
clrscr (); 
int s,i,x,v[50]; 
s=0; 
i=0; 
S=S+X 
V[i]=X 
 i=i+1X 
Ejercicio Nº 6. 
FIN 
scanf("%d",&x); 
while (x!=0) 
{ 
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(); 
} 
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. 
Esp Ing Sandra Valla – Esp Lic Rafael Montesinos – Departamento Sistemas - 27 
UNIDAD 4.- CONCEPTOS DE DATOS ESTRUCTURADOS 
C=1 
P=1 
i=1 
C<=100 
P=P*C V[i]=C i=i+1 
C=C+2 
P 
FIN 
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(); 
}
Esp Ing Sandra Valla – Esp Lic Rafael Montesinos – Departamento Sistemas - 28

Continuar navegando

Materiales relacionados

254 pag.
geometriaanalitica

Xochicalli

User badge image

Paola Puca

106 pag.
IntroducciónR

User badge image

Central de Apuntes

2 pag.
197 pag.
arte de prog R - Axel

User badge image

Muchos Materiales