Professional Documents
Culture Documents
Arrays unidimensionales
Antonio L. Carrillo
Arrays Unidimensionales (en C++): Declaracin y Acceso Un array es una coleccin de datos del mismo tipo, con el mismo nombre, y a los que se accede por su posicin. DEFINICIN de un nuevo Tipo array:
#include <array> using namespace std; typedef constante nombre_Tipo_Array
ACCESO a cada elemento: - Mediante un ndice (posicin): variable_array[indice] - Los ndices (o posiciones) van desde 0 hasta el TAMAO-1.
TAenteros
a[2]
2
a[3]
3
a[4]!
4
c;
array<short, 5>
a;
c
Elemento Direccin
0 1 2 3 4 1000 1001 1002 1003 1004
a
0 1 2 3 4 1000 1002 1004 1006 1008
Suponemos que ambos arrays comienzan en la posicin 1000, que un short ocupa 2 bytes y un char ocupa 1 byte (cada nmero de posicin indica 1 byte).
Inicializacin en la declaracin:
-! Completa
8 0 5 1 5 1 5 1 1 1 3 2 ? 2 ? 2 2 2 0 3 ? 3 7 3 3 3 1 4 ? 4 ? 4 4 4
8
vector2 8
0
Asignacin en ejecucin:
-! A un elemento
vector2
8 0
vector2[3] = 7;
-! A todos los elementos
for(i=0;i<=4;i++) vector2[i] = i;
vector2 0
0
Se permite la asignacin y la comparacin completa de arrays: typedef array<int,3> Tarray; Tarray a, b={10,20,30}; ... a = b;
"!
A todos los efectos, cualquier elemento de un array se puede procesar como una variable del mismo tipo del elemento: int suma=0; cin >> a[2]; // machaca el 30 cout << a[0]; // imprime el 10 suma += a[1]; // suma el 20 //NO SE PUEDE: cout << a; NI TAMPOCO: cin >> a; //HAY QUE ESCRIBIR O LEER CADA ELEMENTO, UNO A UNO. A diferencia de otros lenguajes de programacin, C no chequea que los ndices estn dentro del rango vlido para el array: a[3]= 100; b[5]= 100;
ERROR: solo existen las posiciones 0, 1 y 2 ! Nos salimos del array ! qu pasar?
"!
! En la CABECERA de una funcin, si el array es un: ! Parm. de ENTRADA (la funcin slo necesita conocer los valores) ! NO se pone el & ! Parm. de SALIDA, o de E/S (la funcin puede modificar los valores) ! SI se pone el &
10
typedef array<int,100> Tarr; ... void suma_arrays(Tarr a1, Tarr a2, int tam, Tarr & suma ) { for (int i=0; i < tam; i++ ) suma[i] = a1[i] + a2[i]; }
Si en la funcin se necesita conocer el tamao ocupado de un array (la cantidad de elementos a considerar del array), se le deber pasar como parmetro (tam, en el ejemplo). 11
&
int prod_escalar( Tarray v1, Tarray v2, int tam ); //--------------------------------------------------int main() { Tarray v1, v2; int prod; /* supongamos, por ejemplo, que ahora mismo queremos trabajar slo con 6 valores de los 10 que cabran */ cout << INTRODUCE 6 VALORES 1er VECTOR: ; v1 = leer1_vector( 6 ); cout << INTRODUCE 6 VALORES 2 VECTOR: ; leer2_vector( v2, 6 ); // prod = prod_escalar( v1, v2, 6 ); cout << \n Prod. Escalar = << prod; ... }
12
int main() { Tarr v1,v2; double m1,m2; int i, n; do{ cout<<Tamao(max.10)?; // Devuelve esperanza array cin >> n; float media( Tarr a, int tam) }while(n>10); { for( i=0; i<n; i++ ) { int i; double = 0.0; cout <<Intro elem << i; for( i=0; i<tam; i++ ) cin >> v1[i]; s = s + a[i]; } return (s/tam); } m1 = media(v1,n); // array al cuadrado potencia(v1,v2,n); void potencia( Tarr a1[], m2 = media(v2,n); Tarr & a2[], int tama){ int i; cout << Varianza= ; for( i=0; i<tama; i++ ) cout << m2-(m1*m1); a2[i] = a1[i] * a1[i]; } } 13 /* Clculo de la varianza de N nmeros !2= E(X2) - E(X)*E(X) donde E() es la esperanza matemtica (la media) */ typedef array<double,10> Tarr;