You are on page 1of 8

UNIVERSIDAD NORORIENTAL PRIVADA GRAN MARISCAL DE AYACUCHO FACULTAD DE INGENIERA - ESCUELA DE INGENIERA

Docente. ISKANDAR ARNEODO - Fecha: 09 de Mayo 2013 Asignatura: PROGRAMACIN I - INGENIERA DE SISTEMAS Seccin 01 - Semestre: I 2.013 - GUA PRCTICA NMERO 7 ARREGLO Y MATRICES
ARREGLOS Y MATRICES Introduccin bsica del manejo de arreglos y matrices en C. 3.1 ARREGLOS Un arreglo es una coleccin de variables del mismo tipo que se referencian por un nombre comn. Para acceder a un elemento especfico se utiliza un ndice que indica la posicin del elemento. Arreglo E1 E2 E3 E4 E5 E6 E7 E8 Pos 0 Pos 1 Pos 2 Pos 3 Pos 4 Pos 5 Pos 6 Pos 7 Arreglo[0] = E1 Arreglo[1] = E2 Arreglo[2] = E3 Arreglo[3] = E4 Arreglo[4] = E5 Arreglo[5] = E6 Arreglo[6] = E7 Arreglo[7] = E8 El ndice de un arreglo siempre debe ser un valor entero. El sexto elemento de un arreglo equivale al elemento ubicado en la posicin n-1 El elemento 6 del arreglo tiene ndice 6 y es el sptimo elemento del arreglo. Recomendacin: El hecho de que los ndices de arreglos y matrices en C empiecen en 0 da pie a muchos errores lgicos (errores no detectados por el compilador), por tanto, se debe tener especial cuidado al momento de realizar operaciones con los ndices de un arreglo o matriz. 3.1.1 Declaracin de un arreglo. Se debe especificar el tipo, el nombre y el tamao del mismo entre parntesis cuadrados ([ ]). tipo nombre_del_arreglo[tamao]; El tamao del arreglo debe especificarse de forma explicita, es decir, su valor debe definirse en tiempo de codificacin y no en tiempo de ejecucin. Recomendacin: Si no se tiene certeza de cuntos elementos puede llegar a tener un arreglo, se debe establecer un rango que cubra el mximo nmero de elementos. Si no se define un tamao para el arreglo o este es una variable no constante entonces se producir un error. A continuacin se muestra dos maneras de definir arreglos:
#include <iostream.h> #include <stdlib.h> #define TAM 10 int main() { int tamanio; int arreglo[TAM]; do { cout << "Digite tamao del arreglo (entre 1 y 10): "; cin >> tamanio; } while (tamanio < 1 || tamanio > 10); system("PAUSE"); return 0; } } #include <iostream.h> #include <stdlib.h> int main() { const int TAM = 10; int tamanio; int arreglo[TAM]; do { cout << "Digite tamao del arreglo (entre 1 y 10): "; cin >> tamanio; } while (tamanio < 1 || tamanio > 10); system("PAUSE"); return 0;

1 de 8 Ing. Iskandar Arneodo Programacin I 04-12-2012 ARREGLOS Y MATRICES

UNIVERSIDAD NORORIENTAL PRIVADA GRAN MARISCAL DE AYACUCHO FACULTAD DE INGENIERA - ESCUELA DE INGENIERA

Docente. ISKANDAR ARNEODO - Fecha: 09 de Mayo 2013 Asignatura: PROGRAMACIN I - INGENIERA DE SISTEMAS Seccin 01 - Semestre: I 2.013 - GUA PRCTICA NMERO 7 ARREGLO Y MATRICES
3.1.2 Acceder a un elemento de un arreglo. Como se menciono anteriormente, se hace mediante el uso de un ndice. Acceder al sptimo elemento del arreglo: arreglo[6]; Acceder al elemento siete del arreglo: arreglo[7];

