24
ARREGLOS MULTIDIMENSIONALES Unidad 2, 2ª Parte

ARREGLOS - galia.fc.uaslp.mxgalia.fc.uaslp.mx/~rmariela/programacion/unidad23.pdf · Arreglos bidimensionales Arreglos en 2D Tablas con renglones y columnas (Arreglo mx n) Matriz:

Embed Size (px)

Citation preview

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

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

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