Вы находитесь на странице: 1из 18

PROGRAMACION DIGITAL MA713-I 135

VARIABLE
SUBINDICADA

Arreglo Bidimensional
PROGRAMACION DIGITAL MA713-I 136

Arreglo Bidimensional
Tiene dos subíndices.
Declaración:
tipo nombre_arreglo[N° filas][N° columnas];
Ejemplo: int x[20][30];

col 0 col 1 col 2 … col 29


   
fila 0  x[0][0] x[0][1] x[0][2] … x[0][29]
fila 1  x[1][0] x[1][1] x[1][2] … x[1][29] 20
… … … … … … filas
fila 19  x[19][0] x[19][1] x[19][2] … x[19][29]

30 columnas
PROGRAMACION DIGITAL MA713-I 137

Arreglo Bidimensional

Lectura y Escritura:
scanf("formato",&matriz[fila-ésima][col-ésima]);

printf("formato",matriz[fila-ésima][col-ésima]);
~
Ejemplo:
scanf("%d", &x[i][j]); Leer
xi,j

~
~
printf("%d", x[i][j]); Escribir
xi,j
PROGRAMACION DIGITAL MA713-I 138

APLICACIONES
CON ARREGLOS
PROGRAMACION DIGITAL MA713-I 139

Aplicación1
Ordenar un arreglo de menor a mayor. Utilizar el
método Burbuja.

x1 x2 x3 … xj xj+1 … xn-1 xn
Paso 1
Paso 2
Paso 3
… …
Paso n-1

Paso 1: Compara xj con xj+1, j1..n-1


Paso 2: Compara xj con xj+1, j1..n-2 Para i1..n-1
Paso 3: Compara xj con xj+1, j1..n-3 Para j1..n-i
… Si xj>xj+1
Paso i: Compara xj con xj+1, j1..n-i
Intercambia xj con xj+1

FinSi
Paso n-1: Compara xj con xj+1, j1..1
PROGRAMACION DIGITAL MA713-I 140

Diagrama PSeInt

Intercambia
xj con xj+1
PROGRAMACION DIGITAL MA713-I 141

Codificación C
/*Ordenamiento ascendente de n números enteros*/
/*Método de la Burbuja*/
#include<stdio.h>
int main()
{ int n,i,j,x[100],t;
printf("Ingrese n: "); scanf("%d",&n);
for(i=1;i<=n;i++) {
printf("x%d: ",i); scanf("%d",&x[i]);
}
for(i=1;i<n;i++)
for(j=1;j<=n-i;j++)
if(x[j]>x[j+1]) {//Intercambia x[j] y x[j+1]
t=x[j]; x[j]=x[j+1]; x[j+1]=t;
}
printf("\nOrdenado de menor a mayor\n");
for(i=1;i<=n;i++) printf("x%d: %d\n",i,x[i]);
system("pause");
}
PROGRAMACION DIGITAL MA713-I 142

Ejecución
Ingrese n: 9
x1: 8
x2: 6
x3: 4
x4: 9
x5: 3
x6: 8
x7: 1
x8: 3
x9: 4

Ordenado de menor a mayor


x1: 1
x2: 3
x3: 3
x4: 4
x5: 4
x6: 6
x7: 8
x8: 8
x9: 9
Presione una tecla para continuar . . .
PROGRAMACION DIGITAL MA713-I 143

Aplicación2
Dados dos arreglos a y b de n elementos, ordenarlos
de menor a mayor según el arreglo a. Utilizar el
método Burbuja Mejorado.

Paso 1 a1 a2 … ai … aj … an-1 an
Paso 2
Paso 3

… …
Paso n-1
a: Arreglo maestro
Paso 1: Compara a1 con aj, j2..n b: Arreglo esclavo
Paso 2: Compara a2 con aj, j3..n Para i1..n-1
Paso 3: Compara a3 con aj, j4..n Para ji+1..n
… Si ai>aj
Paso i: Compara ai con aj, ji+1..n
Intercambia ai con aj

Intercambia bi con bj
Paso n-1: Compara an-1 con aj, jn..n FinSi
PROGRAMACION DIGITAL MA713-I 144

Diagrama PSeInt a: Arreglo maestro


b: Arreglo esclavo

Intercambia
ai con aj

Intercambia
bi con bj
PROGRAMACION DIGITAL MA713-I 145

