You are on page 1of 18

Se les denomina también tablas o matrices.

FORMATO:
<tipo_dato> <identificador> [<2dimensión>] [< 1dimensión >];

0 1 2 3 4

int A[4][5]; 0

1
filas
Filas Columnas 2

columnas

Mg. Edgar Ruiz Lizama 14/04/2019 1


Las operaciones básicas con los arrays bidimensionales son:
1. Lectura o ingreso, 2. escritura o impresión y 3. asignación

1. Lectura :
Se utiliza dos bucles, uno para las filas y otro para las columnas. La lectura permite
el ingreso de datos que se guardaran en la matriz. El orden máximo para la matriz
se definió como: const int N = 100;

Ejemplo: Leer datos para la matriz A:

void LeerDatos( int A[][N], int nfilas, int ncol )


{
for(i=0; i<nfilas; i++)
{ for(j=0; j<ncol; j++)
cin>>A[i][j];
}
}

Mg. Edgar Ruiz Lizama 14/04/2019 2


 2. Escritura:
Al igual que la lectura también se usan bucles.
Ejemplo: Escribir los datos almacenados en la
matriz A.

void ImprimirDatos(int A[][N], int nfilas, int ncol)


{ for(int i=0; i<nfilas; i++)
{ for(int j=0; j<ncol; j++)
cout<< A[i][j]<<“ ”;
cout<<endl; // siguiente fila
}
}

Mg. Edgar Ruiz Lizama 14/04/2019 3


3. Asignación:
Permite almacenar una matriz en otra (siempre que tengan la misma
dimensión)
Sea:
A = 3 2 1 B = ? ? ?
4 3 2 ? ? ?

int A[2][3]={3,2,1.4,3,2} ; int B[2][3];

Es posible asignar la matriz A a la matriz B; es decir hacer B=A; esto se


realiza con el siguiente segmento de código.

void AsignaMatriz(int A[][N],int B[][N],int nfilas, int ncol )


{
for(int i=0; i<nfilas; i++)
{ for(int j=0; j<ncol; j++)
B[i][j] = A[i][j];
}
}

Mg. Edgar Ruiz Lizama 14/04/2019 4


Ejemplo: Escriba un programa que almacene las notas de 5
alumnos en 4 cursos. Se pide encontrar cual es la mayor nota,
cual es el promedio de notas de cada alumno y cual es el
promedio de cada curso.
Algor. Fisic. Mate. Dib.

Juan 15 12 14 17

Rosa 12 10 11 15

Miguel 9 14 13 12

Lucia 13 15 19 17

Pedro 10 12 14 16

14/04/2019 Mg. Edgar Ruiz Lizama 5


main

lecturaMatriz escribeMatriz promAlum promCurso mayorNota

Diseño Top Down del programa

Mg. Edgar Ruiz Lizama 14/04/2019 6


/* Programa para procesar notas de 5 alumnos en 4 cursos*/
#include <iostream>
// prototipo de las funciones
void lecturaMatriz(int Notas[5][4]);
void escribeMatriz(int Notas[5][4]);
int mayorNota(int Notas[5][4]);
void promAlum(int Notas[5][4]);
void promCurso(int Notas[5][4]);
using namespace std;

int main() //notas.cpp


{ int Notas[5][4];
int mayor;
cout<<"INGRESO DE NOTAS"<<endl;
lecturaMatriz(Notas);
escribeMatriz(Notas);
mayor=mayorNota(Notas);
cout<<"\nNota mayor: "<<mayor<<endl;
promAlum(Notas);
promCurso(Notas);
return 0;
}

Mg. Edgar Ruiz Lizama 14/04/2019 7


void lecturaMatriz(int Notas[5][4])
{
int i,j;
for (i=0; i<5; i++)
{ for (j=0; j<4; j++)
{ cout<<"Ingrese nota["<<i<<", "<<j<<"]: ";
cin>>Notas[i][j];
}
}
}

void escribeMatriz(int Notas[5][4])


{
int i,j;
for (i=0; i<5; i++)
{ for (j=0; j<4; j++)
cout<<Notas[i][j]<<" ";
cout<<endl;
}
}

Mg. Edgar Ruiz Lizama 14/04/2019 8


int mayorNota(int Notas[5][4])
{ int i,j, mayor=-100;
for (i=0; i<5; i++)
{ for (j=0; j<4; j++)
{ if(Notas[i][j]>mayor)
mayor = Notas[i][j];
}
}
return mayor;
}
void promAlum(int Notas[5][4])
{ int i,j, acum;
float prom;
cout<<endl;

Mg. Edgar Ruiz Lizama 14/04/2019 9


for (i=0; i<5; i++)
{ acum=0;
for (j=0; j<4; j++)
acum+=Notas[i][j];
prom=acum/4;
cout<<"Promedio alumno "<<i+1<<" "<<prom<<endl;
}
}
void promCurso(int Notas[5][4])
{
int i,j, acum;
float prom;
cout<<endl;
for (j=0; j<4; j++)
{ acum = 0;
for (i = 0; i<5; i++)
acum+=Notas[i][j];
prom=acum/5;
cout<<"Promedio curso "<<j+1<<" "<<prom<<endl;
}
}

