Sunteți pe pagina 1din 6

1

Taller de Programación II
Universidad de Nariño
Ingeniería de Sistemas-Ipiales
Arrays multidimensionales

Los arrays multidimensionales son aquellos que tienen más de una dimensión y, en consecuencia más de un
índice. Los arreglos más usuales son los de dos dimensiones, conocidos también por el nombre de tablas o
matrices. Sin embargo es posible crear arrays de tantas dimensiones como requieran las aplicaciones, esto es,
tres, cuatro o más dimensiones.

Un arreglo bidimensional es aquel en donde los componentes son accesados por medio de una pareja de
índices que indican la fila y columna del componente requerido. Conceptualmente, podemos pensar en un
arreglo bidimensional como en una lista compuesta de filas y columnas, en donde para referirnos a una de
ellas emplearemos un número para indicar la posición de fila y otro número para indicar la posición de la
columna del componente deseado.

La sintaxis para declarar un array de dos dimensiones es:


<tipo de datoElemento> <nombre array> <NumeroDeFilas><NumeroDeColumnas>

tipo se refiere al tipo de datos que contendrá el arreglo. El tipo puede ser cualquiera de los tipos estándar (char,
int, float, etc.)
nombre array: se refiere al nombre que le daremos al arreglo.

Ejemplos:
int puestos[6][8];
int equipos[4][30];
float matriz[3][6];

matriz[3][6] columna 0 columna 1 columna 2 columna 3 columna 4 columna 5

fila 0 5.2 8.4 3.5 4.7 2.3 6.9

fila 1 1.2 2.3 3.4 4.5 5.6 6.7

fila 2 7.8 8.9 9.0 9.8 7.6 6.5

Inicialización de arrays multidimensionales


Los arrays multidimensionales se pueden inicializar, al igual que los de una dimensión, cuando se declaran.
La inicialización consta de una lista de constantes separadas por comas y encerradas entre llaves.
2

int tabla[2][3]={51,52,53,54,55,56};
int tabla[2][3]={{51,52,53},
{54,55,56}};

tabla[2][3] Columna 0 Columna 1 Columna 2

Fila 0 51 52 53

Fila 1 54 55 56

Acceso a los elementos de arrays bidimensionales


Se puede acceder a los elementos de arrays bidimensionales de igual forma que a los elementos
bidimensionales deben especificarse los índices de la fila y la columna.

Ejemplos:
Tabla[2][3]=4.5;
Asiento[5][12]=5;

Para leer valores de la matriz


Ventas= Tabla[2][3];
Dia=Semana[3][6];

Con el fin de leer o escribir sobre cada uno de los componentes de una matriz se deben crear dos ciclos
anidados. En este caso se utilizan dos variables, una para iterar sobre las filas y otra para iterar sobre las
columnas de la matriz.

Ejemplo 1: Programa que captura los datos para una matriz de 3x4 y luego muestra los datos en pantalla

const int fila=3;


const int col=4;
int mat[fila][col];

int main(){
int f,c;
for (f = 0 ; f < fila ; f++) {
for (c = 0 ; c < col ; c++) {
printf ("Inserte pos[%d][%d]: ",f,c);
scanf("%d",&mat[f][c]);
}
}
printf("Fin de la Captura\n");system("pause");
clrscr();
printf("Los datos ingresados fueron\n");
for (f= 0 ; f < fila ; f++){
printf ("\n");
for (c = 0 ; c <col ; c++) {
printf ("%d\t",mat[f][c] );
}
}
system("PAUSE");
return 0;
}
3

Ejemplo 2: Rellenar una matriz identidad de 4 por 4


const int fila=4;
const int col=4;
int mat[fila][col];
int main(){
int f,c;
for (f = 0 ; f < fila ; f++){
for (c = 0 ; c < col ; c++){
if(f==c)
mat[f][c]=1;
else
mat[f][c]=0;
}
}
printf("Matriz Identidad 4*4\n");
for (f= 0 ; f < fila ; f++){
printf ("\n");
for ( c = 0 ; c <col ; c++){
printf ("%d\t",mat[f][c] );
}
}
system("PAUSE");
return 0;
}
Ejemplo 3: Visualizar la matriz transpuesta de una matriz de 4X5

