Está en la página 1de 9

OBJETIVO: Codificar algoritmos que requieran o manejen vectores.

LABORATORIO DE INTRODUCCIN A LA INFORMATICA - VECTORES

VECTORES. Representan un modo de manejar una gran cantidad de datos del mismo tipo bajo un mismo nombre o identificador. Por ejemplo, mediante la sentencia: se reserva espacio para 10 variables de tipo double. Las 10 variables se llaman a y

double a[10];

se accede a una u otra por medio de un subndice, que es una expresin entera escrita a continuacin del nombre entre corchetes [...].

La forma general de la declaracin de un vector es la siguiente:

tipo nombre[numero_elementos];
Los elementos se numeran desde 0 hasta (numero_elementos - 1). El tamao de un vector puede definirse con cualquier expresin constante entera. Para definir tamaos son particularmente tiles las constantes simblicas. En C++ no se puede operar con todo un vector o toda una matriz como una nica entidad, sino que hay que tratar sus elementos uno a uno por medio de bucles for o while. Los elementos de un vector se utilizan en las expresiones de C++ como cualquier otra variable. Ejemplos:

a[5] = 0.8; a[9] = 30.0 * a[5]; a[0] = (3.0 * a[9]) (a[5]/a[9]); a[3] = (a[0] + a[9])/a[3];
Inicializacin de vectores. La inicializacin de un vector se puede hacer de varias maneras. Declarando el vector como tal e inicializndolo mediante lectura o asignacin por medio de un bucle for:

double vect[N]; ... for(i = 0; i < N; i++) cin>>vect[i]; ...


Inicializndolo en la misma declaracin, en la forma:

float d[] = {1.2, 3.4, 5.1}; int f[100] = {0}; int h[10] = {1, 2, 3};

// d[3] est implcito // todo se inicializa a 0 // restantes elementos a 0

double v[6] = {1., 2., 3., 3., 2., 1.};


En este ltimo ejemplo es necesario digitar un punto decimal tras cada cifra, para que sta sea reconocida como un valor de tipo float o double. 1

EJEMPLOS. 01. Ejemplo en el que se pide el tamao del vector, los elementos para llenarlo y muestra el vector lleno, usando subprogramas.

#include <iostream> #define size 50 using namespace std; int tamano_vector(); void llenar_vector(int *, int); void mostrar_vector(int *, int); main() { int Ve[size]={0}; int N=0; mostrar_vector(Ve,size); N = tamano_vector(); cout<<"\nN vale = "<<N; llenar_vector(Ve,N); mostrar_vector(Ve,N); cout<<endl<<endl; system("PAUSE"); return EXIT_SUCCESS; } int tamano_vector() { int n; cout<<"\n\nDigite la dimension del vector: "; cin>>n; return n; } void llenar_vector(int *V, int n) { int i; for (i=0; i<n; i++) { cout<<"\nV["<<i<<"]: "; cin>>V[i]; } } void mostrar_vector(int *V, int n) { int i; for (i=0; i<n; i++) { cout<<"\nV["<<i<<"]: "<<V[i]; } }

02. Ejemplo en el que se llena un vector, se muestra el contenido del vector y luego se determina cul es elemento mayor y cul el menor, as como las posiciones en las que se encuentran, usando subprogramas.

#include <iostream> #define size 50 using namespace std; int tamano_vector(); void llenar_vector(int *, int); void mostrar_vector(int *, int); void mayor_menor(int *, int); /***********************************************/ main() { int Ve[size]={0}; int N=0; N = tamano_vector(); llenar_vector(Ve,N); mostrar_vector(Ve,N); mayor_menor(Ve,N); cout<<endl<<endl; system("PAUSE"); return EXIT_SUCCESS; } /***********************************************/ void mayor_menor(int *V, int n) { int i=0, MAY, MEN, P1, P2; MAY = V[0]; MEN = V[0]; P1 = 0; P2 = 0;

for (i=1; i<n; i++) { if(V[i]>MAY) { MAY=V[i]; P1 = i; } else { if(V[i]<MEN) {MEN=V[i]; P2 = i; } } } cout<<"\n\nMAYOR: "<<MAY<<"\tPOSICION: "<<P1; cout<<"\n\nMENOR: "<<MEN<<"\tPOSICION: "<<P2; } int tamano_vector() { int n; cout<<"\n\nDigite la dimension del vector: "; cin>>n; return n; } void llenar_vector(int *V, int n) { int i; for (i=0; i<n; i++) { cout<<"\nV["<<i<<"]: "; cin>>V[i]; } } void mostrar_vector(int *V, int n) { int i; for (i=0; i<n; i++) { cout<<"\nV["<<i<<"]: "<<V[i]; } }

03. Ejemplo en el que se llena un vector A y a partir de ese vector, se crean dos nuevos vectores B y C, de modo tal que en el vector B quedan los nmeros impares, y en el vector C los mltiplos de 3, y debe mostrar el contenido de esos vectores usando subprogramas.

