You are on page 1of 20

UNIVERSIDAD DE EL SALVADOR

FACULTAD DE INGENIERÍA Y ARQUITECTURA


ESCUELA DE INGENIERÍA DE SISTEMAS INFORMÁTICOS

PROGRAMACIÓN I Ciclo II_2012

Guía de laboratorio No. 3B

ESTRUCTURAS DE DATOS ESTATICAS


SEGUNDA PARTE: ARREGLOS BIDIMENSIONALES (MATRICES)

Objetivo: Aplicar Matrices a la solución de problemas y codificarlas en C.

Contenido:
 Parte I: Programas sin errores.
 Pare II: Flujogramas para ser modificados y codificados.
 Parte III: Ejercicios propuestos.

Metodología de trabajo:
Semana 1:
 El estudiante sube en los 10 primeros minutos de la sesión,
sus archivos al aula virtual.

 El estudiante digita y revisa dos programas de la Parte I y


uno de la Parte II, según le indique su instructor. Los
programas deben se guardados como g3B_ejem#.cpp

 Debe de subir sus archivos en los últimos 15 minutos de


laboratorio.

 Como tarea, el instructor dejará 2 ejercicios de la Parte III


(Análisis y Codificación).

Semana 2:
 El estudiante sube en los 10 primeros minutos de la sesión,
sus archivos al aula virtual.

 El instructor asigna 2 enunciados de la Parte III

 Los programas deben de guardarse, compilarse y


ejecutarse. Guardar como: g3B_ej###.cpp en donde, ###
es el número de ejercicio según guía.

 El alumno deberá subir sus archivos al aula virtual al final


del laboratorio.

Ciclo II_2012 jmb-mrcp 1


PARTE I En los siguientes ejemplos de matrices, usted debe:
digitarlo; guardarlo (g3B_ejem#.cpp) según sea el caso.
Programa 1.
Ejecutarlo con los siguientes valores: 0,1,3,2,5,7,2,0,3,4,2,5,10,7,0

Diseñar una solución que permita leer el tipo de Boletos que compran en el estadio 5 aficionados,
hay boletos de tres precios diferentes , General: vale $ 3.50, Tribuna: vale $ 5.50 y Platea:
cuesta $7.00 ; la solución debe de imprimir cuantos de cada tipo compra el aficionado y cuanto es
el total que paga .

I. Planteamiento del Problema


Entrada de Datos Salida de Datos

- Cantidad de cada tipo de - Cantidad de cada tipo de boleto


boleto que compra un que compra un aficionado
aficionado - Total que paga cada aficionado
- Precio de cada tipo de boleto
General: 3.50, Tribuna: 5.50
Platea 3: 7.00
- Número de aficionados (5)
Matriz (15 elementos, en una
Matriz( aficionados (5) x
cantidad comprada de cada
uno de los tres tipos de
boletos(3))

II. TOP DOWN


Grandes pasos o cosas que hacer:

1. Leer datos y validarlos


2. Imprimir datos de cada aficionado
3. Calcular el total que paga cada aficionado e imprimirlo

Principal

Imprimir

Ciclo II_2012 jmb-mrcp 2


II. APLICACIÓN DE LA METODOLOGIA PARA RESOLVER PROBLEMAS (por módulo)

a) MODULO Imprimir
Qué hace? Imprime los datos leídos, calcula el total que paga cada
aficionado e imprime el resultado.

Entrada de datos Salida de datos

Imprime la matriz de
Precio de cada tipo de boleto
datos leídos.
General: $ 3.50
Tribuna: $ 5.50 Imprime el total que paga
Platea: $ 7.00 cada aficionado.
Recibe la matriz de datos leídos.

Cómo lo hace?
Variables de Salida:

Nombre Tipo Descripción


V[fil ][col ] Entera Matriz de 5 x 3 que almacena la cantidad de cada uno de los tipos
de boletos comprados por cada aficionado
Tp Real Total que paga cada aficionado por sus boletos

Variables de Entrada: No hay, recibe como parámetro la matriz de los datos


leídos y validados
Parámetros:
V[fil ][col ] : Matriz con datos leídos en el modulo principal.
Nombre Tipo Descripción

V[ fil][ col] Entera Matriz de 5 x 3 con los datos leídos

Constantes: Se utilizan como constantes simbólicas los precios de cada tipo de


boleto: 3.50, 5.50, 7.00

Restricciones: No hay

Ciclo II_2012 jmb-mrcp 3


Proceso:

Tp = 0

Repetir: Repetir :

Desde fi=0 Desde ci=0 Imprimir: V [ fi ][c]

hasta ci<=col
hasta fi<=fil
Tp=3.50*V[fi][0]+5.50*V[fi][1]+7.00*V[fi][2]

Imprimir: Tp

Variables de Proceso:
Nombre Tipo Descripción
fi entero Tipo contador que controla las filas; donde Vi = 0, Vf = 5, Vc=1
ci entero Tipo contador que controla las columnas; donde Vi = 0, Vf = 3, Vc=1

Ciclo II_2012 jmb-mrcp 4


Diseño de Solución Sub-flujograma:

Imprimir (V[fil ][col ])

fi = 0, fil, 1

Tp=0

ci = 0, col, 1

V [ fi ][ci]

Tp=3.50*V[fi][0] +
5.50*V[fi][1] +
7.00*V[fi][2]

Tp

Retornar

b) MODULO Principal

