Laboratorio di calcolo
AA 2005/06
Prova individuale del 22/6/2006
primo turno
Create sul solito account una
cartella prova_cognome e svolgete li' la prova. La prova e' valutata su
10 punti.
Se il programma non compila perdete 5
punti, se il programma compila ma
ha seri problemi in fase di esecuzione (loop infiniti, mancanza di
protezioni...) perdete 3 punti, se il programma compila, gira ma non
fornisce i risultati richiesti perdete 2 punti. I punti rimenenti
possono essere ulteriormente ridotti se non sono state seguite tutte le
indicazioni (ad esempio se si sceglie di non tulizzare delle funzioni)
o se non viene stampato il risultato o specificato quali valori ci si
aspetta che l'utente inserisca, o se il programma non sia comprensibile
per mancanza di commenti.
Scrivere un programma che elenchi tutti i numeri primi compresi tra 1 e
un numero massimo scelto dall'utente.
Il programma dovra' invocare una funzione che accetti un argomento
intero k (che dovra' essere maggiore o uguale a 1) e che restituisca un
intero
che valga 1 per i numeri primi e zero per i non primi, secondo il
prototipo
int
numero_primo(int k);
Per ottimizzare il riconoscimento dei numeri primi potete implementare
l'algoritmo qui descritto o un altro di vostra scelta.
1. per controllare se k sia divisibile per un certo
numero intero n utilizzate l'operatore modulo (%).
Se n e' un divisore per k allora k%n, resto
della divisione tra gli interi k e n, sara' 0
2. provare a dividere k per 2, 3, 3+2, 3+2+2,
3+2+2+2 .... e fermatevi
- quando
trovate un buon divisore (k non e' primo), oppure
- quando il
divisore abbia superato il valore della radice quadrata di k (k e'
primo)
Suggerimenti:
scrivere un file .h con il prototipo della funzione
scrivere un file .cc contenente la funzione inizialmente vuota (con
solo un return 1;)
scrivere un file .cc contenente il programma main
nel main leggere il numero massimo scelto dall'utente e scrivere il
codice che per ogni numero chiami numero_primo, controlli il risultato
ed eventualmente stampi il numero, se e' primo
solo quando questa parte compila e gira (chiamando primi tutti i
numeri!) dedicatevi allo sviluppo dell'algoritmo da inserire nella
funzione.