Logo Studenta

Vectores

¡Este material tiene más páginas!

Vista previa del material en texto

VECTORES
ARRAYS
O ARREGLOS 
UNIDIMENSIONALES
• Definición, características, declaración.
• Carga, 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.
Un vector o arreglo unidimensional, es un conjunto
de datos con un numero fijo de componentes, todos
del mismo tipo.
DEFINICION
V 7 8 9 10
V[0] V[1] V[2] V[3]
REPRESENTACION GRAFICA
En un arreglo, el primer elemento siempre comienza en la
posición 0 y el ultimo elemento es el n-1. En el ejemplo
tenemos un arreglo de 4 elementos por lo tanto la ultima
posición es 3.
N=4
ORDEN
SUBINDICE
NOMBRE
• Almacenan los elementos en posiciones
contiguas de memoria.
• Tienen un mismo nombre de variable que
representa a todos los elementos.
• Se puede acceder a ellos de manera directa
mediante un índice (0,1,2,3) encerrado entre
corchetes[ ].
• Los elementos se almacenan en memoria RAM
CARACTERISTICAS
DECLARACION DE UN ARREGLO
tipo Nombre [ Tamaño] ;
Donde
Tipo: es el tipo de datos de los elementos del arreglo.
Nombre: es el nombre asignado al arreglo.
Tamaño: es la cantidad de elementos que puede soportar el arreglo.
EJEMPLOS
float numero[10]; Arreglo de 10 números reales 
int edad[45]; Arreglo de 45 enteros 
char ch[30]; Cadena de 30 caracteres 
INICIALIZACION DE UN VECTOR EN SU DEFINICION
int Numero [ ]= {2,6,1,8,9} ;
int legajo [10 ] ;
2 6 1 8 9
0 1 2 3 4
Si quisiéramos mostrar un elemento determinado del
vector, bastaría con poner los siguiente:
Mostrar numero[1] lo que visualizaría sería el numero 6.
Numero
UN VECTOR DE CARACTERES
char letras [ ]= {‘a’, ’e’, ’i’, ’o’, ’u’} ;
a e i o u
0 1 2 3 4
Si quisiéramos mostrar un elemento determinado del
vector, bastaría con poner los siguiente:
Mostrar letras[1] lo que visualizaría sería la letra e.
letras
•Unidimensionales (Vectores) 
•Bidimensionales (Matrices) 
•De 3 dimensiones(Tridimensionales) 
•De mas de 3 dimensiones 
(Multidimensionales)
CLASIFICACION DE LOS ARREGLOS
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.
LECTURA E IMPRESIÓN DE UN VECTOR
i=0; i<N; i=i+1
PROC 
N
V[i]
i=0; i<N; i=i+1
PROC 3
S=S+V[i]
CARGA LECTURA
i=0; i<N; i=i+1
PROC 3
V[i]
IMPRESION
VECTORES CON 
FOR
i<N
i=0
i=i+1
PROC 
S
N
N
V[i]
VECTORES CON 
WHILE
i<N
i=0
i=i+1
PROC 
S
N
S=S+V[i]
i<N
i=0
i=i+1
PROC 
S
N
V[i]
CARGA
LECTURA
IMPRESION
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. 
4. División de dos vectores.
5. Multiplicación de un vector por un escalar. 
OPERACIONES CON UN VECTOR
Para sumar, restar o multiplicar dos o más vectores, los mismos deben ser del
mismo orden, es decir deben tener la misma cantidad de elementos.
En forma genérica: C[i]=A[i]+B[i] C[i]=A[i]-B[i] C[i]=A[i]*B[i]
En la división a parte de ser del mismo orden, es condición
necesaria que el vector B no tenga elementos nulos, ya que no es
posible la división por cero.
SUMA,RESTA,MULTIPLICACION yDIVISION DE DOS O MÁS VECTORES
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
MULTIPLICACIÓN DE UN ESCALAR POR UN VECTOR
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.
VECTORES PARALELOS
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.
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.
2 6 1 8 9
0 1 2 3 4
1 2 6 8 9
0 1 2 3 4
Vector Original
Vector Ordenado
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 quiere realizar un ordenamiento en forma descendente.
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.
2 6 1 9 8
SI
Numero Actual > Numero Siguiente
CAMBIO
MÉTODO DE LA BURBUJA
2 6 1 9 82 6 1 9 82 1 6 9 82 1 6 9 82 1 6 8 92 1 6 8 91 2 6 8 91 2 6 8 91 2 6 8 91 2 6 8 9
SI
Numero Actual > Numero Siguiente
CAMBIO
MÉTODO DE LA BURBUJA 
Con DO WHILE
void ordenar(int N, int V[50])
{
int i,b,aux;
do
{
b=0;
for (i=0;i<N-1;i++)
{
if (V[i]>V[i+1])
{
aux=V[i];
V[i]=V[i+1];
V[i+1]=aux;
b=1;
}
}
}
while (b==1);
}
A
ordenar(5,A);
2 6 1 9 8
0 1 2 3 4
N b i for V(i) V(i+1)
V(i) > 
V(i+1)
aux
5 0 0 0<4 2 6 2>6 no
1 1<4 6 1 6>1 6 si
1 1 6
2 2<4 6 9 6>9 no
3 3<4 9 8 9>8 9 si
8 9
4 4<4
0 0 0<4 2 1 2>1 2 Si
1 1 2
1 1<4 2 6 2>6 No
2 2<4 6 8 No
3 3<4 8 9 No
4 4<4
void ordenar(int N, int V[50])
{
int i,b,aux;
do
{
b=0;
for (i=0;i<N-1;i++)
{
if (V[i]>V[i+1])
{
aux=V[i];
V[i]=V[i+1];
V[i+1]=aux;
b=1;
}
}
}
while (b==1);
}
A N=5
2 1 6 8 9
0 1 2 3 4
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.
ordenar(N,cod,can,pre);
void ordenar(int N, int A[50], int B[50], float C[50])
{
int i,b,aux,aux2,aux3;
do
{
b=0;
for (i=0;i<N-1;i++)
{
if (A[i]>A[i+1])
{
aux=A[i];
A[i]=A[i+1];
A[i+1]=aux;
aux2=B[i];
B[i]=B[i+1];
B[i+1]=aux2;
aux3=C[i];
C[i]=C[i+1];
C[i+1]=aux3;
b=1;
}
}
}
while (b==1);
}
ORDENA EL 
VECTOR A
ORDENA EL 
VECTOR B
ORDENA EL 
VECTOR C
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 arreglo es una de
las operaciones más importantes en el procesamiento de la
información, y permite la recuperación de datos
previamente almacenados.
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
El vector puede estar o no ordenado.
Determina si el elemento k está o no en el vector, para lo
cual debe recorrer indefectiblemente el vector completo.
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á.
MÉTODOS DE BÚSQUEDA SECUENCIAL
#include<stdio.h>
#include<stdlib.h>
#include<locale.h>
main ()
{ setlocale(LC_CTYPE,"Spanish");system("cls");
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+1);
scanf("%d",&v[i]);
}
for(i=0;i<n;i++) //Recorre el vector buscando k
{
if (v[i]==k) //Si lo encuentra
{
printf("\n %d está en la posición %d",k,i+1);
b=1;
}
} 
if (b==0)
printf("%d no está en el vector",k);
printf("\n\n");
system("pause"); 
} 
Para usar este método el vector tiene que estar ordenado
en forma ascendente.
La búsqueda binaria consiste en dividir el arreglo por su
elemento medio en dos subarreglos 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; 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.
MÉTODOS DE BÚSQUEDA BINARIA
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; 
}
} // Fin del while
if (b==1)
printf("El elemento se encontró en la posición %d",c+1);
else
printf("El elemento no se encontró");
Algoritmo DE BÚSQUEDA BINARIA
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.
// PROCESO DE INTERCALACION
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; //p es el nuevo orden del vector intercalado
#include <stdio.h>
#include <stdlib.h>
main() 
{ 
int vector[25], i,N; 
printf("\nIngrese la cantidad de elementos: ");
scanf("%d",&N);
//CARGA DEL VECTOR
for(i=0;i<N;i++)
{ 
printf("Ingrese el elemento %d: ",i+1);
scanf("%d",&vector[i]); 
}
//VISUALIZACION DEL VECTOR
for(i=0;i<N;i++)
{ 
printf("\nElemento %d: %d",i+1,vector[i]);
}
system("pause");
}
CARGA Y MUESTRA DE UN VECTOR
CARGA Y MUESTRA DE UN VECTOR CON FUNCION
#include <stdio.h>
#include <stdlib.h>
void carga(int Orden, int vec[50]);
void mostrar(int Orden, int vec[50]);
main() 
{ 
int vector[25],N; 
printf("\nIngrese la cantidad de elementos: ");
scanf("%d",&N);
carga(N,vector);
mostrar(N,vector);
printf("\n");
system("pause");
}
void carga(int Orden, int vec[50]) //CARGA DEL VECTOR
{
int i;
for(i=0;i<Orden;i++)
{ 
printf("Ingrese el elemento %d: ",i+1);
scanf("%d",&vec[i]); 
}
}
void mostrar(int Orden, int vec[50]) //VISUALIZACION DEL VECTOR
{
int i;
printf("\nCONTENIDO DEL VECTOR");
for(i=0;i<Orden;i++)
{ 
printf("\nElemento %d: %d",i+1,vec[i]);
}
}
1)  Se tiene un arreglo de N posiciones, donde cada celda contiene un
números entero.
Se pide
a. En una función sin tipo, Registrar la carga del arreglo.
b. Usando una función con tipo, obtener y devolver el menor valor ingresado a la 
función main(), y mostrar dicho valor.
c. Usando una función con tipo, obtener el promedio del arreglo y mostrar en la 
función main. 
Ejemplo – Arreglos Unidimensionales
#include <stdio.h>
#include <stdlib.h>
void carga(int Orden, int vec[50]);
int menor(int Orden, int vec[50]);
float promedio(int Orden, int vec[50]);
void ordenar(int Orden, int vec[50]);
void mostrar(int Orden, int vec[50]);
main() 
{ 
int vector[25],N,men; 
float prome;
printf("\nIngrese la cantidad de elementos: ");
scanf("%d",&N);
carga(N,vector);
men=menor(N,vector);
printf("\nEl Elemento menor del vector es: %d",men);
printf("\n");
system("pause");
prome=promedio(N,vector);
printf("\nEl Promedio del vector es: %.2f",prome);
printf("\n");
system("pause");
printf("\nLos Elementos del vector es:");
mostrar(N,vector);
printf("\n");
system("pause");
ordenar(N,vector);
printf("\nEl Vector Ordenado es:");
mostrar(N,vector);
printf("\n");
system("pause");
}
//CARGA DEL VECTOR
void carga(int Orden, int vec[50])
{
int i;
for(i=0;i<Orden;i++)
{ 
printf("Ingrese el elemento %d: ",i+1);
scanf("%d",&vec[i]); 
}
}
//ELEMENTO MENOR DEL VECTOR
int menor(int Orden, int vec[50])
{
int i,menval=vec[0];
for(i=1;i<Orden;i++)
{ 
if (vec[i]<menval)
menval=vec[i];
}
return menval;
}
//MOSTRAR VECTOR
void mostrar(int Orden, int vec[50])
{
int i;
printf("\nSe mostraran los Elementos del Vector");
printf("\n***********************************
**\n");
for(i=0;i<Orden;i++)
{
printf("\nElemento vector(%d) ---> %d",i+1,vec[i]);
} 
}
//PROMEDIO DEL VECTOR
float promedio(int Orden, int
vec[50])
{
int i,s;
float promval;
for(i=0;i<Orden;i++)
{ 
s=s+vec[i];
}
promval= float (s)/float (Orden);
return promval;
}
//ORDENAR VECTOR
void ordenar(int Orden, int vec[50])
{
int i,b,aux;
do
{
b=0;
for (i=0;i<Orden-1;i++)
{
if (vec[i]>vec[i+1])
{
aux=vec[i];
vec[i]=vec[i+1];
vec[i+1]=aux;
b=1;
}
}
}
while (b==1);
}
1) Dado un vector A de números enteros de orden N y un valor K entero; genere un
vector B con los elementos de A que sean múltiplos de k. Realice la lectura del
vector a través de una función.
2) Dado un vector de N elementos, calcular a través de una función sin tipo, la
suma de los valores que se encuentren en una posición par, y la suma de los
valores impares. Mostrar el resultado en main().

Continuar navegando