Full transcript
0:03Cominciamo questo corso di Fondamenti di
0:05informatica Io mi chiamo C De Stefano e
0:08sarò il vostro docente in questo
0:11semestre come vedete quest'anno
0:14registreremo il il corso così l'avrete
0:17disponibile su su iTunes Quindi vi
0:20chiedo la cortesia di non fare molto
0:22rumore altrimenti è difficile sentire in
0:26maniera precisa l'audio allora
0:31cerchiamo di capire esattamente cosa
0:33faremo nell'ambito di questo corso e
0:36quali sono gli obiettivi che ci
0:40proponiamo di
0:42conseguire nell'ambito di questo di
0:46questo corso allora In generale quello
0:49che noi vorremmo ottenere in questo
0:51corso come obiettivi è lo studio delle
0:54strutture dati fondamentali e lo studio
0:59degli strumenti e metodi per lo sviluppo
1:01di programmi di tipo tecnico-scientifico
1:05su piccola media scala Allora cerchiamo
1:08di capire questi obiettivi perché sono
1:11così importanti nel in un corso di
1:14laurea di ingegneria industriale quale
1:16quello che voi state frequentando Allora
1:20innanzitutto ci tengo a dire che una
1:23delle attività proprio più
1:25specificamente ingegneristiche e quella
1:28legata alla modella
1:31voi nell'ambito di tutto il vostro corso
1:33di studi userete dei modelli a cosa ci
1:36servono questi modelli ci servono a dare
1:39una rappresentazione della realtà
1:42semplificata e sulla base di questa
1:45rappresentazione noi
1:47possiamo provare a simulare la la la
1:51realtà
1:52e a provare a gestire gli eventi che
1:57caratterizzano questa questa realtà e e
2:00provare appunto a definire delle
2:03soluzioni e a risolvere dei problemi in
2:06maniera più semplice rispetto a quello
2:09che accade nel mondo reale Questo non
2:11perché le nostre soluzioni debbano
2:13essere meno efficienti Ma perché per
2:16poter arrivare esattamente al punto
2:18Dobbiamo eliminare tutti quegli aspetti
2:20che non sono essenziali alla risoluzione
2:23dei problemi che vogliamo affrontare
2:25quindi semplificare e attraverso un
2:27modello semplificato proporre delle
2:30soluzioni oggi nell'ambito di queste
2:33attività si utilizzano tipicamente gli
2:35strumenti informatici ed è quelli che
2:37voi userete tipicamente nella vostra
2:40attività di ingegneri industriali quindi
2:44dobbiamo capire innanzitutto Come fare
2:46a
2:48rappresentare la realtà in un sistema
2:51informatico quindi dobbiamo creare
2:54quello che si chiama una corrispondenza
2:56tra mondo reale e mondo simulato e nel
3:00creare questa corrispondenza dovremo
3:03rappresentare in un sistema informatico
3:06quelli che sono gli elementi
3:08fondamentali del mondo reale e Quindi
3:12dovremo studiare Quali sono le strutture
3:15dati all'interno delle quali memorizzare
3:19queste informazioni Quindi quando si
3:21parla di modello e quindi si parla di
3:24rappresentare la realtà in un sistema di
3:27calcolo si tratta di individuare Quali
3:30sono le grandezze fondamentali che
3:32caratterizzano i problemi e
3:34rappresentarle opportunamente
3:36all'interno di questo sistema mediante
3:39le strutture dati che andremo a definire
3:43poi una volta che abbiamo creato questo
3:46modello Dobbiamo capire come interagire
3:49con questo modello quindi dobbiamo
3:51capire come definire delle soluzioni ai
3:55problemi che abbiamo rappresentato
3:56mediante questo modello e quindi
4:00definire delle soluzioni significa
4:03essenzialmente definire Quali sono le
4:05sequenze di azioni che dobbiamo compiere
4:08per arrivare alla soluzione di un
4:11problema queste azioni le definiremo
4:15mediante degli strumenti e dei
4:19metodi per rappresentare le soluzioni
4:24Sul modello che rappresenta la nostra
4:27realtà chiaramente qua po
4:30utilizzare tecniche molto diverse ora
4:33poiché voi non siete informatici e
4:36quindi lavorerete essenzialmente come
4:38utenti di questi strumenti
4:41progett quando il
4:44caso i vostri algoritmi specifici per
4:47risolvere alcuni problemi però il mio
4:50obiettivo non è fare di voi dei
4:52programmatori che devono lavorare su
4:55larga scala Ma fare di voi degli utenti
4:58intelligenti dei sistemi di calcolo che
5:01quindi proget che progetteranno le loro
5:03specifiche soluzioni Ecco perché abbiamo
5:07scelto come modello modello di programmi
5:11tecnico-scientifici su piccola media
5:14scala non non immagino che voi lavoriate
5:18un domani in un'azienda grande che
5:20sviluppa software per cui diventate
5:22programmatori per grossi sistemi di
5:25calcolo vi immagino come dei
5:27professionisti che lavorano nell'ambito
5:29di ingegneria industriale e che quando è
5:31il caso sviluppano i loro progetti le
5:34loro applicazioni ma con un taglio
5:37strettamente personale quindi ecco
5:39perché ci riferiamo su programmi su
5:42piccola e media scala chiaramente se
5:45facessi una progettazione su larga scala
5:47dovremmo utilizzare delle metodologie
5:50che vanno al di là degli scopi di di
5:53questo di questo
5:58corso allora che cosa faremo nell'ambito
6:01di questo corso allora vi darò
6:04Innanzitutto delle nozioni di carattere
6:07introduttivo per capire che cos'è questo
6:10strumento informatico e come interagire
6:13poi abbiamo detto studieremo i tipi e le
6:15strutture dati vale a dire il modo in
6:17cui memorizzeremo le informazioni in un
6:20sistema di calcolo Poi appunto strumenti
6:24e metodi per la progettazione di
6:26programmi quando dico strumenti e metodi
6:28dovremmo capire In che modo Creiamo un
6:32modello per rappresentare la realtà
6:34all'interno del nostro sistema di
6:37calcolo e quali strumenti abbiamo per
6:39sviluppare dei programmi in questo
6:42ambito
6:44ovviamente scrivere un programma
6:47significa vedremo tra un attimo
6:49individuare Qual è la sequenza corretta
6:52di azioni che devono essere svolte per
6:54risolvere un problema quando si parla di
6:57sequenza di azioni si parla ente di
7:02individuare attraverso un linguaggio
7:05Quali sono le azioni Quali sono le
7:07azioni che devono essere eseguite e
7:10questo linguaggio deve essere
7:13opportunamente interpretato dal nostro
7:15esecutore quindi capiremo in primo luogo
7:18chi è l'esecutore e poi definito
7:21l'esecutore capiremo Qual è il
7:23linguaggio con il quale noi interagiamo
7:26con questo esecutore bene nell'ambito di
7:29questo corso utilizzeremo il linguaggio
7:32c+ Plus che è un linguaggio largamente
7:36utilizzato nel nelle applicazioni è
7:39basato sul linguaggio C che ormai da più
7:43di 30 anni è linguaggio di riferimento
7:46per tutte le applicazioni di tipo
7:49industriale e studieremo degli
7:52cosiddetti algoritmi fondamentali Qual è
7:56la mia idea Vi comincio a anticipare
7:58queste cose ma tutto quello che poi
8:00vedremo in
8:02itinere l'idea di utilizzare di darvi io
8:05degli algoritmi fondamentali nasce
8:07proprio dalla figura professionale che
8:10io vorrei tirar fuori da questo corso
8:12poiché voi non sarete dei programmatori
8:14quindi io non immagino che
8:17voi dobbiate sviluppare nuovi algoritmi
8:21e per risolvere i vostri problemi ma
8:24immagino Più che altro che voi come
8:26utenti utilizzerete eh blocchi di
8:30funzioni che qualcun altro ha scritto
8:32per voi Quindi la vostra abilità devee
8:35essere quella di capire come queste
8:38funzioni che qualcun altro ha già
8:40scritto possono essere opportunamente
8:42utilizzate per risolvere il vostro
8:45problema Quindi quando utilizzerete i
8:48tool che poi farete negli altri negli
8:50altri corsi nei corsi di automazione
8:53utilizzerete tipicamente matlab lì
8:55utilizzerete delle funzioni già belle e
8:58fatte per costruirvi la vostra
9:00applicazione
9:01quindi prenderete dei pezzi che qualcun
9:04altro ha già scritto e li metterete
9:07insieme così che so quando utilizzerete
9:10i tool per lo sviluppo di lo studio di
9:13strutture con meto gli elementi finiti o
9:16quel che sia utilizzerete comunque dei
9:19blocchetti che qualcun altro ha scritto
9:21per voi con un meccanismo che più o meno
9:23sempre lo stesso allora se noi ci
9:26abituiamo ad utilizzare gli algoritmi
9:28fond come mattoncini per costruire
9:32applicazioni più complesse saremo già
9:35pronti ad
9:36affrontare questo tipo di problematica è
9:39quello che farete per esempio quando
9:41utilizzerete dei dei PLC
9:46per diciamo interfacciarvi con
9:50apparecchiature che vengono messe
9:52tipicamente sulle linee di produzione
9:54Quindi queste cose le farete
9:56specificamente nei corsi di ingegneria
9:59industriale allora Dato che questo è
10:02l'unico momento nel quale abbiamo
10:04l'opportunità di esaminare Questi
10:06strumenti da un punto di vista teorico e
10:09capire come funzionano È
10:11importante che già utilizziamo questo
10:14approccio cioè quello che poi
10:16utilizzerete nell'ambito del degli altri
10:18corsi Quindi io vi darò degli algoritmi
10:21fondamentali come mattoncini e
10:25l'esperienza che faremo anche dal punto
10:27di vista esercitativa è costruire
10:29applicazioni più complesse utilizzando
10:32come mattoncini fondamentali questi
10:36algoritmi quindi ragazzi Questo è un
10:38corso molto applicativo noi faremo degli
10:41strumenti teorici Ma poi voi vi dovete
10:44vi dovrete misurare
10:46con un sistema di calcolo con un sistema
10:49di sviluppo dovrete fare delle
10:51applicazioni farli seguire e verificare
10:54che funzionino correttamente Quindi da
10:57una parte abbiamo tutti questi strumenti
10:59teorici Ma poi fondamentale è la parte
11:03applicativa sia perché mi serve proprio
11:06come livello di manualità di praticità
11:10che dovete acquisire a fine di questo
11:12corso perché è quello che mi chiedono il
11:15gli altri colleghi che lavorano nel
11:17corso di ingegneria industriale sia
11:21perché anche proprio ai Fi dell'esame
11:23l'esame è una prova una parte l'esame è
11:26una prova pratica dove voi vi siederete
11:29davanti al calcolatore dovrete
11:31sviluppare in maniera autonoma un
11:32algoritmo verificare che funzioni
11:34metterci de dati di inresso produrre dei
11:37risultati in uscita quindi tutto quello
11:39che faremo da un punto di vista teorico
11:42poi ce lo sperimenteremo piano piano
11:44nelle esercitazioni e io prevedo due
11:48tipi di
11:51esercitazioni esercitazioni guidate
11:53realizzazione di programmi sul
11:55calcolatore
11:56Quindi vorrei utilizzare le ore che
12:00abbiamo di esercitazione tra un attimo
12:02vedremo come è strutturato il corso per
12:06programmare insieme a voi all'inizio
12:09quando ci si imbatte con questo
12:12strumento c'è proprio la difficoltà di
12:14dire Va bene molte delle cose che vi
12:17racconterò vi sembreranno estremamente
12:19semplici e comprensibili però vi
12:21assicuro C'è un momento nel quale Poi
12:23siamo noi Il Calcolatore e il linguaggio
12:26e il programma e deve are quel
12:30meccanismo che ci fa
12:32entrare diciamo più a fondo nelle
12:34tecniche di programmazione Allora le
12:37esercitazioni guidate le faremo insieme
12:40prendiamo un problema cominciamo a
12:42progettarlo io avrò Il Calcolatore con
12:44il compilatore davanti scriverò i
12:46programmi quindi programmer insieme a
12:48voi poi vi assegnerò degli homework Cioè
12:52vi darò dei compiti da sviluppare
12:54autonomamente a casa e vorrei utilizzare
12:58una parte D ore di esercitazione per
13:01discutere con voi e sentire le vostre
13:04proposte
13:05risoluzione qualcuna Ce la vediamo
13:07insieme qualcuna me la potete mandare e
13:10la guardiamo insieme direttamente sul
13:12calcolatore Cioè dobbiamo fare entrambe
13:14le cose da una parte dovete essere un
13:16po' guidati all'inizio ma poi dovrete
13:19Imparare a camminare con con le gambe
13:22vostre ragazzi Tenete conto che a
13:25differenza di altre materie Qui non c'è
13:28un te problema che ci dice io mi studio
13:31questa cosa applico questa formula e ta
13:33ho la soluzione e la programmazione è un
13:37po' a che fare con un'abilità personale
13:41che bisogna tirar fuori esercitandosi è
13:45un po' come dire io quando studio i
13:47corsi di analisi non c'ho un teorema che
13:49mi dice guarda quale che sia l'integrale
13:52che devo risolvere applica questo questo
13:54e questo passaggio e è la soluzione
13:56quando voi Risolvete questo tipo di di
14:00problemi Beh Guardate la funzione
14:02integranda Allora capite se volete fare
14:05una sostituzione di variabili integrate
14:07per parti applicate più tecniche che
14:11conoscete per portare la funzione integr
14:14in una forma nota per la quale siete
14:16capaci di risolvere l'integrale Beh qui
14:19è un po' la stessa cosa Noi abbiamo un
14:21problema ma non esiste ununica Soluzione
14:23ne esiste un unico teorema che ci dice
14:25fai questo questo e quest'altro e arrivi
14:27alla soluzione quindi dobbiamo essere un
14:31po' bravi noi e capaci noi di tirarla
14:33fuori e
14:34di provare a ottenere una soluzione
14:39Tenete conto che dato un problema non
14:42esiste una e e un'unica soluzione ma
14:45possiamo trovare delle strade
14:48alternative e quindi nell'ambito di
14:50questo corso faremo anche delle
14:52valutazioni su quanto è buona una
14:55soluzione Cioè in qualche maniera
14:57proverò a introdurre di una forma
15:00matematica anche molto leggera Come si
15:03fa a valutare la bontà di un programma
15:06mediante quello che si chiama una
15:08valutazione del costo computazionale
15:10cioè la soluzione che ho pensato quanto
15:13è onerosa per il mio esecutore quindi
15:17capiremo Come si fa a definire questo
15:20concetto di costo computazionale E come
15:23faremo a misurarlo Ma questo ce lo
15:26vediamo piano piano nelle prossime
15:28lezioni
15:31il testo consigliato è il testo di
15:34Shield della macro guida al c+ Plus
15:38questo non lo acquistate lo teniamo come
15:41riferimento se servirà R integrò io un
15:44po' di
15:45materiale Questo è un testo di c+ Plus
15:49un buon testo devo dire fatto bene
15:52chiaro semplice e e poi vi darò io
15:55dispense e appunti quando sarà il caso
15:58nella ambito del
16:00corso tenete conto questo testo che
16:03cos'è questo è un testo del linguaggio
16:06Cioè ci racconta Quali sono i tipi di
16:09dati le strutture d d della
16:13programmazione in c+ plus quindi non è
16:17un testo nel quale voi
16:21trovate esercizi soluzioni tecniche di
16:26programmazione purtroppo diciamo un
16:29testo che includa tutti questi
16:32aspetti diciamo un un testo semplice non
16:35non non ho ancora trovato quindi ci sono
16:39alcuni test che sono più di
16:40programmazione che nel senso che
16:42insegnano le metodologie però utilizzano
16:46linguaggi Generali i cosiddetti PDL i
16:49program design language e quindi uno
16:52dovrebbe usare un testo di questo tipo
16:55per analizzare le tecniche di
16:58programmazione poi un altro testo per
17:01capire Queste tecniche Come si
17:03realizzano nel linguaggio c+ tenendo
17:06conto del taglio del di questo corso io
17:09ho preferito darvi il manuale di
17:12riferimento in modo che Voi capite
17:14quando programmate se il compilatore vi
17:16dà un errore che cosa succede e perché E
17:19poi vi darò io nelle lezioni la parte
17:24progettuale Cioè vi spiegherò come si
17:26progettano le soluzioni Lo faremo
17:28insieme Quindi questa parte verrà un po'
17:31da dispensi appunti ma molto verrà dal
17:35quello che ci Costruiamo insieme in aula
17:37per capire come si arriva a progettare
17:40un algoritmo risolutivo per un dato
17:44problema come è organizzato il corso
17:47abbiamo 7 ore settimanali ci sono 4 ore
17:52di teoria e 3 ore di esercitazione
17:55guidata Questi sono i miei Rifer Se
17:59avete bisogno di parlare con me vorrei
18:02definire essenzialmente con
18:05voi qual è l'orario di ricevimento Cioè
18:08In quali orari vi fa più piacere poter
18:11poi parlare con me al di fuori delle
18:13delle lezioni tenete conto avendo
18:16lezione lunedì martedì e mercoledì
18:19preferirei In uno di questi tre giorni
18:22definire il nostro orario di
18:25ricevimento Se non siete troppo stanchi
18:28potremmo anche farlo per esempio il
18:30lunedì a Valle della d delle Miore
18:34questo potete anche pensarci un attimo e
18:36poi lo definiamo
18:39insieme quindi dicevamo 7 ore 4 di
18:43teoria e tre di esercitazione
18:45chiaramente prima di cominciare la parte
18:48esercitativa dobbiamo aere maturato un
18:51po' di argomenti teorici Quindi almeno
18:54per le prime 2 tre settimane queste ore
18:57di esercitazione
18:59non le non le useremo magari le possiamo
19:03utilizzare non la settimana prossima
19:05perché ci sono gli esami di stato ma li
19:07posso utilizzare per recuperare questa
19:10prima settimana che non abbiamo fatto
19:12lezione
19:13perché come presidente della commissione
19:16per gli esami di stato sono stato
19:17impegnato su quest'altra attività quindi
19:20le le utilizzerò per recuperare però non
19:24vorrei darvi un carico di 7 ore di
19:26teoria alla settimana perché che ci
19:29voglia un po' di tempo per maturare
19:31anche questi concetti quindi per le
19:34prime du tre settimane non faremo
19:36direttamente esercitazioni ma useremo al
19:40momento e poi ve lo dirò io quando ci
19:43vedremo anche il lunedì per fare
19:46l'esercitazione la teoria la faremo
19:49ovviamente nelle nelle lezioni del
19:51martedì e del
19:55mercoledì allora un poco di consig
20:00per
20:01attraversare in maniera efficace questo
20:04corso allora ragazzi Dato che questo è
20:07un corso che ha una forte componente
20:11applicativa c'è una parte di
20:13progettazione che ci Costruiamo insieme
20:15in aula Ah secondo me seguire il corso è
20:19importante perché
20:22altrimenti vi dovreste prendere voi dei
20:25testi per capire come si fa la parte di
20:28progettazione e chiaramente per chi
20:31dovesse saltare qualche lezione o non
20:33potesse seguire io vi darò delle
20:35indicazioni in questo senso però se ci
20:38riuscite seguire il corso è la cosa che
20:40secondo me vi alleggerisce molto questa
20:43parte e vi fa risparmiare del
20:46tempo molto importanti sono le
20:49esercitazioni molto importante è provare
20:52da soli i programmi Ragazzi io vi potrò
20:55far vedere 100 programmi fatti da me poi
20:59ci sarà sempre il c1o che dovrete fare
21:01da soli quindi se non acquisite questa
21:04esperienza c'è poco da fare è difficile
21:07superare l'esame perché c'è questo
21:10Scoglio della parte esercitativa
21:13Ovviamente se mi segnalate per tempo
21:17problemi cose che non vanno aggiustiamo
21:20il tiro e lo facciamo insieme in corso
21:25d'opera Allora entriamo un pochino più
21:30nel nei concetti che studieremo
21:33nell'ambito di questo corso come dicevo
21:37l'informatica è quella che si chiama la
21:40scienza dell'astrazione cioè noi
21:42dobbiamo creare il giusto modello per un
21:45problema e individuare le tecniche
21:48appropriate per risolverlo in modo
21:51automatico Ragazzi ho sottolineato
21:53modello i ho sottolineato automatico
21:58è chiaro che voi siete Avete appena
22:01finito di fare 3 ore di
22:05fisica è chiarissimo
22:07che per chi studia fisica il concetto di
22:11modello è un concetto
22:13fondamentale no mi sapreste dire per voi
22:16Che cos'è un modello anche pensando a
22:19quello che avete fatto fino adesso n
22:21corso corso di fisica avete cominciato
22:23adesso però già a Valle di questo primo
22:26semestre se qualcuno vi dicesse ma per
22:29voi un modello che cos'è Perché è così
22:40importante un riferimento sicuramente
22:44Però anche proprio pensando che so avete
22:48sentito parlare sono stati definiti
22:51tanti modelli per esempio il modello
22:53dell'atomo e sono stati proposti nel
22:56corso degli anni tante formulazioni
22:59Allora perché si arriva a formulare un
23:04modello Perché come per esempio nel caso
23:07dell'atomo un modello è una
23:09rappresentazione più semplice della
23:12realtà però questa rappresentazione deve
23:16essere in grado di spiegare i fenomeni
23:19fisici che noi osserviamo quindi il il
23:22primo modello dell'atomo riusciva a
23:24spiegare certe proprietà della materia
23:27Poi a un certo punto
23:29si sono verificati dei fenomeni che quel
23:32modello non era più capace di spiegare e
23:35allora qualcuno ha pensato a un modello
23:38più complicato questo modello più
23:40complesso è stato capace di spiegare
23:42anche questi ulteriori fenomeni e così
23:44via sia andata avanti nel corso della
23:46storia quindi il modello Ci è servito
23:49per dare una rappresentazione più
23:51semplice e attraverso questa
23:54rappresentazione riuscire a spiegare
23:57quei fenomeni fisici che che noi
23:58osserviamo bene quindi questo è un
24:02Concetto generale uno delle dei primi
24:05compiti di un ingegnere è quello di
24:08modellare la realtà e poter modellare le
24:12soluzioni dei problemi quindi il proprio
24:16l'idea del modello è centrale in tutto
24:19il corso che voi farete di ingegneria
24:21sarà centrale in tutto il corso di
24:24Fondamenti di informatica che faremo in
24:26questo semestre eh
24:29perché Sottolineo la parola automatico
24:33perché noi non vogliamo ogni volta che
24:36si presenta un problema dover partire da
24:40zero
24:41e riprogettare una soluzione vogliamo
24:46dare una definizione della della nostra
24:49soluzione che sia del tutto generale e
24:52che poi in maniera automatica si possa
24:55adattare ai dati diversi che cambiano di
24:58volta in
24:59volta se voi dovete progettare il
25:04controllo di una linea di produzione per
25:07garantire che il prodotto finito abbia
25:09certe caratteristiche di qualità
25:13Allora progettate questo sistema
25:16collegate dei sensori alla linea di
25:18produzione per acquisire informazioni il
25:21nostro sistema verifica che la la la
25:25linea funzioni in maniera corretta bene
25:29tutto questo avviene in maniera
25:31automatica Cioè anche al variare dei
25:34dati che arrivano al sistema Il sistema
25:37è ancora in grado di fornire delle
25:40risposte coerenti al al problema che
25:44dobbiamo risolvere in questo
25:47caso ho considerato un problema di
25:50controllo di una linea di produzione
25:52Questa è una cosa che ormai è
25:55fondamentale quando un si produce un
25:58manufatto bisogna associare quello che
26:01si chiama un cartellino di qualità cioè
26:03garantire che questo prodotto soddisfi i
26:06requisiti richiesti senza un sistema di
26:09controllo questa cosa non è fattibile
26:11quindi una volta che noi abbiamo
26:14progettato la soluzione per un problema
26:17noi vogliamo che questa nostra soluzione
26:19si adatti in maniera automatica a tutti
26:23i dati reali che poi verranno tirati
26:26fuori e verranno forniti in ingresso al
26:30nostro
26:31sistema Quindi l'obiettivo che ci
26:34poniamo è quello di sostituire una
26:36situazione del mondo reale complessa e
26:40particolar regata con un modello
26:43comprensibile e privo di dettagli
26:45inessenziali all'interno dei quali si
26:49possa risolvere il problema quindi
26:51ragazzi la realtà
26:54appare generalmente molto complessa con
26:57tante informazioni che non sono
27:00essenziali alla risoluzione Allora il
27:03modello
27:04semplificato serve a toglier fuori
27:07questi dati inessenziali e a farci
27:10concentrare unicamente sulle
27:12informazioni che sono invece
27:13fondamentali per la risoluzione del
27:16nostro problema Facciamo un esempio così
27:21smettiamo di parlare in astratto e
27:23facciamo una cosa concreta Allora
27:26immaginate qui siamo in una zona dove si
27:29produce marbo e quindi immaginate che eh
27:33abbiamo estratto tagliato del Marmo
27:37abbiamo ottenuto una una lastra
27:40rettangolare di dimensioni A * B e
27:44vogliamo tagliarla in tanti quadrati
27:47uguali cioè vogliamo tirar fuori delle
27:49mattonelle eh avente il lato della
27:53maggiore lunghezza possibile senza
27:56generare sfrido Allora capite qui come
28:01nella maggior parte dei problemi abbiamo
28:04tipicamente una o più soluzioni
28:07contrastanti perché se qui il problema
28:09fosse tirar fuori quante più
28:12mattonelline possiamo e non ce ne
28:14importasse nulla di farle grandi e noi
28:17le faremmo piccole piccole e ne tireremo
28:19fuori un sacco Però il problema è
28:23Innanzitutto tagliare a dei rischi di
28:26rottura del materiale che stiamo che
28:29stiamo tagliando due da un punto di
28:31vista commerciale una mattonella di
28:34marmo ha più valore se è più grande
28:37Allora io vorrei e quindi da una parte
28:40sembrerebbe che mi convenga farle quanto
28:42più grande possibile tenendo conto delle
28:45dimensioni tipiche del mercato che
28:47possono essere 40 x 40 50 x 50 e così
28:51via però chiaramente se io c'ho una
28:53lastra di mmo e faccio queste mattonelle
28:55molto grandi una volta che ho queste
28:58mattonelle grandi mi può rimanere molto
29:00marbo residuo e quindi ho sfrido e
29:05riesco
29:06a guadagnare meno dalla produzione di
29:09questa last quindi qui il problema è un
29:12problema contrastante da una parte
29:15voglio limitare lo sfido dall'altra
29:17parte Voglio massimizzare la quantità di
29:21mattonelle prodotte e per aumentare il
29:23guadagno le voglio produrre della
29:26Dimensione più grande
29:28possibile allora mi chiedo come posso
29:32risolvere questo problema Quindi questo
29:34è il problema della mia
29:36realtà ho la mattonella ho i lati di
29:41questa lastra di marbo che devo tagliare
29:45e mi
29:46chiedo come posso fare un programma di
29:50calcolo che quale che sia la lastra di
29:53marno chiaramente dalla cava quando
29:55vengono tagliate queste lastre mica
29:58quelle quando si spaccano vanno certe
30:00dimensioni quindi non è che dalla dalla
30:03cava escono tutte l'astre identiche per
30:05cui è sempre lo stesso problema escono
30:08lastre di dimensioni diverse il mio
30:10sistema deve di volta in volta adattarsi
30:12per ricevere i nuovi dati in ingresso e
30:16dare una risposta a questo problema
30:18questa è la realtà come faccio a
30:22modellarla cioè Qual è il modello che
30:25tiro fuori per rappresentare questa
30:28realtà se qualcuno ve lo chiedesse oggi
30:31con le vostre conoscenze voi che cosa
30:33rispondereste
30:37c'è qualcuno che ha un'idea come
30:40potremmo provare a modellare questa
30:43cosa
30:45Oh E innanzitutto che cosa diamo al
30:48sistema impasto come dati perché questo
30:52è quello che c'è nel mondo reale c'è una
30:55lasta di marmo con delle dimensioni che
30:57sono state misurate Mo questa roba deve
30:59entrare nel mio sistema di calcolo che
31:01deve fare i
31:06conti allora Vi propongo
31:11un'idea ma un'idea potrebbe essere
31:14quella di dire ma in fondo questo
31:17problema
31:18e lo posso rappresentare in maniera più
31:22semplice in questa forma dati i due
31:25numeri A e B calcolare il massimo com un
31:29divisore è verificare se è uguale a
31:321 Questa può essere una soluzione del
31:35nostro problema perché in fondo io ho le
31:38dimensioni di questa
31:40lastra dato che voglio tirar fuori delle
31:43mattonelle quadrate della Dimensione più
31:47grande possibile allora un modo
31:50alternativo di formulare questo problema
31:54ma se io mi calcolo il massimo come un
31:56divisore Questo è quello che mi
31:59garantirebbe di
32:02avere il numero massimo di mattonelle
32:05possibili che taglio della Dimensione
32:06più grande avente avendo sfrido zero
32:10perché se ho trovato se prendo proprio
32:13come dimensione della marmetta
32:15il un valore pari al massimo come un
32:18divisore tra le
32:21dimensioni orizzontali e verticali
32:25del del del mio del mio Allora ho
32:28trovato la la la soluzione migliore
32:31possibile È chiaro che se i due numeri
32:35sono primi tra loro se volessi avere
32:38sprito Zero dovrei far la marmetta di
32:41dimensione
32:43unitaria Beh
32:46allora che cosa abbiamo fatto abbiamo
32:49preso un problema
32:51reale l'abbiamo modellato attraverso
32:55questa quest'idea di calcolare il
32:58massimo con un divisore Quindi quali
33:00sono le informazioni fondamentali che
33:03devo conservare bene A questo punto me
33:06ne frego di tutto il resto mi basta che
33:08io prendo i due valori che rappresentano
33:11i lati della lasta di marmo e li metto
33:14all'interno del mio sistema di calcolo
33:16quindi è come
33:18dire questo sistema deve ricevere in
33:22ingresso due numeri reali che sono i
33:25lati D della di Malmo deve produrre in
33:30uscita un'informazione che è guarda Si
33:35può fare o non si può fare se i due
33:37numeri sono primi tra loro non si può
33:39fare questa cosa se i due numeri non
33:42sono primi tra loro Qual è la dimensione
33:45massima della marmetta che posso trarre
33:49che posso estrarre per avere sfido pari
33:52a z0 quindi
33:55Eh ci serve un procedimento
33:59sistematico costituito da un insieme
34:02finito di di operazioni ognuna delle
34:05quali sia precisa ed eseguibile da
34:09applicare ai dati di ingresso perché si
34:12possano fornire dei dati in
34:15uscita In altre parole è necessario un
34:18algoritmo Beh allora ripetiamo Questo
34:23ragionamento dato un problema Abbiamo
34:26individuato quali sono i dati essenziali
34:29di questo problema questi dati
34:32essenziali in questo caso sono due
34:34numeri questi numeri devono essere
34:37opportunamente rappresentati all'interno
34:39del nostro sistema di calcolo
34:42Dopodiché una volta che io ho definito
34:45Qual è la mia idea debbo trovare ora un
34:50procedimento sistematico Che vuol dire
34:53che deve essere eseguibile ogni volta
34:58e questo procedimento deve essere
35:02composto da un insieme finito di
35:04operazioni che applicate ai dati in
35:08ingresso mi producano i dati in uscita
35:11Ragazzi questi operazioni devono essere
35:16precise Cioè non ambigue e devono essere
35:21eseguibili cioè quando do un'istruzione
35:23al mio esecutore il mio esecutore deve
35:28essere in grado di
35:31eseguirle prima di entrare nella in
35:35questa seconda definizione mi voglio
35:37soffermare un attimo su questo aspetto
35:40allora Poiché noi faremo riferimento
35:42sempre a un
35:44esecutore dobbiamo chiederci Ma quanto è
35:49intelligente il nostro
35:52esecutore Secondo voi un sistema di
35:55calcolo un computer come questo che ha
35:59una potenza di calcolo ragazzi
36:03spaventosa cioè rispetto a un essere
36:05umano un oggetto di questo tipo ha una
36:08capacità di calcolo che si misura
36:11nell'ordine dei
36:13mefop cioè delle
36:16delle dei milioni di
36:21operazioni sui numeri reali che questo è
36:25in grado di eseguire nell'unità di tempo
36:28Quindi questo è un oggetto che riesce a
36:31fare dell'ordine o un numero di
36:34operazioni dell'Ordine dei milioni di
36:37operazioni sui numeri reali nell'unità
36:39di tempo in un secondo quindi ha una
36:43potenza di calcolo spaventosa rispetto a
36:46un essere umano ma ci chiediamo ma
36:49quanto è
36:51intelligente cioè da solo è in grado di
36:54prendere decisioni autonome
36:57la risposta è no cioè questo sistema Se
37:01gli diciamo quello che deve fare lo fa
37:03in maniera velocissima Ma dobbiamo
37:06dirglielo noi allora sarebbe un po' come
37:10dire se io mi rivolgo a uno di voi e gli
37:15dico guarda questi sono i coefficienti
37:19dell equazione di secondo grado Mi trovi
37:22le
37:23radici do una risposta del genere a uno
37:26di voi
37:282 minuti Il tempo di mettere penna su
37:32carta e mi dite le radici delle dellee
37:34coioni perché Perché io ho fatto una
37:38domanda a un esecutore umano studente
37:42del corso di laurea in ingegneria
37:45industriale a Cassino gliel'ho formulata
37:49in un linguaggio che lui è in grado di
37:51capire gli l'ho formulata in italiano è
37:55in grado di capire quello che io gli sto
37:58chiedendo nelle sue competenze ci sono
38:02le conoscenze per risolvere un'equazione
38:04di secondo
38:05grado Allora se io questa stessa domanda
38:08la faccio uno studente delle scuole
38:11della quinta elementare Secondo voi
38:14questo studente che cosa mi
38:18risponde Io non so di che parlo perché è
38:22vero che io glielo dico in italiano e
38:24lui in italiano capisce quello che gli
38:26sto dicendo ma
38:29l'esecutore studente delle scuole
38:31elementari non ha la competenza per
38:35capire come si risolve un'equazione di
38:38secondo
38:39grado
38:41Allora quando io parlo di dare
38:45un'istruzione in maniera precisa e non
38:49ambigua che sia
38:51eseguibile cio vuol dire vogliono queste
38:54due affermazioni vogliono dire due cose
38:56che devo dirgliela in modo che lui
38:59capisca esattamente che cosa sto
39:01cercando ma deve essere eseguibile cioè
39:05la cosa che gli sto chiedendo deve
39:08essere
39:11eh eseguibile cioè devi avere la
39:14conoscenza e la capacità di eseguire
39:17quel comando Allora io non potrei
39:21chiedere a un a uno studente delle
39:24scuole della quinta elementare di
39:27risolvere un'equazione di secondo grado
39:29glielo potrei
39:32chiedere sì o
39:36no Beh se gli spiego come fare il conto
39:39glielo posso
39:44chiedere se Dato che
39:48lui Supponiamo non quinta elementare ma
39:53Supponiamo scuole medie ha imparato a
39:56fare le
39:58qu Allora se io ho uno studente che non
40:02conosce il concetto di equazione ma
40:05conosce il concetto di radice quadrata
40:08io non gli chiedo risolvimi Calcolami le
40:11radici delle equazioni di secondo grado
40:13Ma gli dico guarda tu fai questo questo
40:17questo questo e questo passo e alla fine
40:19fai questi conti e mi dai due numeretti
40:22che tu non lo sai ma io so che
40:25rappresentano le radici dell'equazione
40:27di secondo grado allora io gli ho dato
40:32in maniera precisa le istruzioni che
40:35devo fare ma eseguibile Cioè ho scalato
40:39la difficoltà e gli ho detto guarda tu
40:41le equazioni non sai cosa sono però
40:43poiché le quattro operazioni le sai fare
40:46e Sai farmi anche le radici quadrate
40:49Allora ti spiego io come tu sei in grado
40:54di risolvere le il leva del calcolo
40:58delle radici delle equazione di secondo
41:01grado ragazzi Quello che vi voglio dire
41:03è che il concetto di eseguibile è
41:07strettamente legato al concetto di
41:10esecutore se io ho a che fare con un
41:12matematico gli dico mi Risolvi questo
41:15sistema di equazioni differenziali per
41:17lui quella è un'operazione elementare
41:20perché nelle sue conoscenze ci sono le
41:23tecniche di risoluzione delle equazioni
41:25differenziali se lo dico a voi che state
41:28studiando adesso questa cosa mi
41:30rispondete Non lo so fare quando le
41:32studierò Saro in grado di farlo quindi
41:34il concetto di eseguibile è legato alle
41:39competenze
41:40dell'esecutore Quindi
41:43quando proporremo le soluzioni per i
41:47problemi Dobbiamo capire che l'algoritmo
41:50è un concetto del tutto generale e la
41:53sequenza di passi elementari per un
41:57certo esecutore per arrivare a risolvere
42:01il problema quindi dobbiamo essere
42:05sicuri di dire le cose in maniera
42:08precisa e non ambigua dobbiamo dirle in
42:12modo che rispettino le competenze
42:16dell'esecutore per cui lui sia in grado
42:18di
42:19farlo ragazzi Questo vi fa anche capire
42:22perché noi non programmiamo in
42:25italiano perché
42:27dobbiamo usare un linguaggio di
42:29programmazione perché non ci basta in
42:31generale il linguaggio
42:34naturale ragazzi perché il linguaggio
42:36naturale è un
42:38linguaggio molto potente molto ricco
42:42però è un
42:45linguaggio Che per sua natura non è un
42:48linguaggio formale Ma si presta a delle
42:53ambiguità quando noi scriviamo una frase
42:56anche ben concepita nella lingua
43:00italiana questa frase potrebbe essere
43:03soggetta a implementazioni a
43:06interpretazioni
43:08diverse gli esempi più lampanti noi
43:11siamo una facoltà di ingegneria Ma se ci
43:15riferiamo per esempio all Al linguaggio
43:19nel quale vengono formulate le leggi e
43:23molto spesso uno legge il testo di
43:26quella legge DOP che escono le
43:29interpretazioni Cioè ci sono i tribunali
43:32che dicono Come è stata comunemente
43:35interpretata dalla giurisprudenza quella
43:37norma Allora Che vuol dire che quella
43:40norma di per sé si presta a
43:42interpretazione diverse ma se il nostro
43:46esecutore
43:48informatico si trovasse davanti a un
43:51dubbio saprebbe
43:54risolverlo si ferma va in alto
43:59quando c'è una sequenza di operazioni
44:02che non rispetta il flusso naturale
44:05delle operazioni il il processore va in
44:09alta si blocca e dice non sono più in
44:12grado di fare nulla quindi il
44:16nostro la nostra soluzione del problema
44:19dovrà essere formulata in un linguaggio
44:22che sia assolutamente non ambiguo
44:25l'interpretazione
44:27può essere una e una sola altrimenti
44:30questo non è un
44:32algoritmo quindi ci siamo dovuti
44:35inventare dei linguaggi di
44:37programmazione che tipicamente hanno la
44:41sintassi della lingua inglese con delle
44:43frasi in inglese ma che siano concepite
44:46in modo tale da essere assolutamente non
44:49ambigue da poter avere una e una sola
44:54interpretazione Ecco perché parliamo di
44:57operazione precisa non ambigua ma
45:00eseguibile vale a dire che quando io do
45:04un comando nel mio linguaggio questo
45:07comando deve essere nelle capacità del
45:12mio esecutore se il mio esecutore sa fa
45:15solo le quattro operazioni non ci stanno
45:17Santi tutto quello che dico dovrà essere
45:20fatto utilizzando le quattro operazioni
45:24Ok allora base di queste considerazioni
45:29proviamo a capire che cos'è un
45:34algoritmo Allora in generale possiamo
45:38dire che un algoritmo è un procedimento
45:42che risolve un determinato problema
45:46attraverso un numero finito di passi
45:49elementari Questa è la prima definizione
45:53che trovate Se mettete la parola
45:56algoritm su
45:57Wikipedia l'enciclopedia Wikipedia vi dà
46:01questa
46:04definizione ve L'ho riportata perché è
46:07fatta abbastanza bene e quindi può
46:10essere un buon punto di partenza
46:14allora un procedimento che risolve un
46:17problema attraverso un numero finito di
46:22passi
46:24elementari i passi enti devono essere
46:28elementari ovvero non ulteriormente
46:33scomponibili Allora se io dico Calcolami
46:37la radice quadrata di questo numero
46:40questa operazione è elementare o
46:50no su qu di avere una macchinetta da
46:54tavolo voglio fare una radice quadrata è
46:57un'operazione elementare o
47:03no Beh se sulla mia macchinetta da
47:07tavola ci sta il simbolo radice quadrata
47:09quella è un'operazione elementale metto
47:12il numeretto Schiaccio il bottone e mi
47:14eso la radice
47:15quadrata se la mia calcolatrice da
47:19tavolo alla radice quadrata non ce l'ha
47:21Non si può fare la radice quadrata
47:27è un po' lontano nella vostra memoria ma
47:29alle scuole medie Avete studiato Come si
47:32calcolano le radici quadrate c'è un
47:36procedimento che voi applicate dato un
47:38numero calcolate la radice quadrata
47:41attraverso quali operazioni le quattro
47:43operazioni elementari Allora
47:46L'operazione è atomica se il mio
47:49esecutore ce l'ha quindi quando si parla
47:53di operazione atomica Allora per un
47:56oggetto di questo tipo Qual è
47:58l'operazione atomica questo oggetto sa
48:01fare bene le quattro
48:03operazioni poi quando studieremo
48:05l'architettura vi farò capire che in
48:07realtà
48:10lui fa un sottoinsieme di operazioni fa
48:14solo le addizioni e attraverso le
48:17addizioni riesce a fare tutte e quattro
48:19le operazioni riesce a fare Rad quadr e
48:21così via Ma possiamo pensare a livello
48:25generale che per questo per questo
48:29oggetto l'operazione di Somma è per
48:32esempio un'operazione elementare cioè io
48:35gli posso dare un'istruzione Fammi la
48:37somma di questi due numeri per lui
48:39elementare lui ha al suo interno la
48:42circuiteria hardware per fare
48:44l'operazione mi produce il risultato
48:47questa operazione la intendiamo
48:50veramente elementare Cioè non è
48:52ulteriormente scomponibile in altre
48:55operazioni
48:57i passi costituenti devono essere
49:01interpretabili in modo diretto e univoco
49:05dall'esecutore sia Esso umano o
49:08artificiale quindi una volta che ho
49:11capito Quali sono le azioni elementari
49:13che lui sa fare allora i passi per
49:17arrivare a questa soluzione devono
49:22essere interpretabili in maniera diretta
49:26e un
49:27Cioè ci vuole un linguaggio che sia per
49:30sua natura formale e non
49:34ambiguo l'algoritmo deve essere composto
49:37da un numero finito di passi e
49:41richiedere una quantità finita di dati
49:44di
49:44ingresso
49:46ragazzi Questo è un altro concetto
49:49fondamentale è vero che i puristi della
49:54della
49:55teoria e dei
49:59linguaggi storcono un po' il naso e
50:01dicono il fatto che sia un numero finit
50:03di passi non è
50:04strettamente essenziale al concetto di
50:07algoritmo Ma noi siamo ingegneri e
50:10quindi diciamo che se una cosa ci mette
50:12un tempo in finito Per noi non va bene
50:14quindi un algoritmo è una sequenza
50:17finita di passi che prende un numero
50:20finito di dati di ingresso m li
50:22trasforma nei dati
50:24di uscita
50:27Ovviamente questa esecuzione deve avere
50:31termine dopo un tempo finito e deve
50:35produrre come risultato un risultato
50:37univoco che sia la soluzione del nostro
50:41problema
50:42ragazzi molto spesso quando fate i
50:45programmi questa condizione non me la
50:49verificate il programma parte non
50:53termina E allora io devo
50:57intervenire per bloccare il programma
50:59che altrimenti non finirebbe più si dice
51:02che il vostro programma è entrato in un
51:04loop infinito e devo usare un meccanismo
51:09esterno per
51:12interromperlo vi farò vedere come
51:15facendo degli errori queste cose possono
51:18succedere
51:19Quindi quando svilupperemo i nostri
51:23algoritmi Dovremo avere ben presenti
51:25questi passi
51:29garantire che la il il nostro problema
51:33sia scomposto in azioni veramente
51:36elementari che siano sempre
51:40interpretabili ragazzi non pensate che
51:43questo sistema da solo abbia capacità
51:46autonome molto spesso mi dite No ma io
51:49l'ho fatto bene ma quello è il
51:50calcolatore che non l'ha eseguito bene
51:53calcolatore da solo non fa niente se non
51:55quello che gli dite voi se non l'hai
51:58seguito bene perché voi non gliel'avete
52:01detto bene lui da solo fa soltanto
52:03quelle cose che gli dite se le cose che
52:06gli dite dopo un tempo finito ci portano
52:08un risultato sballato non è lui che non
52:10l'ha saputo fare Siete voi che non
52:12l'avete saputo programmare Allora
52:16Prendetevi un attimo per buona questa
52:19definizione di algoritmo poi piano piano
52:21ce la
52:24Raffini allora
52:26Proviamo
52:27a vedere come risolvere il problema di
52:31partenza Vi ricordo che avevamo detto
52:34che per tagliare questa malvetta
52:36dovevamo trovare il massimo com un
52:40divisore ora se io vi dicessi
52:45Vabbè c'è un bambino delle scuole
52:49elementari gli dite come calcolare il
52:52massimo com un divisore tra due
52:54numeri voi che cosa gli rispondete lui
52:58quattro operazioni
53:04saltate come gli dite di calcolare il
53:09massimo comun di misure tra due
53:15numeri Beh noi sappiamo che possiamo
53:18fare la scomposizione in fattori
53:21prendere i fattori
53:23comuni con il min esponente e facciamo
53:28questa cosa Però se D'altro canto il
53:31bambino non sa che significa la
53:34scomposizione in fattori non ha ancora
53:37il concetto di potenza e quindi non sa
53:39che cosa significa i fattori comuni col
53:42minimo esponente lui questa cosa non la
53:45capisce allora domanda ma c'è un modo
53:50semplice per spiegare a un esecutore che
53:52questi concetti non ce li ha come
53:54calcolare il massimo comun di divisore
53:57perché questo sistema questi concetti
53:59non ce li
54:00ha Allora avete voglia di fare le
54:05vostre considerazioni dovete parlare la
54:08lingua che capisce lui allora come
54:11potremmo calcolare il massimo com un
54:14divisore
54:15do Beh questo è un algoritmo che è stato
54:20proposto da guide per 300 aan Crist
54:23circa e a tutti quegli ingredienti che
54:28abbiamo detto prima per poter essere
54:31considerato un
54:33algoritmo
54:34Allora consideriamo due numeri qualsiasi
54:38X e Y con X Mag
54:42Y Ragazzi qua dobbiamo fare un minimo di
54:45attenzione perché
54:48Eh io sto scrivendo una questo algoritmo
54:53risolutivo utilizzando il modello carta
54:55e penna
54:57e sto facendo riferimento a questi
54:59simboli chi sono X e
55:05Y numeri
55:07reali Sì ma come le
55:10chiamate delle variabili Ma che cos'è
55:13una
55:21variabile come definireste una variabile
55:29provate dopo tanta matematica che fatto
55:32fino ad arrivare al primo anno di
55:34università dovreste essere in grado Che
55:37cos'è per voi una
55:46variabile non abbiate
55:50timore Allora nella forma più semplice
55:53posso immaginare che questo è un
55:55letterato che può indicare un qualunque
55:58numero
55:59reale ma nel modello carta e penna
56:03questo concetto di variabile si deve
56:06arricchire di qualcosina in
56:10più nel modello cara e penna X e
56:14Y rappresentano lo spazio del foglio di
56:19carta dove io andrò a scrivere i valori
56:24veri sui quali questo algoritmo devi
56:27operare Allora immaginate che come se io
56:30stessi dicendo vabbè ma io devo fare
56:33questa cosa Allora mi metto carta e
56:36penna e
56:39dico qua scrivo i valori che assumerà la
56:46variabile X qua scrivo il valore che
56:50assumerà la variabile Y Quindi per me in
56:55questo momento X e Y rappresenta la
56:59parte del foglio di carta dove io nel
57:02modello carta e penna andrò a scrivere
57:04questo
57:06valore
57:09allora in questo primo blocco c'è
57:12scritto considera due numeri X e Y con X
57:17Mag Y Allora il mio
57:21esecutore per poter eseguire
57:24correttamente Quest
57:26quali capacità devi
57:46avere Allora ragazzi
57:50deve avere il concetto di
57:52numero ma non solo
57:57mio nipote che sta in prima elementare
57:59dopo aver avuto il concetto di numero ha
58:02avuto un ulteriore
58:04concetto il concetto di confronto tra
58:09numeri cioè devo essere in grado di
58:12definire una relazione
58:14d'ordine questo simbolo significa che il
58:18mio esecutore deve essere in grado di
58:22confrontare due numeri reali due numeri
58:26interi pensate Come volete In questo
58:29momento proviamo a lavorare sugli interi
58:32due numeri interi e stabilire tra questi
58:36due numeri interi qual è quello più
58:39grande cioè deve avere il concetto di
58:43relazione d'ordine su questo insieme di
58:47numeri
58:49interi questo concetto elementare il
58:52sistema di calcolo Ce
58:54l'ha nella la sua circuiter di hardware
58:57è in grado di confrontare i due numeri e
59:00dire chi è più grande e chi è più
59:02piccolo allora questa per me è
59:05un'operazione
59:06elementare quindi questo sistema è in
59:09grado di guardare questi due numeri e
59:12dire qual è più grande e più piccolo ma
59:16se mi fossero arrivati in ingresso
59:27questi due numeri
59:29Allora questo primo blocco avrebbe avuto
59:32questo significato considera due numeri
59:36X e Y con X Mag
59:39y se questa condizione è così che debbo
59:45fare Allora è come dire poiché li so
59:48confrontare e sto nel modello carta e
59:51penna Allora io dico vabbè allora X me
59:55lo chiamo
59:56360 y me lo chiamo
1:00:00220 Allora ho eseguito il primo blocco
1:00:04dove ho considerato due numeri quindi
1:00:06per considerarli vuol dire che nel mio
1:00:08modello carta e penna ho trovato un po'
1:00:11di spazio sulla carta e c'ho messo
1:00:13questi numeretti qui
1:00:15dentro Ho eseguito questo blocco ora la
1:00:19freccia mi dice fai quest'altra
1:00:23operazione dividi X * Y e ottieni il
1:00:27resto
1:00:29R Allora devo fare la divisione tra
1:00:34questi due
1:00:35numeri divisione intera e devo prendere
1:00:40il
1:00:41resto il mio sistema questa cosa la sa
1:00:44fare elementar gentee
1:00:57se la sa fare la fa e ottiene
1:01:00direttamente il resto se lui conosce
1:01:03solo la divisione ma non ha il concetto
1:01:07di resto gli devo spiegare come
1:01:10calcolare il resto di una divisione il
1:01:14resto di una divisione intera facciamo
1:01:16l'ipotesi che lui per ora Questo lo
1:01:18sappia
1:01:19fare allora fa questa operazione nel
1:01:23modello carta e penna si significa che
1:01:26lui si mette e
1:01:28fa
1:01:30360 /
1:01:32220 fa quest'operazione
1:01:35gli viene 1 e il resto gli
1:01:40viene
1:01:42140 Allora vuol dire che nel modello
1:01:45carta e penna lui ha definito
1:01:48quest'altra variabile R che nella nostra
1:01:52accezione significa Trova un po' di Su
1:01:56questo foglio e su questo foglio ci
1:01:58scrivi il conticino che hai
1:02:01fatto quindi il mio esecutore è in grado
1:02:05di fare queste operazioni nel modello
1:02:07carta e penna ha associato una parte del
1:02:10foglio alla variabile r e qui dentro
1:02:14c'ha scritto questo valore Ho eseguito
1:02:17questa istruzione poi Qua c'è un rombo
1:02:21il rombo rappresenta una domanda il
1:02:24resto è uguale a z0
1:02:26Allora il mio
1:02:28esecutore deve essere in grado di
1:02:31rispondere a questa domanda Questo
1:02:34numero è uguale a 0 o no cioè devi avere
1:02:38il concetto di
1:02:40comparazione deve essere in grado di
1:02:43confrontare due numeri e di dare una
1:02:47risposta in questo caso la risposta
1:02:50com'è No perché non è uguale a Zer
1:02:53allora prendo questo ramo e qui è
1:02:56scritto Sostituisci X con y Che
1:03:02significa significa
1:03:04che se questo è lo spazio associato alla
1:03:08variabile X sostituire significa che
1:03:12prendo quello che c'era qua e lo vado a
1:03:14mettere qua dentro l'operazione di
1:03:17sostituzione distrugge quello che c'era
1:03:20prima e ci scrive qualche cosa di nuovo
1:03:24quindi qua ora io ci
1:03:28scrivo
1:03:31220 Questo è il
1:03:33risultato che c'è nel mio sistema dopo
1:03:37aver eseguito questa
1:03:41istruzione poi Eseguo quest'altra
1:03:44istruzione Sostituisci Y con r faccio la
1:03:49stessa cosa vado qui e in questo spazio
1:03:53vado a scrivere quello che c'era nello
1:03:57spazio corrispondente alla variabile R
1:04:00ho scritto
1:04:03140 Dopodiché ritorno qui e ripeto
1:04:07questa stessa
1:04:09operazione dividi X * Y ragazzi è la
1:04:14stessa istruzione ma sto facendo la
1:04:17stessa cosa di
1:04:18prima perché
1:04:21no sono cambi valori perché è cambiata
1:04:25la la memoria Cioè è cambiato quello che
1:04:29ci sta scritto nel modello carta e penna
1:04:32quindi è vero che io sto facendo la
1:04:34stessa istruzione però questa stessa
1:04:38istruzione non ha gli effetti di prima
1:04:41perché sono cambiati i dati sui quali
1:04:45questa operazione viene fatta allora io
1:04:49la rifaccio questa cosa Supponendo di
1:04:52essere in grado di calcolare il resto
1:04:55faccio la stessa cosa e quindi scrivo
1:04:58220 /
1:05:01140 il risultato mi viene ancora 1 e ci
1:05:07devo
1:05:08mettere
1:05:10180 come come
1:05:12valore quindi il resto mi viene
1:05:17180
1:05:1980 mi viene 80
1:05:21Scusate allora Questo è il nuovo resto
1:05:25che ottenuto Allora una volta che ho
1:05:27calcolato il resto il resto R che devo
1:05:31fare questo
1:05:33risultato me lo vado a scrivere di nuovo
1:05:36nella variabile
1:05:39r e mi chiedo di nuovo R = 0 se no
1:05:45ripeto questo blocco ragazzi ma non sto
1:05:48facendo la stessa operazione Sto
1:05:51eseguendo la stessa istruzione su dati
1:05:55diversi
1:05:56Quindi qua adesso è come se stessi
1:05:59dicendo ci scrivo
1:06:01140 qua ci scrivo
1:06:0580 e torno qui e ripeto la stessa
1:06:10operazione ragazzi girate qua dentro
1:06:14alla fine vi trovate vedete in questo
1:06:17caso io faccio
1:06:19140 / 80 verrà
1:06:2360 Poi faccio e quindi ottengo 60 e
1:06:28scusate il resto verrà 60 qua avrò 80 e
1:06:3560 Ripeto la la la mia operazione e
1:06:41quando arrivo ad avere il resto Zero
1:06:45Nella variabile Y avrò proprio il
1:06:50massimo comun divisore della mia
1:06:53operazione quindi questo giochetto qua
1:06:57ci ha permesso di far calcolare ad un
1:07:02esecutore che non sa proprio che
1:07:05significa Non ha il concetto di massimo
1:07:07comun divisore ma applicando
1:07:11ripetutamente le istruzioni che io gli
1:07:14ho dato e che comportano la sola
1:07:19esecuzione di queste istruzioni
1:07:22elementari lui è arrivato a produrre con
1:07:25come risultato il massimo comun
1:07:30divisore
1:07:32all esempi è inutile che ci stiamo a
1:07:34perdere tempo faccio un po' di
1:07:36operazioni quando arrivo che resto è
1:07:38zero ho ottenuto il massimo come un
1:07:41divisore Beh
1:07:43allora facciamo alcune
1:07:47considerazioni l'algoritmo è del tutto
1:07:49generale cioè io qua mi posso divertire
1:07:53a metterci le coppie di numeri che
1:07:56voglio lo faccio eseguire in base alla
1:08:00grandezza dei numeri lo eseguirò più e
1:08:03più volte ma alla fine produrrò lo
1:08:07stesso
1:08:09risultato quindi è generale ma in
1:08:13qualsiasi caso specifico questo
1:08:16algoritmo termina e fornirà una risposta
1:08:20precisa in un numero finito di passi eh
1:08:25ragazzi siamo sicuri di questa
1:08:28affermazione Cioè posso dire che questo
1:08:32algoritmo sicuramente
1:08:34termina questo non è l'esecutore che
1:08:37deve stabilirlo lo stabilisce il
1:08:40progettista Eh Come faccio a essere
1:08:43sicuro che questo algoritmo
1:08:52termina poiché a ogni passo io faccio
1:08:56questa sostituzione e quindi prendo un
1:09:00numero sempre più
1:09:02piccolo alla fine andando a diminuire
1:09:06questo numero arriverò Certamente al al
1:09:10risultato che
1:09:13reiterando questo percorso il resto mi
1:09:16verrà zero Quindi io sono sicuro che
1:09:18questo algoritmo in un numero finito di
1:09:21passi
1:09:23converge quanti passi Non lo so a priori
1:09:26perché perché dipende da quanto sono
1:09:29grandi i numeri metto numeri dell'ordine
1:09:32de milioni faccio centinaia di questi
1:09:34giri ma alla fine arrivo alla alla
1:09:39terminazione quindi l'algoritmo è
1:09:42generale so che avrà termine in un
1:09:45numero finito anche molto grande Ragazzi
1:09:49questo ci fa capire che se il mio
1:09:52sistema mi deve dare una risposta in un
1:09:54certo tempo e l'algoritmo che ho scelto
1:09:58è giusto converge ma ci mette centinaia
1:10:02di migliaia di di passi e io non posso
1:10:06aspettare questo tempo devo pensare ad
1:10:08un algoritmo più efficiente quindi Uno
1:10:12dei metodi che valuteremo per capire
1:10:14quanto è buono un algoritmo è il tempo
1:10:17in cui converge ma per definizione
1:10:21converge altrimenti non sarebbe un
1:10:23algoritmo
1:10:25a Ogni passo è perfettamente chiaro
1:10:28quale operazione si deve compiere e
1:10:31anche la
1:10:33decisione circa il momento in cui il
1:10:37procedimento si debba ritenere
1:10:41concluso quando questa è zero il
1:10:45procedimento è concluso a ogni passo so
1:10:49quello che devo fare e l'azione che
1:10:52Eseguo ha effetto su la mia memoria
1:10:56ragazzi nel modello carta e penna Questa
1:10:59è la mia
1:11:00memoria perché contiene i valori che io
1:11:05associo alle mie
1:11:12variabili la descrizione dell'intero
1:11:15procedimento è presentata in termini
1:11:18finiti anche se può essere applicata a
1:11:22numeri naturali di dimensioni illim
1:11:27qui Qual è l'unico limite fisico Secondo
1:11:32voi allora Uno potrebbe dire l'insieme
1:11:36dei numeri interi è
1:11:38infinito Allora io posso far crescere
1:11:41questi numeri interi fino all'infinito
1:11:44Allora mi potrei arrivare potrei fare il
1:11:47limite per per N che tende
1:11:50all'infinito dei numeri che ci
1:11:52rappresentano
1:11:58se i numeri interi sono infiniti e io
1:12:01posso prendere un numero infinitamente
1:12:03grande lo metto qua
1:12:06dentro però c'è un limite questo limite
1:12:10chi ce lo
1:12:21dà ragazzi ce lo dà il fatto che Noi
1:12:25stiamo utilizzando un
1:12:28modello mentre i numeri interi sono
1:12:31infiniti i numeri interi che
1:12:34rappresentiamo qua dentro sono infiniti
1:12:36No E perché non sono infiniti non sono
1:12:40infiniti perché la memoria che noi
1:12:42utilizziamo qui dentro è una memoria
1:12:45finita
1:12:48Allora io la posso fare grande quanto
1:12:52voglio dato che un programma per essere
1:12:55eseguito deve stare in memoria centrale
1:12:57Allora uno dice va bene io prendo e
1:13:00metto i registri mi prendo un computer
1:13:03che c'ha 32 GB di memoria RAM io ne
1:13:07prendo un altro che ce ne 64 ma per
1:13:11quanto lo faccio grande a un certo punto
1:13:13il numero di registro finisce e quindi
1:13:17la memoria a disposizione finisce allora
1:13:20vi farò vedere Come si rappresentano i
1:13:24numeri interi nei registri e capirete
1:13:27che vi do uno spazio di una certa
1:13:31dimensione per memorizzare i numeri
1:13:35interi bene allora vuol dire che
1:13:39l'insieme
1:13:41astratto l'insieme matematico dei numeri
1:13:44interi è infinito ma l'insieme dei
1:13:47numeri interi che può essere
1:13:49rappresentato su questo calcolatore va
1:13:52da - X a + y
1:13:56ora se io applico questo algoritmo
1:14:00all'insieme dei numeri interi positivi
1:14:03che posso rappresentare è limitato da
1:14:05che dal numero intero più grande che
1:14:08posso mettere qua dentro Allora allora
1:14:11per quanto grande l'algoritmo converge
1:14:15perché in un numero finito di passi
1:14:18arrivo a a convergenza quanti passi
1:14:22tantissimi se il numero intero che posso
1:14:24rappresentare qua dentro è molto grande
1:14:26ma comunque
1:14:30finiti il procedimento descritto assume
1:14:33che sia noto come eseguire particolari
1:14:37operazioni quali il calcolo del resto
1:14:40della divisione interra tra due numeri
1:14:42naturali e se così non
1:14:47fosse cambia qualcosa in quello che ho
1:14:50scritto qua diventa meno vero supponete
1:14:54che io questa questa cosa non la so fare
1:14:56quello che ho scritto è tutto
1:15:00sbagliato Questo non è più un
1:15:10programma ragazzi se non lo so fare Vuol
1:15:14dire che questo blocchetto non è
1:15:17un'operazione
1:15:19elementare Allora questo che sta scritto
1:15:23qua deve diventare a sua volta un
1:15:32programma sto scrivendo l'algoritmo per
1:15:36calcolare il resto intero della
1:15:39divisione tra due
1:15:42numeri Come faccio considera due numeri
1:15:45m e n m è magiore di N m è min di n no
1:15:51allora Sostituisci m con N - m
1:15:55ora n è sempre Tale e quale ma m di
1:15:58volta in volta cambia Gira gira gira a
1:16:01un certo punto non è più vero che m è di
1:16:05n nella variabile m mi compare il resto
1:16:09intero di questa divisione per esempio
1:16:1267 20 faccio 67 - 20 47 e lo metto carta
1:16:19e penna nell'area di memoria associata
1:16:21alla variabile m m più grande m è più
1:16:25piccolo di n no allora faccio ancora 27
1:16:28e più piccolo no 7 che cosa mi rimane mi
1:16:33rimane 7 che il resto intero della
1:16:36divisione Infatti se io faccio 3 * 20 Fa
1:16:4060 a 67 vi ripare 7 Allora se il mio
1:16:44esecutore questa cosa non la sa fare io
1:16:48gli dico io come
1:16:50farla ma quello che voglio dire è che la
1:16:55validità di quello che ho scritto prima
1:16:58rimane esattamente
1:17:01identica e
1:17:04quindi abbiamo messo i pezzi tutti
1:17:08insieme
1:17:11allora adesso questo rappresenta
1:17:15l'algoritmo completo per fare questa
1:17:19operazione che c'era richiesta del
1:17:22taglio della barnetta cioè
1:17:25ho acquisito i valori di A e B Le
1:17:28dimensioni della mia marmetta ho
1:17:31calcolato il massimo comun divisore di a
1:17:35e di B e l'ho scritto nella variabile C
1:17:38ragazzi guardate a questo livello se il
1:17:41mio esecutore sa fare il massimo come un
1:17:44divisore Il programma è finito
1:17:47qui C è = a 1 Sì allora non puoi fare il
1:17:51taglio Perché i numeri sono primi tra
1:17:53loro no comunica che il taglio devi fare
1:17:56con la grandezza C Il programma è finito
1:18:00qua Ma se il mio esecutore il massimo
1:18:03comun divisore non lo sa fare allora
1:18:05questo blocchetto si esplode e qua ti
1:18:08sto dando l'algoritmo per calcolare il
1:18:12massimo comun divisore vedete in questo
1:18:15algoritmo il ruolo della variabile a è
1:18:18svolto dalla variabile X il ruolo della
1:18:21variabile B è svolto dalla variabile Y
1:18:25il massimo com un divisore è Y che sarà
1:18:29memorizzato nella variabile
1:18:31C carta e penna quando ho fatto questa
1:18:34operazione il dato che mi viene
1:18:36restituito lo vado a scrivere nella
1:18:38variabile c e vado avanti nel mio
1:18:43algoritmo nello scrivere questo
1:18:46algoritmo io so calcolare il Rest intero
1:18:49Se è un'operazione elementare mi fermo
1:18:52qua se non è elementare Stivo
1:18:55l'algoritmo per fare questo il programma
1:18:58completo è quello che al posto di questo
1:19:01blocco sta tutta questa parte qua e al
1:19:04posto di questo blocco c'ho tutta questa
1:19:06parte
1:19:08qui
1:19:12allora questo schema si presta anche ad
1:19:15un'ulteriore
1:19:18interpretazione in pratica quello che io
1:19:20sto dicendo è
1:19:22questo guarda che ha un livello molto
1:19:27semplice Questa è la sequenza di
1:19:29operazioni che devi
1:19:31fare cioè ho diviso in macro blocchi e
1:19:37ho indicato in ciascun blocco Che cosa
1:19:39devo
1:19:40fare in pratica per risolvere un
1:19:43problema complesso l'ho decomposto in
1:19:48sottoproblemi più
1:19:51semplici ciascun sottopra
1:19:55può essere elementar eseguito come in
1:19:59questo caso qua o come in questo caso
1:20:02qua acquisisci valori è un'operazione
1:20:05elementare significa Vai carta e penna e
1:20:09scrivi le dimensioni nell'area del
1:20:12foglio di carta Associata a quella
1:20:16variabile questa operazione qua è
1:20:19un'operazione non elemente
1:20:23eseguibile ora nella mia decomposizione
1:20:27questo problema che per quanto è più
1:20:31semplice del problema di partenza perché
1:20:33il problema di partenza è Dimmi se posso
1:20:36tagliare o no queste marmette ora il
1:20:39problema di partenza l'ho decomposto in
1:20:42sottoproblemi più semplici Questo è uno
1:20:45di questi sottoproblemi Ma questo
1:20:48sottopra se non è elementare lo vado a
1:20:52sua volta a decomporre in sotto problemi
1:20:55più semplici Prendi i numeri dividi
1:20:59Ottieni il resto intero della divisione
1:21:01eccetera
1:21:03Questo
1:21:05problema quindi questo problema qui l'ho
1:21:09decomposto in sottoproblemi più semplici
1:21:11a sua volta questo sottopra qua lo so
1:21:15eseguire Se sì lo Eseguo se no lo
1:21:19decompongono
1:21:22più semplici
1:21:25questo approccio si dice un approccio
1:21:28top down stepwise refinement cioè
1:21:33dall'alto verso il basso per
1:21:36raffinamenti
1:21:38successivi l'idea è dec compongo il
1:21:42problema in tanti sottoproblemi più
1:21:45semplici Ognuno di questi in altri
1:21:47sottoproblemi ancora più semplici fin
1:21:50quando non arriva ad avere tutti i
1:21:52problemi elementar
1:21:55eseguibili Cioè che il mio esecutore è
1:21:58in grado di
1:22:00eseguire a questo punto gli dico Esegui
1:22:05e trovami la soluzione del mio problema
1:22:10quindi in questo esempio avete un'idea
1:22:14più generale di quello che noi faremo
1:22:16per ogni
1:22:18problema proveremo a decomporre un
1:22:21problema complesso in sotto problemi più
1:22:23semp
1:22:25Ognuno di questi sarà ulteriormente
1:22:27decomposto finché non arriviamo ad avere
1:22:30tutte operazioni elementar gentee
1:22:34eseguibili a quel punto il nostro lavoro
1:22:37di progettista è finito e passiamo a
1:22:42Codificare Cioè a esprimere tutto quello
1:22:47che sta scritto qua in un linguaggio che
1:22:51il nostro processore che è ore materiale
1:22:55sia in grado di
1:22:58capire e poi vedremo piano piano
1:23:01come fare queste cose come utilizzare
1:23:04questo
1:23:07linguaggio Allora una volta che siamo
1:23:10arrivati a scrivere quel blocco di
1:23:13operazioni che abbiamo visto
1:23:15prima dicevamo chi esegue queste
1:23:19operazioni le
1:23:21operazioni devono essere eseguite da un
1:23:25esecutore che deve essere in grado di
1:23:28interpretare la sequenza di comandi
1:23:31eseguire ognuno dei comandi
1:23:34forniti memorizzare le
1:23:37informazioni su opportuni supporti che
1:23:41permettono di accedere alle informazioni
1:23:44memorizzate e
1:23:46modificarle Ragazzi quando abbiamo
1:23:48scritto questa cosa Io ho preso carta e
1:23:52penna a ogni ogni numeretto Ho associato
1:23:57Scusate a ogni variabile Ho associato un
1:24:00valore
1:24:02numerico sono stato in grado di
1:24:06ritrovarlo cioè quando c'era
1:24:09l'istruzione Sostituisci X con y Io sono
1:24:13stato capace di tornare sul foglio di
1:24:15carta di individuare qual era l'area di
1:24:19memoria associata alla variabile X di
1:24:22scriverci qualche cosa sopra
1:24:26quindi deve memorizzare le informazioni
1:24:30su supporti che permettono di accedere e
1:24:34di
1:24:35modificarle cioè torno qui
1:24:41sopra
1:24:43l'esecutore non è necessariamente
1:24:45consapevole di quello che sta facendo
1:24:48Cioè mentre Sto eseguendo questa roba
1:24:51qua io esecutore non non so affatto
1:24:55quello che sto facendo tu mi dici di
1:24:57sostituire e io sostituisco mi dici di
1:25:00confrontare e io confronto ma non ho
1:25:02proprio idea che tutto questo serva a
1:25:05calcolare il taglio cioè l'esecutore è
1:25:09uno ragazzi l'esecutore è per
1:25:13definizione
1:25:24È un comando lo fa punto e
1:25:27basta tant'è che questi linguaggi in
1:25:31questa forma vengono detti linguaggi di
1:25:34tipo
1:25:35imperativo cioè il linguaggio contiene
1:25:39istruzioni che sono comandi che il
1:25:42nostro esecutore esegue
1:25:46punto
1:25:48allora se l'esecutore fosse un esecutore
1:25:52umano
1:25:56tutto questo sistema di che cosa avrebbe
1:25:59bisogno
1:26:00allora abbiamo un bel foglio di
1:26:04carta dove ci stanno scritte le
1:26:06istruzioni ragazzi una volta che tutto
1:26:10questo è stato scritto ora lo vedete in
1:26:13forma esplosa Ma questo sarà un
1:26:16bell'elenco della spesa con tutte le
1:26:18istruzioni che l'esecutore deve fare
1:26:21Allora il nostro esecutore
1:26:25per eseguire il programma che fa
1:26:28comincia a eseguire le istruzioni
1:26:31esattamente Nell'ordine in cui stanno
1:26:34scritte qua
1:26:36sopra quindi
1:26:38lui nella parte di controllo che cosa fa
1:26:43va sul foglio di carta legge
1:26:46l'istruzione
1:26:47la
1:26:49interpreta e la esegue ma per seguire
1:26:54questa
1:26:55istruzione va sul foglio di
1:26:59carta Dove stanno scritte le
1:27:01informazioni accede in queste a queste
1:27:04informazioni e le esegue per esempio se
1:27:09qui ci fosse scritto Sostituisci X con y
1:27:14Allora il mio esecutore umano prima va
1:27:18sul foglio di carta e legge l'istruzione
1:27:20la interpreta se capisce che deve fare
1:27:24ma per
1:27:25eseguirla va in memoria cioè sul foglio
1:27:30di carta prende accede ai dati e esegue
1:27:36quello che è scritto in questa
1:27:38istruzione se l'istruzione
1:27:42fosse
1:27:45fai x è UG A a +
1:27:49B lui che farebbe supponete che ha
1:27:54trovato scritto questa istruzione
1:27:57qua x è uguale
1:28:02a y +
1:28:07z Allora per eseguire questa istruzione
1:28:11che dovrebbe
1:28:14fare Innanzitutto
1:28:17dovrebbe aver scritto sul foglio di
1:28:20carta
1:28:22Guarda qua ci metto il valore della
1:28:25variabile X qua ci metto il valore della
1:28:29variabile Y qua ci metto il valore della
1:28:32variabile
1:28:33Z e supponete che qua ci sta
1:28:37scritto 5 e qua ci sta scritto
1:28:418 allora lui quando deve eseguire questa
1:28:44operazione va in
1:28:47memoria dove c'è la variabile Y cioè sul
1:28:50foglio di carta e legge questo valore lo
1:28:54e lo
1:28:55scrive sulla calcolatrice da
1:28:59tavola poi sa che deve fare una somma va
1:29:03in memoria dove ci sta scritto la
1:29:05variabile Z prende questo numeretto e lo
1:29:08mette scrive più e qua C scrive il
1:29:11secondo numeretto scrive uguale E qua mi
1:29:15compare il
1:29:17risultato mi compare 13 poiché ci sta
1:29:20scritto questa roba qua vuol dire che
1:29:24la variabile X deve assumere il valore
1:29:28ottenuto sommando questa roba qua quindi
1:29:32lui va sul foglio di carta nello spazio
1:29:35che compete alla variabile x e ci scrive
1:29:4013 Ho eseguito questa operazione quando
1:29:45ho eseguito questa torno qui dentro
1:29:49prendo quella che viene dopo la Eseguo e
1:29:52ripeto così fino alla
1:29:55fine Allora ragazzi Questa roba è una
1:29:59roba che per voi ha senso anche da un
1:30:01punto di vista
1:30:02matematico questa la potreste
1:30:04interpretare come un'equazione
1:30:07e qua è
1:30:10scritto per esempio Calcola questa
1:30:14espressione E qual è il valore della
1:30:18variabile X che soddisfa questa
1:30:21espressione se qua è scritto C 8 il
1:30:25valore della variabile X che soddisfa
1:30:28questa questa equazione è il valore
1:30:3213
1:30:34perché
1:30:35nel nel calcolo aritmetico nel quale voi
1:30:40usate i letterali ed usate Le costanti
1:30:44simboliche o Le costanti numeriche il
1:30:47letterale ha il
1:30:49senso del valore reale che soddisfa Quel
1:30:55determinato
1:30:57vincolo E se io vi scrivo
1:31:07così questa roba
1:31:19senso questa roba che sta scritta qua x
1:31:23= x + Z ha senso dal punto di vista
1:31:29matematico Qual è l'unico valore che
1:31:31soddisfa questa
1:31:35equazione perché nel senso della da un
1:31:40punto di vista proprio
1:31:41algebrico qui è
1:31:44scritto trova il valore della variabile
1:31:48X che soddisfa questo ma chiaramente
1:31:54che sia il valore di Z qua C'è un'unica
1:31:57soluzione che soddisfa questa equazione
1:32:00e il valore x = 0 e dal punto di vista
1:32:03informatico questa roba ha
1:32:11senso allora qui che cosa è scritto qui
1:32:15c'è l'operatore uguale l'operatore
1:32:18uguale nella nel linguaggio che ci siamo
1:32:21definiti prima significa
1:32:25Sostituisci alla variabile X il valore
1:32:29di questa
1:32:30espressione Allora il mio esecutore che
1:32:33fa va in memoria dove c'è la variabile X
1:32:36che ci sta scritto 13 prende 13 e lo
1:32:39mette nella macchinetta
1:32:41calcolatrice deve fare una somma va in
1:32:44memoria alla variabile Z il foglio di
1:32:47carta della variabile Z Qua ci sta
1:32:49scritto 8 prendi 8 e mettilo qua dentro
1:32:53fai la somma ottieni 13 vai in
1:32:58memoria nella parte di memoria che
1:33:01corrisponde alla variabile x e ci scrivi
1:33:04questo valore
1:33:0613 Scusate Qua ho scritto 13 13 + 8 fa
1:33:1421 qua ci scrivi
1:33:1721 quindi questa operazione non ha senso
1:33:22dal punto di vista algeb
1:33:24ma ha senso dal punto di vista delle
1:33:28istruzioni date in un programma di
1:33:31calcolo perché questa istruzione ha il
1:33:34senso l'operatore di assegnazione che è
1:33:38l'uguale significa vai in memoria
1:33:43all'indirizzo di questa variabile e
1:33:47metti il valore che hai calcolato da
1:33:50questa parte qui allora ragazzi qual è
1:33:53il TR TR Il trucco è che in un
1:33:56linguaggio di programmazione a ogni
1:33:59letterale sono associate due
1:34:03informazioni un'informazione è
1:34:06l'indirizzo di memoria Dove si trova
1:34:09quel dato l'altra informazione è il
1:34:12valore che è scritto in memoria a
1:34:15quell'indirizzo
1:34:18quindi una variabile in un linguaggio di
1:34:22programmazione ha un senso duplice
1:34:26rappresenta sia l'indirizzo di
1:34:29memoria sia il valore che è contenuto In
1:34:33quella variabile Allora quando ci
1:34:36troviamo nella parte destra di un
1:34:39operatore di assegnazione della
1:34:41variabile ne andiamo a prendere il
1:34:44valore e lo usiamo per fare i conti
1:34:48quando una variabile si trova nella
1:34:50parte sinistra invece si interpreta come
1:34:54l'indirizzo di memoria dove andare a
1:34:57scrivere il valore che è stato
1:35:07calcolato ragazzi Questa Robba
1:35:22senso sta roba veramente è priva di
1:35:25significato perché qua C'è
1:35:27un'espressione che è un valore numerico
1:35:29che ho calcolato Ma questa espressione
1:35:32dovrei andarla a mettere a un indirizzo
1:35:34ma qua c'è un altro valore numerico
1:35:36questa roba Non ha senso allora Voi
1:35:39potrete sempre trovare questa è
1:35:42un'istruzione che si chiama di calcolo e
1:35:46assegnazione le variabili le potete
1:35:49sempre trovare da questa parte qui nella
1:35:52parte destra ma nel nella parte sinistra
1:35:55troverete sempre ed esclusivamente una e
1:35:58una sola variabile perché in questo caso
1:36:02della variabile mi interessa la parte
1:36:05che rappresenta l'indirizzo dove
1:36:08quell'informazione dovrà essere
1:36:11memorizzata bene allora questo è quello
1:36:16che fa un esecutore
1:36:19umano domani ci occuperemo di vedere
1:36:24quello che fa per eseguire questa nota
1:36:27un
1:36:28esecutore va bene ragazzi