Uso de Arreglos Bidimensionales (Matrices)

Anuncio
Guía # 09: Uso de Arreglos bidimensionales (Matrices)
UNIVERSIDAD DON BOSCO
FACULTAD DE ESTUDIOS TECNOLÓGICOS
ESCUELA DE COMPUTACION
CICLO: 02/ 2013
Nombre de la Practica:
Lugar de Ejecución:
Estimado:
MATERIA:
GUIA DE LABORATORIO #09
Uso de Arreglos bidimensionales(Matrices)
Centro de Computo Tiempo
2 horas y 30 minutos
Introducción a la Programación
I. OBJETIVOS
Que el alumno sea capaz de:
• Elaborar aplicaciones avanzadas en C++ que utilicen arreglos y matrices
• Dominar el uso de arreglos para solución de problemas complejo
• Manejar los arreglos de cadenas de caracteres
II. INTRODUCCION TEORICA
Los arreglos en C/C++ pueden tener múltiples subíndices. Un uso común de los arreglos con múltiples
subíndices es representar tablas de valores que 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. Observe que los arreglos con múltiples subíndices pueden tener más de dos subíndices.
En la Figura 1 se muestra el arreglo a con doble subíndice.
Columna 0
Columna 1
Columna 2
Columna 3
Fila 0
a[0][0]
a[0][1]
a[0][2]
a[0][3]
Fila 1
a[1][0]
a[1][1]
a[1][2]
a[1][3]
Fila 2
a[2][0]
a[2][1]
a[2][2]
a[2][3]
Subindice Fila
Subindice Columna
Figura 1
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í:
mxn
Cada elemento del arreglo a se identifica en la figura con el nombre del elemento de la forma a[i][j] tal como se
hacía con los vectores 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
Guía # 09: Uso de Arreglos bidimensionales (Matrices)
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.
Declaración de matrices.
Los lenguajes como C y C++, permiten que el programador declare matrices de cualquier tipo y prácticamente
de cualquier tamaño. En el seudolenguaje, un matriz se declara usando el siguiente formato:
<TIPO> <NOMBRE> [<N>][<M>]
En este formato aparecen en mayúsculas y entre los caracteres < y > los componentes que el programador
puede determinar. Así por ejemplo, si se quiere declarar una matriz con nombre matriz, de dimensión 15x4 y
que pueda almacenar datos de tipo caracter, se debe escribir la siguiente línea.
char matriz [15][4];
Otros ejemplos:
int números[2][3];
int numeros2[4][2]= {{1,2,3,1},{2,3,4,1}};
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:
R [ 2 ] [ 5 ] = 24.13;
R [ 1 ] [ 3 ] = 6.241;
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];
0 1 2 3 4 5
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
1
2
3
X
Figura 2: Distribución de elementos del
arreglo bidimensional R
2
Guía # 09: Uso de Arreglos bidimensionales (Matrices)
III. MATERIALES Y EQUIPO
Para la realización de la guía de práctica se requerirá lo siguiente:
No.
Requerimiento
Cantidad
1
Guía de Laboratorio #09 de IP
1
2
Disquete ó Memoria USB
1
3
PC con el programa DEV-C++
1
IV. PROCEDIMIENTO
1. Proceda a crear una carpeta denominada IPguia9_procedimiento, en el cual guardara cada uno de los
siguientes códigos fuentes C++ que utilizan arreglos multidimensionale (matrices)
Ejemplo 1. Como acceder a los elementos de una matriz (declaracion, inicialización y procesamiento de los
elementos de la misma)
#include<iostream>
#include<conio.h>
using namespace std;
main(){
//variables para uso ciclos e indices de una matriz
int fil,col; //contador filas y columnas
//declaracion e inicilizacion de valores de
//una matriz
float n[3][4]={
{1,2,3,4},
{0,0,0,0},
{0,0,0,0},
};
//impresion de contenido actual de matriz
cout<<"Matriz n[3][4] contiene actualmente estos valores:";
for(fil=0;fil<3;fil++){ //recorre cada fila
//accede a cada columna de fila(fil) actual
cout<<endl<<"fila "<<fil<<": ";
for(col=0;col<4;col=col+1){
cout<<n[fil][col]<<"\t";
}//fin for col
}//fin for fil
getch();
//inicializacion de matriz por usuario
cout<<endl<<endl<<"Ingrese valores de fila 2 de matriz:";
//recorre elementos de fila 3
col=0; //columna 0
do{
3
Guía # 09: Uso de Arreglos bidimensionales (Matrices)
cout<<endl<<"Valor de posicion (1,"<<col<<")?? ";
cin>>n[1][col];
col++;//incrementa contador columnas
}while(col<4);
//imprime nuevamente contenido matriz
cout<<endl<<"Matriz n[3][4] contiene ahora estos datos:";
for(fil=0;fil<3;fil++){ //recorre cada fila
//accede a cada columna de fila(fil) actual
cout<<endl<<"fila "<<fil<<": ";
for(col=0;col<4;col=col+1){
cout<<n[fil][col]<<"\t";
}//fin for col
}//fin for fil
getch();
}//fin main
Ejemplo 2. Programa que usa una matriz para simular por medio de matrices a los registros de precios de
varios productos, clasificados por categorías.
#include <iostream>
using namespace std;
#include <stdlib.h>
/* Programa para obtener los precios de 3 categorias de productos y 9 productos.
Ademas generador de menu */
#define CAT 3
#define FIL 3
#define COL 3
main(){
//Nombres de Categorias de productos
char * categorias[CAT]={"Lamparas","Diversion en hogar","Informatica"};
//Nombres de productos
char * nombres[FIL][COL] = {
{"De Cristal","Unidad DVD","Disco Duro"},
{"De Plastico","TV plasma","memoria USB"},
{"De Barro","VHS","Quemador DVD"}};
//Precios de productos
float precios[FIL][COL]= {
{20,152.4,75.2},
{10.45,243.6,12.5},
{9.34,89,26}
};
int i, j,k,l,op,op1; //Variable de proceso
//Generando el menu de Categorías de productos
do{
system("cls");
cout<<"Emulacion de base de datos"<<endl<<endl;
cout<<"REGISTRO DE PRECIOS DE PRODUCTOS EXISTENTES"<<endl;
4
Guía # 09: Uso de Arreglos bidimensionales (Matrices)
cout<<endl<<"Presione numero de categoria de productos.."<<endl;
for(i=0;i<CAT;i++)
cout<<(i+1)<<"-> Datos de "<<categorias[i]<<endl;
cout<<CAT+1<<"-> ( Finalizar programa )"<<endl;
cout<<endl<<"Su opcion es?\t";
cin>>op;
switch(op){
case 1:
case 2:
case 3:
//Menu de precios validos
cout<<endl<<"Detalle de Productos de "<<categorias[op-1]<<endl;
for(j=0;j<FIL;j++){
cout<<j+1<<"=>Precio de "<<nombres[j][op-1]<<endl;
}//fin for j
cout<<endl<<"\tdigite numero del producto para saber su precio: ";
break;//sale de switch opc
default :
if(op==CAT+1) op=0; //desea salir
else op=-1;//indica que opcion de menu no es valida
}//fin switch opc
if(op==-1){
cout<<"Error!!! opcion invalida"<<endl<<endl;
}
else{
if(op!=0) {
cin>>op1;
cout<<"El precio de su "<<nombres[op1-1][op-1];
cout<<" es $ "<<precios[op1-1][op-1]<<endl<<endl;
system("pause");
}
}//fin if-op -1
}while(op!=0);
system("cls");
cout<<"Fin Programa...\n\n";
system("pause");
}//fin main
2. Compilar el código anterior y luego ejecutarlo. Observar que el programa no finaliza hasta que se
selecciona opción (finalizar programa), gracias al uso de un ciclo do-while.
Ejemplo 3. El siguiente código d e f i n e u n programa que permite crear dos matrices paralelas:
+ la primera (nombres) permitirá almacenar el nombre de 2 estudiantes de la materia algebra lineal
+ matriz (notas) almacena 4 notas para cada estudiante. Las primeras 3 notas son notas de periodo y la
ultima, nota final (que se obtiene del 30% de nota 1 y el 35% de cada nota restante).
#include <iostream>
using namespace std;
#include <stdlib.h>
5
Guía # 09: Uso de Arreglos bidimensionales (Matrices)
#define tam 2 //total estudiantes
#define tam1 4 //3 notas periodo y prom-final
main(){
float notas[tam][tam1];
char nombres[tam][25];
int i,j,k; //contadores para ciclos y arreglos
i=0; //1er elemento del arreglo nombres[]
cout<<"Programa de registro academico";
while(i<tam){
cout<<endl<<endl<<"Digitar nombres de Estudiante "<<i+1<<": ";
/*CAPTURA UNA CADENA DE CARACTERES CON ESPACIOS*/
cin.getline (nombres[i],25);
notas[i][3]=0.0e-8;//asigna nota final prom a cero.
k=0;
for(k=0;k<3; ){
cout<<endl<<"Ingrese nota de periodo "<<k+1<<" :\t";
cin>>notas[i][k];
if((notas[i][k]<0)||(notas[i][k]>10))
cout<<"Error, nota incorrecta!!";
else
k++; //cuenta a una nota valida!!
}//fin for k
cin.get(); //lee salto de linea
i++; //incremento contador i
}//fin while i
//calcula nota promedio de c/estudiante
i=0;
while(i<tam){
//acumula en posicion notas[i][3] el porcentaje
//de c/nota de periodo
notas[i][3]+=notas[i][0]*0.3;
notas[i][3]+=notas[i][1]*0.35;
notas[i][3]+=notas[i][2]*0.35;
i++;//proximo estudiante
}//fin while i
system("cls");
for(i=0;i<tam;i++){
cout<<endl;
cout<<endl<<"Estudiante "<<nombres[i]<<
" tiene las notas de periodo:"<<endl;
for(k=0;k<tam1-1;k++)
cout<<notas[i][k]<<"\t";
cout<<endl<<"\t alcanzando una nota final de "<<notas[i][3];
}//fin for i
6
Guía # 09: Uso de Arreglos bidimensionales (Matrices)
cout<<"\n\nFIN DEL PROGRAMA"<<endl;
system("pause");
} //fin main
PROBLEMAS COMPLEMENTARIOS
1. Escribir un programa que lea una matriz de N filas y M columnas de valores enteros. A continuación,
el programa debe pedir el número de una fila (si este es incorrecto deberá mostrar un mensaje de error
y finalizar el programa), para que el programa le devuelva el número mayor contenido en esa fila
especifica.
2. Escribir un programa que lea un matriz de enteros de 2 filas y 4 columnas y muestre por pantalla la
traspuesta a dicha matriz. Ejemplo:
Entrada: 2 3 4 5
Salida
2 7
7 6 5 4
3 6
4 5
5 4
V. DISCUSION DE RESULTADOS
1. Hacer un programa que llene una matriz de tipo entera de 4 x 5 con valores exclusivamente positivos,
brindados por usuario y determine la posición [fila, columna] del número menor almacenado en toda la matriz.
En caso que usuario no brinde un valor positivo, el programa se lo debe volver a solicitar cuantas veces el
usuario se equivoque en el valor esperado por el programa!!
2. Una empresa automotriz tiene cinco agencias y cuenta con la información acerca de las ventas mensuales de
automóviles logradas el año pasado por cada una de éstas. A partir de estos datos la empresa construyó la
siguiente matriz ventas:
Lomas
Vallejo
Perisur
Valle
Oriente
Enero
Febrero
...
Noviembre
Diciembre
El programa permite ingresar apropiadamente los valores de la matriz anterior, para que luego muestre las
respuestas a las siguientes preguntas:
A) ¿Cuál fue el total de ventas en el año de la agencia Lomas?
B) ¿Cuál fue el promedio de ventas en el mes de diciembre?
C) ¿Qué agencia tuvo mayores ventas en el mes de mayo?
D) ¿En qué mes se registraron las menores ventas del año, considerando todas las agencias?
7
Guía # 09: Uso de Arreglos bidimensionales (Matrices)
3. Escribir un programa que lea una matriz de 4 filas y 3 columnas, la visualice por pantalla y a continuación
encuentre el mayor y el menor elemento de la matriz y sus posiciones.
Por ejemplo: Matriz de 3 x 3
5
15
6
Mensajes a retornar:
-12 55
13
El número menor es: -15, ubicado en la fila: 3, columna: 1.
-15 12
-8
El número mayor es: 55, ubicado en la fila: 2, columna: 2.
4. Cree un programa que sea capaz de calcular las ventas semanales de un mes de un negocio de comida
rápida, además deberá desplegar en pantalla la venta total de todo el mes.
Salida del programa:
Ventas de cuatro semanas
----------------------------------------SEM1
SEM2
SEM3
SEM4
(L) 123.50
234.60
345.45
321.40
(M) 345.00
456.65
123.50
234.60
(M) 345.45
321.40
345.00
456.65
(J) 123.50
234.60
345.45
321.40
(V) 345.00
456.65
123.50
234.60
(S) 345.45
321.40
345.00
456.65
(D)
0.00
0.00
0.00
0.00
----------------------------------------1627.90
2025.30
1627.90
2025.30
Venta total del mes:
7306.40
8
Descargar