IP Guia 08: Matrices en C++

Anuncio
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
Descargar