Post on 18-Sep-2018
transcript
Arreglos bidimensionales
� Arreglos en 2D
� Tablas con renglones y columnas (Arreglo m x n )
� Matriz: Especificar Renglon, luego Columna
Renglón 0
Columna 0
Columna 1 Columna 2 Columna 3
a[ 0 ][ 0 ]
a[ 1 ][ 0 ]
a[ 2 ][ 0 ]
a[ 0 ][ 1 ]
a[ 1 ][ 1 ]
a[ 2 ][ 1 ]
a[ 0 ][ 2 ]
a[ 1 ][ 2 ]
a[ 2 ][ 2 ]
a[ 0 ][ 3 ]
a[ 1 ][ 3 ]
a[ 2 ][ 3 ]
Índice RenglónNombre del Arreglo
Índice Columna
Renglón 1
Renglón 2
Arreglos Bidimensionales
� Inicialización
� int b[ 2 ][ 2 ] = { { 1, 2 }, { 3, 4 } };
� Se inicializan grupos por renglón entre llaves { }
� Si no existen suficientes elementos, estos son puestos a
1 2
3 4
� Si no existen suficientes elementos, estos son puestos a cero
int b[ 2 ][ 2 ] = { { 1 }, { 3, 4 } };
� Haciendo referencia a elementos específicos
� Especificar renglón, después columnaprintf( "%d", b[ 0 ][ 1 ] );
scanf("%d", &b[ 0 ][ 1 ] );
1 0
3 4
Ejemplo 1
� Escriba un programa que lea un arreglo bidimensional
� El programa deberá imprimir los valores de la diagonaldiagonal
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 ("%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 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");}
}
Ejemplo:#include <stdio.h>
#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 ro w, intcol);
main()
{
int A[MAX][MAX],B[MAX][MAX];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:
3212
� Escriba un programa que calcule la traza de una matriz
( ) 111212
128
426
3212
=+−+=
−tr
traza
int traza( int A[][MAX], int row )
{
int suma = 0;
for ( int i=0; i< row ; i++)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(mat riz,size));
system("pause");
return 0;
}
Ejemplo 4
� Realice un programa que transforme la fecha del formato:
dd/mm/aa
� Al formato:� 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 ] != '/')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/a a ");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;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],y ear);
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: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;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ñofloat MaxVentasUltimo(float textil[][MONTH][YEAR], in t 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++ )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 mayoresfloat 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;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;
}
Programa Principal
#define MONTH 12
#define DEP 3
#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], in t 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
=
×
2221
12|11131211 bb
bb
aaa
aaa
++++++++
=
×
322322221221312321221121
321322121211311321121111
3231
2221232221
babababababa
babababababa
bb
bbaaa
∑=
=p
kkjikij bac
1