You are on page 1of 6

Nombre de la Practica: Tiempo Estimado:

Uso de Arreglos bidimensionales 2 horas y 30 minutos

I. OBJETIVOS Que el estudiante: Defina apropiadamente Que es un arreglo multidimensional? y Cmo utilizarlo en el lenguaje C/C++? Desarrolle mtodos para crear, inicializar y asignar valores a los elementos de una matriz bidimensional. Desarrolle los mtodos 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 mltiples dimensiones/subndices. Un uso comn de los arreglos con mltiples subndices es representar tablas de valores en matrices bidimensionales, las cuales consisten en informacin organizada en filas y columnas. Para identificar un elemento en especial de una tabla, debemos especificar dos subndices: 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 subndice. En la siguiente figura 10.1se muestra el arreglo a con doble subndice. 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]

Subndice de columna Subndice 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 subndices que identifican de manera nica a cada elemento de a. 1/7

Gua :

Uso de arreglos bidimensionales

Observe que los elementos en la primera fila tienen un primer subndice 0; los nombres de los elementos en la cuarta columna tienen un segundo subndice 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 Dimensin 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 dimensin, se le llama Arreglo Unidimensional, porque basta indicar un nmero, llamado ndice para referenciar a una posicin especfica dentro del mismo. Si a un arreglo se le definen 2 o mas dimensiones, se le conoce como Arreglo Multidimensional o tambin 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 ms de una dimensin al arreglo, C le permite aplicar diversos mtodos de clasificacin para el almacenamiento de listas de datos ms complejos. Ejemplos: Deseo declarar arreglo bidimensional llamado R que almacene datos tipo double, y que tenga 6 (primera dimensin) por 4 (segunda dimensin) elementos, es decir, un total de (6x4) = 24 elementos. Para lograrlo basta esta instruccin: double R [6][4]; A este arreglo R lo podra ver como una tabla, el cual tendr 6 columnas por 4 filas, tal como se muestra a la derecha : Para referenciar a cada posicin de R, ser necesario indicar 2 nmeros ndices (uno para cada dimensin). Si desea guardar el valor 6.241 en la posicin indicada por la X de la figura 2, deber hacerlo con esta instruccin: R[1][3]= 6.241; 0 0 1 2 3 1 2 3 X 4 5

Figura 10.2: Distribucin de elementos del arreglo bidimensional R: Arreglo bidimensional m i t a b l a de 3 filas por 2 columnas, para almacenar nmeros de comas flotantes de precisin doble. Arreglo m i t a b l a tiene capacidad para un total de [3filas X 2columnas] = 6 valores double.

double mitabla[3][2];

III. MATERIALES Y EQUIPO Para la realizacin de la gua de prctica se requerir lo siguiente: No. 2 3 Requerimiento Disquete Memoria USB PC con el programa DEV-C++ instalado Cantidad 1 1

Gua : IV. PROCEDIMIENTO

Uso de arreglos bidimensionales

Ejemplo 1. Llenado e impresin 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*********************

Gua :

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 cdigo 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]; }

Gua :

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 tambin 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. Cul 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 nmeros 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 nmeros de tipo decimal flotante; para luego imprimir el porcentaje de estos nmeros 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 nmeros almacenados en la matriz, que no se encontraron en ninguno de los rangos solicitados.

Ejemplos:

Gua : Matriz de 3 x 4 5.9 -5.2 14.2 15.6 6.9 12 -55.2 13.8 -8 6.8 28.4 37.1 Mensajes:

Uso de arreglos bidimensionales

Porcentaje de nmeros menores que cero: 25.0 % Total de nmeros en el rango 10 20: 33.3 % Total de nmeros 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 -8 -28.4 37.1 14.9 -9 12 -5.6 -61.9 18.1 55.2 38 -14

Mensajes: Porcentaje de nmeros menores que cero: 50% Total de nmeros en el rango 10 20: 25% Total de nmeros 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. CMO PROGRAMAR EN C++. 1ra Edicin. Editorial Mc Graw Hill Pappas, Chris H. y Murray, William H. MANUAL DE REFERENCIA DE VISUAL C++ 6.0. 4ta Edicin Editorial Prentice Hall (PEARSON). Joyanes Aguilar, Lus. PROGRAMACIN EN C++ - ALGORITMOS, ESTRUCTURAS DE DATOS Y OBJETOS. Editorial McGraw Hill, Espaa, 2000.