3.1.3 Inicializar un arreglo. Si se desea inicializar un arreglo en tiempo de codificacin se debe hacer al inicializar el arreglo. Se puede hacer de las siguientes maneras: 1. 2. 3. 4. int arreglo[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; int arreglo[5] = { 0 }; /* todos los elementos del arreglo se inicializan con 0 */ int arreglo[10] = { 5 }; /* arreglo = { 5, 0, 0, 0, 0, 0, 0, 0, 0, 0 } */ int arreglo[6] = { 5, 4, 3 }; /* arreglo = { 5, 4, 3, 0, 0, 0 } */

Para el caso 2, 3, 4, la inicializacin a 0 de los elementos ocurre en tiempo de compilacin. 3.1.4 Inicializar e imprimir un arreglo a un valor dado por el usuario usando for y while
/* SOLUCIN DEL PROBLEMA USANDO FOR */ #include <iostream.h> #include <stdlib.h> #define TAM 10 int main() { int arreglo[TAM]; int valor; int indice;

/*Arreglo de enteros */ /*Valor de inicializacin del arreglo */ /*Variable de control ciclo for */

cout << "Digite el valor con el que desea inicializar los elementos del arreglo: "; cin >> valor; //INICIALIZAR EL ARREGLO for (indice = 0; indice < TAM; indice++) { arreglo[indice] = valor; } //IMPRIMIR EL ARREGLO for (indice = 0; indice < TAM; indice++) { cout << arreglo[indice] << " "; } system("PAUSE"); return 0; }

2 de 8 Ing. Iskandar Arneodo Programacin I 04-12-2012 ARREGLOS Y MATRICES

UNIVERSIDAD NORORIENTAL PRIVADA GRAN MARISCAL DE AYACUCHO FACULTAD DE INGENIERA - ESCUELA DE INGENIERA

Docente. ISKANDAR ARNEODO - Fecha: 09 de Mayo 2013 Asignatura: PROGRAMACIN I - INGENIERA DE SISTEMAS Seccin 01 - Semestre: I 2.013 - GUA PRCTICA NMERO 7 ARREGLO Y MATRICES
Se define una constante TAM que es igual a 10, se declara un vector de nombre arreglo y es de 10 elementos (TAM). Se declaran dos valores enteros, valor que guarda el valor dado por el usuario para inicializar el arreglo, indice cuyo fin es controlar el ciclo for. Se pide al usuario que digite un valor para inicializar el arreglo, a continuacin se inicializa el arreglo usando un ciclo for. Por ltimo se imprime el arreglo usando tambin la estructura for y la misma variable de control. A continuacin se muestra el mismo arreglo pero usando while. Se debe tener en cuenta que todo ciclo for se puede especificar con una estructura while.
/* SOLUCIN DEL PROBLEMA USANDO WHILE */ #include <iostream.h> #include <stdlib.h> #define TAM 10 int main() { int arreglo[TAM]; int valor; int indice;

/*Arreglo de enteros */ /*Valor de inicializacin del arreglo */ /*Variable de control ciclo for */

cout << "Digite el valor con el que desea inicializar los elementos del arreglo: "; cin >> valor; //INICIALIZAR EL ARREGLO indice = 0; while (indice < TAM) { arreglo[indice] = valor; indice++; } //IMPRIMIR EL ARREGLO indice = 0; while (indice < TAM) { cout << arreglo[indice] << " "; indice++; } system("PAUSE"); return 0; }

3.1.5 Ejercicios resueltos usando arreglos a. Una empresa desea procesar las ventas realizadas mes a mes anualmente con el fin de obtener la siguiente informacin: Mes en el que se obtuvo la mejor venta El monto de la venta mxima obtenida Total de las ventas Promedio de ventas Mostrar las ventas de menor a mayor

3 de 8 Ing. Iskandar Arneodo Programacin I 04-12-2012 ARREGLOS Y MATRICES

UNIVERSIDAD NORORIENTAL PRIVADA GRAN MARISCAL DE AYACUCHO FACULTAD DE INGENIERA - ESCUELA DE INGENIERA

Docente. ISKANDAR ARNEODO - Fecha: 09 de Mayo 2013 Asignatura: PROGRAMACIN I - INGENIERA DE SISTEMAS Seccin 01 - Semestre: I 2.013 - GUA PRCTICA NMERO 7 ARREGLO Y MATRICES
#include <stdlib.h> #include <iostream.h> void main(void) { float ventas[12]; //Arreglo que guarda las ventas del mes int mes, i; //Guarda mes(indice) de una venta en el arreglo int mesVMax; //Guarda el mes de la venta mxima float ventaMax; //Guarda el monto de la venta mxima float totalVentas; //Guarda el monto total de ventas en el ao float temporal; //Se utiliza en el ordenamiento de las ventas system("CLS"); //Limpiar pantalla cout << "PROGRAMA DE PROCESAMIENTO DE VENTAS ANUALES: \n\n"; /*CAPTURA DE DATOS*/ for(mes = 0; mes < 12 ; mes++) { cout << "Digite las ventas del mes nmero " << mes +1 <<": "; cin >> ventas[mes]; } system("CLS"); //Limpiar pantalla cout << "PROGRAMA DE PROCESAMIENTO DE VENTAS ANUALES: \nVentas\n"; //Escribir ventas for(mes = 0; mes < 12 ; mes++) cout << "Mes " << mes +1 <<": " << ventas[mes] << "\n" ; cout << "\n"; /*DETERMINAR VENTA MAXIMA, MES VENTA MAXIMA, TOTAL VENTAS*/ totalVentas = ventas[0]; ventaMax = ventas[0]; mesVMax = 0; for(mes = 1; mes < 12 ; mes++) { if(ventas[mes] > ventaMax) { ventaMax = ventas[mes]; mesVMax = mes; } //fin if totalVentas += ventas[mes]; } //fin for //Ventas en orden ascendente for (i = 0; i < 12; i++) for(mes = 0; mes < 11 - i ; mes++) { if(ventas[mes] > ventas[mes+1]) { temporal = ventas[mes]; ventas[mes] = ventas[mes+1]; ventas[mes+1] = temporal; } //fin if } //fin for /*MUESTRA DE RESULTADOS*/ cout << "La venta mxima se dio en el mes: " << mesVMax + 1 << endl << "La venta mxima en el ao fue: " << ventaMax << endl << "Total de ventas en el ao: " << totalVentas << endl << "Promedio de ventas en el ao: " << totalVentas/12 << endl << "\nVentas en orden ascendente: " << endl; //Ventas en orden ascendente for(mes = 0; mes < 12 ; mes++) cout << ventas[mes] << " "; cout << "\n\n"; system("PAUSE"); //Ver resultados en pantalla antes de pulsar una tecla } 4 de 8 Ing. Iskandar Arneodo Programacin I 04-12-2012 ARREGLOS Y MATRICES

UNIVERSIDAD NORORIENTAL PRIVADA GRAN MARISCAL DE AYACUCHO FACULTAD DE INGENIERA - ESCUELA DE INGENIERA

Docente. ISKANDAR ARNEODO - Fecha: 09 de Mayo 2013 Asignatura: PROGRAMACIN I - INGENIERA DE SISTEMAS Seccin 01 - Semestre: I 2.013 - GUA PRCTICA NMERO 7 ARREGLO Y MATRICES
Bsqueda lineal en un arreglo. A continuacin se implementa un algoritmo de bsqueda lineal que permite determinar si un elemento est o no dentro de un arreglo. Este tipo de bsqueda consiste en comparar el elemento buscado con cada uno de los elementos del arreglo. Si el arreglo no est ordenado, existe la misma probabilidad de que el elemento se encuentre, ya sea en el primer elemento como en el ltimo. Este mtodo funciona bien en arreglos pequeos o para arreglos no ordenados Por qu? #include <iostream.h> #include <stdlib.h> int main() { const int tamanoArreglo = 100; int a[ tamanoArreglo ]; int claveBusqueda; int pos;

// tamao del arreglo a // crea el arreglo a // valor a localizar dentro de a // Posicin de la clave buscada

for ( int i = 0; i < tamanoArreglo; i++ ) // crea algunos datos a[ i ] = 2 * i; cout << "Introduce la clave de bsqueda entera: "; cin >> claveBusqueda; pos = -1; // Si no se encuentra entonces en pos se guarda -1 // intenta localizar claveBusqueda dentro del arreglo a for ( int j = 0; j < tamanoArreglo; j++ ) if ( a[ j ] == claveBusqueda ) // si se encuentra , pos = j; // guarda la ubicacin de la clave // despliega los resultados if ( pos != -1 ) cout << "Encontr valor en el elemento " << pos << endl; else cout << "Valor no encontrado" << endl; system ("PAUSE"); return 0; // indica terminacin exitosa } // fin de main

5 de 8 Ing. Iskandar Arneodo Programacin I 04-12-2012 ARREGLOS Y MATRICES

UNIVERSIDAD NORORIENTAL PRIVADA GRAN MARISCAL DE AYACUCHO FACULTAD DE INGENIERA - ESCUELA DE INGENIERA

Docente. ISKANDAR ARNEODO - Fecha: 09 de Mayo 2013 Asignatura: PROGRAMACIN I - INGENIERA DE SISTEMAS Seccin 01 - Semestre: I 2.013 - GUA PRCTICA NMERO 7 ARREGLO Y MATRICES
3.2 MATRICES Una matriz es un arreglo bidimensional, es decir, que se maneja con dos ndices. En C++ se representan sus posiciones as: Matriz M de 3x3 M[0][0] M[0][1] M[1][0] M[1][2] M[2][0] M[2][1] El primer ndice indica las filas y el segundo las columnas. 3.2.1 Inicializar matrices int arreglo1[3][3] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} }; int arreglo2[3][3] = { 0 }; /* todos los elementos del arreglo se inicializan con 0 */ int arreglo3[2][3] = { {2,4},{6,8} }; /* { {2, 4, 0}, {6, 8, 0} } */ Inicializar e imprimir una matriz
#include <iostream.h> #include <stdlib.h> #define FILAS 2 #define COL 3 int main() { int matriz[FILAS][COL]; /*capturar datos de la matriz */ for (int fila = 0; fila < FILAS; fila++) { for (int col = 0; col < COL; col++) { cout << "Digite el elemento de la posicin [" << fila << "][" << col << "]: "; cin >> matriz[fila][col]; } } /*imprimir datos de la matriz */ cout << "\n\n***** MATRIZ GENERADA *****\n\n" ; for (int fila = 0; fila < FILAS; fila++) { for (int col = 0; col < COL; col++) { cout << matriz[fila][col] << "\t"; } cout << "\n"; } system("PAUSE"); return 0; }

