Eliminar+los+números+primos+de+una+lista

=__**Eliminar los números primos de una lista**__=

Codificar un programa que tras leer una secuencia de números enteros positivos, que finaliza al leer el valor cero, borre de dicha lista todos los números primos.

code format="pascal" PROGRAM arr_1_9 ; USES Crt ; CONST iLONG_FISICA  = 10  ; iNUMERO_MAXIMO = 100 ; TYPE taiVector = ARRAY [1 .. iLONG_FISICA] OF Integer ;

PROCEDURE LeerNumerosInteractivos (VAR   aiLista: taiVector ;                                   VAR iCantidad : Integer) ; VAR cResp : Char ; BEGIN iCantidad := 0 ;

Write ('Introducir un n£mero (S/N): ') ; ReadLn (cResp) ;

WHILE (Upcase (cResp) = 'S') AND (iCantidad < iLONG_FISICA) DO       BEGIN iCantidad := iCantidad + 1 ; Write ('N£mero ', iCantidad:2, ': ') ; Readln (aiLista [iCantidad]) ;

IF iCantidad < iLONG_FISICA THEN BEGIN Writeln ; Write ('Introducir otro n£mero (S/N): ') ; ReadLn (cResp) ; END ; END ; END ; { LeerNumerosInteractivos }

PROCEDURE LeerNumerosAleatorios (VAR  aiLista: taiVector ;                                 VAR iCantidad: Integer) ; VAR cResp : Char ; BEGIN Randomize ;

iCantidad := 0 ;

Write ('Introducir un n£mero (S/N): ') ; REPEAT cResp := ReadKey ; UNTIL (UpCase (cResp) = 'S') OR (UpCase (cResp) = 'N'); Writeln (cResp) ;

WHILE (Upcase(cResp) = 'S') AND (iCantidad < iLONG_FISICA) DO       BEGIN iCantidad := iCantidad + 1 ; aiLista [iCantidad] := Random (iNUMERO_MAXIMO) + 1 ; WriteLn ('Valor: ', aiLista [iCantidad]) ;

IF iCantidad < iLONG_FISICA THEN BEGIN Write ('Introducir un n£mero (S/N): ') ; REPEAT cResp := ReadKey ; UNTIL (UpCase (cResp) = 'S') OR (UpCase (cResp) = 'N'); Writeln (cResp) ; END ; END END ; { LeerNumerosAleatorios }

FUNCTION fnboEsPrimo (iNumero : Integer) : Boolean ; VAR iDivisor : Integer ; boPrimo : Boolean ; BEGIN boPrimo := TRUE ; iDivisor := 2 ; WHILE boPrimo AND (iDivisor < Sqrt (iNumero)) DO       BEGIN IF iNumero MOD iDivisor = 0 THEN boPrimo := FALSE ELSE iDivisor := iDivisor + 1 END ;

fnboEsPrimo := boPrimo END ; { fnboEsprimo }

PROCEDURE BorrarNumero (VAR aiNumeros: taiVector; VAR iCantidad : Integer ;                        iPosicion : Integer) ; VAR i : Integer ; BEGIN FOR i := iPosicion TO iCantidad - 1 DO       aiNumeros [i] := aiNumeros [i + 1] ;

iCantidad := iCantidad - 1 END ; { BorrarNumero  }

PROCEDURE EliminarPrimos (VAR aiNumeros: taiVector; VAR iCantidad : Integer) ; VAR i : Byte ; BEGIN i := 1 ; WHILE i <= iCantidad DO       IF  fnboEsprimo (aiNumeros[i]) THEN BorrarNumero (aiNumeros, iCantidad, i)       ELSE i := i + 1 END ; { EliminarPrimos }

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

{ Variables del programa principal } VAR aiLista         : taiVector ; iCantidad       : Integer ; cOpcion, cEspera : Char ;

BEGIN (****************** PROGRAMA PRINCIPAL ****************************) ClrScr ;

WriteLn ('Modos de introducci¢n de los n£meros: ') ; WriteLN ('     1 Interactivamente') ; WriteLN ('     2 Aleatoriamente') ; WriteLN ; Write ('Pulsa el n£mero de la opci¢n: ') ; REPEAT cOpcion := Readkey ; UNTIL ('1' <= cOPcion) AND (cOpcion <= '2') ; WriteLn (cOpcion) ; WriteLn ;

CASE cOpcion OF     '1' : LeerNumerosInteractivos (aiLista, iCantidad) ; '2' : LeerNumerosAleatorios (aiLista, iCantidad) ; END ;

Writeln ; Writeln ('Lista INICIAL de n£meros CON PRIMOS:') ; MostrarNumeros (aiLista, iCantidad) ;

EliminarPrimos (aiLista, iCantidad) ;

Writeln ; Writeln ('Lista FINAL  de n£meros SIN PRIMOS:') ; MostrarNumeros (aiLista, iCantidad) ; WriteLn ;

WriteLn ; WriteLn ('====================================================') ; WriteLn ('          Pulsa RETURN para terminar') ; Write  ('___________________________________________________') ; cEspera := ReadKey ;

END. (* FIN DE ARR_1_9.PAS *) code code format="pascal" PROCEDURE EliminarPrimos (VAR aiNumeros: taiVector;                         VAR iCantidad : Integer) ; VAR i : Byte ; BEGIN FOR i := iCantidad DOWNTO 1 DO       IF fnboEsPrimo(aiNumeros[i]) THEN BorrarNumero (aiLista, iCantidad, i) ; END ; { EliminarPrimos } code
 * Otra versión: **