Programación General > Pascal

 Ayuda Con Un Programa

(1/1)

batou_kusanagi:
Hola. Me han mandado en la facultad realizar este programa
Sea M una matriz cuadrada de 5x5. Se dice que un elemento de M es un punto de silla si es máximo estricto de su fila y mínimo estricto de su columna. Puede demostrarse que dada una matriz de estas características, o bien no tiene punto de silla, o bien éste es único.
Escribe un programa que lea por teclado una matriz de este tipo y decida si tiene o no punto de silla, y en caso afirmativo visualice el valor del punto de silla y la fila y la columna en la que se encuentra dicho punto de silla

y soy incapaz de hacerlo. He probado ya a implementarlo de todas las formas que se me han ocurrido, y he llegado al final a ésta:


--- Código: Text ---program PuntodeSilla;constMax=5;typet_matriz=array[1..Max,1..Max]of integer; function mincolum(m:t_matriz;col:integer):integer;vari,min:integer;beginmin:=m[1,col];mincolum:=1;for i:=2 to Max dobeginif m[i,col]<min thenbeginmin:=m[i,col];mincolum:=i;endelse if m[i,col]=min thenmincolum:=0;end;end; function maxfila(m:t_matriz;f:integer):integer;vari,max:integer;beginmax:=m[f,1];maxfila:=1;for i:=2 to Max dobeginif m[f,i]>max thenbeginmax:=m[f,i]; maxfila:=i;endelse if m[f,i]=max thenmaxfila:=0;end;end;  procedure comparar(m:t_matriz);varfila,c,f:integer;encontrado:boolean;begin     encontrado:=false;     fila:=1;     c:=maxfila(m,fila);     f:=mincolum(m,c);     if (fila=f) and not (c=0) then        encontrado:=true;     fila:=fila+1;     while (fila<=max) and not (encontrado) do           begin                c:=maxfila(m,fila);                f:=mincolum(m,c);                if ((fila<>f) or (c=0)) then                   begin                   fila:=fila+1;                   end                else encontrado:=true;           end;     if encontrado=true then        writeln('Punto de silla en la matriz, en la posición ',fila,' ',c,'y con valor ',m[fila,c])        else writeln('No existe punto de silla');end; procedure rellenar(var m:t_matriz);vari,j:integer;beginfor i:=1 to Max do    for j:=1 to Max do    begin    writeln('Introduce el valor para ',i,' ',j,' :');    readln(m[i,j]);    endend; procedure visualizar(m:t_matriz);vari,j:integer;beginfor i:=1 to Max dobeginfor j:=1 to Max dowrite(m[i,j],' ');writelnend;end; procedure general;varm:t_matriz;beginrellenar(m);visualizar(m);comparar(m);end; begingeneral;end. 
Al ejecutarla me da un error 216 at $00401066 y no sé qué hacer. ¿Me podéis echar un cable? Os lo agradecería  :smartass:

Enko:
Que extraño!!!!!!!!!!!!!
 
A MI ME COMPILA  :scream:

Y Funciona de lo más bien.

(Probé con Delphi y Turbo Pascal 7)

Navegación

[0] Índice de Mensajes

Ir a la versión completa