M[0][2] M[1][2] M[2][2]

6 de 8 Ing. Iskandar Arneodo Programacin I 04-12-2012 ARREGLOS Y MATRICES

UNIVERSIDAD NORORIENTAL PRIVADA GRAN MARISCAL DE AYACUCHO FACULTAD DE INGENIERA - ESCUELA DE INGENIERA

Docente. ISKANDAR ARNEODO - Fecha: 09 de Mayo 2013 Asignatura: PROGRAMACIN I - INGENIERA DE SISTEMAS Seccin 01 - Semestre: I 2.013 - GUA PRCTICA NMERO 7 ARREGLO Y MATRICES
Los resultados de las elecciones de gobernadores en Venezuela se esquematizaron en una matriz como la que se muestra a continuacin: P1 P2 P3 P4 P5 P6 P0(Votos en blanco) Valle Cauca Caldas La matriz almacena el nmero de votos que obtuvo cada partido en el departamento correspondiente, as como los votos en blanco en cada departamento. Se desea conocer: Total de votos Total de votos por departamento, para comparar con una tabla que indica el nmero de personas que deben votar por departamento con el fin de detectar en que departamentos vot menos del 60% de la poblacin electora y tomar as medidas de concientizacin cvica. Nmero de personas que deben votar por estado: Valle Cauca ... Caldas

