P_96_E_1-Matriz+carácter+y+número

=Matriz con elementos con dos campos: caracter y numero real=

Escribir un programa que lea una matriz de 3 x 4 elementos.

Cada elemento es de tipo registro con dos campos, uno de ellos es un carácter y el otro un número real.

Buscar la posición del elemento cuyo valor numérico sea máximo, y la del elemento cuyo carácter tenga un código ASCII menor.

code format="pascal" PROGRAM regis_1 ; USES Crt ;

CONST iFILAS    = 3 ; iCOLUMNAS = 4 ;

TYPE trgElementos = RECORD cCaracter : Char ; rNumero  : Real END ;

targMatrices = ARRAY [1..iFILAS, 1..iCOLUMNAS] OF trgElementos ;

VAR argMatriz : targMatrices ; iFil, iCol : Integer ;

PROCEDURE LeerElemento (VAR rgDatos : trgElementos) ; BEGIN WITH rgDatos DO      BEGIN Write ('  Escribe un carácter: ') ; ReadLN (cCaracter) ; Write ('  Escribe un  nº real: ') ; ReadLN (rNumero) ; END ; END ;

PROCEDURE LeerMatriz (VAR argMatriz : targMatrices) ; VAR i, j : Integer ; BEGIN FOR i := 1 TO iFILAS DO      BEGIN WriteLn ('Escribe los elementos de la fila ', i) ; FOR j := 1 TO iCOLUMNAS DO          BEGIN WriteLn ('Elemento [', i, ', ', j, ']:') ; LeerElemento (argMatriz [i, j]) ; END ; END ; END ;

PROCEDURE MostrarElemento (CONST rgDatos : trgElementos) ; BEGIN WITH rgDatos DO      WriteLN (cCaracter, ' ', rNumero:0:2) ; END ;

PROCEDURE MostrarMatriz (CONST argMatriz : targMatrices) ; VAR i, j : Integer ; BEGIN FOR i := 1 TO iFILAS DO      BEGIN Writeln ('Contenido de la fila: ', i) ; FOR j := 1 TO iCOLUMNAS DO          BEGIN Write ('  Elemento [', i, ', ', j, ']:') ; MostrarElemento (argMatriz [i, j]) ; END ; Writeln END ; END ;

PROCEDURE BuscarMayorNumero (CONST argMatriz: targMatrices ;                               VAR iFil, iCol: Integer) ; VAR rMayor : Real ; i, j  : Integer ; BEGIN rMayor := argMatriz [1, 1].rNumero ; iFil  := 1 ; iCol  := 1 ;

FOR i := 1 TO iFILAS DO      FOR j := 1 TO iCOLUMNAS DO           IF argMatriz [i, j].rNumero > rMayor THEN BEGIN rMayor := argMatriz [i, j].rNumero ; iFil  := i ; iCol  := j ; END ;

END ; { BuscarMayorNumero }

PROCEDURE BuscarMenorCaracter (CONST argMatriz: targMatrices ;                                 VAR iFil, iCol: Integer) ; VAR cMenor : Char ; i, j  : Integer ; BEGIN cMenor := argMatriz [1, 1].cCaracter ; iFil  := 1 ; iCol  := 1 ;

FOR i := 1 TO iFILAS DO      FOR j := 1 TO iCOLUMNAS DO           IF argMatriz [i, j].cCaracter < cMenor THEN BEGIN cMenor := argMatriz [i, j].rNumero ; iFil  := i ; iCol  := j ; END ;

END ; { BuscarMenorCaracter }

BEGIN {- PROGRAMA PRINCIPAL -}

Writeln ('Escribe los elementos de la matriz') : LeerMatriz (argMatriz) ;

Writeln ('Contenido de los elementos de la matriz') : MostrarMatriz (argMatriz) ;

BuscarMayorNumero (argMatriz, iFil, iCol) ; WriteLN ; Write ('  Valor mayor: [', iFil, ', ', iCol, ']: '); MostrarElemento(argMatriz[iFil, iCol]) ;

BuscarMenorCaracter (argMatriz, iFil, iCol) ; WriteLN ; Write ('Carácter menor: [', iFil, ', ', iCol, ']: '); MostrarElemento(argMatriz[iFil, iCol]) ;

Writeln ; Writeln ('Pulsa return para finalizar...') ; Readln ; END. { FIN DE REGIS_1.PAS } code