Título: Pascal: Buscar en una matriz. Publicado por: Traspuesto en 26 Diciembre 2007, 22:03 pm ¡Hola a todos!
Tengo un ejercicio de informática y sólo me queda un apartado para terminarlo (el escrito en rojo), pero no sé cómo diablos se hace. A ver si me podéis echar una mano vosotros. Os dejo el enunciado completo del ejercicio y el programa que llevo realizado hasta ahora: -------------------------------------------Ejercicio------------------------------------------- Se desea diseñar un sistema de reconocimiento de imágenes para un satélite. El software asociado debe realizar distintos tipos de operaciones con imágenes almacenadas en matrices de m x n elementos. Cada punto de la imagen está representado por un color codificado mediante un entero en el rango 0-255.
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:
------------------------------------------Programa------------------------------------------ Program Matriz; Uses Crt; Const MaxFil=3; MaxCol=3; Type a=Array[1..MaxFil,1..MaxCol] of Integer; b=Array[1..255] of Integer; Var k,z,Inf,Opcion: Integer; vector: a; colores,buscador: b; {----------------------------------------------------------------------------} Procedure Escribir(var vector: a); Begin For k:=1 To MaxFil Do Begin For z:=1 To MaxCol Do 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]); If ((vector[k][z] > 255) Or (vector[k][z] < 0)) Then Begin writeln('El número introducido no es válido. Por favor, escriba un valor dentro del rango aceptado.'); End; Until ((vector[k][z] >= 0) and (vector[k][z] <= 255)); End; End; writeln; End; {----------------------------------------------------------------------------} Procedure Mostrar(var vector: a); Begin For k:=1 To MaxFil Do Begin For z:=1 To MaxCol Do Begin write(vector[k][z]); {Escribe la matriz en la pantalla} write(' '); End; writeln; End; End; {----------------------------------------------------------------------------} Function Valor_Inferior(var vector:a): Integer; Begin Inf:=vector[1][1]; {Mínimo valor introducido en la matriz} Repeat For k:=1 To MaxFil Do Begin For z:=1 To MaxCol Do Begin If vector[k,z] < Inf Then Begin Inf:=vector[k][z]; {Si el valor del elemento a[i,j] es menor que el de Inf, éste último pasará a valer lo del primero} End; End; End; Until vector[k][z]=vector[MaxFil][MaxCol]; {Se repite la búsqueda del valor mínimo hasta que ya se hayan comparado todos los elementos de la matriz} writeln; writeln('El valor más bajo de la imagen es (', Inf,')'); {Escribe en la pantalla el valor mínimo de la matriz} Valor_Inferior:= Inf; End; {----------------------------------------------------------------------------} [Aquí es donde iría el subalgoritmo del segundo punto.] {----------------------------------------------------------------------------} Function Combinacion(var vector:a; Inf:Integer): Integer; {La función sumará, a todos los elementos que no estén el los extremos, el menor valor de la matriz} 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 For z:=2 To MaxCol-1 Do {Para evitar las columnas de los extremos, comenzamos el bucle a partir de la segunda columna y lo finalizamos en la penúltima columna} Begin vector[k][z]:=vector[k][z]+Inf; {A cada elemento de la matriz, que esté situado en el extremo de la misma, le sumamos el menor valor que contiene ésta} End; End; writeln('La matriz final queda de la siguiente forma:'); writeln; Mostrar(vector); {Muestra en pantalla la matriz final} Combinacion:= vector[k][z]; End; {----------------------------------------------------------------------------} Function Coordenadas(var vector:a): Integer; {Este procedimiento debe mostrar por pantalla las coordenadas de aquellos valores de la matriz que, no estando en el borde, sean inferiores a la media} Var Media: Real; Suma:Integer; Begin Suma:=0; {Como "Suma" es un contador,la igualamos a 0 antes de comenzar el bucle} For k:=1 To MaxFil Do Begin For z:=1 To MaxCol Do Begin Suma:=Suma+vector[k][z]; {"Suma" pasa a tener el valor anterior más el del elemento de la matriz por el que vaya el bucle} End; End; Media:=(Suma) DIV (MaxFil*MaxCol); {"Media" es el resultado de dividir "Suma" entre el máximo de filas por el de columnas, ya que estos últimos indican el total de elementos que posee la matriz} writeln('El valor medio es:', Media:2:4); writeln; writeln('Las coordenadas de los puntos que no están en el borde y tienen un valor inferior a la media son:'); writeln; For k:=2 To MaxFil-1 Do Begin For z:=2 To MaxCol-1 Do Begin If vector[k][z] < Media Then Begin writeln('(',k,',',z,')'); {Aquí se muestran por pantallas las coordenadas de los puntos que tienen un valor inferior al de la media y no están en el borde} End; End; End; End; {----------------------------------------------------------------------------} Begin ClrScr; Escribir(vector); Mostrar(vector); Repeat writeln; writeln('El programa le ofrece la posibilidad de realizar cualquiera de las siguientes operaciones:'); writeln; writeln('1.- El programa devuelve el valor más bajo de la imagen introducida.'); writeln('2.- El programa crea una matriz con los colores usados por la imagen y otra con el número de veces que ese color aparece en la imagen.'); writeln('3.- El programa suma, a todos los elementos de la imagen que no estén en los bordes, el valor más bajo de la imagen.'); writeln('4.- El programa muestra las coordenadas de los valores que no estan en los bordes de la imagen y tienen un valor inferior al de la media.'); writeln('0.- Pulse 0 si no desea realizar ninguna opción del programa.'); writeln; writeln('Indique la operación que desea realizar con el programa.'); readln(Opcion); Case Opcion Of 1: Begin writeln; Inf:= Valor_Inferior(vector); {Llama a la función para que averigüe cuál es el valor mínimo de los elementos de la matriz} writeln; End; 2: Begin writeln; End; 3: Begin writeln; vector[k][z]:= Combinacion(vector, Valor_Inferior(vector)); {Llama a la función para que le sume el valor más bajo de los elementos de la matriz a aquellos valores que no están en los bordes de la misma} writeln; End; 4: Begin writeln; Coordenadas(vector); {Llama a la función para que muestre por pantalla las coordenadas de aquellos elementos de la matriz que tienen un valor más bajo que la media} writeln; End; End; writeln; Until Opcion=0; writeln('Pulse INTRO para salir del programa'); readln; End. ------------------------------------------------------------------------------------------------ Os agradezco la ayuda de antemano y, si creéis que debería corregir algo o comentar más cosas en el programa, decídmelo, por favor. Título: Re: Pascal: Buscar en una matriz. Publicado por: Traspuesto en 7 Enero 2008, 17:36 pm Ya conseguí hacer el apartado ese y terminar el programa :P. Si alguien quiere saber cómo lo hice, que me lo pida y le paso el apartado ese del buscador xD
¡Hasta otra! Título: Re: Pascal: Buscar en una matriz. Publicado por: barbate en 21 Abril 2008, 23:21 pm Ya conseguí hacer el apartado ese y terminar el programa :P. Si alguien quiere saber cómo lo hice, que me lo pida y le paso el apartado ese del buscador xD podrias pegar el codigo terminado, seguro que a muchos nos viene bien.¡Hasta otra! un saludo |