Que partido obtuvo el mayor nmero de votos Cul es el departamento con mayor nmero de abstenciones y cul es el departamento con mayor porcentaje de abstenciones? En la siguiente pgina se encuentra el algoritmo implementado en C++.
#include <iostream.h> #include <stdlib.h> #define DPTOS 3 void main() { int votos[DPTOS][7],votantes[DPTOS],abstencion[DPTOS],total,i,j; int maximo,max_indice; system("CLS"); for(i=0;i<DPTOS;i++) { for(j=0;j<=6;j++) { if(j == 0) { cout<<"Votos en blanco en el Dpto " <<i<<": "; cin>>votos[i][j]; // Almacena los datos leidos en la matriz } else { cout<<"Votos del partido P"<<j<<" en el Dpto "<<i<<": "; cin>>votos[i][j]; // Almacena los datos leidos en la matriz } } } cout<<endl; for(i=0;i<DPTOS;i++){ cout<<"Personas que deben votar en el Dpto "<<i<<": "; cin>>votantes[i]; }

7 de 8 Ing. Iskandar Arneodo Programacin I 04-12-2012 ARREGLOS Y MATRICES

UNIVERSIDAD NORORIENTAL PRIVADA GRAN MARISCAL DE AYACUCHO FACULTAD DE INGENIERA - ESCUELA DE INGENIERA