const int fila=4;


const int col=5;
int mat[fila][col];int tra[col][fila];
int main(){
int f,c;
printf("Ingrese datos\n");
for (f = 0 ; f < fila ; f++){
for (c = 0 ; c < col ; c++) {
printf ("\t[%d][%d]:",f,c);
scanf("%d",&mat[f][c]);
tra[c][f]= mat[f][c];
}
}
printf("Fin de la Captura\n");system("pause");
clrscr();
printf("La matriz inicial es\n");
for (f= 0 ; f < fila ; f++){
printf ("\n");
for ( c = 0 ; c <col ; c++){
printf ("%d\t",mat[f][c]);
}
}
printf("\nLa matriz Transpuesta es\n");
for (f= 0 ; f < col ; f++){
printf ("\n");
for ( c = 0 ; c <fila ; c++){
printf ("%d\t",tra[f][c] );
}
}
system("PAUSE");
return 0;
}
4

Ejemplo 4: Convertir un número binario a decimal

int binario[10];
int i,cifra;
float dec;
int pot=0;
int main(){
clrscr();
printf("Cu\xA0ntas cifras tiene el n\xA3mero binario?
M\xA0ximo 10 ");
scanf("%d",&cifra);
printf("\nIngrese el n\xA3mero binario\n");
for(i=0;i<cifra;i++)
scanf("%d",&(binario[i]));

for(i=0;i<cifra;i++){
printf("%d",binario[i]);
}
dec=0;
pot=cifra-1;
for(i=0;i<cifra;i++){
dec+=binario[i]*pow (2.0,pot);
pot--;
}
printf("\nEl n\xA3mero decimal es %.0f",dec);
printf("\n");
system("PAUSE");
return 0;
}

Ejercicios:
1) Crear un programa que sume dos matrices de 4x4 y muestre el resultado de la suma en pantalla
2) Programa que rellene de forma aleatoria un vector de 10 posiciones con números del 0 al 20, después el
usuario tendrá 3 intentos para adivinar un número, cuando adivine el número indicará las posiciones en
las que se encuentra.
3) Realiza un programa que rellene aleatoriamente una matriz de 3 filas y 4 columnas y la muestre por
pantalla (números entre 0 y 20). Luego pregunte al usuario por un número y muestre la fila y la columna
en la que se encuentra
4) Implementar un programa que me pregunte la dimensión de una matriz (máximo 5 x 5) y luego la forma
de inicializarla de acuerdo a las siguientes opciones
a. 1.- todos 1,
b. 2.- todos 0
c. 3.- Diagonal principal en el número indicado por el usuario y lo demás en cero
d. Luego imprima la matriz
5) Cierta empresa requiere controlar la existencia de diez productos, los cuales se almacenan en un vector A,
mientras que los pedidos de los clientes de estos productos se almacenan en un vector B. Se requiere
generar un tercer vector C con base en los anteriores que represente lo que se requiere comprar para
mantener el stock de inventario, para esto se considera lo siguiente: si los valores correspondientes de los
vectores A y B son iguales se almacena este mismo valor, si el valor de B es mayor que el de A se almacena
el doble de la diferencia entre B y A, si se da el caso de que A es mayor que B, se almacena B, que indica
lo que se requiere comprar para mantener el stock de inventario
6) Realice un programa que lea un vector de seis elementos e intercambie las posiciones de sus elementos en
un segundo vector, de tal forma que el primer elemento pase a ser el último y el último el primero, el
segundo el penúltimo y así sucesivamente, e imprima los dos vectores.
7) La empresa de transportes “El viaje veloz” cuenta con N choferes, de los cuales se conoce su nombre y los
kilómetros que conducen durante cada día de la semana, esa información se guarda en un arreglo de N x
6. Se requiere un programa que capture esa información y genere un vector con el total de kilómetros que
5