Qué hace? Lee y valida la cantidad de boletos que los aficionados


compran de cada tipo que se ofrecen y controla el modulo
Imprimir .

Ciclo II_2012 jmb-mrcp 5


Entrada de datos Salida de datos

- Número de aficionados (5 filas) Envia: Datos validados


- Tipo de boletos (3 columnas)
Cómo lo hace?
Variables de Salida: No se necesitan

Variables de Entrada:
Nombre Tipo Descripción
cant[fil ][col] entero Matriz de 5 x 3 y que almacena la cantidad de boletos comprados
de cada tipo (3) por los 5 aficionados
Constantes:

Nombre Tipo Descripción Valor


fil entero Numero de filas de la Matriz 5
col entero Numero de columnas de la Matriz 3

Se utilizarán como constantes simbólicas los precios de cada tipo de boleto :


Restricciones: cant[fil ][col] >=0
Parámetros: No existen

Proceso:

Repetir: Repetir:
Desde f=0 Desde c=0 mientras Leer cant[f ][c]
hasta f<fil hasta c<col cant[f][c]<0

Imprimir(cant)

Variables de Proceso:

Nombre Tipo Descripción


f entero Tipo contador que controla las filas; donde Vi = 0, Vf = 5, Vc=1
c entero Tipo contador que controla las columnas; donde Vi = 0, Vf = 3, Vc=1

Ciclo II_2012 jmb-mrcp 6


Diseño de Solución Sub-flujograma:

Inicio

Reservar :
cant[fil][col]

f = 0, fil, 1

“Digite la cantidad
de boletos del
aficionado”,f+1

c = 0, col, 1

“Digite la cantidad
de boletos del
tipo”,c+1

cant[ f][c]

No
cant[ f][c]< 0

Si

“Error!!”

“Digite la cantidad
de boletos del
tipo”,c+1

cant[ f][c]

Imprimir (cant)

Fin

Ciclo II_2012 jmb-mrcp 7


III. CODIFICACION

/*Diseñar una solución que permita leer el tipo de Boletos que compran en el estadio 5
aficionados, hay boletos de tres precios diferentes , General: vale $ 3.50, Tribuna: vale
$ 5.50 y Platea: cuesta $7.00 ; la solución debe de imprimir cuantos de cada tipo
compra el aficionado y cuanto es el total que paga*/
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#define fil 2
#define col 3
void Imprimir(int V[][col])
{
int fi, ci;
for(fi=0;fi<fil;fi++)
{
float Tp=0;
printf("\n\n Las cantidades de cada tipo del aficionado %i son\n",fi+1);
for(ci=0;ci<col;ci++)
{
printf("\n\n\t La cantidad de boletos del tipo %i es :\t%i \n",ci+1,V[fi][ci]);
}
Tp=3.50*V[fi][0]+5.50*V[fi][1]+7.00*V[fi][2];
printf("\n\nEl total a pagar por el aficionado %i es de:$ %.2f \n\n",fi+1,Tp);
system("pause");
system("cls");
getch();
}
}
main()
{
int f, c;
float Tp;
int V[fil][col];
int cant[fil][col];
for(f=0;f<fil;f++)
{
printf("\n Digite la cantidad de boletos del aficionado \t%i: ",f+1);
for(c=0;c<col;c++)
{
printf("\n\t Digite la cantidad de boletos del tipo \t%i: ",c+1);
scanf("%i",&cant[f][c]);

Ciclo II_2012 jmb-mrcp 8


while(cant[f][c]<0)
{
puts("\nError!!\n");
printf("\n\t Digite la cantidad de boletos del tipo \t %i: ",c+1);
scanf("%i",&cant[f][c]);
}
}
}
system("cls");
Imprimir(cant);
getch();
}

