0% encontró este documento útil (0 votos)
47 vistas26 páginas

Arreglos Bidimensionales en C: Matrices

El documento describe los conceptos básicos de las matrices o arreglos bidimensionales, incluyendo su representación, declaración, acceso y recorrido mediante bucles anidados. Explica cómo las matrices se indexan con dos índices para filas y columnas y cómo se pueden recorrer ya sea por filas o por columnas.

Cargado por

MIGUEL MORALES
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
47 vistas26 páginas

Arreglos Bidimensionales en C: Matrices

El documento describe los conceptos básicos de las matrices o arreglos bidimensionales, incluyendo su representación, declaración, acceso y recorrido mediante bucles anidados. Explica cómo las matrices se indexan con dos índices para filas y columnas y cómo se pueden recorrer ya sea por filas o por columnas.

Cargado por

MIGUEL MORALES
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

ARREGLOS

BIDIMENSIONALES
MATRICES

M. en C. Marisol Hernández López Academia Computación


CONCEPTO Y FORMA GENERAL

• En los lenguajes de programación están implementados los arreglos de dos dimensiones o


bidimensionales conocidos como matrices.
• La posición de un elemento dentro de una matriz viene determinada por dos índices, los cuales
representan la fila(i) y la columna(j) donde se encuentra almacenado
• Tanto las filas como las columnas comienzan a numerarse desde 0 hasta el límite N-1 para las
filas y M-1 para las columnas, como se muestra a continuación:

j-> [0] [1] [2] … [M-1]


i-> [0]
MATRIZ[N][M] [1]
[2]

[N-1]

M. en C. Marisol Hernández López Academia Computación


REPRESENTACIÓN EN EL DIAGRAMA DE FLUJO

• Una matriz puede utilizar cualquiera de las operaciones definidas por el diagrama de flujo, como son:
entrada, salida, proceso y evaluación de condición.

• La sintaxis para definirla se establece a través del manejo de sus indices en el siguiente orden, primero la fila
representada por el indice [ i ] y despues la columna representada por el indice [ j ].

MAT[i][j]= A*B SI MAT[i][j]


MAT[i][j] MAT1[i][j]= MAT2[i][j]
MAT[i][j] modulo2=0

ENTRADA PROCESO PROCESO


SALIDA
EVALUACION DE CONDICION

M. en C. Marisol Hernández López Academia Computación


DECLARACION DE LOS ARREGLOS BIDIMENSIONALES
• Las matrices también deben ser declaradas antes de utilizarlas, especificando la longitud de sus
filas y columnas. La sintaxis de declaración en lenguaje C se muestra como sigue:

tipo_dato nombre_MATRIZ[longitud_filas][longitud_columnas];

Ejemplos:
int matriz[F][C]; //F y C son longitudes previamente definidas con #define.
float mat[5][5];
double m[20][30];

El acceso a un arreglo bidimensional se puede realizar de dos formas:


1. Individual o directo a un solo elemento, mediante el identificador de la matriz y especificando la
posición exacta de la fila y la columna del dato.
2. Automático o conjunto, utilizando dos estructuras iterativas anidadas de tipo for, debido a que se
deben manejar los indices para la fila(i) y para la columna(j).

M. en C. Marisol Hernández López Academia Computación


ACCESO A LAS MATRICES DE FORMA INDIVIDUAL O DIRECTO A UN SOLO ELEMENTO
Sintaxis en lenguaje C, se utiliza el nombre de la matriz y el índice de la fila y la columna:
nombre_ MATRIZ[fila][columna]
Ejemplos:
printf(“El elemento es: %f”,mat[0][3]); //Imprime el dato que se encuentra en la posición de la fila 0
y la columna 3.
A=matriz[0][1]*B; //Calcula la multiplicación del dato en la posicion fila 0, columna 1 por el valor de
la variable B y se almacena en la variable A.
scanf(“%d”,&m[3][4]); //Almacena un valor en el elemento de la matriz que está en la posición fila 3 y
columna4.

ACCESO A LAS MATRICES DE FORMA AUTOMATICA O EN CONJUNTO