recorrió cada chofer durante la semana. Al final se debe presentar un reporte donde se muestre el nombre
del chofer, los kilómetros recorridos cada día y el total de éstos, tal y como se muestra en la figura

8) Realice un programa para determinar si una matriz es de tipo diagonal la cual es una matriz cuadrada en
la cual todos sus elementos son cero, excepto los electos de la diagonal principal.
9) Se tienen dos matrices cuadradas (de 12 filas y 12 columnas cada una). Realice un programa que lea los
arreglos y que determine si la diagonal principal de la primera es igual a la diagonal principal de la
segunda.
10) Cada uno de cuatro atletas desea saber si ha bajado o subido de peso desde la última vez que se pesó. Para
esto cada uno se pesa 3 veces, calcula el promedio de su peso actual y lo compara con el promedio anterior.
Hacer un programa que determina para cada atleta si bajó, subió de peso o está estable y cuánto es el
incremento en caso de que exista diferencia con respecto al peso anterior.
11) Calcular el promedio de varias listas consecutivas, utilizando ciclos anidados, sabiendo por adelantado
el número de listas de las que vamos a calcular los promedios.
12) Realizar un programa que imprime una tabla de m filas por n columnas y un carácter de entrada.
13) Determinar cuál es la salida en pantalla del siguiente código:
const char SIMBOLO = '*';
int main (){
int n;
printf(" Introduzca un n\xA3mero : ");
scanf("%d",&n);
for (int j = 0; j < n; j++){
for (int i = 0; i < n; i++){
if ((j==0)||(j==n-1)||(i==0)||(i==n- 1))
printf("%c", SIMBOLO );
else
printf(" ");
}//fin for i
printf("\n");
}//fin for j
system("PAUSE");
return 0;
}

14) (ReemplazoCaracter) Diseñar un programa que lea una cadena y luego la recorra reemplazando un
caracter dado por el caracter ingresado por el usuario
15) (MatrizParImpar) Construya un programa que permita resolver lo siguiente considerando una matriz de
números enteros de MAX x MAX. Para cada M(i,j):
Si M (i, j) Es par --> M(i,j)=M(i,j)*3
Es Impar--> M(i,j)=M(i,j)*2
16) Determine si una matriz de números enteros llenada por el usuario es una matriz Nula. Una matriz es
nula si todos sus elementos son cero.
6

Ejercicios de refuerzo
Complete el siguiente programa
Leer una lista con un máximo de 30 elementos, buscar e imprimir la(s) posición(es) en la que se encuentra un
valor x, dentro del arreglo. Si no se halla que imprima el letrero respectivo.
#include <conio.h>
#include <stdio.h>
#define MAX 30
int main(){
int ____________[MAX],i,______,ban=0,x;
printf(“Dame el número de valores a ingresar \n”);
scanf(“%d”,&n);
for(i=0;i<n;i++){
printf(“Dame el valor a ingresar %d”,i++);
scanf(“%d”,&vector[i]);
}
printf(“Dame el número a buscar “);
___________________
for(i=0;i<n;i++){
if(___________________){
printf(“Lo encontré en la posición %d\n”,i11);
ban=1;
}
}
if (______________)
printf (“No lo encontré“);
system(“pause”);
return 0;
}

Realizar la prueba de escritorio de los siguientes programas


int main(){
int ac=0, i,primero[15]={21,12,23,14,25,16,27,7,1,21,24,11};
for (i=11;i>1;i-=2){
ac+=primero[i-1]-i;
printf("%d,%d\n",primero[i+2],ac);
}
system("PAUSE");
return 0;
}
==========================================================
int main(){
int i,j;
int tercero[10][10];
for(i=0;i<5;i++)
for (j=0;j<5;j++)
tercero[i+1][j]= -j/2+i*3+3;
for(i=1;i<5;i+=2)
j=2;
while (j<5) {
printf("%d,%d,%d\n",i,j, tercero [i][j]);
j+=2;
}

system("PAUSE");
return 0;
}

S-ar putea să vă placă și