Lista+de+registros+-+Sumar+los+primos

=Lista de registros con dos campos (Numero y EsPrimos). Hay que sumar los numeros primos=

code format="pascal" PROGRAM regis_2 ; USES Crt ; CONST iMAX_NUMEROS = 50 ; iMAX_VALOR  = 100 ; TYPE taiListasNumeros = ARRAY [1..iMAX_NUMEROS] OF Integer ;

trgInformaciones = RECORD iNumero : Integer ; boPrimo : Boolean END ; targListasInformaciones = ARRAY [1..iMAX_NUMEROS] OF trgInformaciones ;

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

fnboEsPrimo := boEsPrimo ; END ;

PROCEDURE CrearListaNumeros (VAR aiListaNumeros : taiListasNumeros ;                                     iLongitud : Integer) ; VAR i : Integer ; BEGIN FOR i := 1 TO iLongitud DO      BEGIN Write (i:3, ': ') ; ReadLn (aiListaNumeros [i]) ; END ; END ; (* CrearListaNumeros *)

PROCEDURE MostrarListaNumeros (CONST aiListaNumeros : taiListasNumeros;                                         iLongitud : Integer) ; VAR i : Integer ; BEGIN FOR i := 1 TO iLongitud DO      Write (aiListaNumeros [i]:8) ; WriteLn END ; (* CrearListaNumeros *)

PROCEDURE MostrarListaRegistros (CONST  argListaInformaciones : targListasInformaciones;                                          iLongitud : Integer) ; VAR i : Integer ; BEGIN Writeln ('Numero':8, 'Primo':8) ; Writeln ('--') ; FOR i := 1 TO iLongitud DO      WITH argListaInformaciones[i] DO            BEGIN Write (iNumero:6) ; WriteLn (BoPrimo : 10) ; END ; WriteLn END ; (* CrearListaNumeros *)

PROCEDURE CrearListaInformaciones (CONST aiListaNumeros : taiListasNumeros ;                                             iLongitud : Integer ;                            VAR   argListaInformaciones : targListasInformaciones) ; VAR i : Integer ; BEGIN FOR i := 1 TO iLongitud DO      WITH  argListaInformaciones [i] DO          BEGIN iNumero := aiListaNumeros [i] ; boPrimo := fnboEsprimo (aiListaNumeros [i]) ; END ; END ; (* CrearListaInformaciones *)

FUNCTION fnrSumarPrimos (CONST argListaInformaciones : targListasInformaciones ;                                          iLongitud : Integer) : Real ; VAR i    : Integer ; rSuma : Real ; BEGIN rSuma := 0 ; FOR i := 1 TO iLongitud DO      IF argListaInformaciones [i].boPrimo THEN rSuma := rSuma + argListaInformaciones [i].iNumero ;

fnrSumarPrimos := rSuma ; END ; (* fnrSumarMultiplosDe_3 *)

VAR { Variables del programa principal --} aiListaNumeros       : taiListasNumeros ; argListaInformaciones : targListasInformaciones ; iLongitud            : Integer ; rSuma : Real ; cEspera : Char ;

BEGIN  {- PROGRAMA PRINCIPAL --} Writeln ; Writeln ; REPEAT ; Write ('Indica cu ntos n£meros quieres escribir (1..', iMAX_NUMEROS, ') : ') ; ReadLN (iLongitud) ; UNTIL (1 <= iLongitud) AND (iLongitud <= iMAX_NUMEROS) ;

Writeln ; Writeln ;

CrearListaNumeros (aiListaNumeros, iLongitud) ;

aiListaNumeros [1] := 4 ; WriteLn ('Contenido de la lista de n£meros:') ; WriteLn ('') ; Writeln ; MostrarListaNumeros (aiListaNumeros, iLongitud) ; WriteLn ('') ;

CrearListaInformaciones (aiListaNumeros, iLongitud, argListaInformaciones) ;

Writeln ; Writeln ; Write ('Creada la lista...pulsa una tecla para ver los primos y calcular su suma') ; cEspera := Readkey ; Writeln ; Writeln ; WriteLn ; WriteLn ('Contenido de la lista de registros con n£mero y la informaci¢n de primo:') ; WriteLn ('---') ; Writeln ; MostrarListaRegistros (argListaInformaciones, iLongitud) ;

rSuma := fnrSumarPrimos (argListaInformaciones, iLongitud) ; WriteLn ; Write ('Suma de los n£meros primos: ') ; Writeln (rSuma:0:0) ;

Writeln ; Writeln ; Writeln ('Pulsa una tecla para finalizar') ; cEspera := Readkey ; END. code