Sei sulla pagina 1di 6

Arrays en C

Arrays bidimensionales (Matrices).

Como esta puesto en el titulo, los arrays bidimensionales, también llamados


matrices son otra estructura de datos que al igual que los vectores solo guardan
datos de un mismo tipo, bajo un mismo nombre, en este caso, los arrays
bidimensionales se definen igual que los arrays unidimensionales excepto que se
requieren 2 corchetes, esto es:

Tipo _ dato nom_var [ F ] [ C ]

Donde tipo_dato es cualquier tipo de los ya conocidos y nom_var es cualquier


nombre puesto por nosotros que identifique al array, F es una constante que
identifica a las filas, y C una constante que identifica a las columnas.

Hay que tener bien presente que en este caso el ultimo índice (extremo derecho)
se incrementa mas rápidamente, y el primer índice (extremo izquierdo) se
incrementa mas lentamente, es decir [ C ] incrementa mas rápido, y [ F ] mas
lento.

Acceder a los arrays

Para acceder a cada una de las casillas del array se puede utilizar sentencias de
control tipo iteración, aquí depende de cual quieras utilizar o con cual te acomodes
más.
En los siguientes ejemplos, a todas las casillas del vector se les asigna un número
dado por el usuario, suponiéndose que las variables ya están declaradas.

for (fil=0; fil<n; fil ++)


{
printf(“Dame datos de la fila: %d”,fil +1);
for (col=0; col<m; col++){
scanf(“%d”,&array[fil][col]);
}
}

fil=0;
while (fil<n){
printf(“Dame datos de la fila: %d”,fil +1);
for (col=0; col<m; col++){
scanf(“%d”,&array[fil][col]);
}
fil+=1;
}

Realizado por: Pablo Juárez López


Arrays en C

fil=0;
do
{
col =0;
printf(“Dame datos de la fila: %d”,fil +1);
while (col<m){
scanf(“%d”,&array[fil][col]);
col++;
}
fil+=1;
}while(fil!=n);

En todos los ejemplos antes vistos primero se fija la ubicación de la fila, después
se accede a las columnas y se les agrega el dato, ya que se termine este proceso,
la fila avanza 1, y la columna empieza de nuevo, y así sucesivamente.
El ciclo externo es el que lleva el control de las filas y el interno el de las columnas,
este último avanza más rápido que el de las filas.

col= 0; col= 1;

fil = 0; 5 fil = 0; 7

col= 2; col= 0;

fil = 0; 9
fil = 1; 3

col= 1; col= 2;

fil = 1; 6 fil = 1; 9

El array completo:

5 7 9
3 6 9

Realizado por: Pablo Juárez López


Arrays en C

De igual manera podemos mostrar los datos del array de la misma forma:

for (fil=0; fil<n; fil ++)


{
for (col=0; col<m; col++){
printf(“%d”,array[ fil ] [ col ]);
}
}

Utilizando cualquiera de las estructuras antes vistas.

Uso de arrays en funciones

Es conveniente en este caso al inicio del programa definir constantes simbólicas,


ya que si posteriormente queremos cambiar el tamaño de las filas o el de las
columnas del array, solo tenemos que modificar la constante simbólica.
Ejemplo:

#include<stdio.h>
#include<conio.h>
# define MAXFIL 4
# define MAXCOL 4

Int array [MAXFIL] [MAXCOL]

Pongamos un programa completo en C para después comentarlo, este pide datos


para 2 arrays, hace la suma de ambos y la suma la guarda en un tercero,
después muestra el tercer array con la suma.

Realizado por: Pablo Juárez López


Arrays en C

#include<stdio.h>
#include<conio.h>
# define FIL 4
# define COL 4

/*Prototipos de funcion*/
void mostrar (int c[ ][COL], int fila, int columna);
void leearray( int a[ ] [COL] , int fila, int columna);
void sumar(int a[ ] [COL],int b[ ] [ COL], int c[ ][COL], int fila, int columna);

/*Variables globales */

int matriz1[FIL] [COL];


int matriz2[FIL] [COL];
int matriz3[FIL] [COL];
int fil,col;

/*Programa principal */

void main ()
{
clrscr();
printf("Dame el num de filas:");
scanf("%d",&fil);
printf("Dame el num de columna:");
scanf("%d",&col);
printf("Primera Tabla:\n");
leearray( matriz1,fil,col);
printf("Segunda Tabla:\n");
leearray( matriz2,fil, col);
sumar(matriz1,matriz2,matriz3,fil,col);
printf("Suma de las 2 matrices:");
mostrar (matriz3,fil,col);
}
/*Declaración de funciones */

void leearray( int a[ ] [COL] , int fila, int col)


{
int i ,j;
for (i=0;i<fila; i++) {
printf("Dame los elementos de la fila: %d ",i+1);
for (j=0; j<col; j++){
scanf("%d",&a[ i ] [ j ]);}
}
getch();
}

Realizado por: Pablo Juárez López


Arrays en C

void sumar(int a[ ][COL],int b[ ][COL], int c[ ][COL], int fil, int colu)
{
int j,k;
for (j=0;j<fil;j++)
{
for (k=0; k<colu;k++)
{
c[j][k] = a[j][k] + b[j][k];
}
printf("\n");
}
}
void mostrar (int c [ ] [ COL], int fila, int colum)
{
int p,q;
for (p=0;p<fila; p++)
{
for(q=0;q<colum; q++)
{
printf("%d ", c[ p ] [ q ]);
}
}
getch();
}

Vámonos por partes, al declarar los prototipos de función vemos que en los
argumentos, los arrays están declarados por un tipo, un nombre de variable y un
par de corchetes, el primero [ ] no necesariamente debe contener la constante FIL,
ya que con el otro [ ] estamos dando a entender que es un array, eso si, si lo
escriben de esa manera en el prototipo, lo deberán hacer exactamente igual en la
declaración de la función.
void mostrar (int c[ ][COL], int fila, int columna);

Con la observación de que si declaran en los parámetros nombres diferente de


variable y luego otro nombre diferente en la declaración de función no ocurre nada
y el programa sigue estando limpio.
/*Prototipos de funcion*/
void mostrar (int c[ ][COL], int fila, int columna);
/*Declaración de funciones */
void mostrar (int che[ ][COL],int fil,int colum)
{...
}

Realizado por: Pablo Juárez López


Arrays en C

Pero el que los nombres sean iguales tanto en la cabecera como en la


declaración de la función es un buen hábito de programación, y aparte evita,
quizás el equivocarnos.

En la sección de declaración de variables globales, al declarar un array siempre se


le tendrá que poner las constantes:

Int matriz [FIL][COL];

De otro modo el compilador se nos pondría chulo; ya teniendo bien todo lo


anterior, al llamar a la función debemos tener en cuenta que solo se va a escribir
el nombre de la función (sin el tipo)
mostrar (matriz3,fil,col);

y en los parámetros reales (también conocidos como parámetros actuales)


también solo se pone el nombre de la variable, inclusive aun siendo matriz o
vector.

Cualquier duda, aclaración o sugerencia será bien recibida y me podrás contactar


vía mail: paul_d.luffy@hotmail.com

Realizado por: Pablo Juárez López

Potrebbero piacerti anche