UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS TECNOLÓGICOS ESCUELA DE COMPUTACION CICLO: 02/ 2012 Nombre de la Practica: Lugar de Ejecución: Tiempo Estimado: MATERIA: GUIA DE LABORATORIO #08 Uso de Arreglos bidimensionales Centro de Computo 2 horas y 30 minutos Introducción a la Programación I. OBJETIVOS Que el estudiante: • Defina apropiadamente ¿Que es un arreglo multidimensional? y ¿Cómo utilizarlo en el lenguaje C/C++? • Desarrolle métodos para crear, inicializar y asignar valores a los elementos de una matriz bidimensional. • Desarrolle los métodos apropiados para tener acceso a los elementos de una matriz. II. INTRODUCCION TEORICA Manejo de los Arreglos en Lenguaje C Los arreglos en C/C++ pueden tener múltiples dimensiones/subíndices. Un uso común de los arreglos con múltiples subíndices es representar tablas de valores en matrices bidimensionales, las cuales consisten en información organizada en filas y columnas. Para identificar un elemento en especial de una tabla, debemos especificar dos subíndices: el primero identifica la fila del elemento, y el segundo identifica la columna del elemento. Las tablas o arreglos que requieren dos índices para identificar un elemento en particular se llaman arreglos con doble subíndice. En la siguiente figura 10.1se muestra el arreglo a con doble subíndice. Fila 0 Fila 1 Fila 2 Columna 0 a[0][0] a[1][0] a[2][0] Columna 1 a[0][1] a[1][1] a[2][1] Columna 2 a[0][2] a[1][2] a[2][2] Columna 3 a[0][3] a[1][3] a[2][3] Subíndice de columna Subíndice de fila Nombre del arreglo Figura 10.1: Arreglo de dos indices, para representar una “Tabla de datos” Este arreglo contiene tres filas y cuatro columnas, de manera que se dice que es un arreglo de 3 por 4, en general un arreglo con m filas y n columnas se llama arreglo de m por n, así: m x n Cada elemento del arreglo a se identifica en la figura con el nombre del elemento de la forma a[i][j] tal como se hace con los vectores (matrices de solo una dimension): a[i]. • • a es el nombre del arreglo. i, j son los subíndices que identifican de manera única a cada elemento de a. 1/7 Guía #08: Uso de arreglos bidimensionales Observe que los elementos en la primera fila tienen un primer subíndice 0; los nombres de los elementos en la cuarta columna tienen un segundo subíndice 3. Dimensiones del arreglo Al definir un arreglo en C, se le debe indicar el total de elementos N que lo formaran. A este total N se le conoce como Dimensión del Arreglo, el cual permite definir el total de posiciones que se almacenara dentro de la memoria de la PC. Si un arreglo tiene solo una dimensión, se le llama Arreglo Unidimensional, porque basta indicar un número, llamado “índice” para referenciar a una posición específica dentro del mismo. Si a un arreglo se le definen 2 o mas dimensiones, se le conoce como “Arreglo Multidimensional” o también “Matriz”, y necesitara tantos índices como dimensiones se le declaren al arreglo. Si define 2 dimensiones para un arreglo, a este se le conoce como un Arreglo bidimensional. Al definir más de una dimensión al arreglo, C le permite aplicar diversos métodos de clasificación para el almacenamiento de listas de datos más complejos. Ejemplos: Deseo declarar arreglo bidimensional llamado R que almacene datos tipo double, y que tenga 6 (primera dimensión) por 4 (segunda dimensión) elementos, es decir, un total de (6x4) = 24 elementos. Para lograrlo basta esta instrucción: double R [6][4]; A este arreglo R lo podría ver como una “tabla”, el cual tendrá 6 columnas por 4 filas, tal como se muestra a la derecha : 0 0 1 2 3 Para referenciar a cada posición de R, será necesario indicar 2 números índices (uno para cada dimensión). Si desea guardar el valor 6.241 en la posición indicada por la X de la figura 2, deberá hacerlo con esta instrucción: 2 3 4 5 X Figura 10.2: Distribución de elementos del arreglo bidimensional R: R[1][3]= 6.241; double mitabla[3][2]; 1 Arreglo bidimensional m i t a b l a de 3 filas por 2 columnas, para almacenar números de comas flotantes de precisión doble. Arreglo m i t a b l a tiene capacidad para un total de [3filas X 2columnas] = 6 valores double. III. MATERIALES Y EQUIPO Para la realización de la guía de práctica se requerirá lo siguiente: No. 1 2 3 Requerimiento Guía de Laboratorio #08 de IP Disquete ó Memoria USB PC con el programa DEV-C++ instalado Introducción a la Programación Cantidad 1 1 1 2 Guía #08: Uso de arreglos bidimensionales IV. PROCEDIMIENTO Ejemplo 1. Llenado e impresión de datos almacenados en una matriz de 2 x 3 (2 filas y 3 columnas) #include <iostream> using namespace std; #include <conio.h> #include <stdio.h> #define tam 2 #define tam1 3 main(){ int numeros[tam][tam1],i,j; //******************PARA INGRESAR DATOS A LA MATRIZ********************* for(i=0;i<tam;i++){ //FOR EXTERNO PARA UBICARSE EN LAS FILAS for(j=0;j<tam1;j++){ //FOR INTERNO PARA UBICARSE EN LAS COLUMNAS cout<<"Digite el elemento de la posicion ( "<<i<<","<<j<<" ): "; cin>>numeros[i][j]; } //FIN DE FOR INTERNO } //FIN DE FOR EXTERNO //******************PARA IMPRIMIR EN PANTALLA LOS DATOS DE LA MATRIZ**** cout<<"\n\n\tSu matriz es la siguiente: \n"; for(i=0;i<tam;i++){ //FOR EXTERNO PARA UBICARSE EN LAS FILAS cout<<"\t\t"; for(j=0;j<tam1;j++){ //FOR INTERNO PARA UBICARSE EN LAS COLUMNAS cout<<numeros[i][j]<<" "; } //FIN DE FOR j INTERNO cout<<endl; } //FIN DE FOR I EXTERNO getch(); }//fin main Ejemplo 2. El siguiente programa permite identificar y contar los datos positivos y negativos almacenados en una matriz. #include <stdio.h> #include <conio.h> #define tam 2 #define tam1 3 main(){ int numeros[tam][tam1],i,j,positivos=0,negativos=0; //************ PARA INGRESAR DATOS A LA MATRIZ********************* Introducción a la Programación 3 Guía #08: Uso de arreglos bidimensionales for(i=0;i<tam;i++){ //FOR EXTERNO PARA UBICARSE EN LAS FILAS for(j=0;j<tam1;j++){ //FOR INTERNO PARA UBICARSE EN LAS COLUMNAS printf("Digite el elemento de la posicion (%d,%d): ",i,j); scanf("%d",&numeros[i][j]); }//FIN DE FOR INTERNO }//FIN DE FOR EXTERNO //************ PARA IMPRIMIR EN PANTALLA LOS DATOS DE LA MATRIZ **** for(i=0;i<tam;i++){ //FOR EXTERNO PARA UBICARSE EN LAS FILAS for(j=0;j<tam1;j++){ //FOR INTERNO PARA UBICARSE EN LAS COLUMNAS if(numeros[i][j]>0) //si el dato en esta posicion es positivo positivos++; //hace un contador que incrementa en 1 positivos else if(numeros[i][j]<0) //si el dato es negativo, entonces incrementa en 1 negativos negativos++; }//FIN DE FOR INTERNO printf("\n"); }//FIN DE FOR EXTERNO printf("\n\tNumero de elementos positivos en la matriz es: %d",positivos); printf("\n\tNumero de elementos negativos en la matriz es: %d",negativos); getch(); }//fin main Ejemplo 3. En el siguiente código se muestra un programa que permite crear dos matrices paralelas, una que permitirá almacenar el nombre del alumno y otra que permitirá almacenar las notas para cada alumno. #include <iostream> using namespace std; #include <conio.h> #define tam 2 #define tam1 3 main(){ float notas[tam][tam1]; char nombre1[tam][25]; int i,j,k; for(i=0;i<tam;i++){ cout<<"Digitar nombre: "; cin.getline (nombre1[i],25); for(k=0;k<tam1;k++){ cout<<"Digite la nota "<<k+1<<" del alumno: "; cin>>notas[i][k]; } Introducción a la Programación 4 Guía #08: Uso de arreglos bidimensionales cout<<"\n"; cin.get(); }//fin for i for(i=0;i<tam;i++){ cout<<endl; cout<<"El alumno: "; cout<<nombre1[i]; cout<<endl; cout<<"Tiene las notas: "; for(k=0;k<tam1;k++) cout<<notas[i][k]<<", "; cout<<endl; }//fin for i getch(); } V. DISCUSION DE RESULTADOS 1. Modificar el ejemplo 2 de la parte de procedimiento para que el usuario decida las dimensiones de la matriz (m x n), y debe agregarle también el contador de los ceros. 2. Hacer un programa que solicite a usuario los valores para una matriz de 4 x 5 (filasxcolumnas) y luego determine: a. ¿Porcentaje de los numeros de la matriz que son mayores al promedio general de todo el listado? b. ¿Cuál es el mayor valor de la fila 1 y luego el menor de la fila 4? VI. INVESTIGACION COMPLEMENTARIA 1. Hacer un programa que llene una matriz de 6 filas x 4 columnas, únicamente con números positivos (debe validar este punto) dados por usuario. Luego calcular la suma de cada fila y almacenarla en un vector. Imprimir el vector resultante. 2. Hacer un programa que llene una matriz de m x n números de tipo decimal flotante; para luego imprimir el porcentaje de estos números ya almacenados, que se encuentran en los siguientes rangos. Menores que 0 10 – 20 > 30 Por último, muestre la cantidad y el listado de los números almacenados en la matriz, que no se encontraron en ninguno de los rangos solicitados. Ejemplos: Introducción a la Programación 5 Guía #08: Uso de arreglos bidimensionales Matriz de 3 x 4 Mensajes: 5.9 15.6 -55.2 6.8 -5.2 6.9 13.8 28.4 14.2 12 -8 37.1 Porcentaje de números menores que cero: 25.0 % Total de números en el rango 10 – 20: 33.3 % Total de números mayores que 30: 8.3 % Los siguientes 4 numeros del listado ingresado no cumplieron ninguno de los rangos: 5.9 6.8 6.9 28.4 Matriz de 3 x 4 Mensajes: -8 14.9 -5.6 55.2 -28.4 -9 -61.9 38 37.1 12 18.1 -14 Porcentaje de números menores que cero: 50% Total de números en el rango 10 – 20: 25% Total de números mayores que 30: 25% Ninguno de los 12 numeros del listado ingresado quedo excluido de los rangos anteriores VII. BIBLIOGRAFIA • • • Deitel, Harvey M. y Deitel, Paul J. CÓMO PROGRAMAR EN C++. 1ra Edición. Editorial Mc Graw Hill Pappas, Chris H. y Murray, William H. MANUAL DE REFERENCIA DE VISUAL C++ 6.0. 4ta Edición Editorial Prentice Hall (PEARSON). Joyanes Aguilar, Luís. PROGRAMACIÓN EN C++ - ALGORITMOS, ESTRUCTURAS DE DATOS Y OBJETOS. Editorial McGraw Hill, España, 2000. Introducción a la Programación 6 Guía #08: Uso de arreglos bidimensionales Hoja de evaluación Guía #08 Fecha: ____________________ Nombre del alumno: ___________________________________________________ Carné: ___________________ Firma: ________________________ Nombre y firma del docente: ______________________________________________ GL: ________ GT: ________ I. Evaluación del contenido practico Objetivos a evaluar: Que el estudiante: • Definir que es un arreglo y cómo utilizarlo en el lenguaje C/C++. • Desarrolle métodos para crear, inicializar y asignar valores a los elementos de un arreglo. • Determine la forma de cómo debe tener acceso a los elementos de un arreglo, ya sea para asignarle valores a sus elementos o para leer los datos almacenados en ellos. • Resolver una de las aplicaciones prácticas típicas con arreglos, como lo es la ordenación de elementos. 1. 2. 3. 4. 5. Criterios Declaración correcta de las matrices Llenado correcto de los datos en la matriz Impresión correcta de los datos de una matriz Muestra correctamente los resultados Entrego el trabajo a tiempo SI NO II. Evaluación general ¿Cómo realiza el trabajo asignado? Excelente Muy Bien ¿Necesita ayuda del instructor? Ninguna Un poco Bueno Regular Varias Veces Siempre III. Evaluación de actitudes Criterios 1. 2. 3. Excelente Puntualidad Participación Cooperación Introducción a la Programación 7 Muy Bueno Bueno Regular