Informa(ca. Appun( della lezione 4

Documenti analoghi
Appunti di informatica. Lezione 7 anno accademico Mario Verdicchio

Appunti di informatica. Lezione 5 anno accademico Mario Verdicchio

PROGRAMMAZIONE: Le strutture di controllo

Appunti di informatica. Lezione 4 anno accademico Mario Verdicchio

Programmazione a blocchi. Algobuild Prof. Sergio Roselli

Informatica! Appunti dal laboratorio 1!

Diagramma a blocchi per la selezione, in un mazzo di chiavi, di quella che apre un lucchetto

Informa(ca Appun% dal laboratorio 4

Due numeri naturali non nulli a, b tali che MCD(a,b) = 1 si dicono coprimi o relativamente primi.

Problemi e algoritmi. Il che cosa e il come. F. Damiani - Alg. & Lab. 04/05 (da U. de' Liguoro - Alg. & Spe. 03/04)

Problemi e algoritmi. Il che cosa ed il come. Il che cosa ed il come. Il che cosa e il come

Le strutture di controllo in C++

= < < < < < Matematica 1

Informatica/ Ing. Meccanica/ Prof. Verdicchio/ 14/02/2012 / Foglio delle domande / VERSIONE 1

10 STRUTTURE DI CONTROLLO REPEAT E WHILE. Strutture di controllo e variabili strutturate

#include <iostream> using namespace std; // int main ( ) { // --- Dichiarazione delle variabili int N ; float A, Pot;

Informatica/ Ing. Meccanica/ Edile/ Prof. Verdicchio/ 25/02/2016/ Foglio delle domande / VERSIONE 1

Programmazione I. Fondamenti di programmazione. Problemi, Algoritmi, Diagrammi di flusso

Elementi di Informatica e Programmazione

Progetto e analisi di algoritmi

Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro

Introduzione agli Algoritmi

PROGRAMMAZIONE STRUTTURATA

Compitino di Laboratorio di Informatica CdL in Matematica 13/11/2007 Teoria Compito A

PROGRAMMAZIONE IN C E C++ Prof. Enrico Terrone A. S: 2014/15

Informatica/ Ing. Meccanica/ Prof. Verdicchio/ 13/09/2013/ Foglio delle domande/versione 1

Introduzione alla programmazione

L ELABORATORE ELETTRONICO

PROGRAMMAZIONE IN C E C++

Pr1: determinare il maggiore di n numeri interi n. Fondamenti di Informatica Prof. Vittoria de Nitto Personè

c A (a c = b) Le ipotesi che abbiamo ci dicono che esistono h, k A tali che:

Istruzioni iterative (o cicliche)

Linguaggio C - le strutture di controllo: sequenza, selezione, iterazione

La ripetizione. Cicli ed iterazioni. Flusso di esecuzione ciclico. La ripetizione. Flusso di esecuzione ciclico. Errore frequente

Laboratorio di Python

COMANDI ITERATIVI. Ivan Lanese

Rappresentazione degli algoritmi

Un esempio per iniziare. Il controllo del programma in C. Altri cenni su printf() Esercizi (printf) printf( 8!=%d, fatt);

Rappresentazione con i diagrammi di flusso (Flow - chart)

Gli Array. Dichiarazione di un array

Altrimenti, il M.C.D. di a e b è anche divisore di r (e.g. a=15,b=6,r=3 che è il M.C.D.)

L ELABORATORE ELETTRONICO!

Corso di Fondamenti di Informatica Classi di istruzioni 2

6 - Blocchi e cicli. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

TEORIA DEI NUMERI. 1. Numeri naturali, interi relativi e principi d induzione

Fondamenti di Informatica

z =[a 4 a 3 a 2 a 1 a 0 ] 10

04 - Logica delle dimostrazioni

Formalismi per la descrizione di algoritmi

NUMERI PRIMI E TEORMA FONDAMENTALE DELL ARITMETICA Definizione 1. Sia p Z, p ±1. Si dice che p è primo se

Programmazione, 5 a lezione

1. DOMANDA SULLA CONGRUENZA E IL TEOREMA DI FERMAT : (MOD 23)

Sviluppo di programmi. E ora, finalmente. Si comincia! 1. Analizzare il problema. 2. Progettare una soluzione (1) E necessario capire:

Istruzioni di Ciclo. Unità 4. Domenico Daniele Bloisi

Calcolare x n = x x x (n volte)

INFORMATICA. Strutture iterative

02 - Logica delle dimostrazioni

Le Strutture di controllo Del Linguaggio C. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

Le strutture di controllo

INTRODUZIONE ALLA PROGRAMMAZIONE

Sviluppo di programmi

Sistemi Web per il turismo - lezione 3 -

Elaboratore Elettronico

IL TEOREMA FONDAMENTALE DELL ARITMETICA: DIMOSTRAZIONE VELOCE.

nota 1. Aritmetica sui numeri interi.

A.A CORSO DI ALGEBRA 1. PROFF. P. PIAZZA, E. SPINELLI. SOLUZIONE ESERCIZI FOGLIO 5.

Dall analisi alla codifica (1)

RELAZIONE DELLA PROVA DI LABORATORIO DI INFORMATICA

osservazione: 1 MCD(m,n) min(m,n) = si provano i numeri compresi tra 1 e min(m,n) conviene iniziare da min(m,n) e scendere verso 1

Monomi L insieme dei monomi

Informatica/ Ing. Meccanica/ Edile/ Prof. Verdicchio/ 17/01/2014/ Foglio delle domande / VERSIONE 1

Per gli esercizi sulla algebra booleana, si consiglia di verificare tramite tabelle di verità le equivalenze logiche proposte sulle dispense.

nota 1. Aritmetica sui numeri interi.

CORSO DI PROGRAMMAZIONE

Introduzione alla programmazione strutturata

Elementi di Algebra e di Matematica Discreta Numeri interi, divisibilità, numerazione in base n

03.x1. esercizi Sui cicli. 03-X1_Esercizi_[02] Versione del: giovedì 14 novembre Andrea Zoccheddu CORSO INFORMATICA ITI ANGIOY SASSARI

ALGORITMI 2 FINALITÁ

Scrivere il software. Scrivere il software. Interprete. Compilatore e linker. Fondamenti di Informatica

Corso di Informatica

Programmazione strutturata IV e Gli array. Dove siamo. Un esercizio. Oggi. Schema 1. Prima idea. 7. Programmazione strutturata 4 & Array

Introduzione alla programmazione Esercizi risolti

Corso di Fondamenti di Programmazione canale E-O. Un esempio. Funzioni ricorsive. La ricorsione

Strutture di controllo iterative

Programmazione web lato client con JavaScript. Marco Camurri 1

Fondamenti di Informatica 6. Algoritmi e pseudocodifica

Argomenti della lezione. Criteri di divisibilità fattorizzazione m.c.m. e M.C.D. frazioni ed espressioni

Scaletta. Cenni di computabilità. Cosa fa un programma? Definizioni (1/2) Definizioni (2/2) Problemi e domande. Stefano Mizzaro 1

Strutture di Controllo

STRUTTURE DI CONTROLLO DEL C++

Costrutti iterativi. Utilizzo dei costrutti iterativi

Linguaggio C. strutture di controllo: strutture iterative. Università degli Studi di Brescia. Docente: Massimiliano Giacomin

Introduzione agli Algoritmi 4. Problemi. Dal Problema alla Soluzione

3/10/ Divisibilità e massimo comun divisore

Esercitazione 6. Array

Matlab : le basi. Vediamo ora un esercizio di calcolo: Il volume di una sfera è dato da V=4*π*r 3 /3 dove r è il raggio.

Il nano sulle spalle del gigante

Esempio: Problema 2 Il Progetto degli Algoritmi (Il linguaggio degli schemi a blocchi: seconda parte)

Algebra di Boole: Concetti di base. E un algebra basata su tre operazioni logiche

Algoritmi e soluzione di problemi

Transcript:

Informa(ca Appun( della lezione 4

L algoritmo di Euclide per l MCD Da( due numeri A e B, per trovare il loro MCD procedere nel seguente modo: 1. dividere il maggiore per il minore 2. se il resto è 0, il divisore è l MCD 3. altrimen( fare un altra divisione: il vecchio divisore diventa il nuovo dividendo e il vecchio resto diventa il nuovo divisore, ripetere dal punto 2

Esempio con 150 e 70 dividendo divisore quoziente resto 150 70 2 10 70 10 7 0 Da( 150 e 70 in input, alla prima divisione non okeniamo resto pari a 0, quindi ne eseguiamo un altra con il divisore che diventa dividendo e resto che diventa divisore. Alla seconda divisione il resto è 0, quindi il divisore è il MCD dei due numeri iniziali. InfaL il MCD di 150 e 70 è 10.

Diagramma di flusso dell algoritmo

Considerazioni L algoritmo di Euclide e l algoritmo per trovare l MCD di due numeri visto nella lezione precedente sono la dimostrazione del fako che, se esiste un algoritmo per risolvere un problema, è possibile che ve ne siano altri In realtà, ne esistono infini( altri: bas( pensare a modificare quello di Euclide aggiungendo istruzioni come r = r + n; r = r n in un qualunque punto del diagramma (n può essere qualunque numero) Ovviamente alcune alterna(ve presentano differenze significa(ve (come quelle tra i due algoritmi propos( per l MCD), mentre altre no (l aggiunta di istruzioni inu(li non modifica la soluzione in maniera sostanziale)

Un dubbio Abbiamo visto che per 150 e 70 l algoritmo di Euclide funziona Chi ci garan(sce che l algoritmo funzioni per qualunque coppia di numeri in input? Definizione: un algoritmo si dice corre%o quando risolve il problema per il quale è stato concepito Riformuliamo la domanda: chi ci garan(sce che l algoritmo di Euclide sia correko?

Dimostrazione InnanzituKo una definizione Dimostrazione: sequenza finita di affermazioni tale che ogni affermazione è un ipotesi presa per vera oppure deriva dalle affermazioni preceden( per mezzo di ragionamen( logicamente ineccepibili; l ul(ma affermazione della sequenza si chiama tesi

Dimostrazione di correkezza Dimostriamo che l algoritmo di Euclide è correko Nel caso in cui il resto della divisione tra A e B sia 0, è ovvio che il divisore B sia l MCD, quindi in questo caso la correkezza è subito dimostrata Nel caso in cui il resto non sia 0, allora si passa a una nuova divisione: quella tra B e R Questa nuova divisione aiuta a risolvere il problema di trovare l MCD tra A e B perché i divisori di A e B e i divisori di B e R sono in realtà lo stesso insieme

Dimostrazione di correkezza Per dimostrare che due insiemi sono uguali dobbiamo: 1. dimostrare che un qualsiasi elemento del primo insieme appar(ene al secondo insieme (cioè il primo insieme è un sokoinsieme del secondo) 2. dimostrare che un qualsiasi elemento del secondo insieme appar(ene al primo insieme (cioè il secondo insieme è un sokoinsieme del primo) 3. l unica possibilità per due insiemi che sono uno un sokoinsieme dell altro è di essere coinciden(

I divisori di A e B sono divisori di B e R A:B = Q con resto di R ossia A = BQ + R, o anche R = A BQ sia k un divisore di A e di B, ovvero esistono un m e un n tale che mk = A e nk = B questo vuol dire che R = mk nkq raccogliendo k, abbiamo che R = k(m nq) k, quindi, è divisore di B per ipotesi e, per quanto mostrato, è divisore anche di R perciò k è divisore di B e di R

I divisori di B e R sono divisori di A e B Sappiamo già che A = BQ + R sia h un divisore di B e di R, ovvero esistono un s e un t tale che sh = B e th = R questo vuol dire che A = shq + th raccogliendo h, abbiamo che A = h(sq + t) h, quindi, è divisore di B per ipotesi e, per quanto mostrato, è divisore anche di A perciò k è divisore di A e di B

Dimostrazione di correkezza Il fako che i due insiemi coincidano vuol dire che la soluzione del problema MCD per A e B è la stessa del problema MCD per B e R Applicando lo stesso ragionamento, sappiamo che la soluzione non cambia nemmeno per le divisione successive Non appena troviamo che il resto di una divisione è 0, sappiamo che il divisore è l MCD della coppia dividendo- divisore Per quanto deko prima, questo sarà l MCD della coppia iniziale di numeri A e B

Avvertenze Si è riuscito a dimostrare la correkezza dell algoritmo di Euclide grazie alle proprietà matema(che del problema affrontato Non è scontato che si riesca a dimostrare sempre così facilmente la correkezza di un algoritmo Inoltre, anche se si ha un algoritmo di correkezza dimostrata, trasformandolo in programma (cioè riscrivendolo in un linguaggio di programmazione), il programmatore umano potrebbe inserire numerosi errori

CostruKo If if (condizione)!!! istruzione_1;!!istruzione_2;! Questo codice funziona così: no condizione? sì istruzione_1 istruzione_2

CostruKo If- else if (condizione)!!! istruzione_1;!!else!!! istruzione_2;! Il codice funziona così: no istruzione_2 condizione? sì istruzione_1

Ciclo while while (condizione)!! istruzione;! Il codice funziona così: no condizione? sì istruzione

Ciclo do- while do!!istruzione;! while (condizione);! istruzione Il codice funziona così: RispeKo al ciclo while, anche se la condizione è falsa condizione? l istruzione (o il blocco di istruzioni) viene eseguita almeno una volta no sì

Esercizio Scrivere un programma che chiede numeri all utente e ne stampa su schermo il doppio, finché l utente immeke 0, al che il programma saluta con ciao e termina

Diagramma della soluzione

(Parte del) programma della soluzione! int x;! cin >> x;! while (x!=0){!!cout << x*2 << \n ;!!cin >> x;! } cout << ciao\n ;!!!

Esercizio Scrivere un programma che stampa su schermo 1000 volte ciao, andando ogni volta a capo

(Parte del) programma della soluzione! int c = 0;! do{!!cout << ciao\n ;!!c = c+1;! }while (c < 1000);!!

Il ciclo for Quando il numero di ripe(zioni di un istruzione (o di un blocco di istruzioni) è prefissato, si può usare il ciclo for

for (inizializzazione; condizione; modifica) istruzione; inizializzazione no condizione? sì istruzione modifica

Soluzione con ciclo for! for(int i=0; i<1000; i = i+1)!!cout << ciao\n ;!!!

Indice del ciclo for La variabile i usata nel ciclo si chiama indice perché segna il progresso del ciclo È stata dichiarata all interno del ciclo, ma poteva essere anche dichiarata prima e poi semplicemente inizializzata nel ciclo for(i = 0; i < 1000; i = i +1) La modifica è un incremento di 1 che si può scrivere anche in maniera più sinte(ca i++ La modifica può essere di qualunque genere: i = i 1 (scrivibile in maniera più sinte(ca: i- - ) i = i + 2 i = i * 3 etc.