El acceso se realiza mediante el recorrido a través de las filas o las columnas de la matriz, utilizando
la estructura for anidada, el recorrido básico siempre es a través de las filas.
Como se define a continuación:

M. en C. Marisol Hernández López Academia Computación


RECORRIDO POR FILAS:
Subrutina para ingresar datos a una matriz: CREAR_MATRIZ
CREAR_MATRIZ

i=0
i=i+1
j -> [0] [1] [2] [3] [4]

Si Si
i-> [0]
PARA PARA MAT[i][j]
i<N j=0 j<M j=j+1 [1]
[2]
No No
[3]
FIN [4]
OBSERVAR: La estructura for anidada controla los indices
i y j, para que resulte un recorrido por filas el for externo Representación del recorrido
debe contener el indice de las filas que es i y el for interno
contiene el indice de las columnas que es j, recordar que
por filas de la matriz MAT[i][j].
las longitudes para las filas y columnas estan dadas por N Cuando N=5 y M=5
y M, definidas por el usuario.

M. en C. Marisol Hernández López Academia Computación


Subrutina para imprimir los datos de una matriz: IMPRIMIR_MATRIZ

IMPRIMIR_MATRIZ

i=0 j -> [0] [1] [2] [3] [4]


i=i+1 i-> [0]
[1]
PARA
Si PARA Si
MAT[i][j] [2]
i<N j=0 j<M j=j+1
[3]
No No [4]

FIN

M. en C. Marisol Hernández López Academia Computación


SINTAXIS EN LENGUAJE C: PROCESAMIENTO DE LA MATRIZ POR FILAS
-FUNCION: CREAR_MATRIZ(). -FUNCION: IMPRIMIR_MATRIZ().

void CREAR_MATRIZ(int mat[][C],int &n, int &m) void IMPRIMIR_MATRIZ(int mat[][C],int &n, int &m)
{ {
int i,j; int i,j;
for(i=0;i<n;i++) for(i=0;i<n;i++)
{ {
for(j=0;j<m;j++) for(j=0;j<m;j++)
{ {
printf(“Ingresa el dato: ”); printf(“ %d ”,mat[i][j]);
scanf(“%d”,&mat[i][j]); }
} printf(“\n”);
} }
} }

M. en C. Marisol Hernández López Academia Computación


EJECUCIÓN DEL PROGRAMA CON RECORRIDO POR FILAS:

M. en C. Marisol Hernández López Academia Computación


RECORRIDO POR COLUMNAS:
Subrutina para ingresar datos a una matriz: CREAR_MATRIZ
CREAR_MATRIZ

j=0
j -> [0] [1] [2] [3] [4]
j=j+1
i-> [0]
[1]
SI Si
PARA PARA
j<M
i=0 i<N
MAT[i][j]
i=i+1 [2]
[3]
NO No
[4]
FIN
OBSERVAR: Nuevamente se utiliza una estructura Representación del recorrido
for anidada, ahora el for externo controla las por columnas de la Matriz
columnas definidas por j y el for interno controla MAT[i][j].
las filas definidas por i. Cuando N=5 y M=5

M. en C. Marisol Hernández López Academia Computación


SINTAXIS EN LENGUAJE C: PROCESAMIENTO DE LA MATRIZ POR COLUMNAS
-FUNCION: CREAR_MATRIZ(). -FUNCION: IMPRIMIR_MATRIZ().

void CREAR_MATRIZ(int mat[][C],int &n, int &m) void IMPRIMIR_MATRIZ(int mat[][C],int &n, int &m)
{ {
int i,j; int i,j;
for(j=0;j<m;j++) for(i=0;i<n;j++)
{ {
for(i=0;i<n;i++) for(j=0;j<m;i++)
{ {
printf(“Ingresa el dato: ”); printf(“ %d ”,mat[i][j]);
scanf(“%d”,&mat[i][j]); }
} printf(“\n”);
} }
} }

OBSERVAR: La función imprimir es la misma en los dos


procesamientos. Así se utilizará en todos los ejercicios.

M. en C. Marisol Hernández López Academia Computación


EJECUCIÓN DEL PROGRAMA CON RECORRIDO POR COLUMNAS:

M. en C. Marisol Hernández López Academia Computación