Mg. Edgar Ruiz Lizama 14/04/2019 10


EJECUCIÓN DEL PROGRAMA

Mg. Edgar Ruiz Lizama 14/04/2019 11


Escriba un programa que permita probar si una matriz es simétrica
o no. Resuelva utilizando una función que reciba la matriz
cuadrada de orden N y devuelva un valor de verdad acerca si
dicha matriz es simétrica o no
/* Averigua si una matriz es o no simterica */
#include <iostream>
const int SIZE = 20;
enum {FALSE, TRUE};

int simtest(int x[][SIZE],int);


void leer(int x[][SIZE],int);

Mg. Edgar Ruiz Lizama 14/04/2019 12


using namespace std;
int main() // simtest.cpp
{
int x[SIZE][SIZE];
int n;

cout << "Ingrese orden N de la matriz > ";


cin >> n;
leer(x,n);
cout << (simtest(x,n)? "matriz simetrica"
: "matriz no simetrica") << endl;
return 0;
}

Mg. Edgar Ruiz Lizama 14/04/2019 13


int simtest(int x[][SIZE],int n)
{ for(int i = 0; i< n-1;i++)
{ for(int j = i+1; j< n; j++)
if( x[i][j]!=x[j][i])
return FALSE;
}
return TRUE;
}
void leer(int x[][SIZE],int n)
{ for(int i = 0;i < n;i++)
for(int j = 0; j<n ; j++)
{
cout<<"x["<<i<<","<<j<<"] = ";
cin>>x[i][j];
}
}

Mg. Edgar Ruiz Lizama 14/04/2019 14


1. Una tienda comercial de artefactos electrodomésticos
guarda la información de los montos de ventas
mensuales realizadas el semestre pasado por sus cuatro
vendedores. Escriba un programa que implemente
funciones que permitan averiguar:

 El mes en donde se dio el mayor monto de ventas


 El promedio mensual de ventas en el semestre
 El vendedor con el mayor monto de ventas
 El promedio de ventas de cada vendedor
 El vendedor con el menor monto de ventas

2. Escriba la función construyeTriangularSuperior; tal


que reciba dos matrices cuadradas A y B, la primera con
datos y la segunda vacía. La función construye en B la
matriz triangular superior de A.

Mg. Edgar Ruiz Lizama 14/04/2019 15


3. Escriba una función que devuelva un valor de
verdad si la matriz cuadrada que recibe como
argumento es una matriz triangular superior.

4. Usted ha sido contratado por el comité organizador
de las Olimpiadas 2012 y se le encarga escribir una
función con el siguiente prototipo:

void carrera(int codigo[6][8] , float tiempo[6][8] , int
final[8])
donde el elemento codigo[i][j] contiene el código del
atleta que corrió en la ronda clasificatoria i en el carril j,
y en el elemento, tiempo[i][j] está registrado su tiempo
correspondiente en segundos. La función debe
almacenar en el arreglo final los códigos de los 8
atletas que correrán la final por haber obtenido los
mejores 8 tiempos en las rondas de clasificación.

Mg. Edgar Ruiz Lizama 14/04/2019 16


5. Escriba la función encuentra_repetidos; la cual
recibe una matriz cuadrada que almacena números
enteros y procede a almacenar en un arreglo
unidimensional los elementos que se encuentran
repetidos en la matriz, finalmente imprime los
elementos encontrados. Si la matriz no posee ningún
elemento repetido imprime el mensaje “No se pudo
generar el vector de repetidos”. Asuma que los datos
de la matriz están ordenados.

Mg. Edgar Ruiz Lizama 14/04/2019 17


REFERENCIAS
1. Deitel y Deitel, “Como Programar en C++” 5ta. ed.
Editorial Prentice Hall. México, 2007.
2. Savitch Walter, “Resolución de Problemas con C++” 3ra.
ed. Editorial Prentice Hall, México, 2006.
3. Bronson Gary, “C++ para Ingeniería y Ciencias”
Editorial Thompson S. A. México, 2006.
4. Ruiz Lizama Edgar, “Programación con C++” 1ra. ed.
Fondo Editorial de la UNMSM. Lima, Perú, 2009.
5. Ruiz Lizama Edgar, “Curso de Lenguaje C” 1ra. ed.
Facultad de Ingeniería Industrial UNMSM. Lima, Perú,
1999.

ERL / 2015

Mg. Edgar Ruiz Lizama 14/04/2019 18