Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Realizado por:
Alberto Olid Sampedro.
1º I.T.I. Mecánica.
-----------------------------------------------Ejercicio-----------------------------------------------
Hacer un menú en el programa principal con las opciones que se han indicado y llamar a
los procedimientos a partir de ese menú. Además este menú se podrá ejecutar un
número ilimitado de veces (hasta que el usuario introduzca 0).
Además deberemos implementar las siguientes funciones:
Inicializar matriz, dado un número de filas y columnas (habrá un Máximo de filas y
columnas que será constante).
Mostrar matriz.
(Estos dos módulos también pueden incluirse en el menú).
Normativa
Para cada problema se deberá entregar una definición completa del mismo, el
algoritmo y el código del programa resultante. Además se incluirá una pequeña
documentación sobre cómo utilizar el programa (cómo se introducen los datos, qué se
tiene que hacer para realizar una determinada función y un ejemplo de prueba con
datos).
----------------------------------------------Algoritmo----------------------------------------------
PROCEDIMIENTO Escribir(vector)
ENTRADA vector: ARRAY[1..MaxFil][1..MaxCol] de ENTEROS, parámetro que representa la
imagen introducida a analizar por el programa.
SALIDA: vector(k, z): ENTERO, parámetro donde se almacenan los valores del Array.
VARIABLES: k: ENTERO, parámetro para recorrer las filas del Array.
z: ENTERO, parámetro para recorrer las columnas del Array.
INICIO
PARA k=1 HASTA MaxFil CON INCREMENTO DE 1 HACER
INICIO
PARA z=1 HASTA MaxCol CON INCREMENTO DE 1 HACER
INICIO
REPETIR
ESCRIBIR “Introduzca un valor, para el elemento de la imagen, comprendido entre 0 y
255.”
LEER vector(k, z)
ESCRIBIR
SI ((vector(k, z)>255) O (vector(k, z)<0))
ENTONCES
INICIO
ESCRIBIR “El número introducido no es válido. Por favor, escriba un valor”
ESCRIBIR “dentro del rango aceptado.”
ESCRIBIR
FIN_SI
FIN_PARA
FIN_PARA
ESCRIBIR
FIN
PROCEDIMIENTO Mostrar(vector)
ENTRADA: vector: ARRAY[1..MaxFil][1..MaxCol] de ENTEROS, parámetro que representa la
imagen introducida a analizar por el programa.
SALIDA: Ninguna. Este procedimiento lee los valores del teclado.
VARIABLES: k: ENTERO, parámetro para recorrer las filas del Array.
z: ENTERO, parámetro para recorrer las columnas del Array.
INICIO
PARA k=1 HASTA MaxFil CON INCREMENTO DE 1 HACER
INICIO
PARA z=1 HASTA MaxCol CON INCREMENTO DE 1 HACER
INICIO
ESCRIBIR vector(k, z)
ESCRIBIR “ ”
FIN_PARA
ESCRIBIR
FIN_PARA
ESCRIBIR
ESCRIBIR
FIN
INICIO
Infvector(1, 1)
REPETIR
FIN_PARA
FIN_PARA
HASTA QUE (vector(k, z)=vector[MaxFil][MaxCol])
PROCEDIMIENTO Colores(vector)
ENTRADA: vector: ARRAY[1..MaxFil][1..MaxCol] de ENTEROS, parámetro que representa la
imagen introducida a analizar por el programa.
SALIDA: Numeros: ARRAY[1..256] de ENTEROS, vector donde se almacenarán los colores que
formal la imagen.
VARIABLES: k: ENTERO, parámetro para recorrer las filas del Array.
z: ENTERO, parámetro para recorrer las columnas del Array.
i: ENTERO, parámetro para recorrer las columnas del vector para almacenar los valores
del Array.
Contador: ENTERO, parámetro donde se almacenará los colores que aparecen en el
Array.
Suma: ENTERO, parámetro donde se almacenará las veces que un color aparece en el
Array.
Option: ENTERO, parámetro que indica la opción del menú seleccionada.
INICIO
REPETIR
ESCRIBIR
ESCRIBIR ”El programa le ofrece la posibilidad de realizar cualquiera de las siguientes”
ESCRIBIR ”operaciones:”
ESCRIBIR
ESCRIBIR ”1.- El programa muestra los colores que conforman la imagen.”
ESCRIBIR ”2.- El programa muestra los colores que aparecen en la imagen”
ESCRIBIR ” y las veces que están contenidos en ella.”
ESCRIBIR ”0.- Pulse 0 si desea volver al menú principal del programa.”
ESCRIBIR
ESCRIBIR ”Indique la operación que desea realizar con el programa.”
LEER Option
EN CASO DE QUE Option VALGA
1:
INICIO
PARA i=1 HASTA 256 CON INCREMENTO DE 1 HACER
INICIO
Numeros(i)-2
FIN_PARA
PARA k=1 HASTA MaxFil CON INCREMENTO DE 1 HACER
INICIO
PARA z=1 HASTA MaxCol CON INCREMENTO DE 1 HACER
INICIO
SI (vector(k, z)=0)
ENTONCES
INICIO
i256
FIN_SI
SI NO
INICIO
ivector(k, z)
FIN_SI
FIN_MIENTRAS
FIN_PARA
FIN_PARA
PARA i=1 HASTA 256 CON INCREMENTO DE 1 HACER
INICIO
SI (Numeros(i)≥0)
ENTONCES
INICIO
ESCRIBIR
ESCRIBIR ”La imagen contiene al color: ”, Numeros(i),”.”
FIN_SI
FIN_PARA
ESCRIBIR
ESCRIBIR
ESCRIBIR “Pulse una tecla para continuar.”
LEER
FIN
2:
INICIO
PARA Contador=0 HASTA 255 CON INCREMENTO HACER
INICIO
Suma0
PARA k=1 HASTA MaxFil CON INCREMENTO DE 1 HACER
INICIO
PARA z=1 HASTA MaxCol CON INCREMENTO DE 1 HACER
INICIO
SI (Contador=vector(k, z))
ENTONCES
INICIO
SumaSuma+1
FIN_SI
FIN_PARA
FIN_PARA
SI (Suma╪0)
ENTONCES
INICIO
ESCRIBIR
ESCRIBIR “El color ”, Contador,” se repite ”, Suma,” veces.”
FIN_SI
FIN_PARA
ESCRIBIR
ESCRIBIR
ESCRIBIR “Pulse una tecla para continuar.”
LEER
FIN
FIN_CASO
HASTA QUE Option=0
FIN
INICIO
PARA k2 HASTA MaxFil-1 CON INCREMENTO DE 1 HACER
INICIO
PARA z2 HASTA MaxCol-1 CON INCREMENTO DE 1 HACER
INICIO
vector(k, z)vector(k, z)+Inf
FIN_PARA
FIN_PARA
ESCRIBIR “La matriz final queda de la siguiente forma:”
ESCRIBIR
Mostrar(vector)Inf
DEVOLVER vector(k, z)
FIN
PROCEDIMIENTO Coordenadas(vector)
ENTRADA: vector: ARRAY[1..MaxFil][1..MaxCol] de ENTEROS, parámetro que representa la
imagen introducida a analizar por el programa.
SALIDA: Media: REAL, parámetro donde se almacenará la media de los valores del Array.
VARIABLES: k: ENTERO, parámetro para recorrer las filas del Array.
z: ENTERO, parámetro para recorrer las columnas del Array.
Suma: ENTERO, parámetro donde se almacenará la suma de todos los elementos del
Array.
INICIO
Suma0
(* Programa Principal *)
ALGORITMO Fotochopped
CONSTANTES: MaxFil3
MaxCol3
INICIO
Escribir(vector)
Mostrar(vector)
REPETIR
ESCRIBIR
Coordenadas(vector)
ESCRIBIR
ESCRIBIR “Pulse una tecla para volver al menú.”
LEER
FIN
FIN_CASO
ESCRIBIR
HASTA QUE Opcion=0
ESCRIBIR “Pulse INTRO para salir del programa.”
LEER
FIN
------------------------------------------------Código------------------------------------------------
Program Fotochopped;
Uses Crt;
Const
MaxFil=3;
MaxCol=3;
Type
a=Array[1..MaxFil,1..MaxCol] of Integer;
b=Array[1..256] of Integer;
Var
k,z,Inf,Opcion: Integer;
vector: a;
{----------------------------------------------------------------------------}
Var
k,z: Integer;
Begin
Repeat
writeln('Introduzca un valor, para el elemento la imagen, comprendido entre 0
y 255.'); {Se le pide al usuario que introduzca los valores de la
imagen en la matriz}
readln(vector[k][z]);
writeln;
End;
End;
writeln;
End;
{----------------------------------------------------------------------------}
Var
k,z: Integer;
Begin
writeln;
End;
writeln;
writeln;
End;
{----------------------------------------------------------------------------}
Var
k,z,Inf: Integer;
Begin
Repeat
Begin
End;
End;
writeln('El valor más bajo de la imagen es: ', Inf); {Escribe en la pantalla el valor
mínimo de la matriz}
writeln;
Valor_Inferior:= Inf;
End;
{----------------------------------------------------------------------------}
Procedure Colores(var vector:a); {El procedimiento mostrará los colores que aparecen
en la imagen y cuantas veces está presente en ella}
Var
k,z,i,Option,Contador,Suma: Integer;
Numeros: b;
Begin
Repeat
writeln;
writeln('El programa le ofrece la posibilidad de realizar cualquiera de las
siguientes');
writeln('operaciones:');
writeln;
writeln('1.- El programa muestra los colores que conforman la imagen.');
writeln('2.- El programa muestra los colores que aparecen en la imagen');
writeln(' y las veces que están contenidos en ella.');
writeln('0.- Pulse 0 si desea volver al menú principal del programa.');
writeln;
writeln('Indique la operación que desea realizar con el programa.');
readln(Option);
Case Option Of
1:
Begin
For i:=1 To 256 Do {Es hasta 256 porque el rango de la imagen es 0-255, lo
que indica que puede haber 256 valores distintos}
Begin
Numeros[i]:=-2; {Inicializa el vector de almacenamiento "Números" en -2,
ya que en la imagen puede haber valores 0}
End;
If vector[k][z]=0
Then
Begin
i:=256;
End
Else
Begin
i:=vector[k][z];
End;
End;
End;
For i:=1 To 256 Do {En esta parte, recorremos el vector "Numeros" para
mostrar en pantalla los colores que conforman la imagen
de la matriz}
Begin
If Numeros[i]>=0
Then
Begin
writeln;
writeln('La imagen contiene al color: ', Numeros[i],'.');
End;
End;
writeln;
writeln;
writeln('Pulse una tecla para continuar.');
readln;
End;
2:
Begin
For Contador:=0 To 255 Do {En esta parte se mostrarán los colores que
conforman la matriz y las veces que aparecen en
ella}
Begin
Suma:=0;
For k:=1 To MaxFil Do
Begin
End;
End;
End;
writeln;
writeln;
writeln('Pulse una tecla para continuar.');
readln;
End;
End;
Until Option=0;
End;
{----------------------------------------------------------------------------}
Begin
For k:=2 To MaxFil-1 Do {Para evitar las filas de los extremos, comenzamos el
bucle a partir de la segunda fila y lo finalizamos en la
penúltima fila}
Begin
End;
Combinacion:= vector[k][z];
End;
{----------------------------------------------------------------------------}
Var
Media: Real;
Suma,k,z: Integer;
Begin
End;
Begin
End;
End;
writeln;
End;
{----------------------------------------------------------------------------}
Begin
ClrScr;
Escribir(vector);
Mostrar(vector);
Repeat
Case Opcion Of
1:
Begin
writeln;
End;
writeln;
Until Opcion=0;
writeln('Pulse INTRO para salir del programa.');
readln;
End.
-------------------------------------Ejecutando el Programa-------------------------------------
A continuación, le será mostrada la matriz de la imagen para que compruebe que los
colores introducidos son los correctos (A) y un menú para elegir la operación que desee
realizar con el programa (B):
La opción 1 muestra los colores que aparecen en la imagen; la 2 muestra los colores que
forman la imagen y las veces que aparecen en ella:
Opción 1)
Opción 2)
La cuarta opción hace que el programa muestre las coordenadas de aquellos valores de
la imagen que son menores de la media y que no están en el borde de la imagen:
Al finalizar cada opción, se debe pulsar cualquier tecla para continuar con la ejecución
del programa.