PROGRAMA PRINCIPAL:
#include <conio.h> Constantes para definir la longitud
#include <stdio.h> de las filas (F) y las columnas (C).
#define F 20
#define C 20

INICIO void CREAR_MATRIZ(int [][C],int &, int &);


void IMPRIMIR_MATRIZ(int [][C],int &, int &);

N,M void main()


{
int N,M,MATRIZ[F][C];
CREAR_MATRIZ printf(“Cuantas filas: ");
scanf("%d",&N);
printf(“Cuantas columnas: ");
IMPRIMIR_MATRIZ scanf("%d",&M);
CREAR_MATRIZ(MATRIZ,N,M);
IMPRIMIR_MATRIZ(MATRIZ,N,M);
FIN
getch();
}

M. en C. Marisol Hernández López Academia Computación


EJEMPLO 1: Desarrollar el diagrama de flujo y la codificación de un programa que contiene las calificaciones de
las 3 evaluaciones departamentales de N alumnos, el programa calcula el promedio grupal por departamental y
tambien indica cuál es la calificación más alta y la más baja de los tres departamentales.
INICIO

CREAR_MATRIZ

IMPRIMIR_MATRIZ

CALIFICACION_ALTA

CALTA

CALIFICACION_BAJA

CBAJA

PROMEDIO_DEPART

FIN

M. en C. Marisol Hernández López Academia Computación


El almacenamiento se realiza por columna debido a que cada columna representa cada uno de los tres
departamentales y las filas representan a cada uno de los N alumnos evaluados.

El modelo es el siguiente: Por ejemplo, si N=5 alumnos

CREAR_MATRIZ

j=0
j=j+1

SI SI
PARA
i=0 PARA CALIF[i][j] i=i+1
j<M i<N

NO NO

FIN

M. en C. Marisol Hernández López Academia Computación


El proceso de la impresión se realiza por fila pues es la función básica.

El modelo de la matriz queda como sigue:

IMPRIMIR_MATRIZ

i=0
i=i+1

SI SI
PARA PARA CALIF[i][j]
i<N j=0 j<M
j=j+1

NO NO

FIN

M. en C. Marisol Hernández López Academia Computación


Para calcular la calificación más alta se realiza un recorrido por toda la matriz comparando las calificaciones
entre sí, se utiliza la variable CALTA para almacenar la calificación alta que se tenga en ese instante, para evaluar
esta condición CALTA necesita un valor inicial en este caso es 0 debido a que la primera calificación que se
evalue será la mas alta y se tendrá como referencia para la siguiente evaluación, que decidirá si esa es la
calificación más alta o se sutituye por la actual.
CALIFICACION_ALTA

CALTA=0

i=0

i=i+1

SI SI NO
IF
PARA PARA
j=0 j<M
CALIF[i][j]≥
j<N CALTA

NO NO
SI
FIN
CALTA=CALIF[i][j]

j=j+1

M. en C. Marisol Hernández López Academia Computación


El mismo proceso se realiza para encontrar la calificación baja, sólo que esta vez la variable CBAJA se inicializa
con 10 debido a que de esta manera la primera calificación que se evalue cumpla con la condición de ser la
primera calificación baja y pueda tomarse como referencia para las siguientes evaluaciones.
CALIFICACION_BAJA

CBAJA=10

i=0

i=i+1

SI SI NO
IF
PARA PARA
i<N j=0 j<M
CALIF[i][j]≤
CBAJA

NO NO
SI
FIN
CBAJA=CALIF[i][j] CBAJA=CBAJA

j=j+1

M. en C. Marisol Hernández López Academia Computación


Se realiza el proceso para calcular el promedio por cada uno de los departamentales, en este caso, se procesa
por cada una de las columnas de la matriz, considerando que la columna 0 corresponde al primer
departamental, la columna 1 al segundo y la columna 2 al tercero.

PROMEDIO_DEPART

SUM1=0 Observar que por esta razón el procesamiento es


SUM2=0
SUM3=0
como si fuera un vector, utilizando solo una
estructura for y dejando fijo el valor de la
columna en el procesamiento.
i=0

1er. PARA
SI
SUM1=SUM1+CALIF[i][0] i=i+1
Departamental i<N

NO

i=0

2o.
SI

PARA SUM2=SUM2+CALIF[i][1] i=i+1


Departamental i<N

NO

M. en C. Marisol Hernández López Academia Computación


1

i=0

3er. SI

Departamental PARA
i<N
SUM3=SUM3+CALIF[i][2] i=i+1

NO

PROM1=SUM1/N
PROM2=SUM2/N
PROM3=SUM3/N

PROM1,PROM2,
PROM3

FIN

M. en C. Marisol Hernández López Academia Computación


“PROGRAMA PRINCIPAL”

#include <conio.h>
#include <stdio.h>
#define F 50
#define C 3
void CREAR_MATRIZ(float [][C],int &,int &);
void IMPRIMIR_MATRIZ(float [][C],int &,int &);
float CALIFICACION_ALTA(float [][C],int &,int &);
float CALIFICACION_BAJA(float [][C],int &,int &);
void PROMEDIO_DEPART(float [][C],int &);
void main()
{
int N;
float CALIF[F][C],CALTA,CBAJA;
printf("Cuantos alumnos: ");
scanf("%d",&N);
CREAR_MATRIZ(CALIF,N,C);
IMPRIMIR_MATRIZ(CALIF,N,C);
CALTA=CALIFICACION_ALTA(CALIF,N,C);
printf("\nLa calificacion mas alta es: %0.1f",CALTA);
CBAJA=CALIFICACION_BAJA(CALIF,N,C);
printf("\nLa calificacion mas baja es: %0.1f",CBAJA);
PROMEDIO_DEPART(CALIF,N);
getch();
}
M. en C. Marisol Hernández López Academia Computación
void CREAR_MATRIZ(float calif[][C],int &n,int &c) void IMPRIMIR_MATRIZ(float calif[][C],int &n,int &c)
{ {
int i,j; int i,j;
for(j=0;j<c;j++) printf("\n1Dep\t2Dep\t3Dep\n");
{ for(i=0;i<n;i++)
printf("\nDepartamenal %d:\n",j+1); {
for(i=0;i<n;i++) for(j=0;j<c;j++)
{ {
printf("Ingresa la calificacion: "); printf("%0.1f\t",calif[i][j]);
scanf("%f",&calif[i][j]); }
} printf("\n");
} }
} }

M. en C. Marisol Hernández López Academia Computación


float CALIFICACION_ALTA(float calif[][C],int &n,int &c) float CALIFICACION_BAJA(float calif[][C],int &n,int &c)
{ {
int i,j; int i,j;
float calta; float cbaja;
calta=0.0; cbaja=10.0;
for(i=0;i<n;i++) for(i=0;i<n;i++)
{ {
for(j=0;j<c;j++) for(j=0;j<c;j++)
{ {
if(calif[i][j]>=calta) if(calif[i][j]<=cbaja)
{ {
calta=calif[i][j]; cbaja=calif[i][j];
} }
else else
{ {
calta=calta; cbaja=cbaja;
} }
} }
} }
return calta; return cbaja;
} }

M. en C. Marisol Hernández López Academia Computación


void PROMEDIO_DEPART(float calif[][C],int &n)
{
float sum1,sum2,sum3,prom1,prom2,prom3;
int i;
sum1=0;
sum2=0;
sum3=0;
for(i=0;i<n;i++)
{
sum1=sum1+calif[i][0];
}
for(i=0;i<n;i++)
{
sum2=sum2+calif[i][1];
}
for(i=0;i<n;i++)
{
sum3=sum3+calif[i][2];
}

//CONTINUA…
M. en C. Marisol Hernández López Academia Computación
//CONTINUA…
prom1=sum1/n;
prom2=sum2/n;
prom3=sum3/n;
printf("\nEl promedio del primer departamental es: %0.1f",prom1);
printf("\nEl promedio del segundo departamental es: %0.1f",prom2);
printf("\nEl promedio del tercer departamental es: %0.1f",prom3);
}

M. en C. Marisol Hernández López Academia Computación


EJECUCION DEL PROGRAMA:

M. en C. Marisol Hernández López Academia Computación

También podría gustarte