Docente. ISKANDAR ARNEODO - Fecha: 09 de Mayo 2013 Asignatura: PROGRAMACIN I - INGENIERA DE SISTEMAS Seccin 01 - Semestre: I 2.013 - GUA PRCTICA NMERO 7 ARREGLO Y MATRICES

cout <<endl; // Suma la matriz por columnas para dar el total de votos de cada partido for(j=1;j<=6;j++){ total=0; // Variable acumuladora, por lo cual hay que inicializarla en 0 for(i=0;i<DPTOS;i++){ total = total+votos[i][j]; } cout<<"Votos obtenidos por el partido P"<<j<<": "<<total<<endl; } cout<<endl; // Suma la matriz por filas para dar el total de votos por departamento maximo=0; for(i=0;i<DPTOS;i++){ total=0; // Variable acumuladora, por lo cual hay que inicializarla en 0 for(j=0;j<=6;j++){ total=total+votos[i][j]; if(i==1 && maximo<votos[i][j]){ // Busca el partido de ms votos en el segundo Dpto. maximo=votos[i][j]; max_indice=j; // Almacena el ndice del partido con ms votos } } abstencion[i]=votantes[i]-total; // Calcula la abstencin de una vez cout<<"Votos totales en el Dpto "<<i<<": "<<total; cout<<"; Vot el "<<total*100/votantes[i]<<"% de la poblacin."<<endl; } cout<<endl<<"El partido P"<<max_indice<<" obtuvo el mayor nmero de votos en el segundo Dpto."<<endl<<endl; maximo=0; for(i=0;i<DPTOS;i++){ if(maximo<abstencion[i]){ // Busca el Dpto de ms abstencin maximo=abstencion[i]; max_indice=i; } cout <<"Abstencin de "<<abstencion[i]<<" en el Dpto "<<i<<", para un porcentaje de " <<abstencion[i]*100/votantes[i]<<"% "<<endl; } cout<<endl<<"El partido con mayor abstencin fue el Dpto "<<max_indice<<endl; system("PAUSE"); }

8 de 8 Ing. Iskandar Arneodo Programacin I 04-12-2012 ARREGLOS Y MATRICES

You might also like