Crear+lista+en+orden+y+eliminar+pares

=__**Lista de enteros ordenados y eliminar los números pares**__=

Escribir un programa basado en un menú que maneje una lista de, como máximo, 50 números enteros.

Las opciones del menú son: >> 1. Añadir un número (en orden de menor a mayor) >> 2. Eliminar los números pares >> 3. Mostrar el contenido de la lista >> 0. Terminar

code format="pascal" PROGRAM Ejercicio_Arrays ; USES Crt ; CONST iLONG_FISICA = 50 ; TYPE taiVectores = ARRAY [1 .. iLONG_FISICA] OF Integer ;

FUNCTION fncLeerOpcion : Char ; VAR cOpcion :  Char ; BEGIN ClrScr ; Writeln ; Writeln ('--- Menú de Opciones ') ; Writeln (' 1. Añadir un número (en orden)') ; Writeln (' 2. Eliminar los números pares') ; Writeln (' 3. Mostrar el contenido de la lista') ; Writeln (' 0. Terminar') ; Write  ('Pulsa el número de la opción: ') ; REPEAT cOpcion := ReadKey ; UNTIL ('0' <= cOpcion) AND (cOpcion <= '3') ; Writeln (cOpcion) ; Writeln ; fncLeerOpcion := cOpcion END ;

FUNCTION fniBusquedaPosicMayor (     iNumBuscado  : Integer ;                                CONST      aiLista : taiVectores ;                                           iLong   : Integer) : Integer ; VAR boEncontrado : Boolean ; i                      : Integer ; BEGIN boEncontrado := FALSE ;

i := 1 ; WHILE NOT boEncontrado AND  ( i <= iLong )  DO         IF  iNumBuscado <= aiLista [i] THEN boEncontrado := TRUE ELSE i := i + 1 ;

fniBusquedaPosicMayor := i END ;

PROCEDURE InsercionEnUnaPosicion (   iNuevoNum : Integer ;                                  VAR aiLista   : taiVectores ;                                  VAR iLong     : Integer ;                                      iPosicion : Integer) ; VAR i : Integer ; BEGIN

FOR i := iLong DOWNTO iPosicion DO       aiLista [ i + 1 ] := aiLista [ i ] ;

aiLista [ iPosicion ] := iNuevoNum ;

iLong := iLong + 1 ; END ;

PROCEDURE InsercionEnOrden (     iNuevoNum : Integer ;                             VAR  aiLista   : taiVectores ;                             VAR  iLong     : Integer) ; VAR iPosicMayor : Integer ; BEGIN

iPosicMayor := fniBusquedaPosicMayor (iNuevoNum, aiLista, iLong) ;

InsercionEnUnaPosicion (iNuevoNum, aiLista, iLong, iPosicMayor) END ;

PROCEDURE AniadirNumEnOrden (VAR aiLista  : taiVectores ;                             VAR  iLong    : Integer); VAR iNumero : Integer ; BEGIN Write ('Número ', iLong + 1 : 2, ': ') ; Readln (iNumero) ;

InsercionEnOrden (iNumero, aiLista, iLong) ; END ;

PROCEDURE BorradoEnUnaPosicion (VAR aiLista : taiVectores ;                               VAR   iLong : Integer ;                                  iPosicion : Integer) ; VAR i : Integer ; BEGIN

FOR i := iPosicion + 1 TO iLong DO       aiLista [ i - 1 ] := aiLista [ i ] ;

iLong := iLong - 1 ; END ;

PROCEDURE BorradoNumerosPares (VAR aiLista : taiVectores ;                              VAR   iLong : Integer) ; VAR i : Integer ; BEGIN

i := 1 ;

WHILE  i <= iLong  DO       IF  aiLista  [ i ] MOD 2 = 0 THEN BorradoEnUnaPosicion (aiLista, iLong, i)      ELSE i := i + 1 ; END ;

PROCEDURE MostrarNumeros ( CONST aiLista : taiVectores ;                                    iLong : Integer ) ; VAR i : Integer ; BEGIN

FOR i := 1 TO iLong DO     Write (aiLista[i]:8) ;

Writeln ; END ;

{--- Variables del programa principal } VAR aiLista                  : taiVectores ; iLongitud              : Integer ; cOpcion, cEspera : Char ;

BEGIN { Programa Principal --} iLongitud := 0 ; { Inicialmente el array está vacío } REPEAT cOpcion := fncLeerOpcion ;

CASE cOpcion OF

'1' :             IF  iLongitud   <   iLONG_FISICA   THEN AniadirNumEnOrden (aiLista, iLongitud) ELSE Writeln ('No se pueden añadir más: la lista está llena');

'2' : BorradoNumerosPares (aiLista, iLongitud);

'3' :  BEGIN Writeln ('Contenido de la lista: ') ; MostrarNumeros (aiLista, iLongitud); Writeln ('- Fin contenido de la lista - ');

cEspera := Readkey ; END ; END ; UNTIL cOpcion = '0' ;

Writeln ; Readln ; END. code