Você está na página 1de 2

VECTORES

En la primera introduccin al tema de vectores, vimos que cuando pasamos un vector como parmetro de una funcin, se pasa por referencia, es decir, si algn elemento del vector se modifica en la funcin, se estar modificando los valores originales. Pero qu ocurre si no queremos que se modifiquen los datos? Por ejemplo, si escribimos una funcin que escriba por la salida estndar un vector, de entrada sabemos que el vector no se va a modificar, solo se va a acceder a los datos y se va a hacer una lectura de estos. Tenemos que tener claro este concepto, es decir, si en una funcin se va a modificar el vector o no. Si no se va a modificar el vector en una funcin, usamos la palabra reservada const delante del tipo del vector. void Escribir (const char v[], int n) { for (int i=0; i<n; i++) cout << v[i] << endl; } Si ponemos al parmetro la palabra reservada const, el compilador asume que no se puede modificar los datos del vector. Si nosotros sin querer, ponemos un cin, o hacemos una asignacin a un elemento del vector, cuando compilemos, tendremos un fallo de compilacin, ya que le hemos indicado que el vector no se puede modificar y lo estamos haciendo. Tendramos un error similar, si declaramos en una funcin un parmetro de un vector que no es constante, y hacemos desde el main una llamada a esa funcin con un vector de constantes. No se puede (aunque en la funcin no se modifique el vector), ya que el compilador sobreentiende que si hemos declarado la funcin sin const, es que queremos modificar el vector, por ese motivo hay que declarar los vectores en las funciones correctamente. #include <iostream> using namespace std; void Escribir (char v[], int n) { for (int i=0; i<n; i++) cout << v[i] << endl; } int main () { const cadena[4] = {a, b, c, d}; Escribir (cadena,4); }

//Error cadena no se puede modificar

Espacio de cultura El gora

Pgina 1

El caso contrario, si se podra hacer, es decir, si tenemos una funcin que declara el parmetro como const, y le pasamos un vector no constante, lo aceptara ya que el compilador sabe que la funcin no va a modificar el vector, y los vectores no constantes, se pueden modificar o no.

Ejercicios
1. Escriba una funcin que reciba un vector de nmeros enteros y devuelva el nmero de pares que contiene. 2. Hacer un programa que dado un nmero entero, imprima por pantalla todos los primos que hay en el rango [2,n], donde n es el entero introducido. Desarrollar el ejercicio con una buena modularizacin.

Tamao delimitado por centinela


En todos los ejercicios anteriores hemos utilizado como parmetros de las funciones, un vector y el tamao del vector para controlar que no nos salgamos de los lmites. Hay problemas que para resolverlos solamente sabemos que los vectores tienen un carcter especial que indica la finalizacin del vector, por ejemplo, si en un vector se estn guardando nmeros positivos, el carcter de finalizacin puede ser el -1. Sabiendo este dato no nos hace falta el tamao. Para resolver estos ejercicios se hacen de la siguiente forma, se pone este dato, en la condicin del bucle. double Suma (const double datos[]) { double suma; for (int i=0; v[i] != 0; i++) suma += v[i]; return suma; }

Algoritmos de bsqueda
En esta seccin vamos a resolver algoritmos de bsqueda de un elemento dentro de un vector. 1. Bsqueda secuencial. Es el algoritmo ms simple y directo. Se trata de recorrer todo el vector y si algn elemento del vector es igual al buscado, devolveremos la posicin del vector donde se encuentra dicho elemento. Si la bsqueda fuese fallida, es decir, no se encontrase el elemento en el vector, devolveramos la posicin n (posicin no valida del vector). Implementar esta funcin con vectores de tipo entero. La bsqueda secuencial puede llegar a recorrer todo el vector, por lo que puede resultar costosa si hay machos elementos. Un algoritmo mucho ms eficiente es el de la bsqueda binaria. El nico inconveniente es que requiere que el vector tenga los elementos ordenados. 2. Bsqueda binaria. La idea es sencilla, primero se consulta si est en el elemento central (izq+der/2, donde izq=0 y der=tamao-1 del vector), si no lo est, se analiza si el elemento es ms pequeo que el elemento central, si es as, ahora der sera centro1. Si el elemento es mayor que el elemento central ahora izq=centro+1. Como veis la zona de bsqueda se reduce a la mitad. Continuamos el algoritmo hasta que encontremos el elemento, en este caso devolveramos la posicin del vector donde lo hemos encontrado, hasta que izq>der en este caso, habramos recorrido todo el vector y no lo hemos encontrado, por lo que devolveramos n. Espacio de cultura El gora Pgina 2

Você também pode gostar