Elementi di Informatica e Programmazione

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

1 Multipli e sottomultipli. Divisibilità

Istruzioni iterative. Istruzioni iterative

ESERCIZI DI PROGRAMMAZIONE. - condizionali e cicli -

MATEMATICA DI BASE 1

Introduzione alla programmazione Esercizi risolti

= < < < < < Matematica 1

1 Multipli di un numero

A lezione sono stati presentati i seguenti passi per risolvere un problema:

Iterazione determinata e indeterminata

PROGRAMMAZIONE STRUTTURATA

Un polinomio è un espressione algebrica data dalla somma di più monomi.

Algoritmi e soluzione di problemi

CORSO ZERO DI MATEMATICA per Ing. Chimica e Ing. delle Telecomunicazioni MONOMI E POLINOMI Prof. Erasmo Modica

Liceo scientifico Pascal Manerbio Esercizi di matematica per le vacanze estive

Appunti di informatica. Lezione 4 anno accademico Mario Verdicchio

Le strutture di controllo in C++

Metodo di Euclide delle sottrazioni successive per il calcolo del M.C.D.

PROGRAMMA DI MATEMATICA CONTENUTI.

MAPPA MULTIPLI E DIVISORI

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

UNIVERSITÀ DEGLI STUDI DI PAVIA FACOLTÀ DI INGEGNERIA. Matlab: esempi ed esercizi

Università del Piemonte Orientale

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

Problemi, algoritmi e oggetti

Fondamenti di Programmazione

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.

Elementi di Informatica e Programmazione

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

4 0 = 4 2 = 4 4 = 4 6 = 0.

Lezione 4. Problemi trattabili e soluzioni sempre più efficienti. Gianluca Rossi

Esercitazione 6. Array

Richiami di aritmetica (1)

ISTITUTO TECNICO COMMERCIALE DIONIGI PANEDDA Via Mameli, Olbia SS Tel Fax

Sin dalla più remota antichità il concetto di numero primo affascina e confonde gli esseri umani.

posso assicurare che le mie sono ancora maggiori

Corso di Informatica

LABORATORIO DI INFORMATICA

Esercizi di programmazione in linguaggio C - Costrutto iterazione

Le frazioni algebriche

Strutturare il codice: sottoprogrammi

ALGEBRA I: SOLUZIONI QUINTA ESERCITAZIONE 9 maggio 2011

Moltiplicazione. Divisione. Multipli e divisori

Introduzione all algebra

Prof. Pagani Corrado ALGORITMI ESERCITAZIONI CICLI

Il nano sulle spalle del gigante

Gruppi, Anelli, Campi

1 (UNO) INDICA LA QUANTITÀ DI ELEMENTI DELL INSIEME UNITARIO B = (CLASSI CHE HANNO LA LIM) SOLO LA 4ª A HA LA LIM QUINDI L INSIEME È UNITARIO.

DIVISIONE TRA POLINOMI IN UNA VARIABILE

Mini-Corso di Informatica

Curricolo verticale MATEMATICA

04 - Numeri Complessi

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

Università degli Studi del Piemonte Orientale Facoltà di Scienze M.F.N. Precorso di Matematica APPUNTI (preparati da Pier Luigi Ferrari)

PREPARAZIONE ALLE GARE DI MATEMATICA - CORSO BASE

0 Insiemi, funzioni, numeri

Fondamenti della Matematica a.a LUMSA. Basi di numerazione. Scrittura in forma polinomiale e scrittura in una base

Insiemistica. Capitolo 1. Prerequisiti. Obiettivi. Gli insiemi numerici di base Divisibilità e fattorizzazione nei numeri interi

INFORMATICA GENERALE Prof. Alberto Postiglione Dipartimento Scienze della Comunicazione Università degli Studi di Salerno

Dall analisi alla codifica (2)

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

Algoritmi e diagrammi di flusso versione biennio

Appunti di informatica. Lezione 7 anno accademico Mario Verdicchio

Istruzioni iterative (o cicliche)

CONGRUENZE. proprietà delle congruenze: la congruenza è una relazione di equivalenza inoltre: Criteri di divisibilità

