Calcular+máximos+locales+de+un+vector

=__**Calcular los máximos locales de un vector**__=

Leer matriz una lista de números y mostrar la lista de máximos locales >> * Máximo local: aquel valor que es mayor que el valor que le precede y que el valor le sucede en la lista

code format="pascal" PROGRAM arr_1_1 ;

USES Crt ; CONST iLONG_FISICA  = 10  ; iNUMERO_MAXIMO = 100 ; TYPE taiVectores = ARRAY [1 .. iLONG_FISICA] OF Integer ;

FUNCTION fncLeerModoGeneracionLista : Char ; VAR cOpcion : Char ; BEGIN WriteLn ('--- Modo de obtener los numeros de la lista --') ; WriteLn (' 1. Interactivamente') ; WriteLn (' 2. Aleatoriamente') ; Write  ('     Pulsa el numero de la opcion: ') ; REPEAT cOpcion := ReadKey ; UNTIL (cOpcion = '1') OR (cOpcion = '2') ; Writeln (cOpcion) ; fncLeerModoGeneracionLista := cOpcion ; END ; { fncLeerModoGeneracionLista } PROCEDURE LeerNumerosInteractivos (VAR   aiLista: taiVectores ;                                       iCantidad : Integer) ; VAR i : Integer ; BEGIN FOR i := 1 TO iCantidad DO      BEGIN Write ('Numero ', i:3, ': ') ; ReadLn (aiLista[i]) ; END ; END ; { LeerNumerosInteractivos }

PROCEDURE LeerNumerosAleatorios (VAR  aiLista: taiVectores ;                                     iCantidad: Integer) ; VAR i : Integer ; BEGIN FOR i := 1 TO iCantidad DO      BEGIN aiLista[i] := Random (iNUMERO_MAXIMO) + 1 ; Write ('Numero ', i:3, ': ') ; WriteLn (aiLista[i]:3) ; END ; END ; { LeerNumerosInteractivos }

PROCEDURE MostrarNumeros (CONST aiNumeros: taiVectores; iCantidad : Integer) ; VAR i : Integer ; BEGIN FOR i := 1 TO iCantidad DO       Write (aiNumeros[i]:8) ; Writeln ; END ; { MostrarNumeros }

PROCEDURE CrearListaMaximos (CONST aiListaNum: taiVectores; iCantNum: Integer ;                            VAR   aiListaMax: taiVectores; VAR iCantMax: Integer); VAR i : Integer ; BEGIN iCantMax := 0 ;

FOR i := 2 TO iCantNum - 1 DO       IF (aiListaNum[i-1] < aiListaNum[i]) AND (aiListaNum[i+1] < aiListaNum[i]) THEN BEGIN iCantMax := iCantMax + 1 ; aiListaMax [iCantMax] := aiListaNum[i] ; END ; END ; { CrearListaMaximos } VAR {-- Variables del programa principal } aiListaLeidos   : taiVectores ; iCantLeidos     : Integer ; aiListaMaximos  : taiVectores ; iCantMaximos    : Integer ; cModoGeneracion : Char ; cEspera         : Char ;

BEGIN {****************** PROGRAMA PRINCIPAL ****************************} Randomize ; Writeln ; WriteLn ('    Porgrama que lee una listado de numeros enteros') ; WriteLn ('    y obtiene la lista de los maximos locales') ; WriteLN ; REPEAT Write ('Indica cuantos numeros vas a escribir (0..', iLONG_FISICA, '): ') ; ReadLn (iCantLeidos) ; UNTIL (0 <= iCantLeidos) AND (iCantLeidos <= iLONG_FISICA) ;

cModoGeneracion := fncLeerModoGeneracionLista ; CASE cModoGeneracion OF     '1' : LeerNumerosInteractivos (aiListaLeidos, iCantLeidos) ; '2' : LeerNumerosAleatorios (aiListaLeidos, iCantLeidos) ; END ; Writeln ; CrearListaMaximos (aiListaLeidos, iCantLeidos, aiListaMaximos, iCantMaximos) ; Writeln ; Writeln ('La lista de los numeros es: ') ; MostrarNumeros (aiListaLeidos, iCantLeidos) ;

Writeln ; IF iCantMaximos = 0 THEN Writeln ('No hay ningun maximo local') ELSE BEGIN Writeln ('La lista de los maximos locales es: ') ; MostrarNumeros (aiListaMaximos, iCantMaximos) ; END ; cEspera := ReadKey ; END. { FIN DE ARR_1_1.PAS } code