#include <iostream> #define size 50 using namespace std; int tamano_vector(); void llenar_vector(int *, int); void mostrar_vector(int *, int); void multiplos(int *, int, int, int *, int *); void NO_multiplos(int *, int, int, int *, int *); /***********************************************/ main() { int A[size]={0}, B[size], C[size]; int N=0; int tb=-1, tc=-1; //estas variables dan el tamano de B y C N = tamano_vector(); llenar_vector(A,N); //Carga del vector A

cout<<"\n\nVector A :"; mostrar_vector(A,N); //Mostrar vector A NO_multiplos(A, N, 2, B, &tb); multiplos(A, N, 3, C, &tc); if(tb>-1) { cout<<"\n\nVector B (impares):"; mostrar_vector(B,tb); //Mostrar vector B } else cout<<"\n\nVector B no tiene elementos"; if(tc>-1) { cout<<"\n\nVector C (multiplos de 3):"; mostrar_vector(C,tc); //Mostrar vector C } else cout<<"\n\nVector C no tiene elementos"; cout<<endl<<endl; system("PAUSE"); return EXIT_SUCCESS; }

void multiplos(int *V, int n, int val, int *Z, int *tz) { int i, D; for(i=0; i<=n; i++) { D = (V[i]/val)*val; if(V[i]==D) { *tz = *tz + 1; cout<<"\n tz = "<<*tz; Z[*tz]=V[i]; cout<<"\n Z[tz] = "<<Z[*tz]; } } } void NO_multiplos(int *V, int n, int val, int *Z, int *tz) { int i, D; for(i=0; i<=n; i++) { D = (V[i]/val)*val; if(V[i]!=D) { *tz = *tz + 1; cout<<"\n tz = "<<*tz; Z[*tz]=V[i]; cout<<"\n Z[tz] = "<<Z[*tz]; } } } int tamano_vector() { int n; cout<<"\n\nDigite la dimension del vector: "; cin>>n; while(n<1) { cout<<"valor no valido. Debe ser positivo"<<endl; cout<<"Cuantas casillas tiene el vector A : "; cin>>n; } return (n-1); } void llenar_vector(int *V, int n) { int i; for (i=0; i<=n; i++) { cout<<"\nV["<<i<<"]: "; cin>>V[i]; } } void mostrar_vector(int *V, int n) { int i; for (i=0; i<=n; i++) { cout<<"\nV["<<i<<"]: "<<V[i]; } }

04. Ejemplo en el que se llena un vector A y a partir de ese vector, se crea e imprime un nuevo vector B que contiene todos los elementos de A, sin que haya repetidos. Todo esto con subprogramas.

#include <iostream> #define size 50 using namespace std; int tamano_vector(); void llenar_vector_char(char *, int); void mostrar_vector_char(char *, int); void quitar_char_repetidos(char *, int, char*, int*); /**************************************************************/ main() { char A[size], B[size]; int N=0, tb=1; //la variable tb da el tamano de B N = tamano_vector(); llenar_vector_char(A,N); //Carga del vector A

cout<<"\n\nVector A :"; mostrar_vector_char(A,N); //Mostrar vector A quitar_char_repetidos(A, N, B, &tb); cout<<"\n\nVector B :"; mostrar_vector_char(B,tb); //Mostrar vector B cout<<endl<<endl; system("PAUSE"); return EXIT_SUCCESS; } /**************************************************************/ void quitar_char_repetidos(char *V, int n, char *Z, int *tz) { int i, k, sw; Z[0] = V[0]; for(i=1; i<n; i++) { sw = 0; for(k=0; k<*tz; k++) { if(V[i]==Z[k]) { sw=1; k=*tz+1; } } if(sw==0) { Z[*tz]=V[i]; *tz=*tz+1; } } } int tamano_vector() { int n; cout<<"\n\nDigite la dimension del vector: "; cin>>n; while(n<1) { cout<<"valor no valido. Debe ser positivo"<<endl; cout<<"Cuantas casillas tiene el vector A : "; cin>>n; } return n; } void llenar_vector_char(char *V, int n) { int i; for (i=0; i<n; i++) { cout<<"\nV["<<i<<"]: "; fflush(stdin); V[i]=cin.get(); } void mostrar_vector_char(char *V, int n) { int i; for (i=0; i<n; i++) { cout<<"\nV["<<i<<"]: "<<V[i]; } } 6

05. Ejemplo en el que se llena un vector A (de tamao m) y un vector B (de tamao n). A partir de esos vectores, se crea un nuevo vector C de (m + n) elementos, que es el resultado de intercalar los vectores ledos, empezando por A. Cuando un vector sea ms grande que el otro, los elementos que no alcanzan a ser intercalados se ubican al final del vector C, en el mismo orden que se encuentren. El programa soluciona satisfactoriamente las tres opciones que se presentan: m>n, m=n y m<n. Finalmente se imprime el vector C. Todo esto usando subprogramas.