LEZIONE 1. del 10 ottobre 2011

Laboratorio di Informatica. Esercitazione su algoritmi e diagrammi di flusso

Esercizi di Algoritmi e Strutture Dati

ESERCIZI SVOLTI SUL CALCOLO INTEGRALE

Possibile applicazione

Diagrammi a blocchi 1

ESERCIZI DI PROBLEM SOLVING E COMPOSIZIONE DEI DIAGRAMMI DI FLUSSO per le classi seconde

PROGRAMMA SVOLTO DI INFORMATICA ANNO SCOLASTICO 2013/2014. DOCENTE: Villani Chiara

DISPENSA NUMERI MULTIPLI, DIVISORI, PRIMI, MCD E mcm DEFINIZIONI. Multiplo di un numero

Si dice multiplo di un numero a diverso da zero, ogni numero naturale che si ottiene moltiplicando a per ciascun elemento di N.

Programma di matematica classe I sez. E a.s

Scomposizione di polinomi. Scomporre un polinomio significa riscriverlo nel PRODOTTO di due o più polinomi di grado inferiore

INFORMATICA DI BASE Linguaggio C Prof. Andrea Borghesan

Matematica con Python

Equazioni di 2 grado

ESERCIZI DI PROGRAMMAZIONE DA SVOLGERE INDIVIDUALMENTE - parte 1 -

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.)

Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro

Introduzione alla TEORIA DEI NUMERI

04 - Logica delle dimostrazioni

Analisi e Programmazione

Ampliamento di N: le frazioni

SCHEMI DI MATEMATICA

Corso di Calcolo Numerico

Informatica B. Sezione D. Scuola di Ingegneria Industriale Laurea in Ingegneria Energetica Laurea in Ingegneria Meccanica

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

PROGRAMMAZIONE DISCIPLINARE

Esercitazione 3. Espressioni booleane I comandi if-else e while

Firmware Division. Prof. Alberto Borghese Dipartimento di Informatica Università degli Studi di Milano

CORSO DI ELEMENTI DI INFORMATICA

Esercizi sulla complessità di frammenti di pseudo-codice

PON Liceo Scientifico Leonardo da Vinci Vallo della Lucania Nuovi percorsi matematici: Osservare, descrivere, costruire.

Diagrammi a blocchi 1

6. Soluzione degli esercizi su: massimo comun divisore e minimo comune multiplo.

Esercizi di Algebra 2, C.S. in Matematica, a.a

Transcript:

Università degli Studi di Brescia Elementi di Informatica e Programmazione ESERCITAZIONE Docente: A. Saetti Esercitatori: M. Sechi, A. Bonisoli Vers. 04/10/2017 Docente: Alessandro Saetti Elementi di informatica e programmazione Università degli studi di Brescia D.I.M.I A.A. 2017/2018 Dipartimento di Ingegneria dell'informazione Corsi di Laurea di Ing. Informatica, Ing. Elettronica e delle Telecomunicazioni, Ing. dell'automazione Industriale Elementi di informatica e programmazione

2 Visualizzare i numeri primi inferiori a 1000 sfruttando la seguente proprietà: un numero x è primo se e solo se non è divisibile per alcun numero primo y < x maggiore di 1. Suggerimenti Procedere per step successivi lasciando inizialmente "in sospeso" la modalità che ci permette di stabilire se un numero x è primo oppure no. Calcolare il resto della divisione intera tra l'intero corrente x e tutti gli interi minori o uguali a x.

3 Per risolvere l'esercizio occorre: Duello tra Orazi e Curiazi Roma e Alba Longa 1) Scorrere un numero da 2 a 1000 2) Essere in grado di stabilire se un numero è primo oppure no DIVIDE ET IMPERA!

4 ciclo a condizione iniziale Decodifico Lascio in sospeso il metodo che mi permette di stabilire se un numero è primo!

5 Analizzo ora come determinare se un numero è primo

Il numero corrente è primo? 6

