UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS
Facultad de Ingeniería de Sistemas e Informática
Curso: Algorítmica I
Prof. G. A. Salinas A.
S09 Arreglos Bidimensionales
I. OBJETIVOS
El alumno analizar, especificar e implementar soluciones algorítmicas mediante la programación modular
utilizando la estructura estática arreglo.
• Conceptos de estructuras estáticas.
• Diseñar, especificar e implementar soluciones algorítmicas de las operaciones básicas de arreglo
unidimensional.
• Comprender y aplicar las funciones, predicados y procedimientos.
II. ACTIVIDADES
El presente laboratorio tiene por objetivos:
• Construir una aplicación con las especificaciones de las operaciones (subprogramas)
• Implementar los subprogramas de acuerdo con las especificaciones para ejecutar operaciones básicas
de arreglos unidimensionales en lenguaje C/C++.
o Aplicar y reconocer funciones, procedimientos y predicados.
o Aplicar y reconocer parámetros por valor (datos de entrada).
o Aplicar y reconocer parámetros por referencia (datos de entrada, salida o entrada/salida).
III. METODOLOGIA
Se presenta la estructura de un programa en Lenguaje C con la implementación de un arreglo
bidimensional con algunas operaciones básicas que el alumno debe analizar, comprender y aplicar a la
solución de problemas .
Se presenta el diseño, especificación e implementación de la operación que alumno debe analizar,
comprender e integrar en los ejemplos anteriores.
Se presenta el diseño e especificación que el alumno de analizar y comprender para luego implementar en
seudocódigo e implementar con alguna herramienta y luego integrar al programa adjunto.
Se presentan ejercicios planteados de operaciones o aplicaciones de arreglos que el alumno debe analizar,
diseñar, especificar, e implementar el algoritmo de la solución.
1
#include <…> else{
const int MaxF = 10, MaxC = 10; printf("Dimension fuera de RANGO \n");
void crearMatriz(int x[MaxF][MaxC], int *dimF, int *dimC)); system("pause");
void leerMatriz(int xMaxF][MaxC], int *dimF, int *dimC); exit(1);
void mostrarMatriz(int x[MaxF][MaxC], int dimF, int dimC); }
' }
int main(){
int nf, nc, a[MaxF][MaxC]; void mostrarMatriz(int x[MaxF][MaxC], int dimF, int dimC)
int opcion, pos; {
crearMatriz(a, &nf, &nc); int i, j;
leerMatriz(a, &nf, &nc); if(dimF>0 && dimC>0){
mostrarMatriz(a, nf, nc); printf("\nMatriz [%d][%d] :\n\n", dimF, dimC);
printf("\n"); for(i=0;i<dimF;i++){
system("PAUSE"); for(j=0;j<dimC;j++){
return(0); printf("%4d", x[i][j]);
} }
void crearMatriz(int x[MaxF][MaxC], int *dimF, int *dimC){ cout <<"\n";
*dimF= -1; }
*dimC= -1; cout <<"\n\n";
} system("pause");
}
void leerMatriz(int x[MaxF][MaxC], int *dimF, int *dimC){ else{
int i, j, m, n, Val; printf("Matriz vaciaaaaa....\n\n" );
printf("\n\nDimension de la MATRIZ :\n\n"); system("pause");
printf("Num Filas ---> "); }
scanf("%d", &m); }
printf("Num Columnas ---> ");
scanf("%d", &n);
printf("\n");
if(m<MaxF && n<MaxC){
for(i=0;i<m;i++){
for(j=0;j<N;j++){
printf("Matriz[%d][%d] = ", i+1, j+1);
cin >>Val;
x[i][j] = Val;
}
}
*dimF = M; *dimC = N;
}
else{
printf("Dimension fuera de RANGO \n");
system("pause");
exit(1);
}
}
void mostrarMatriz(int
1. Implementex[MaxF][MaxC],
en lenguaje Cint dimF, int especificación
la siguiente dimC) mostrar los elementos de la matriz X:
{ ACCION MostrarMatriz(Matriz x, ENTERO dimF, ENTERO dimC)
int i, j; //Muestra los elementos de la matriz x
if(dimF>0 && dimC>0){
PRE: x: dimF=-1 dimC=-1 dimF>0 dimC>0
printf("\nMatriz [%d][%d] :\n\n", dimF, dimC);
POS: Muestra o visualiza los elementos de la matriz de dimF-1 dimC-1 si existe
for(i=0;i<dimF;i++){
Solucion:
for(j=0;j<dimC;j++){
void mostrarMatriz(int x[MaxF][MaxC], int dimF, int dimC)
printf("%4d", x[i][j]);
{
}
int i, j;
cout <<"\n";
printf("\nMatriz [%d][%d] :\n\n", dimF, dimC);
}
for(i=0;i<dimF;i++){
cout <<"\n\n";
for(j=0;j<dimC;j++){
system("pause");
}
else{
printf("Matriz vaciaaaaa....\n\n" ); 2
system("pause");
}
}
printf("%4d", x[i][j]);
}
cout <<"\n";
}
cout <<"\n\n";
system("pause");
}
2. Implemente en lenguaje C la siguiente especificación insertar una columna por posición:
ACCION insertarColxPos(Matriz x, ENTERO dimF, ENTERO dimC, ENTERO pos)
//Inserta una columna en la columna pos de la matriz x
PRE: z::dimF=-1 dimC=-1 dimF>0 dimC>0 pos [0, n] donde n = dimC
POS: x: dimensiones [dimF][dimC+1]
Solucion:
//Inserta una columna en la columna pos de la matriz X
void insertarColxPos(int x[MaxF][MaxC], int dimF, int *dimC, int col)
{
int i, j, n;
mostrarMatriz(x, dimF, *dimC);
n = *dimC;
if(col < n+1){
n=n+1;
j = n;
if(j < MaxC){
while(j>col){
for(i=0;i<dimF;i++){
x[i][j] = x[i][j-1];
}
j=j-1;
}
printf("Ingrese valores de la COLUMNA A INSERTAR \n\n");
for(i=0;i<dimF;i++){
printf("x[%d][%d] = ", i, col);
cin >>X[i][col];
}
*dimC=n;
printf("\nColumna INSERTADA en posicion %d \n ", col+1);
mostrarMatriz(x, dimF, *dimC);
}
else{
printf("Dimension fuera de Rango\n");
}
}
}
3. Implemente en lenguaje C la siguiente especificación eliminar una columna de la matriz:
ACCION eliminarColxPos(Matriz x, ENTERO dimF, ENTERO dimC, ENTERO pos)
//Ellimina la columna de la posición pos de la matriz x
PRE: x: dimF=-1 dimC=-1 x: dimF>0 dimC>0 pos [0, n] donde n = dimC-1
POS: x: [dimF][dimC-1] “Matriz vaciaaaa…”
Solucion:
//Elimina el elemento de la posición pos del vector X
void eliminarColxPos(int x[MaxF][MaxC], int dimF, int *dimC, int col)
{
int i, j;
mostrarMatriz(x, dimF, *dimC);//¿Porque *Dim en la llamada?
//MostrarVector(x, N);//¿Funciona con esto?
printf(" Columna ELIMINADA posicion %d \n ",col);
i = col-1;
if(col>=0 && col<=*dimC){
j = col;
3
while(j<*dimC){
for(i=0;i<dimF;i++){
x[i][j] = x[i][j+1];
}
j = j+1;
}
*dimC = *dimC-1;
mostrarMatriz(x, dimF, *dimC); // ¿Porque *Dim en la llamada ?
//MostrarMatriz(x, N); // ¿Funciona con esto? ¿Porque?
}
else{
cout <<"Dimensión fuera de Rango...\n";
}
}
4. Implemente en lenguaje C la siguiente especificación insertar una fila por posición:
ACCION insertarFilxPos(Matriz x, ENTERO dimF, ENTERO dimC, ENTERO pos)
//Inserta una fila en la posición pos de la matriz x
PRE: x: dimF=-1 dimC=-1 dimF>0 dimC>0 pos [0, m] donde m = dimF
POS: x / dimensiones [dimF+1][dimC]
5. Implemente en lenguaje C la siguiente especificación eliminar una fila por posición de la matriz:
ACCION eliminarFilxPos(Matriz x, ENTERO dimF, ENTERO dimC, ENTERO pos)
//Elimina la fila de la posición pos de la matriz x
PRE: x: dimF=-1 dimC=-1 dimF>0 dimC>0 pos [0, m] donde m = dimF-1
POS: x: [dimF-1][dimC] “Matriz vacia…”
Solución modular: mediante especificación e implementación de subprogramas
6. Escribir un programa que cargue una matriz de n x m. La visualice y luego encuentre el mayor elemento de
cada fila y sus posiciones en la matriz (también para las columnas el máximo y mínimo)
7. Se desea ordenar ascendente o descendentemente una fila o columna según sea el caso.
8. Se tiene una matriz de m x n y un vector de capacidad m con números enteros se desea diseñar e implementar
un subprograma para informar las veces que se encuentra el vector en las filas de la matriz en el mismo
orden.
9. Construir un programa para multiplicar dos matrices
10. Una empresa automotriz tiene 4 agencias (norte, centro, sur y oriente) y cuenta con la información acerca de
las ventas mensuales de automóviles logradas el año pasado por cada una de éstas, se pide determinar:
10.1. Las ventas totales por agencia
10.2.Cual fue el promedio de ventas por agencia
10.3.Qué agencia obtuvo la mayor venta en el mes de junio
10.4.En qué mes se registraron las menores ventas del año por agencia.
11. Hallar la traspuesta de una matriz.
12. Hallar la matriz inversa aplicando el método de operaciones elementales de filas y columnas.
13. Hallar el “punto de silla” de una matriz de enteros. El punto de silla es aquel elemento que representa al
mayor elemento de la fila y menor de la columna.
14. Se tiene una matriz con las calificaciones de varios cursos de un determinando ciclo de la FISI, las filas
corresponden a los alumnos y las columnas a los cursos. Determine una nueva matriz que incluya los
promedios por alumnos y por cursos. Atajo: calcule los promedios y almacene en sendos vectores y luego
inserte estos vectores como fila o columna como corresponda.
15. Se tiene una matriz tridimensional con las ventas mensuales de las zonas norte, centro y sur de los últimos
cinco años, se pide determinar:
18.1 La especificación e implementación del subprograma para la captura de datos.
18.2 La especificación e implementación del subprograma para determinar el año de mayores ventas.
18.3 .La especificación e implementación del subprograma para determinar el mes de menor venta del
segundo año.
18.4 La especificación e implementación del subprograma para determinar el mayor promedio mensual por
zonas del cuarto año.
18.5 La especificación e implementación del subprograma para mostrar adecuadamente la información de
las ventas de los últimos cinco años de mayor.