Programa 2
/* Diseñe un programa que permita capturar los datos de 5 alumnos. Los datos
que se solicitarán serán su código y 4 notas. El programa deberá calcular el
promedio de cada alumno y luego ordenar los registros de los alumnos en base a
su promedio de mayor a menor. El programa deberá finalmente mostrar el
nombre, las notas y el promedio de los alumnos.*/
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>

main()
{
system("cls");
int i,j,Codigo[5],aux_codigo,b=1;
float notas[5][5],auxiliar,promedio;
char nombre[5][25],nombre_auxiliar[25];

for(i=0;i<5;i++)
{
printf("\n\nDigite notas del alumno %i: ",i+1);
Codigo[i]=i+1;
promedio=0;
for(j=0;j<4;j++)
{
printf("\nDigite la nota %i: ",j+1);
scanf("%f",&notas[i][j]);
while(notas[i][j]<0 || notas[i][j]>10)
{
printf("\nError!!!Digite la nota %i: ",j+1);
scanf("%f",&notas[i][j]);
}
promedio = promedio + notas[i][j];
}
Ciclo II_2012 jmb-mrcp 9
//La última posición de cada fila de la matriz notas se utilizará
//para asignarle el promedio del alumno
notas[i][4]= promedio / 4;
}
//Ahora pasaremos a ordenar a los alumnos en base al promedio más alto
system("cls");
while(b!=0)
{
b=0;
for(i=0;i<4;i++)
{
if(notas[i][4] < notas[i+1][4])
{
/*Debido a que ordenaremos de mayor a menor en la condición
preguntamos si el promedio del alumno actual (notas[i][4])
es menor que el promedio del siguiente alumno (notas[i+1][4])
de ser cierto los cambiaremos de posición y para ello
nos apoyaremos de la variable auxiliar*/
for(j=0;j<5;j++)
{
auxiliar=notas[i][j];
notas[i][j]=notas[i+1][j];
notas[i+1][j]=auxiliar;
//}
/*Con lo anterior solo hemos cambiado de posición
LAS NOTAS no hay que perder de vista que también se debe
cambiar la posición del Codigo del alumno para que las
notas sigan coincidiendo al alumno al que se le
fueron asignadas*/
aux_codigo=Codigo[i];
Codigo[i]=Codigo[i+1];
Codigo[i+1]=aux_codigo;
}
b++;
}//fin del if
}//fin del for
}//fin del while
/*Finalmente mostraremos el nombre de los alumnos con sus respectivas
notas y promedio*/
system("cls");
printf("****** Notas de Alumnos Ordenados en Base a Promedio mas Alto
******\n\n");
for(i=0;i<5;i++)
{
//puts(nombre[i]);
printf("\nAlumno %i:\n\n",Codigo[i]);
printf("Nota 1: %.2f Nota 2: %.2f Nota 3: %.2f Nota 4: %.2f\n"
,notas[i][0],notas[i][1],notas[i][2],notas[i][3]);
Ciclo II_2012 jmb-mrcp 10
printf("\n\n\t\t\tPromedio: %.2f\n",notas[i][4]);
}
getch();
}

Programa 3
/*Diseñe un programa que permita capturar una matriz de 4 x 4 cuyos elementos
serán números enteros. El programa también debe permitir capturar un número,
el cual se buscará secuencialmente en la matriz, en caso de encontrarse el
número a buscar se mostrará un mensaje indicando que el numero se encuentra
dentro de los elementos de la matriz, además se pide imprimir la posición en la
que el numero fue encontrado, en el caso de no encontrarse debe mostrar un
mensaje indicando que el número no fue encontrado.*/

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#define fil 4
#define col 4

void Valor_buscado(int mat[fil][col],int bus)


{
int cj=0,fi=0,c=0;
for(fi=0;fi<fil;fi++)
{
for(cj=0;cj<col;cj++)
{
if(mat[fi][cj]==bus)
{
printf("\n\n\nEl numero ha sido encontrado!!!");
printf("\n\nPosicion que ocupa: matriz[%d][%d]",fi,cj);
c=1;//Me servirá para saber que fue encontrado
fi=4;
}//fin del if
}//fin del 2do for
}//fin del primer for
if(c==0)
printf("\n\n\nEl numero no fue encontrado!!!");
getch;
}
main()
{
int matriz[fil][col],i,j;
int mat[fil][col];
int buscar,c,bus;
system("cls");
for(i=0;i<fil;i++)

Ciclo II_2012 jmb-mrcp 11


{
printf("\nFila %i\n",i);
for(j=0;j<col;j++){
printf("\nMatriz[%i][%i] = ",i,j);
scanf("%i",&matriz[i][j]);
}
}
system("cls");
printf("\nDigite el numero a buscar: ");
scanf("%d",&buscar);
//buscaremos el número en la matriz
Valor_buscado(matriz,buscar);
getch();
}//fin de main

Programa 4
/*Diseñe una solución que permita leer una matriz de 4 x 3, la imprima y que
cambie el valor de la posición de la matriz, si el valor almacenado es menor que 3,
multiplique por 5 dicho valor almacenado, además debe imprimir la matriz final.*/
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#define f 4
#define c 3

main()
{
int K[f][c];
int S[f][c];
int i,j;
puts("LECTURA DE LA MATRIZ FILA POR FILA");
for(i=0;i<f;i++)
{
for(j=0;j<c;j++)
{
printf("\nIntroduzca el dato de:\t [%i][%i]\t\t",i+1,j+1);
scanf("%i",&K[i][j]);
}
}
system("cls");
//EVALUACION DE LA MATRIZ;
for(i=0;i<f;i++)
{
for(j=0;j<c;j++)
{
if(K[i][j]<3)
S[i][j]=5*K[i][j];

Ciclo II_2012 jmb-mrcp 12


else
S[i][j]=K[i][j];
}
}
puts("\nIMPRESION DE LA MATRIZ ORIGINAL\n");
for(i=0;i<f;i++)
{
for(j=0;j<c;j++)
{
printf("%i\t",K[i][j]);
}
puts("\n");
}
puts("\nIMPRESION DE LA MATRIZ MODIFICADA\n");
for(i=0;i<f;i++)
{
for(j=0;j<c;j++)
{
printf("%i\t",S[i][j]);
}
puts("\n");
}
getch();
return 0;
}

PARTE II Tomando como base lo siguientes flujogramas,


modifíquelo, creando módulos según indicaciones y escriba su
codificación. Guardarlo como g3B_ejem#.cpp, respectivamente.
Programa 5
Diseñe un programa que lea una matriz de 4x5 y la imprima como tabla. El programa debe
también leer un número cualquiera y buscarlo dentro de la matriz de datos, imprimiendo su
ubicación: fila y columna donde se encuentra. Imprime todas las apariciones del número
buscado.

Entrada Salida

 Elementos de la matriz 4x5  Matriz


 Numero a buscar  Número a buscar
 Fila donde se encuentra el dato
 Columna donde se encuentra
Variables de Salida:

Ciclo II_2012 jmb-mrcp 13


Nombre tipo Descripción
fila entero Fila donde se encuentra el número buscado
col Entero Columna donde se encuentra
Se imprime además la matriz y el número buscado.

Variable de Entrada
Nombre tipo Descripción
mat[4][5] Entero Matriz que almacena los 12 datos o elementos iniciales
datol Entero El número a buscar dentro de la matriz

Restricciones: No hay, los datos pueden ser positivos negativos o cero

Constantes simbólicas: No hay

Proceso:
n=12-1 //Numero de elementos de la matriz
c=0 //contador de elementos

¿mat[i][j] == 0?
Si: fila = i
I=0,3,1 J=0,4,1 Col= j
Imprimir fila y col
No: c++
¿c == n?
Si: Imprimir “No se encuentra”
No: No hacer nada

Variables de Proceso:
Nombre tipo Descripción
i Entero Contador que ayuda el manejo de filas
j Entero Contador que qyuda a manejar las columnas
c Entero Contador de elementos de la matriz (de 0 a 11)

Flujograma:

Ciclo II_2012 jmb-mrcp 14


Inicio
1

Reservar mat[4][5]
i=0,3,1
c=0
j=0,4,1
i=0,3,1
No Si
mat[i][j] ==
dato
j=0,4,1
fila = i
“digite el col= J
elemento:”i, j
“el numero se
encuentra en:” fila, col
mat[i][j]

c=0
i=4

“digite el
dato a
buscar”
No Si
dato c==0

“el numero buscado, No se


“La matriz en
encuentra en la matriz”
forma de tabla:”

i=0,3,1
Fin
j=0,4,1

“digite el
elemento:”i, j

“\n”

Ciclo II_2012 jmb-mrcp 15


Codificación
#include <stdio.h>
#include <conio.h>
main()
{
int mat[4][5];
int dato,fila, col, i, j, c=0;
for (i=0;i<4;i++)
{
for (j=0; j<5;j++)
{
printf("\n digite el elemento %i \t %i \t", i,j);
scanf("%i", &mat[i][j]);
}
}
puts("digite el numero a buscar");
scanf("%i",&dato);
printf("\n\n\n La matriz en forma de tabla:\n\n\n");
for (i=0;i<4;i++)
{
for (j=0; j<5;j++)
printf(" %i \t ", mat[i][j]);
printf("\n");
}

//buscando del dato


for (i=0;i<4;i++)
{
for (j=0; j<5;j++)
{
if (mat[i][j] == dato)
{
fila=i;
col=j;
printf("\n\n el numero se encuentra en: %i\t%i", fila, col);
c=1;
i=4;
}
}
}
if(c==0)
puts("no se encuentra el dato");
getch();
return 0;
}

Ciclo II_2012 jmb-mrcp 16


Utilizando Modularidad, usted debe modificar el programa agregando 2
módulos diferentes para:
 Imprima UNICAMENTE la ubicación de la primera aparición del dato buscado.
 Imprima UNICAMENTE la ubicación de la última aparición del dato buscado.
Programa 6

Diseñe un flujograma que permita leer 9 datos enteros, que imprima: los datos pares, los datos
impares e imprimirlos en forma inversa a la que fueron leídos.

Flujograma

DISEÑE DOS MODULOS QUE HAGA:


- Calcule eimprima Solamente los números pares
- Calcule e imprima cuantos son impares
- ADEAMAS DEL PRINCIPAL, DEBERA PRESENTAR EL ANALISIS ESTRUCTURADO
Y LA CODIFICACION RESPECTIVA

Inicio
1
filas = 3

“IMPRESION DE LA MATRIZ
col = 3
EN ORDEN CONTRARIO A
LA LECTURA…”
Reservar memoria para
datos [filas] [col]
i = filas-1, 0, -1
“LECTURA DE
LA MATRIZ FILA
j = col-1, 0, -1
POR FILA…”

datos[ i ][ j ]
i = 0, filas-1, 1

j = 0, col-1,
1

datos [ i ][ j ]
Fin

Ciclo II_2012 jmb-mrcp 17


Programa 5
Diseñe una solución que permita leer una matriz de 4 x 3, la imprima y que cambie el valor de la
posición de la matriz, si el valor almacenado es menor que 3, multiplique por 5 dicho valor
almacenado, además debe imprimir la matriz final.

Flujograma

DISEÑE DOS MODULOS ADEAMAS DEL PRINCIPAL, DEBERA PRESENTAR EL ANALISIS


ESTRUCTURADO Y LA CODIFICACION RESPECTIVA

211
Inicio

“IMPRESIÓN DE
Reservar memoria para LA MATRIZ
K [ 4 ] [ 3 ], ORIGINAL”
S[4][3]

f = 0; f <= 3; f++
“LECTURA DE LA
MATRIZ FILA
POR FILA…”
c = 0; c <= 2; c++
f = 0; f <= 3; f++

K[f][c]
c = 0; c <= 2; c++

“Introduzca el dato de:


K [“, f,” ] [“, c,” ]”
“IMPRESIÓN DE
LA MATRIZ
MODIFICADA”
K[3][2]
f = 0; f <= 3; f++

c = 0; c <= 2; c++

111
S[f][c]

FIN

Ciclo II_2012 jmb-mrcp 18


111

“EVALUACION
DE LA
MATRIZ”

f = 0; f <= 4; f++

c = 0; c <= 2; c++

No Si
K[f][c]
<3

S[f][c]=K[f][c] S[f][c]=5*K[f][c]

211

PARTE III Ejercicios propuestos:

Guardarlo como g3B_prob#.cpp, respectivamente.


Para cada uno de los siguientes enunciados aplicar modularidad, presentar el análisis
estructurado respectivo admas de la codificación respectiva-

1. Se tienen las 3 calificaciones de cada uno de 5 alumnos, se necesita conocer: el


promedio de cada estudiante y el promedio de todos.

2. Diseñe un programa que llene de ceros una matriz cuadrada de n x n, excepto la


diagonal principal donde debe asignar 1. Por ejemplo, si n=4 la matriz resultante, que se
debe de imprimir es:

1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1

Ciclo II_2012 jmb-mrcp 19


3. Dada una matriz de n x m elementos, diseñe un programa que permita calcular cuántos
elementos son múltiplos de 5.

4. Dada una matriz cuadrada n x m, cuyos elementos enteros deben estar entre 10 y 60,
diseñar un programa que determine si dicha matriz el simétrica.
Se considera que una matriz es simétrica, si a[i][j] == a[j][i]

5. En una universidad se conoce el número de alumnos que ingresaron en sus 7 diferentes


carreras, en los últimos 3 años. Diseñe un programa que pueda proporcionar la
siguiente información:
 Total de alumnos por año
 Porcentaje de alumnos ingresados en el año X de la carrera Y
 En qué año y en qué carrera se dio el menor ingreso de alumnos
 Año en el cual la carrera T tuvo mayor ingreso de alumnos.

6. En un almacén se requiere consolidar la información mensual de la cantidad de


productos en existencia. Se tienen 5 diferentes tipos. Diseñe un programa que muestre
lo siguiente:
 Total de productos de todos los tipos en el mes.
 Promedio de productos de tipo 2 en existencia.
 Total de productos por tipo.

7. Se tienen las 6 calificaciones de 25 alumnos de Programación I, se necesita calcular lo


siguiente:
 La nota promedio de cada examen
 El promedio final de cada alumno
 El mayor promedio final de los alumnos.
DEBE TRABAJAR CON MATRICES Y VECTORES.

8. Se tiene una matriz cuadrada de 25 filas y columnas. Se necesita un programa que


genere dos vectores vec1 y vec2 a partir dela matriz, de la siguiente manera: Si el
elemento de la matriz es un número par, se almacenará en vec1 en caso contrario el
elemento formará parte de vec2.
El programa debe de imprimir además la suma de todos los elementos de vec1 y el
número de elementos que forman vec2.

9. Diseñe un programa que permita capturar la información de 10 automóviles. La


información requerida es la marca del auto, el año de fabricación y el número de placa.
El programa debe permitir al usuario introducir un número de placa y buscar de forma
secuencial si el número de placa introducido pertenece a alguno de los autos
registrados.

10. La administración de una compañía quiere conocer el ausentismo registrado en 4


departamentos que tiene la empresa en una semana laboral(de Lunes a Sábado). Para
ello se requiere elaborar un programa que presente una tabla mostrando el ausentismo
diario de cada departamento y departamento con mayor y menor ausentismo.

Ciclo II_2012 jmb-mrcp 20

You might also like