7 Visualizzare i primi 1000 numeri primi sfruttando la seguente proprietà: un numero x è primo se e solo se non è divisibile per alcun numero primo y < x Suggerimenti Procedere per step successivi lasciando inizialmente "in sospeso" la modalità che ci permette di stabilire se un numero x è primo oppure no. Posso diminuire il numero di iterazioni se considero che un numero x non è primo quando esiste un intero y minore di x e maggiore di 1 che risulti essere un suo divisore intero.

8 Per risolvere l'esercizio occorre: Duello tra Orazi e Curiazi Roma e Alba Longa 1) Saper contare man mano i numeri primi trovati 2) Essere in grado di stabilire se un numero è primo o meno 3) Scorrere un numero imprecisato di interi a partire da 2. DIVIDE ET IMPERA!

9 ciclo a condizione iniziale ciclo a condizione finale

Decodifico 10

11 Riutilizzo lo stesso diagramma del precedente esempio

Il numero corrente è primo? 12

13 α Per valutare se un numero è primo o meno si poteva procedere anche nel seguente modo α A B A B

14 Calcolare il massimo comune divisore tra 2 interi Suggerimenti Per individuare se un candidato divisore i è un effettivo divisore devo verificare se x mod i == 0 AND y mod i == 0 Questa verifica deve essere effettuata per tutti i candidati divisori da 1 a MIN, ovvero MIN volte Quando il corpo del ciclo deve essere ripetuto un determinato numero di volte è facile impostare la condizione di permanenza del ciclo in funzione del numero di iterazioni In questo caso non c è convenienza ad utilizzare il ciclo a condizione finale (non c è alcuna duplicazione di blocchi). Quando non c è convenienza si preferisce lo schema a blocchi a condizione iniziale per facilità di lettura

1 X Y MCD 15

16

17 Diagramma di flusso dell algoritmo che calcola il MCD E' l'unica soluzione?

1 MCD X Y Versione 2 18

1 X Y MCD Versione 2B 19

1 MCD X Y Versione 2B 20

21 Diagramma di flusso dell algoritmo che calcola il MCD e se x e y sono uguali? fine min x no MCD =, mcd inizio x y 3 sì no x < y 3 3 6 contatore 1 contatore<=min 10 7 11 1 e 2 min y 4 e 5 sì (x mod contatore == 0) AND (y mod contatore == 0) no contatore contatore + 1 sì Ciclo a condizione iniziale 8 mcd contatore 9

22 Calcolare il massimo comune divisore tra 2 interi Suggerimenti Algoritmo di Euclide Si basa sulla constatazione che: Se x = y allora MCD(x,y) = x (oppure y) Se x y t.c. x>y, allora MCD(x,y) = MCD(x y,y) Infatti k è divisore di x,y k è divisore di x y e y: 1. Dimostriamo quindi che "se k è divisore di x e y allora ( ) k è divisore di x y e y". Per ipotesi abbiamo che k è un divisore comune a x e a y. Pertanto possiamo scrivere x = k * d e y = k * r. La differenza x y = k*(d r) per cui k divide x y. 2. Dimostriamo ora l'implicazione inversa ovvero che "se k è divisore di x y e y allora ( ) k è divisore di x e y". Pertanto possiamo scrivere x y = k * d e y = k * r. La somma (x y)+y = k*d+k*r= k*(d+r). Chiaramente (x y)+y = x pertanto k è un divisore comune ad x e y. La relazione appena dimostrata evidenzia che tutti i divisori comuni di x e y coincidono con i divisori comuni di x y e y e dunque anche i massimi comuni divisori fra le due coppie di numeri coincidono.

23 Diagramma di flusso dell algoritmo di Euclide che calcola il MCD no inizio x y x y Ciclo a condizione iniziale fine sì x > y no x x y y y x z y MCD =, z sì

