Arreglos Computcin Definicin Un arreglo es una coleccin

  • Slides: 27
Download presentation
Arreglos Computción

Arreglos Computción

Definición Un arreglo es una colección de elementos del mismo tipo que se reconocen

Definición Un arreglo es una colección de elementos del mismo tipo que se reconocen por un solo identificador. Para acceder a los elementos individuales de un arreglo se utiliza un subíndice que debe ser un número entero. Arreglo con nombre a a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] 56 56 91 0 -3224 100 62 12 Número de la posición de cada elemento

Ejemplo int main(){ int n[ 10 ]; // n es un arreglo de 10

Ejemplo int main(){ int n[ 10 ]; // n es un arreglo de 10 enteros // inicializa los elementos del arreglo n en 0 for ( int i = 0; i < 10; i++ ) //establece el elemento de la ubicación i en 0 n[ i ] = 0; cout << "Elemento" << setw(13)<< "Valor" << endl; //despliega el contenido de un arreglo n //en formato tabular for ( int j = 0; j < 10; j++ ) cout <<setw(7)<<j<<setw(13)<<n[j] << endl; return 0; // indica terminación exitosa } // fin de main

Inicialización de un arreglo #include <iostream> using std: : cout; using std: : endl;

Inicialización de un arreglo #include <iostream> using std: : cout; using std: : endl; #include <iomanip> using std: : setw; int main() {//utiliza una lista de inicialización para //inicializar el arreglo n int n[10]={32, 27, 64, 18, 95, 14, 90, 70, 60, 37}; cout <<"Elemento"<<setw(13) << "Valor" << endl; //salida del contenido del arreglo n en formato tabular for ( int i = 0; i < 10; i++ ) cout<<setw(7)<<i<<setw(13)<<n[i]<<endl; return 0; // indica terminación exitosa } // fin de main

Otra inicialización Variable constante int main() { // la variable constante se puede utilizar

Otra inicialización Variable constante int main() { // la variable constante se puede utilizar para //especificar el tamaño del arreglo const int tamano. Arreglo = 10; int s[tamano. Arreglo]; //el arreglo s tiene 10 elementos for (int i=0; i<tamano. Arreglo; i++)//establece los valores s[ i ] = 2 + 2 * i; cout << "Elemento" << setw( 13 ) << "Valor" << endl; // muestra el contenido del arreglo s en formato tabular for ( int j = 0; j < tamano. Arreglo; j++ ) cout << setw( 7 ) << j << setw( 13 ) << s[ j ] << endl; return 0; // indica terminación exitosa } // fin de main

Suma de un arreglo Suma los elementos de un arreglo int main() { const

Suma de un arreglo Suma los elementos de un arreglo int main() { const int tamano. Arreglo = 10; int a[tamano. Arreglo] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; int total = 0; // suma el contenido del arreglo a for ( int i = 0; i < tamano. Arreglo; i++ ) total += a[ i ]; cout <<"El total de los elementos del arreglo es "<< total << endl; return 0; // indica terminación exitosa } // fin de main

Histograma int main() { const int tamano. Arreglo = 10; int n[tamano. Arreglo] =

Histograma int main() { const int tamano. Arreglo = 10; int n[tamano. Arreglo] = {19, 3, 15, 7, 11, 9, 13, 5, 17, 1}; cout << "Elemento" << setw( 13 ) << "Valor" << setw( 17 ) << "Histograma" << endl; //para cada elemento del arreglo n, muestra una barra //en el histograma for ( int i = 0; i < tamano. Arreglo; i++ ) { cout << setw( 7 ) << i << setw( 13 ) << n[ i ] << setw( 9 ); //despliega una barra for ( int j = 0; j < n[ i ]; j++ ) cout << '*'; cout << endl; // inicia la siguiente línea de salida } // fin de la estructura for externa return 0; // indica terminación exitosa } // fin de main

La criba de Eratóstenes int main(){ int N = 10000, i, j; int primo[N];

La criba de Eratóstenes int main(){ int N = 10000, i, j; int primo[N]; for(i = 0; i<N; i++) primo[i] = 1; for(i = 2; i<=N/2; i++){ for(j = 2; j<=N/i; j++) if(i*j<N) primo[i*j] = 0; } for(i = 0; i<N; i++) if(primo[i]) cout << " " << i; getch(); return 0; }

Tarea Haga un programa que calcule la desviaciòn estandar de un arreglo de valores.

Tarea Haga un programa que calcule la desviaciòn estandar de un arreglo de valores.

Paso de arreglos a funciones Para pasar un arreglo a una función debemos conocer

Paso de arreglos a funciones Para pasar un arreglo a una función debemos conocer su tamaño para poder saber cuantos elementos se van a procesar. Para esto declare la función con un parámetro extra pasar el número de elementos a la función

Ejemplo #include <iostream. h> #include <conio. h> double promedio(double a[], int tamanio){ double suma

Ejemplo #include <iostream. h> #include <conio. h> double promedio(double a[], int tamanio){ double suma = 0; for(int i=0; i<tamanio; i++) suma += a[i]; return suma/tamanio; } int main(){ double x[] = {3. 5, 6. 3, 4. 5, 7. 5, 5. 4}; cout << promedio(x, 5) << endl; getch(); return 0; }

Modificación de elementos mediante funciones En C los arreglos siempre se pasan por referencia

Modificación de elementos mediante funciones En C los arreglos siempre se pasan por referencia de tal manera que siempre es posible modificar los elementos dentro de una función. Ejemplo, inicia un arreglo con valores aleatorios entre 0 y 99. void inicia(double a[], int tamanio){ for(int i=0; i<tamanio; i++) a[i] = rand()%100; }

Ordenación La operación de ordenación es de las más comunes en computación. #include <iostream.

Ordenación La operación de ordenación es de las más comunes en computación. #include <iostream. h> #include <conio. h> void Burbuja(int a[], int tam){ for(int i = 0; i< tam - 1 ; i++) for(int j = i; j< tam; j++) if(a[i]>a[j]){ int temp = a[i]; a[i]=a[j]; a[j]=temp; } } int main(){ int b[20] = {1, 2, 3, 2, 4, 3, 5, 6, 3, 7, 8, 9, 4, 5, 3, 4, 5, 6}; Burbuja(b, 20); for(int i =0; i<20; i++) cout << b[i] << endl; getch(); return 0; }

Búsqueda Otra operación importante es la búsqueda de el valor de un elemento dentro

Búsqueda Otra operación importante es la búsqueda de el valor de un elemento dentro de un arreglo. int Busqueda. Lineal(int a[], int b, int tam){ for(int i = 0; i< tam; i++) if(a[i]==b) return n; return -1; }

Arreglos de dos dimensiones Los arreglos de dos dimensiones se declaran de acuerdo al

Arreglos de dos dimensiones Los arreglos de dos dimensiones se declaran de acuerdo al esquema tipo variable[renglones][columnas]; Ejemplo int a [5][4]; a[0][0] a[0][1] a[0][2] a[0][3] a[1][0] a[1][1] a[1][2] a[1][3] a[2][0] a[2][1] a[2][2] a[2][3] a[3][0] a[3][1] a[3][2] a[3][3] a[4][0] a[4][1] a[4][2] a[4][3]

inicialización int a[5][4] = {{2, 3, 4, 2}, {2, 0, 6, 1}, {3, 5,

inicialización int a[5][4] = {{2, 3, 4, 2}, {2, 0, 6, 1}, {3, 5, 5, 0}, {2, 2, 1, 1}, {3, 2, 5, 6}}; 2 3 4 2 2 0 6 1 3 5 5 0 2 2 1 1 3 2 5 6

inicialización (cont. ) int a[5][4] = {{2, 3}, {1}, {3, 5, 5, 0}, {2},

inicialización (cont. ) int a[5][4] = {{2, 3}, {1}, {3, 5, 5, 0}, {2}, {3}}; 2 3 0 0 1 0 0 0 3 5 5 0 2 0 0 0 3 0 0 0

ejemplo Debe especificarse void despliega. Arreglo( int a[][ 3 ] ){ for ( int

ejemplo Debe especificarse void despliega. Arreglo( int a[][ 3 ] ){ for ( int i = 0; i < 2; i++ ) {// for para cada fila for ( int j = 0; j < 3; j++ )//despliega los valores de columnas cout << a[ i ][ j ] << ' '; cout << endl; // inicia una nueva línea de salida } // fin de la estructura for externa } // fin de la función despliega. Arreglo int main(){ int arreglo 1[ 2 ][ 3 ] = { { 1, 2, 3 }, { 4, 5, 6 } }; int arreglo 2[ 2 ][ 3 ] = { 1, 2, 3, 4, 5 }; int arreglo 3[ 2 ][ 3 ] = { { 1, 2 }, { 4 } }; cout << "Los valores del arreglo 1 por fila son: " << endl; despliega. Arreglo( arreglo 1 ); cout << "Los valores del arreglo 2 por fila son: " << endl; despliega. Arreglo( arreglo 2 ); cout << "Los valores del arreglo 3 por fila son: " << endl; despliega. Arreglo( arreglo 3 ); return 0; // indica terminación exitosa } // fin de main

Operaciones con matrices Se puede utilizar la técnica vista anteriormente para matrices de tamaño

Operaciones con matrices Se puede utilizar la técnica vista anteriormente para matrices de tamaño fijo. Si las matrices que se van a manipular son de 3 x 3 la función para sumar podría ser void Suma(double a[][3], double b[][3], double c[][3]){ for(int i = 0; i< 3 ; i++) for(int j = 0; j< 3 ; j++) c[i][j] = a[i][j] + b[i][j]; }

Otras operaciones de matrices void Resta(double a[][3], double b[][3], double c[][3]){ for(int i =

Otras operaciones de matrices void Resta(double a[][3], double b[][3], double c[][3]){ for(int i = 0; i< 3 ; i++) for(int j = 0; j< 3 ; j++) c[i][j] = a[i][j] - b[i][j]; } void Multiplica(double a[][3], double b[][3], double c[][3]){ for(int i = 0; i< 3 ; i++) for(int j = 0; j< 3 ; j++){ c[i][j] = 0; for(int k = 0; k< 3 ; k++) c[i][j] += a[i][k]*b[k][j]; } }

Otras operaciones de matrices impresión de una matriz de 3 x 3 void print(double

Otras operaciones de matrices impresión de una matriz de 3 x 3 void print(double a[][3]){ for(int i = 0; i< 3 ; i++){ for(int j = 0; j< 3 ; j++) cout << a[i][j] << " "; cout << endl; }

Tarea #10 Escriba una función para obtener la traspuesta de una matriz de 3

Tarea #10 Escriba una función para obtener la traspuesta de una matriz de 3 x 3. Escriba una función que calcule la suma de todos los elementos de una matriz de 3 x 3 Escriba una función que calcule la traza de una matriz de 3 x 3 Calcule con esta tarea y lo anterior lo siguiente: a + b, a - b, a * b, traspuesta(a), traspuesta(b), traza(a), traza(b), sumatotal(a), sumatotal(b),

Matrices de cualquier tamaño Es conveniente manejar las matrices de tamaño arbitrario mediante un

Matrices de cualquier tamaño Es conveniente manejar las matrices de tamaño arbitrario mediante un vector de una sola dimensión. La matriz que se pasa como parámetro se pasa como un apuntador. Las funciones para manipular matrices se definen para un tamaño máximo de elementos.

Ejemplo suma Tamaño real de las matrices Debe especificarse máximo tamaño void suma. Mat(int

Ejemplo suma Tamaño real de las matrices Debe especificarse máximo tamaño void suma. Mat(int nr. Row, int nr. Col, int max. Col, float *mat 1, float *mat 2, float *mat 3) { int i, j; for( i=0; i<nr. Row; i++ ) for( j=0; j<nr. Col; j++ ) mat 3[i*max. Col + j] = mat 1[i*max. Col + j] + mat 2[i*max. Col + j]; // o: mat 3[i*max. Col + j] = *(mat 1 + i*max. Col + j) // + *(mat 2 + i*max. Col + j) }

producto void prod. Mat(int nr. Row, int nr. Col, int max. Col, float *mat

producto void prod. Mat(int nr. Row, int nr. Col, int max. Col, float *mat 1, float *mat 2, float *mat 3) { int i, j, k; for( i=0; i<nr. Row; i++ ) for( j=0; j<nr. Col; j++ ){ mat 3[i*max. Col + j] = 0; for( k=0; k<nr. Col; k++ ) mat 3[i*max. Col + j] += mat 1[i*max. Col + k] * mat 2[k*max. Col + j]; } }

Impresión void print. Mat(int nr. Row, int nr. Col, int max. Col, float *mat)

Impresión void print. Mat(int nr. Row, int nr. Col, int max. Col, float *mat) { int i, j; for( i=0; i<nr. Row; i++ ){ for( j=0; j<nr. Col; j++ ) cout << mat[i*max. Col + j] << " "; cout << endl; }

Ejemplo de programa principal int main(void) { int row=4, col=4; float add, max. Row;

Ejemplo de programa principal int main(void) { int row=4, col=4; float add, max. Row; float a[MAXROW][MAXCOL] = {{1, 2, 3, 4}, {3, 2, 1, 1}, {4, 3, 7, 6}, {4, 5, 5, 6}}; float b[MAXROW][MAXCOL] = {{4, 5, 7, 1}, {2, 4, 8, 9}, {3, 3, 0, 0}, {2, 1, 1, 1}}; float c[MAXROW][MAXCOL]; print. Mat(row, col, MAXCOL, (float *) a); print. Mat(row, col, MAXCOL, (float *) b); suma. Mat(row, col, MAXCOL, (float *) a, (float *) b, (float *) c); print. Mat(row, col, MAXCOL, (float *) c); getch(); return 0; }