Codificación C
/*Ordenamiento ascendente de dos arreglos a y b de n
elementos. Método de la Burbuja Mejorado*/
#include<stdio.h>
int main()
{ int n,i,j,a[100],b[100],t;
printf("Ingrese n: "); scanf("%d",&n);
printf("Nro a b\n");
for(i=1;i<=n;i++){
printf("%d: ",i); scanf("%d %d",&a[i],&b[i]);
}
for(i=1;i<n;i++)
for(j=i+1;j<=n;j++)
if(a[i]>a[j]){//Intercambia a[i] y a[j],b[i] y b[j]
t=a[i]; a[i]=a[j]; a[j]=t;
t=b[i]; b[i]=b[j]; b[j]=t;
}
printf("\n\nOrdenado ascendente segun a\nNro a b\n ");
for(i=1;i<=n;i++) printf("%d %3d %3d\n",i,a[i],b[i]);
system("pause");
}
PROGRAMACION DIGITAL MA713-I 146

Ejecución
Ingrese n: 5
Nro a b
1: 9 6
2: 5 10
3: 3 8
4: 7 13
5: 4 5

Ordenado ascendente segun a


Nro a b
1 3 8
2 4 5
3 5 10
4 7 13
5 9 6
Presione una tecla para continuar . . .
PROGRAMACION DIGITAL MA713-I 147

Aplicación3
Dadas dos matrices A(m*n) y B(n*p), calcular el
producto C=A*B.

 A11 A12 ... A1n   B11 B12 ... B1 p 


   
 A21 A22 ... A2 n   B21 B22 ... B2 p 
*
 ... ... ... ...  ... ... ... ... 
   
A ... Amn  m*n  Bn1 ... Bnp  n* p
 m1 Am 2 Bn 2

n
Cij  A
k 1
ik * Bkj

i  1..m
j  1.. p
PROGRAMACION DIGITAL MA713-I 148

Diagrama PSeInt
PROGRAMACION DIGITAL MA713-I 149

Codificación C
/*Multiplicación de matrices C(m*p)=A(m*n)*B(n*p)*/
#include<stdio.h>
int main()
{ int i,j,k,m,n,p;
float A[50][50],B[50][50],C[50][50];
printf("Ingrese m,n,p: "); scanf("%d,%d,%d",&m,&n,&p);
printf("Ingrese A(%d*%d):\n",m,n);
for(i=1;i<=m;i++) for(j=1;j<=n;j++) scanf("%f",&A[i][j]);
printf("Ingrese B(%d*%d):\n",n,p);
for(i=1;i<=n;i++) for(j=1;j<=p;j++) scanf("%f",&B[i][j]);
printf("Resultado C(%d*%d):\n",m,p);
for(i=1;i<=m;i++) {
for(j=1;j<=p;j++){
C[i][j]=0;
for(k=1;k<=n;k++) C[i][j]=C[i][j]+A[i][k]*B[k][j];
printf("%8.2f",C[i][j]);
}
printf("\n");
}
system("pause");
}
PROGRAMACION DIGITAL MA713-I 150

Ejecución
Ingrese m,n,p: 2,3,4
Ingrese A(2*3):
5 2 3
1 4 7
Ingrese B(3*4):
1 2 3 4
5 6 7 8
9 10 11 12
Resultado C(2*4):
42.00 52.00 62.00 72.00
84.00 96.00 108.00 120.00
Presione una tecla para continuar . . .
PROGRAMACION DIGITAL MA713-I 151

Problema Propuesto
El método de eliminación de Gauss o simplemente
método de Gauss consiste en convertir un sistema
lineal de n ecuaciones con n incógnitas, en uno
escalonado, en el que la primera ecuación
tiene n incógnitas, la segunda ecuación tiene n - 1
incógnitas, ..., hasta la última ecuación, que tiene 1
incógnita. De esta forma, será fácil partir de la última
ecuación e ir subiendo para calcular el valor de las
demás incógnitas

Se pide:
Resolver el sistema de n ecuaciones A*x=b, mediante
el método de Gauss.
PROGRAMACION DIGITAL MA713-I 152

Problema Propuesto
Sistema de Ecuaciones Inicial:
 A11 A12 ... A1n   x1   B1 
     
 A21 A22 ... A2 n   x2   B2 
 ...  *    
... ... ... ... ...
     
A   
... Ann  n*n  xn  n*1  Bn  n*1
 n1 An 2

Mediante operaciones elementales se transforma a


un sistema escalonado:
 A11 A12 ... A1n   x1   B1 
     
 0 A22 ' ... A2 n '   x2 '   B2 ' 
 ...  *    
... ... ... ... ...
     
 0   
... Ann '  n*n  xn '  n*1  Bn '  n*1
 0

Вам также может понравиться