24 Acquisire da tastiera una successione di interi che termina col primo intero x pari. Visualizzare due numeri primi la cui somma è uguale a x. Suggerimento: Perognicoppiadinumeriprimilacuisommaèpariax devo determinare la numerosità div1 e div2 dei loro divisori. Questa operazione va ripetuta fino a quando determino la prima coppia di numeri primi la cui somma è pari a x. Almeno per una coppia devo calcolare la quantità dei loro divisori, quindi il corpo del ciclo va eseguito almeno una volta pertanto è meglio utilizzare un ciclo a condizione finale. Sia a 1 il primo addendo e a 2 il secondo. Affinché la somma a 1 + a 2 sia uguale a x, il secondo addendo a 2 deve essere necessariamente uguale ad x a 1 La condizione di terminazione del ciclo è che entrambi i numeri siano primi, quindi div1 == 0 AND div2 == 0. Negando la condizione ed applicando De Morgan si ottiene la condizione di permanenza. Esercizio per casa: Visualizzare i tre numeri primi la cui somma è pari ad un intero maggiore di 5 acquisito da tastiera

25 L'esercizio prende spunto dalla congettura di Goldbach, uno dei più vecchi problemi irrisolti nella teoria dei numeri. Essa afferma che qualsiasi numero pari maggiore di 2 può essere scritto come somma di due numeri primi (che possono essere anche uguali). Dato un numero N tutte le scomposizioni additive tali per cui X=a 1 +a 2 possono essere ottenute ponendo a 1 =i e a 2 =X i con i che scorre da 2 fino a i X/2. In realtà tale condizione non ci serve. Poiché per via della congettura tali primi esistono! N a 1 +a 2 N 2+(N 2) N 3+(N 3) N i+(n i) N (N 3)+3 N (N 2)+2

26 inizio x Diagramma di flusso dell algoritmo che esprime un numero pari come somma di due numeri primi x mod 2 == 0 sì no a1= 2 a2 = x a1 div1 = divisori(a1) div2 = divisori(a2) div1== 0 && div2=0 No a1= a1+ 1 Si a1 a2 fine Versione 1

27 inizio x sì x mod 2 == 0 sì a1= 1 a1= a1+ 1 a2 = x a1 div1 = divisori(a1) div2 = divisori(a2) no div1!= 0 OR div2!= 0 no a1 a2 Ulteriore diagramma di flusso dell algoritmo che esprime un numero pari come somma di due numeri primi fine Versione 2

29 Acquisire da tastiera una sequenza di interi che termina col primo 0. Successivamente determinare se la sequenza di interi (0 escluso) acquisiti è palindroma Suggerimento: Per determinare se una sequenza è palindroma devo confrontare il primo e l ultimo elemento, il secondo ed il penultimo, ecc. Quindi prima di effettuare la verifica sulla simmetria della sequenza devo prima averla completamente acquisita. Quindi mi serve una sequenza di variabili. Chiamiamo questa sequenza X e facciamo riferimento alle variabili che compongono la sequenza con la notazione x i Utilizziamo 2 variabili i (inizio) ed f (fine) per fare riferimento alla prima e ultima variabile della sequenza da confrontare. Devo confrontare progressivamente variabili verso il centro quindi i deve essere incrementata mentre f deve essere progressivamente decrementata di 1 unità. Queste due operazioni devono essere ripetute per cui mi serve un ciclo. Nel caso in cui la sequenza contiene 1 singolo intero (i è uguale a f) posso concludere subito che la sequenza è palindroma senza alcun incremento o decremento. Per cui il corpo del ciclo può essere eseguito 0 volte. Quindi meglio un ciclo a condizione iniziale. Devo interrompere l incremento di i ed il decremento di f anche se x i è differente da x f. Quindi la condizione di permanenza è i < f AND x i == x f. Al termine del ciclo posso concludere che la sequenza è palindroma nel caso in cui i >= f. Esercizio per casa: Inizializzare una sequenza di n interi con dati acquisiti da tastiera. Ribaltare la sequenza e visualizzarla ribaltata.

NOT OK OK OK 30

I>=F OK OK OK OK 31

32 inizio Leggo una sequenza di valori che termina con zero sì sì n = 0 n = n + 1 x n x n!= 0 no i = 1 f = n i < f AND x i == x f i = i + 1 f = f - 1 no i >= f palindroma fine sì no Diagramma di flusso dell algoritmo che determina se una sequenza di interi è palindroma