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
Ir a la versión completa