-- Nome File: Eratostene.adb; -- Autore: Samuel Ribi; -- Data di creazione: 26.12.2000; -- Scopo: calcola i primi NPrimi numeri primi usando il metodo di Eratostene; -- Serie 3 Esercizio 1; -- Scritto con PcGrasp su Windows ME. With ADA.Text_IO, ADA.Integer_Text_IO; Use ADA.Text_IO, ADA.Integer_Text_IO; procedure eratostene is -- numero di numeri primi da trovare NPrimi: constant INTEGER := 1000; -- dichiarazione del vettore contenente i numero primi type Num_Primi is array(1..NPrimi) of INTEGER; -- dichiarazione delle variabili N_Primi: Num_Primi := (1=>2,2=>3,others => 0); numero: INTEGER := 4; i: INTEGER := 3; div: INTEGER := 2; righe1: INTEGER := 0; righe: INTEGER; char: CHARACTER; begin loop -- controlla se numero è divisibile per uno dei numeri primi precedenti if numero mod N_Primi(div) /= 0 then div := div-1; else -- se è divisibile allora incrementa numero di 1 numero := numero +1; div := i-1; end if; if div = 0 then -- Se i = 0 allora numero è primo N_Primi(i) := numero; i := i+1; div := i-1; numero := numero +1; if i > NPrimi then -- se sono stati trovati tutti i numeri primi voluti allora esce dal ciclo exit; end if; end if; end loop; -- visualizza sullo schermo i numeri primi cercati Put_Line("Quante righe vuoi visualizzare alla volta?"); Get(righe); for i in 1..NPrimi loop Put(N_Primi(i), width => 6); Put(";"); if i mod 10 = 0 then righe1 := righe1 +1; New_Line; if righe1 = righe then righe1 := 0; Get_Immediate(char); end if; end if; end loop; New_Line(2); Put("Per uscire premi un tasto"); Get_Immediate(char); end Eratostene;