Calcolo del minimo comune multiplo (m.c.m.) Luigi Sante

Slides:



Advertisements
Presentazioni simili
INFORMATICA Altre Istruzioni di I/O
Advertisements

Calcolo di valori approssimati delle radici
INFORMATICA Algoritmi fondamentali
Programma: main() { istruzioni } ; assegnazione condizione ciclo istruzione: ;
if (condizione.) { blocco_istruzioni } else
Ricorsione Procedure e funzioni ricorsive. Definizioni Un oggetto si dice ricorsivo se è definito totalmente o parzialmente in termini di sé stesso La.
Iterazione while – do while - for.
Iterazione A. Ferrari.
Procedure e funzioni ricorsive
Sviluppo di programmi strutturati
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità F3 Iterazione.
MATLAB. Scopo della lezione Programmare in Matlab Funzioni Cicli Operatori relazionali Esercizi vari.
Dallalgoritmo minimax allalgoritmo alfa-beta. MINIMAX int minimax(stato, livello) { if((livello == max_livello) || condizione_uscita(stato)) { CAMMINO.
ESERCITAZIONE N. 5 ESERCIZIO N. 1 Autore: Biagio Brattoli S I Corso.
INFORMATICA Strutture iterative
Iterazione enumerativa (for)
PROGRAMMI DI RICERCA E ORDINAMENTO
Esercizi su alberi binari
Esercizi di esonero (a.a. 2007/2008) Compito C, terzo esercizio Data una sequenza di caratteri s1 ed una stringa s2 diciamo che s1 è contenuta in s2 se.
Algoritmi Politecnico di Milano
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 2 – Info B Marco D. Santambrogio – Riccardo Cattaneo –
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 6: 16 Maggio 2013 Gianluca Durelli – Marco D. Santambrogio –
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 6: 13 Maggio 2013 Gianluca Durelli – Marco D. Santambrogio –
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 6 – Info B Marco D. Santambrogio – Riccardo Cattaneo –
Informatica di base A.A. 2003/2004 Algoritmi e programmi
Informatica 2. Concetti fondamentali di programmazione Programmare vuol dire scrivere un algoritmo in un linguaggio che faccia funzionare un calcolatore.
Capitolo 4 Ordinamento Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati
Capitolo 4 Ordinamento Algoritmi e Strutture Dati.
1 Corso di Informatica (Programmazione) Lezione 11 (19 novembre 2008) Programmazione in Java: controllo del flusso (iterazione)
Corso di Laurea in Biotecnologie Informatica (Programmazione)
CORSO DI PROGRAMMAZIONE II
Selezione (=scelta) con “if-else”
Strutture di controllo nel C
Le funzioni.
Rete Sincrona Una rete sequenziale sincrona, è dotata di un ingresso E, di un segnale di Clock e uno di reset. Ad ogni fronte del Clock, deve essere campionato.
Calcolo del Massimo Comun Divisore
CODIFICA Da flow-chart a C++.
Cicli in Fortran I cicli consentono di eseguire una sequenza di istruzioni più di una volta due tipi: Cicli iterativi Cicli while.
Lezione 7 Strutture di controllo Il ciclo while
Massimo Comun Divisore
Radice quadrata di un numero
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 2 – Info B Marco D. Santambrogio – Riccardo Cattaneo –
14 marzo 2002 Avvisi:.
Esercizi Liste.
Capitolo 4 (Deitel) Le strutture di controllo in C
Corso di Programmazione in Java – Esercizio n° 001
Programmazione Strutturata
Massimo comun divisore
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 1 Cicli ed asserzioni Corso di Informatica 2 a.a. 2003/04 Lezione 1.
L’iterazione while La sintassi è la seguente: while (condizione) {
Sistemi e Tecnologie Informatiche Ricorsione Umberto Ferraro Petrillo.
Ripetizione La vera potenza dei programmi per computer risiede nella capacità di ripetere lo stesso calcolo o sequenza di istruzioni più volte, ogni volta.
TURBOPASCAL L’iterazione - prof. V. Riboldi -.
Corso JAVA Lezione n° 03 Istituto Statale di Istruzione Superiore “F. Enriques”
ALGORITMO Un algoritmo è un procedimento che risolve un determinato problema attraverso un numero finito di passi. Un formalismo che permette di rappresentare.
R 255 G 211 B 8 R 255 G 175 B 0 R 127 G 16 B 162 R 163 G 166 B 173 R 104 G 113 B 122 R 234 G 234 B 234 R 175 G 0 B 51 R 0 G 0 B 0 R 255 G 255 B 255 Supporting.
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.
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 8 Oggetti statici e dinamici. Classi annidate. Costruttori/distruttori.
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
1 Informatica Generale Marzia Buscemi Ricevimento: Giovedì ore , Dipartimento di Informatica, stanza 306-PS o per posta.
C++:Strutture di Controllo
Complessità Computazionale
Problema dell’Ordinamento. Problema dell’ordinamento Formulazione del problema –Si vuole ordinare una lista di elementi secondo una data proprietà P Esempio:
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
Strutture di controllo
6/11/01Ordinamento 1 Un esempio di algoritmi: ordinamento.
Un numero è primo se: è intero e maggiore di 1 è divisibile solo per se stesso e per 1 È un numero primo Infatti: 3 è intero; 3 > 1 3 è divisibile solo.
DEFINIZIONE. I multipli di un numero sono costituiti dall’insieme dei prodotti ottenuti moltiplicando quel numero per la successione dei numeri naturali.
Transcript della presentazione:

Calcolo del minimo comune multiplo (m.c.m.) Luigi Sante 183948

minimo comune multiplo Scrivere un programma che calcoli il minimo comune multiplo di due numeri, con l'ausilio di una funzione che generi un vettore dei primi N numeri primi.

Passaggi fondamentali Calcolare i numeri primi e inserirli in un vettore Confrontare i due numeri dati con i numeri primi e calcolarne il minimo comune multiplo

Vettore dei numeri primi Un numero è primo se è divisibile solo per se stesso e per uno. I numeri primi di conseguenza possono essere ricavati escludendo i multipli. Per esempio: sapendo che 2 è primo , tutti i numeri multipli ovvero pari non sono primi. 3 non è multiplo di 2 quindi è primo , mentre il seguente 4 non lo è... In pratica, un numero è primo se non è divisibile per i numeri primi che lo precedono.

Vettore dei numeri primi (2) Bisogna confrontare il numero per tutti i numeri primi calcolati in precedenza e verificare che non sia divisibile (ovvero multiplo) 2 3 5 7 11 13 numero i i_riemp Numero_primo

Vettore dei numeri primi (3) primo=VERO; while(i < i_riemp && primo) { if((numero % numero_primo[i]) == 0) primo=FALSO; else i++; } Alla fine del ciclo, il flag primo dice se si è trovato un numero primo.

Vettore dei numeri primi (4) Se il numero è primo, lo si inserisce nel vettore nella prima posizione vuota (puntata da i_riemp) e si incrementa l'indice i_riemp (che indica anche il numero di numeri primi già trovati). Si incrementa il numero per una nuova ricerca. if(primo) { numero_primo[i_riemp]=numero; i_riemp++; } numero++;

Vettore dei numeri primi (5) L’intero blocco deve essere eseguito finché non si è raggiunto il numero di primi richiesto (test su i_riemp). Per le inizializzazioni, si sa già che 2 è il primo numero primo: lo si inserisce nel vettore e si comincia con numero = 3 (l’algoritmo sarebe comunque corretto anche partendo con il vettore vuoto (i_riemp = 0) e con numero = 2)

Vettore dei numeri primi (6) numero_primo[0]=2; i_riemp=1; numero=3; while(i_riemp < num_primi) { primo=VERO; i=0; while(i < i_riemp && primo) if(numero%numero_primo[i] == 0) primo = FALSO; else i++; } if(primo) numero_primo[i_riemp]=numero; i_riemp++; numero++;

Funzione calcola_primi Ora che abbiamo trovato come riempire il vettore dei numeri primi , passiamo a scrivere l’intestazione (e il prototipo) della funzione. void calcola_primi(int numero_primo[], int num_primi);

m.c.m. Il mcm è il prodotto di tutti i fattori primi comuni e non comuni, presi una sola volta con il massimo esponente.

m.c.m. (2) Il mcm è quindi risultato di un prodotto sequenziale tra numeri primi mcm=1; mcm = mcm * vettore_primi[indice_vettore];

m.c.m. (3) Per prendere il massimo esponente del numero primo considerato bisogna ripetere finché è fattore di almeno uno dei due numeri mcm=1; while(a%vettore_primi[indice_vettore]==0 || b%vettore_primi[indice_vettore]==0) { mcm = mcm * vettore_primi[indice_vettore]; }

m.c.m. (4) Ad ogni passaggio si divide il numero che ha soddisfatto la condizione per il numero primo preso in considerazione mcm=1; while(a%vettore_primi[indice_vettore]==0 || b%vettore_primi[indice_vettore]==0) { mcm = mcm * vettore_primi[indice_vettore]; if(a%vettore_primi[indice_vettore]==0) a=a/vettore_primi[indice_vettore]; if(b%vettore_primi[indice_vettore]==0) b=b/vettore_primi[indice_vettore]; }

m.c.m. (5) Quando la condizione non si verifica più, si esce dal ciclo e si passa al numero primo successivo, incrementando l'indice del vettore primo di 1. Quindi bisogna anche inizializzare prima l'indice a 0 indice_vettore=0; mcm=1; while(a%vettore_primi[indice_vettore]==0 || b%vettore_primi[indice_vettore]==0) { mcm = mcm * vettore_primi[indice_vettore]; if(a%vettore_primi[indice_vettore]==0) a=a/vettore_primi[indice_vettore]; if(b%vettore_primi[indice_vettore]==0) b=b/vettore_primi[indice_vettore]; } indice_vettore++;

m.c.m. (6) Tutto va ripetuto finché entrambi i numeri sono divisibili per i numeri primi e quindi diversi da 1 mcm=1; indice_vettore=0; while(a!=1 || b!=1) { while(a%vettore_primi[indice_vettore]==0 || b%vettore_primi[indice_vettore]==0) mcm = mcm * vettore_primi[indice_vettore]; if(a%vettore_primi[indice_vettore]==0) a=a/vettore_primi[indice_vettore]; if(b%vettore_primi[indice_vettore]==0) b=b/vettore_primi[indice_vettore]; } indice_vettore++;