apropiadamente una matriz 4x4 de caracteres y que, a petición del usuario,
intercambie las filas o columnas i y j de dicha matriz. Muestre por pantalla en
formato matricial tanto la matriz original introducida como la matriz resultante
del intercambio de filas o columnas solicitado por el usuario. No utilice el tipo
String, cree las matrices como arrays de caracteres.
PROGRAM ejer14 (input,output);
TYPE
Tmatriz=ARRAY[1..100,1..100]OF integer;
VAR
matriz:Tmatriz;
bo,ba:integer;
PROCEDURE construccion ;
VAR
i,j,numeros:integer;
BEGIN
j:=1;
i:=1;
FOR i:=1 to 4 DO
BEGIN
FOR j:=1 to 4 DO
BEGIN
write('escriba el elemento fila:',i,'columna',j,':');
read(matriz[i,j]);
END;
END;
END;
PROCEDURE fila (var matriz:Tmatriz);
var
I,J,Y,Z:integer;
BEGIN
write('escriba la fila inicial:');
readln(Y);
write('escriba el numero de la fila por la que cambiarla:');
readln(Z);
IF Y
begin
FOR J:=1 to 4 do
begin
matriz[Y,J]:=matriz[Z,J];
matriz[Z,J]:=matriz[Y,J];
read(matriz[I,J]);
end;
END;
END;
END;
PROCEDURE columna (var matriz:Tmatriz);
var
I,J,A,B:integer;
BEGIN
write('escriba la columna inicial:');
readln(A);
write('escriba el numero de la columna por la que cambiarla:');
readln(B);
If Abegin
FOR I:=1 TO 4 DO
begin
FOR J:=A to B do
begin
matriz[I,A]:=matriz[I,B];
matriz[I,B]:=matriz[I,A];
readln(matriz[I,J]);
end;
END;
END;
END;
PROCEDURE escribir;
VAR
q,w:integer;
BEGIN
q:=1;
w:=1;
FOR q:=1 to 4 do begin
writeln;
for w:=1 to 4 do begin
write(matriz[q,w]);
write(' ');
end;
END;
END;
BEGIN
bo:=0;
ba:=0;
construccion;
escribir;
write('quiere cambiar alguna fila?[1=si,0=no]:');
readln(bo);
IF bo=1 THEN
fila(matriz);
write('quiere cambiar alguna columna?[1=si,0=no]:');
readln(ba);
IF ba=1 then
columna(matriz);
escribir;
END.
AVISO:el programa compila y se ejecuta,pero el problema sucede que en la fila o columnas iniciales,te pide que metas otros numeros,cojiendo a boleo 4 para la fila o columna y escribiendolos.Se produce el cambio de lugar de todas maneras.
Yo no lo veo asi como lo has echo tu... pongo el mio:
ResponderEliminarPROGRAM ejer14 (input,output);
CONST
n=4;
TYPE
Tmatriz=ARRAY[1..n,1..n]OF integer;
VAR
matriz:Tmatriz;
seleccion: integer;
(*******************************************************************)
PROCEDURE leer(VAR matriz: tmatriz);
VAR
i,j:integer;
BEGIN
FOR i:=1 to n DO
FOR j:=1 to n DO
BEGIN
write('escriba el elemento fila ',i:2,' columna',j:2,': ');
read(matriz[i,j]);
END;
END;
(***********************************************************************)
PROCEDURE escribir(matriz: tmatriz);
VAR
i,j:integer;
BEGIN
FOR i:=1 to n do BEGIN
for j:=1 to n do begin
write(matriz[i,j]);
write(' ');
end;
Writeln;
END;
END;
(***********************************************************************)
PROCEDURE intercambio (matriz: tmatriz);
VAR
fila, columna: integer;
aux: array[1..4] OF integer;
i,j: integer;
edit: tmatriz;
BEGIN
Write('Que fila quieres intercambiar?');
readln(fila);
write('Que columna quieres intercambiar?');
readln(columna);
FOR j:=1 to 4 DO
aux[j]:=matriz[fila,j]; {Almacenamos en un ausiliar la fila que nosotros queremos cambiar}
FOR i:=1 to 4 DO
matriz[fila,i]:=matriz[i,columna]; {En la fila que queremos cambiar ponemos la columna a cambiar}
for i:=1 to 4 DO
matriz[i,columna]:=aux[i]; {En la columna que queremos cambiar guardamos el auxiliar que contiene la fila cambiada}
escribir(matriz);
END;
(***********************************************************************)
{programa ppal}
BEGIN
leer(matriz);
repeat
Writeln('Elige una opcion: ');
writeln('1. Intercambiar filas y/o columnas');
writeln('0. salir');
read(seleccion);
IF seleccion=1 THEN intercambio(matriz);
UNTIL seleccion=0;
escribir(matriz);
END.
gracias por el aporte :),pero siempre es bueno conocer el nombre del autor
ResponderEliminar