Está en la página 1de 24

ARREGLOS

MULTIDIMENSIONALES
Unidad 2, 2ª Parte
Arreglos bidimensionales
 Arreglos en 2D
 Tablas con renglones y columnas (Arreglo m x n )
 Matriz: Especificar Renglon, luego Columna

Columna Columna 1 Columna 2 Columna 3


0 0 ][ 0 ] a[ 0 ][ 1 ] a[ 0 ][ 2 ] a[ 0 ][ 3 ]
a[
Renglón 0
Renglón 1 a[ 1 ][ 0 ] a[ 1 ][ 1 ] a[ 1 ][ 2 ] a[ 1 ][ 3 ]
Renglón 2 a[ 2 ][ 0 ] a[ 2 ][ 1 ] a[ 2 ][ 2 ] a[ 2 ][ 3 ]

Índice Columna
Nombre del Arreglo
Índice Renglón
Arreglos Bidimensionales
 Inicialización 1 2

 int b[ 2 ][ 2 ] = { { 1, 2 }, { 3, 4 } }; 3 4

 Se inicializan grupos por renglón entre llaves { }


 Si no existen suficientes elementos, estos son puestos a
cero 1 0
int b[ 2 ][ 2 ] = { { 1 }, { 3, 4 } };
3 4
 Haciendo referencia a elementos específicos
 Especificar renglón, después columna
printf( "%d", b[ 0 ][ 1 ] );
scanf("%d", &b[ 0 ][ 1 ] );
Ejemplo 1
 Escriba un programa que lea un arreglo
bidimensional
 El programa deberá imprimir los valores de la
diagonal
Ejemplo 1
void lectura(int A[][size], int row)
{
for(int i=0; i< row; i++)
for (int j = 0; j < row; j++)
{
printf("A[%d][%d] = ",i,j);
scanf("%d",&A[i][j]);
}
}

void imprime(int A[][size], int row)


{
for(int i=0; i< row; i++){
for (int j = 0; j < row; j++)
printf("A[%d][%d] = %d\t",i,j,A[i][j]);
printf("\n");}
}
Imprime los valores de la diagonal
void diagonal(int A[][size], int row)
{
for(int i=0; i< row; i++)
printf("%d, ",A[i][i]);
printf("\n");
}
Programa que imprime la diagonal de
una matriz
#include <stdio.h>
#include <stdlib.h>
#define size 3

void lectura(int A[][size], int row);


void imprime(int A[][size], int row);
void diagonal(int A[][size], int row);

main()
{
int matriz[size][size];

lectura(matriz,size);
imprime(matriz,size);
printf("Los elementos de la diagonal son: ");
diagonal(matriz,size);
system("pause");
return 0;
}
Programa que realiza la suma de dos
matrices
void suma(int A[][MAX], int B[][MAX],
int C[][MAX], int row, int col)
{
for(int i=0; i< row; i++)
for (int j = 0; j < col; j++)
C[i][j]=A[i][j]+B[i][j];
}
Ejemplo 2
void lectura(int A[][MAX], int row, int col)
{
for(int i=0; i< row; i++)
for (int j = 0; j < col; j++)
{
printf("matriz[%d][%d] = ",i,j);
scanf("%d",&A[i][j]);
}
}

void imprime(int A[][MAX], int row, int col)


{
for(int i=0; i< row; i++){
for (int j = 0; j < col; j++)
printf("A[%d][%d] = %d\t",i,j,A[i][j]);
printf("\n");}
}
#include <stdio.h>

Ejemplo:
#include <stdlib.h>
#define MAX 2

void lectura(int A[][MAX], int row, int col);


void imprime(int A[][MAX], int row, int col);
void suma(int A[][MAX],int B[][MAX],int C[][MAX], int row, int
col);

main()
{
int A[MAX][MAX],B[MAX][MAX];

printf("Proporcione los elementos de la matriz A\n");


lectura(A,MAX,MAX);
printf("\n\nProporcione los elementos de la matriz B\n");
lectura(B,MAX,MAX);
suma(A,B,B,MAX,MAX);
printf("El resultado es: \n");
imprime(B,MAX,MAX);
system("pause");
return 0;
}
Ejemplo 3
 La traza de una matriz esta definida como la suma
de los elementos de la diagonal de la matriz
 Ejemplo:
 12 2 3 
  
tr   6 − 2 4  = 12 + (− 2) + 1 = 11
 8 2 1  
 
 Escriba un programa que calcule la traza de una
matriz
traza
int traza(int A[][MAX], int row)
{
int suma = 0;
for(int i=0; i< row; i++)
suma += A[i][i];
}
Programa que calcula la traza de una
matriz
#include <stdio.h>
#include <stdlib.h>
#define size 3

void lectura(int A[][size], int row);


void imprime(int A[][size], int row);
void traza(int A[][size], int row);

main()
{
int matriz[size][size];

lectura(matriz,size);
imprime(matriz,size);
printf("La traza de la matriz es %d \n\n“,traza(matriz,size));
system("pause");
return 0;
}
Ejemplo 4
 Realice un programa que transforme la fecha del
formato:
dd/mm/aa
 Al formato:
dd de mes de 20aa
 Ejemplo:
 23/02/02

 23 de febrero del 2002


Ejemplo 4
int check_format(char date[])
{
for(int i = 0; i < 8; i++)
{
if((i == 2)||(i==5)){
if(date[i] != '/')
return 0;}
else
if(!isdigit(date[i]))
return 0;
}
return 1;
}
int main()
{
char fecha[8];
int mes,dia,year;
char meses[12][12]={"Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto",
"Septiembre","Octubre","Noviembre","Diciembre"};
printf("Proporciona una fecha en el formato dd/mm/aa ");gets(fecha);
if (check_format(fecha))
{
dia = ((fecha[0]-48)*10)+(fecha[1]-48);
mes = ((fecha[3]-48)*10)+(fecha[4]-48);
year = ((fecha[6]-48)*10)+(fecha[7]-48);
if (year <= 10)
year += 2000;
else
year += 1900;
if ((dia < 32) && (dia > 0) && (mes < 13) && (mes > 0))
printf("\n\n%d de %s de %d\n\n", dia, meses[mes-1],year);
else
printf("\nError en la fecha\n");
}
else
printf("\nError en el formato\n");
system("pause");
return 0;
}
Ejemplo 5
 En un arreglo tridimensional se almacenan las
ventas mensuales de los últimos 8 años de los tres
departamentos de una empresa textil: hilos, lanas y
licra. Escribe un programa en C que obtenga lo
siguiente:
 Las ventas totales de la empresa en el segundo año
 El departamento que tuvo las mayores ventas en el
último año, incluyendo el importe de ventas
 El departamento, mes y año con la mayor venta,
incluyendo el importe de las ventas
Lectura de los valores
void lectura(float textil[][MONTH][YEAR], int mes, int depart, int year)
{
int i,j,k;

for(i=0; i < depart; i++)


{
printf("\nProporcione los datos para el departamento %d\n",i+1);
for(j=0; j < mes; j++)
for(k=0; k < year; k++)
{
printf("Mes: %d Año: %d ",j+1,2003+k);
scanf("%f",&textil[i][j][k]);
}
}
}
Ventas totales en el segundo año
float ventas(float textil[][MONTH][YEAR],
int mes, int depart, int year)
{
int i,j;
float suma=0;

for(i=0; i < depart; i++)


for(j=0; j < mes; j++)
suma += textil[i][j][year-1];
return suma;
}
Departamento con mayores ventas en
el ultimo año
float MaxVentasUltimo(float textil[][MONTH][YEAR], int mes, int &depart,
int year)
{
int i,j,dep=depart;
float max,suma[]={0,0,0};

for(i=0; i < dep; i++)


for(j=0; j < mes; j++)
suma[i] += textil[i][j][year-1];
max = suma[0]; depart = 0;
for(i=1; i < dep; i++)
if (max < suma[i])
{
max = suma[i];
depart = i;
}
return max;
}
Departamento, mes, año con las ventas
mayores
float MaxVentas(float textil[][MONTH][YEAR], int &mes, int &depart, int
&year)
{
int i,j,k;
int m = mes,d = depart,y = year;
float max;
max = textil[0][0][0];
mes = 0; depart = 0; year = 0;
for(i=0; i < d; i++)
for(j=0; j < m; j++)
for(k=0; k < y; k++)
if(max < textil[i][j][k])
{
max = textil[i][j][k];
depart = i; mes = j; year = k;
}
return max;
}
#define MONTH 12
#define DEP 3

Programa Principal
#define YEAR 8
void lectura(float textil[][MONTH][YEAR], int mes, int depart, int year);
float ventas(float textil[][MONTH][YEAR], int mes, int depart, int year);
float MaxVentasUltimo(float textil[][MONTH][YEAR], int mes, int &depart, int year);
float MaxVentas(float textil[][MONTH][YEAR], int &mes, int &depart, int &year);
main()
{
char d[3][6]={"Hilos","Lana","Licra"};
float max,Empresa[DEP][MONTH][YEAR];
int mes,year,dep=DEP;
for(int i=0; i<DEP; i++)
printf("Departamento %d es %s\n",i+1,d[i]);
lectura(Empresa,MONTH,DEP,YEAR);
max = ventas(Empresa,MONTH,DEP,2);
printf("Las ventas totales de la empresa en el 2004 fueron %.2f\n",max);
max = MaxVentasUltimo(Empresa,MONTH,dep,8);
printf("El departamento %s tuvo las mayores ventas \n Ventas = %.2f\n",d[dep-1],max);
mes = MONTH; dep = DEP; year = YEAR;
max = MaxVentas(Empresa,mes,dep,year);
printf("La mayor venta de la empresa se registro en: \n");
printf("Departamento: %s, Mes: %d, Año: %d\n",d[dep],mes+1,year+2003);
printf("Ventas: %.2f\n\n\n", max);
system("pause");
return 0;
}
Ejemplo 6
 Escriba una función que realice la multiplicación de
dos matrices siguiendo la definición
b11 b|12 
 a11 a12 a13   =
a  × b21 b 22 
 21 a22 a23  b
 31 b32 
 a11b11 + a12b21 + a13b31 a11b12 + a12b22 + a13b32 
a b + a b + a b a b + a b + a b 
 21 11 22 21 23 31 21 12 22 22 23 32 

p
cij = ∑ aik bkj
k =1
Programas Ejemplo
 Suma de los elementos de un renglón/columna

 Suma de los elementos diagonales de una matriz

 +, -, /,* de dos matrices elemento a elemento

 Búsqueda de un elemento

También podría gustarte