Vectores y estructuras (guia practica) VECTORES: -Declaracion: Tipo nombre[tamanyo]; Tipo: cualquier tipo de datos. nombre: como cualquier variable. tamanyo: una expresion constante (no variables) Ejemplo: int cont[4]; -Propiedades: 1.- Todos los elementos del mismo tipo. 2.- RANGO DE INDICES: 0..tamanyo-1 3.- EL NOMBRE IDENTIFICA TODO EL VECTOR y es LA DIRECCION DE MEMORIA DEL PRIMER ELEMENTO DEL VECTOR. -Operaciones: * Acceder a un elemento del vector Ejemplo: int i; --------- indice: cualquier expresion que | devuelva un entero (DEBE ESTAR | EN EL RANGO) V i = cont[2]; cont[3] = 6; * Operaciones sobre un elemento. Las correspondientes al tipo del elemento. Ejemplo: i = cont[2] + 5*6; cont[2] es un elemento de tipo entero. Por lo tanto cualquier operacion con enteros. * NO PERMITE OPERACIONES CON VECTORES COMPLETOS. Ejemplo: int x[10], y[10], z[10]; /* Como hacer la suma de los vectores x e y dejarlo en z? */ z = x + y; NO!!!!!!!! /* Se tiene que hacer elemento a elemento */ for (i=0; i<10 ; i++) z[i] = x[i] + y[i]; /* Como comparariamos dos vectores para decidir si son iguales o no? */ if (x == y) NO!!!!!! /* Tenemos que compararlo uno a uno */ i=0; while ( (i<10) && (x[i]==y[i]) ) { i ++ } if (i==10) printf("Vectores iguales\n"); else printf("Vectores diferentes\n"); /* Si teneis dudas sobre el algoritmo para saber si son iguales o no dos vectores preguntarme via Consulta o en clase. */ UN EJEMPLO PRACTICO CON VECTORES: Nos introducen una secuencia de enteros comprendidos todos ellos en el rango 0..3. El final de la secuencia viene indicada por un -1. Ejemplo de secuencia: 0 2 1 3 -1 Queremos calcular el histograma de cuantas veces aparecen el 0, 1, 2 y el 3 en la secuencia introducida por teclado. Necesitaremos 4 enteros para contar cuantas veces aparecen: Una posible forma seria: #include void main () { int cnt0 = 0; int cnt1 = 0; int cnt2 = 0; int cnt3 = 0; int num; printf("Introduce una secuencia de enteros comprendidos entre 0 y 3. Para indicar que se acaba la secuencia introduzca un -1\n"); scanf("%d",&num); while (num!=-1) { switch(num) { case 0: cnt0++; break; case 1: cnt1++; break; case 2: cnt2++; break; case 3: cnt3++; break; } scanf("%d",&num); } printf("histograma: 0s:%d 1s:%d 2s:%d 3s:%d\n",cnt0, cnt1, cnt2, cnt3); } Ahora... que pasa si os digo que el rango de valores de la secuencia puede ir de 0 a 1000? no way! Asi, otra forma para elegante y que no tendria problemas con la pregunta que os he hecho es la siguiente: #include #define MAX_VALOR 4 void main () { int cnt[MAX_VALOR]; int i; int num; printf("Introduce una secuencia de enteros comprendidos entre 0 y %d. Para indicar que se acaba la secuencia introduzca un -1\n", MAX_VALOR-1); /* Inicializamos todos los contadores. */ for (i=0; i=0) && (num