Trasponer+matriz+no+cuadrada

=__**Leer, Mostrar y Trasponer una matriz no cuadrada**__= > code format="pascal" PROGRAM TrasponerMatrizNoCuadrada ; USES Crt ; CONST iMAX_FILAS   = 5 ; iMAX_COLUMNAS = 5 ; TYPE taiMatriz = ARRAY [1..iMAX_FILAS, 1..iMAX_COLUMNAS] OF Integer ;

PROCEDURE LeerDimensiones (VAR byFilas, byColumnas : Byte) ; BEGIN REPEAT Write ('Introduce el Nº de FILAS    (1..', iMAX_FILAS, '): ') ; Readln (byFilas) ; UNTIL (0 < byFilas) AND (byFilas <= iMAX_FILAS) ;

REPEAT Write ('Introduce el Nº de COLUMNAS (1..', iMAX_COLUMNAS, '): '); Readln (byColumnas) ; UNTIL (0 < byColumnas) AND (byColumnas <= iMAX_COLUMNAS) ; END ; { LeerDimensiones }

PROCEDURE LeerMatriz (VAR aiMatriz : taiMatriz ;                         byFilas, byColumnas : Byte) ; VAR i, j : Byte ; BEGIN FOR i := 1 TO byFilas DO     BEGIN Writeln ('Introduciendo fila ', i, ':') ; FOR j := 1 TO byColumnas DO         BEGIN Write ('Elemento [', i, ',', j, ']: ') ; Readln (aiMatriz [i, j]) ; END ; END ; END ; { LeerMatriz }

PROCEDURE MostrarMatriz (CONST aiMatriz : taiMatriz ;                              byFilas, byColumnas : Byte) ; VAR i, j : Byte ; BEGIN Writeln ; FOR i := 1 TO byFilas DO     BEGIN FOR j := 1 TO byColumnas DO         Write (aiMatriz [i, j]:8) ; Writeln ; END ; Writeln ; END ; { MostrarMatriz }

PROCEDURE SumarMatrices (CONST aiMatriz_A, aIMatriz_B: taiMatriz ;                        VAR   aiMatriz_C            : taiMatriz ;                               byFilas, byColumnas   : Byte) ; VAR i, j : Byte ; BEGIN FOR i := 1 TO byFilas DO     FOR j := 1 TO byColumnas DO          aiMatriz_C [i,j] := aiMatriz_A [i,j] + aiMatriz_B [i,j] ; END ; { SumarMatrices }

PROCEDURE Intercambiar (VAR iNum_1, iNum_2 : Integer) ; VAR iAux : Integer ; BEGIN iAux  := iNum_1 ; iNum_1 := iNum_2 ; iNum_2 := iAux ; END ; { Intercambiar }

PROCEDURE TrasponerMatriz (VAR aiMatriz: taiMatriz ;                          VAR byFilas, byColumnas : Byte) ; VAR byDimensionMenor, byDimensionMayor, i, j : Byte ; BEGIN IF byFilas < byColumnas THEN BEGIN byDimensionMenor := byFilas ; byDimensionMayor := byColumnas ; END ELSE BEGIN byDimensionMenor := byColumnas ; byDimensionMayor := byFilas ; END ;

FOR i := 1 TO byDimensionMenor DO     FOR j := i + 1 TO byDimensionMayor DO          Intercambiar (aiMatriz [i,j], aiMatriz [j,i]) ;

{ intercambiar valores de Filas y Columnas } i         := byFilas ; byFilas   := byColumnas ; byColumnas := i ; END ; { TrasponerMatriz }

{-- Variables del programa principal --} VAR aiMatriz_A                 : taiMatriz ; byFilas_A,  byColumnas_A   : Byte ;

BEGIN { Programa Principal } Writeln ; Writeln ('Escribe la matriz:') ; LeerDimensiones (byFilas_A, byColumnas_A) ; LeerMatriz (aiMatriz_A, byFilas_A, byColumnas_A) ;

Writeln ; Writeln ('La matriz leída es: ') ; MostrarMatriz (aiMatriz_A, byFilas_A, byColumnas_A) ;

TrasponerMatriz (aiMatriz_A, byFilas_A, byColumnas_A) ;

Writeln ; Writeln ('La matriz traspuesta es: ') ; MostrarMatriz (aiMatriz_A, byFilas_A, byColumnas_A) ;

Writeln ; Readln ; END. { Final de TrasponerMatrizNoCuadrada.PAS } code