Modifica Crivello di Eratostene

Slides:



Advertisements
Presentazioni simili
Fondamenti di Informatica
Advertisements

I numeri primi ci sono noti sin da tempi antichi: un esempio ne è Euclide che li studiò attorno al 300a.c. I numeri primi.
Calcolo di valori approssimati delle radici
Argomenti della lezione
Package Utilizzo classi.
Recupero debito quarto anno Primo incontro Esercizi
Iterazione Capitolo 17 febbraio 2004 Iterazione.
Programmazione Ingegneria TLC
Esercizi su alberi binari di ricerca
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2007/2008 Prof.ssa Chiara Petrioli Corso di Laurea.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 6: 16 Maggio 2013 Gianluca Durelli – Marco D. Santambrogio –
1 Corso di Informatica (Programmazione) Lezione 11 (19 novembre 2008) Programmazione in Java: controllo del flusso (iterazione)
1 Corso di Informatica (Programmazione) Esercitazione 1 (26 novembre 2008)
Astrazioni sul controllo Iteratori. 2 Nuove iterazioni Definendo un nuovo tipo come collezione di oggetti (p. es., set) si vorrebbe disporre anche di.
CORSO DI PROGRAMMAZIONE II
Array bidimensionali Paragrafo5.
Scomposizione di stringhe
Progetto di algoritmi: metodologia "Divide et Impera"
Soluzione Esercizio - Classe Vettore
Argomenti della lezione
APPUNTI SUL LINGUAGGIO C
ITERAZIONE e RICORSIONE (eseguire uno stesso calcolo ripetutamente) ITERAZIONE: ripetere piu volte una sequenza di operazioni istruzioni: for, while, do.
ASD - Esercitazioni Corso di Algoritmi e strutture dati Anno accademico
Esercizio: Copiare un file in un nuovo file mediante le funzioni read e write.
Politecnico di Milano Esercizi Preparazione alla prima prova intermedia.
Le liste dinamiche La ricorsione
Java Collections.
Crivello Di Eratostene (fonte wikipedia
Algoritmi e strutture dati
Diagramma di flusso del problema del Calcolo del Bollo di Circolazione
Programmazione concorrente
Esercizi Liste.
Piero Scotto - C141 C14 #7 Do While – Break Funzioni ricorsive.
Corso JAVA Lezione n° 11 Istituto Statale di Istruzione Superiore “F. Enriques”
Conversione da base 10 a base X (Utilizzo della pila)
Corso di Programmazione in Java – Esercizio n° 001
Diagramma di flusso del problema dello stipendio del rappresentante.
Appunti di Java (J2SDK 1.4.2, JDK 1.6.0) prof. Antonella Schiavon settembre 2009.
Ricerca sequenziale in un array di interi
Esercizi Swing.
Algoritmo che viene utilizzato per elencare gli elementi di un insieme secondo una sequenza stabilita da una relazione d'ordine, in modo che ogni elemento.
Lezione n° 07 - Esercitazione
Esercizi.
L’iterazione while La sintassi è la seguente: while (condizione) {
Ripetizione La vera potenza dei programmi per computer risiede nella capacità di ripetere lo stesso calcolo o sequenza di istruzioni più volte, ogni volta.
LEZIONI DI MATEMATICA A cura di: Federico e Aris
Fondamenti di informatica Oggetti e Java Luca Cabibbo Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies.
Heap concetti ed applicazioni. maggio 2002ASD - Heap2 heap heap = catasta condizione di heap 1.albero binario perfettamente bilanciato 2.tutte le foglie.
AlgoLab - MST code binomiali Algoritmi per il calcolo di MST: uso di code unificabili Laboratorio di Algoritmi 02/03 Prof. Ugo de’ Liguoro.
Esercitazione su Vector. Permette di definire collezioni di dati generiche, che sono in grado di memorizzare elementi di ogni sottotipo di Object Definito.
Strutture di controllo Esercizi!. Utilizzare i metodi: I modi per poter richiamare un metodo, di una classe (ad esempio SavitchIn) sono due. 1) E’ sempre.
Informatica B Allievi Elettrici - AA Fondamenti della programmazione in linguaggio C (II) Istruzioni e strutture di controllo.
Università di Torino – Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a prof. Viviana Bono Blocco 7 – Array.
Informatica 4 Funzioni. FUNZIONE: definizione MATEMATICA Relazione (o applicazione) binaria tra due insiemi A e B che associa a ogni elemento di A un.
Astrazione di dati Dati Astratti: cosa e perchè Dati Astratti: due meccanismi differenti Dati Astratti: due meccanismi differenti Astrazione e incapsulamento.
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
Nucleo di Java: Struttura e Semantica Espressioni Assegnamento Controllo di sequenza Dichiarazioni.
Metodologie di Programmazione Esercizi sulla semantica di Java.
Sistemi di elaborazione dell’informazione Modulo 4 - Tecniche di programmazione distribuita Unità didattica 1 - Socket library Ernesto Damiani Lezione.
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
1 Java secondo contatto Nel tunnel una luce…. 2 Esercizio - Contatore Definire la classe Contatore con le seguenti caratteristiche:  Il metodo getValore.
Rapporto incrementale Calcolare il rapporto incrementale.
Introduzione. 2 Perché Java? Java è un linguaggio di programmazione nato per essere eseguito su macchine e sistemi operativi molto diversi fra loro. A.
Cicli e Array. 2 Costrutto while while(espressione) { … } Il codice dentro le parentesi graffe viene eseguito finché la condizione è vera Potrebbe non.
Input in Java. Uso Scanner Un oggetto per la lettura dalla tastiera Piuttosto, per rappresentare la tastiera del nostro calcolatore useremo un oggetto.
Test. 2 Compito 1 Esercizio 3 Creare una classe film con i seguenti attributi: titolo, genere, 3D, durata; creare inoltre il costruttore parametrizzato.
Slideplayer esercizio.
Esercizi.
Composizioni di classi
Java Costruttore di copia e GetStatus.
Transcript della presentazione:

Modifica Crivello di Eratostene Esercizio n° 009 Modifica Crivello di Eratostene

/** * Calcola il numero di primi minori di n */ Corso di Programmazione in Java – Esercizio n° 009 Nelle lezioni precedenti abbiamo avuto modo di conoscere il Crivello di Eratostene, metodo utilizzato per ricercare i numeri primi contenuti nei primi n numeri naturali… /** * Calcola il numero di primi minori di n */ import java.util.Bitset; int Crivello_Eratostene(int n) { BitSet primi = new BitSet(n); primi.set(2,n); int i=1; while (i*2<n) { i = primi.nextSetBit(i+1); for(int k=i*2; k<n; k+=i) primi.clear(k); } return primi.cardinality(); Modificare l’esempio utilizzando un Vector al posto di un BitSet. Fornire non solo il numero dei primi trovati, ma anche quali sono. Istituto Statale di Istruzione Superiore “F. Enriques”

La prima soluzione che mi è venuta in mente è la seguente: Corso di Programmazione in Java – Esercizio n° 009 La prima soluzione che mi è venuta in mente è la seguente: Creo un vettore contenente un numero di booleani pari al numero di interi dell’intervallo che devo prendere in considerazione. Setto il valore di tutti gli elementi su Vero. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 Setto il valore di 0 e 1 su Falso perché non sono primi per default. Partendo dall’inizio scorro il vettore alla ricerca di elementi “Vero” e ogni volta che ne trovo uno rendo “Falso” tutti i suoi multipli, quindi partendo dal 2 … V F V F V Istituto Statale di Istruzione Superiore “F. Enriques”

che è una informazione che si può utilizzare gratuitamente… Corso di Programmazione in Java – Esercizio n° 009 Poi mi sposto sull’elemento “Vero” successivo, cioè il 3, e ricomincio… ecc.. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 Come avrete potuto notare, il vettore non contiene il numero da analizzare, ma un valore booleano, per analizzare il numero si sfrutta l’indice del vettore… visto che è una informazione che si può utilizzare gratuitamente… Quindi per fornire la cardinalità dei nostri numeri primi, occorrerà scorrere il vettore e contare quanti elementi sono impostati come “Vero”. Per fornire l’elenco dei numeri primi trovati invece, occorrerà scorrere di nuovo il vettore ma a differenza del punto precedente questa volta non si effettua la somma, ma si stampa semplicemente l’indice dell’elemento il cui valore è impostato a “Vero”. Per risolvere il problema ho creato una classe Eratostene, con un costruttore che, dato un intero, si calcola il vettore con il metodo visto adesso, e due metodi stampa_cardinalita e stampa_contenuto. F V Istituto Statale di Istruzione Superiore “F. Enriques”

Vector primi= new Vector( ); Corso di Programmazione in Java – Esercizio n° 009 class Eratostene { private int n; Vector primi= new Vector( ); public Eratostene(int numero_interi) //Costruttore n=numero_interi; Boolean falso= new Boolean(false); //I vettori possono contenere soltanto Boolean vero= new Boolean(true); //oggetti e non tipi fondamentali… for(int i=0; i<n; i++) primi.insertElementAt(vero,i); //Setto tutti gli elementi a “Vero” primi.setElementAt(falso,0); //Lo zero non è un numero primo primi.setElementAt(falso,1); //Il numero 1 non è un numero primo for(int i=0; i*2<n; i++) //Scorro il vettore… if(((Boolean)primi.elementAt(i)) = = true) //…alla ricerca di elementi “Vero” for(int k=i*2; k<n; k+=i) //In caso positivo cerco i suoi multipli… primi.setElementAt(falso, k); // …e li setto come “Falso” } … la classe Eratostene continua nella diapositiva successiva … Istituto Statale di Istruzione Superiore “F. Enriques”

…continuo della classe Eratostene della diapositiva precedente … Corso di Programmazione in Java – Esercizio n° 009 …continuo della classe Eratostene della diapositiva precedente … public void stampa_cardinalita( ) //Stampa la cardinalità del nostro insieme { // di numeri primi int j=0; for(int i=0; i<n; i++) { if (((Boolean)primi.elementAt(i)) = = true) j++; } System.out.println("I primi contenuti nell'intervallo tra 0 e "+ (n-1) +" sono: " +j); public void stampa_primi( ) //Stampa i numeri primi individuati System.out.println("I primi nell'intervallo tra 0 e "+ (n-1) +" sono:"); System.out.print(i+" "); //NOTA BENE, Questa stampa non stampa il } //valore dell’elemento ma il suo indice…. Istituto Statale di Istruzione Superiore “F. Enriques”

se il risultato ottenuto è effettivamente corretto oppure no. Corso di Programmazione in Java – Esercizio n° 009 A questo punto non rimane altro da fare che scrivere il main che istanzi un oggetto dalla classe che abbiamo appena creato; Ciò ci permetterà di verificare se il risultato ottenuto è effettivamente corretto oppure no. public static void main(String[] args) { // TODO code application logic here Eratostene x = new Eratostene(100); x.stampa_cardinalita(); x.stampa_primi(); } Con cui ottengo il seguente risultato: I primi contenuti nell'intervallo tra 0 e 99 sono: 25 I primi nell'intervallo tra 0 e 99 sono: 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 Istituto Statale di Istruzione Superiore “F. Enriques”