#include <iostream> #define size 50 using namespace std; int tamano_vector(); void llenar_vector(int *, int); void mostrar_vector(int *, int); void intercalar_vectores(int *, int, int *, int, int *, int *); /*********************************************************************/ main() { int A[size], B[size], C[2*size]; int tA, tB, tC=0; cout<<"*** Vector A ***"; tA = tamano_vector(); llenar_vector(A,tA); //Carga del vector A cout<<"\n\nVector A :"; mostrar_vector(A,tA); //Mostrar vector A cout<<"\n\n*** Vector B***"; tB = tamano_vector(); llenar_vector(B,tB); //Carga del vector B cout<<"\n\nVector B :"; mostrar_vector(B,tB); //Mostrar vector B intercalar_vectores(A, tA, B, tB, C, &tC); cout<<"\n\nVector C (intercalado):"; mostrar_vector(C,tC); //Mostrar vector C cout<<endl<<endl; system("PAUSE"); return EXIT_SUCCESS; }

void intercalar_vectores(int *vA, int m, int *vB, int n, int *vC, int *k) { int i; if(m>n) { for(i=0; i<n; i++) { vC[*k]=vA[i]; *k = *k + 1; vC[*k]=vB[i]; *k = *k + 1; } for(i=n; i<m; i++) { vC[*k]=vA[i]; *k = *k + 1; } } else { for(i=0; i<m; i++) { vC[*k]=vA[i]; *k = *k + 1; vC[*k]=vB[i]; *k = *k + 1; } if(m<n) { for(i=m; i<n; i++) { vC[*k]=vB[i]; *k = *k + 1; } } } } int tamano_vector() { int n; cout<<"\n\nDigite la dimension del vector: "; cin>>n; while(n<1) { cout<<"valor no valido. Debe ser positivo"<<endl; cout<<"Cuantas casillas tiene el vector A : "; cin>>n; } return n; } void llenar_vector(int *V, int n) { int i; for (i=0; i<n; i++) { cout<<"\nV["<<i<<"]: "; cin>>V[i]; } } void mostrar_vector(int *V, int n) { int i; for (i=0; i<n; i++) { cout<<"\nV["<<i<<"]: "<<V[i]; } }

CADENAS DE CARACTERES. Una cadena de caracteres ES UN VECTOR de tipo char, con alguna particularidad que conviene resaltar. Las cadenas suelen contener texto (nombres, frases, etc.), y ste se almacena en la parte inicial de la cadena (a partir de la posicin cero del vector). Para separar la parte que contiene texto de la parte no utilizada, se utiliza un carcter fin de texto que es el carcter nulo ('\0') segn el cdigo ASCII. Este carcter se introduce automticamente al leer o inicializar las cadenas de caracteres, como en el siguiente ejemplo:

char ciudad[20] = "Barranquilla";


donde a los 13 caracteres del nombre de esta ciudad se aade un decimocuarto: el '\0'. El resto del espacio reservado hasta la posicin ciudad[19] no se utiliza. De modo anlogo, una cadena constante tal como "mar" ocupa 4 bytes (para las 3 letras y el '\0'). CADENAS DE CARACTERES. EJEMPLO BASICO. Lenguaje C++

#include <iostream> #define N 255 using namespace std; main() { char cadena[N], cadena2[N], cadena3[N]; char *cadena_ejemplo = "Colombia Tierra Querida"; char mini_cadena[32]; int longitud, i, prueba; /* Para leer el contenido de una cadena */ cout<<"\nEscriba una cadena: "; gets(cadena); /* Para MOSTRAR el contenido de una cadena */ cout<<"\nLa cadena leida fue: "; puts(cadena); /* Para saber cual es la longitud de una cadena */ longitud=strlen(cadena); cout<<"\nLa longitud de la cadena leida fue de "<<longitud<<" caracteres"; /* Para mostrar invertida una cadena */ cout<<"\nLa cadena invertida es: "; for(i=longitud; i>=0; i--) { cout<<cadena[i]; } /* Para copiar una cadena */ strcpy(cadena2,cadena); cout<<"\nLa cadena copiada es: "; puts(cadena2); cout<<"\nEscriba una nueva cadena: "; cout<<"\nLa nueva cadena fue: "; gets(cadena3);

puts(cadena3);

/* Para comparar cadenas */ prueba=strcmp(cadena,cadena3); if(prueba==0) cout<<"\nLas cadenas son iguales"; else cout<<"\nLas cadenas son diferentes"; /* Para unir una cadena con otra (o concatenar) */ cout<<"\nLa cadena concatenada es : "; puts(strcat(cadena,cadena3)); /* Para copiar solo una porcion de cadena */ strncpy(mini_cadena, cadena_ejemplo, 4); mini_cadena[4] = '\0'; cout<<"\nLa porcion de cadena copiada en cad fue : "; puts(mini_cadena); /* se puede acceder a un miembro individual de la cadena */ cout<<"\nAqui se imprime un elemento individual de la primera cadena: "; cout<<cadena[5]; cout<<endl<<endl; system("PAUSE"); return EXIT_SUCCESS; }
------------------------------ FIN DEL DOCUMENTO

También podría gustarte