appunti3s:introduzione_alla_programmazione
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revision | |||
appunti3s:introduzione_alla_programmazione [2018/05/03 11:16] – profpro | appunti3s:introduzione_alla_programmazione [2020/06/08 22:19] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | > Menù principale > [[appunti3s: | ||
+ | |||
+ | ====== Introduzione alla programmazione ====== | ||
+ | =====Prerequisiti===== | ||
+ | Desirare capire come funziona un computer :) | ||
+ | |||
+ | Prima di leggere il prossimo paragrafo si deve rispondere alla seguente domanda: cosa risponderesti se ti chiedessero a cosa servono i computer? | ||
+ | |||
+ | Scrivi la tua risposta... | ||
+ | |||
+ | =====A cosa serve un computer? | ||
+ | |||
+ | Immaginiamo di dover spiegare a cosa serve un computer ad una persona che non lo ha mai usato. | ||
+ | Ogni spiegazione si concentrerebbe su un particolare utilizzo: | ||
+ | * qualcuno potrebbe dire che lo usa per vedere un video | ||
+ | * qualcuno che lo usa per scrivere una lettera | ||
+ | * qualcun altro che lo usa per navigare su Internet... | ||
+ | Chi ha dato la migliore spiegazione? | ||
+ | In un certo senso, ogni risposta descrive sempre un corretto tipo di utilizzo, e tutte inseme spiegano che un computer può essere usato per risolvere __diversi__ tipi di problemi. | ||
+ | |||
+ | Anche l' | ||
+ | =====Cos' | ||
+ | |||
+ | L' | ||
+ | Un problema può essere il calcolo della dichiarazione dei redditi, la visualizzazione e la modifica di un documento, la riproduzione di un filmato... | ||
+ | Il computer non sa risolvere i problemi dell' | ||
+ | A ben pensarci, anche risolvendo due volte lo stesso tipo di problema, ogni volta ci saranno sicuramente delle piccole differenze, perché i dati di partenza potrebbero essere diversi. | ||
+ | |||
+ | =====Come si descrive un problema? | ||
+ | Probabilmente tutti abbiamo avuto familiarità con i problemi svolti a scuola. Nei problemi di matematica, __dopo__ aver letto il testo, si indicano quali sono i dati noti (di partenza) e quali sono i dati incogniti (usando un punto interrogativo). | ||
+ | * Ad esempio, dato il seguente problema, tu come imposteresti i dati noti e i dati incogniti? | ||
+ | * Calcolare l'area di un triangolo che ha base 3.4 e altezza 1.0. | ||
+ | |||
+ | Si potrebbe descrivere la situazione iniziale scrivendo: | ||
+ | |||
+ | b = 3.4 | ||
+ | h = 1.0 | ||
+ | A = ? | ||
+ | |||
+ | * Sei in grado di risolvere il precedente problema? Cosa si deve scrivere per risolverlo? Scrivi la tua soluzione, ti sarà utile per capire il successivo paragrafo. | ||
+ | =====Cos' | ||
+ | Per poter risolvere ogni tipo di problema (come anche quelli di matematica) __dopo__ aver visto i //dati//, è necessario conoscere un metodo risolutivo (di un problema generico). | ||
+ | Le istruzioni che risolvono un problema generico potranno essere applicate a tutti i problemi dello stesso tipo (che possiamo chiamare | ||
+ | |||
+ | Vediamo le istruzioni utili per risolvere il problema proprosto nel precedente paragrafo: | ||
+ | |||
+ | * A = b * h / 2 | ||
+ | * A = 3.4 * 1.0 / 2 | ||
+ | La soluzione consiste nell' | ||
+ | |||
+ | * Quanti valori può contenere contemporaneamente una variabile? | ||
+ | * Che tipo di valori possono essere memorizzati in una variabile? | ||
+ | * Dove si trovano le variabili usate dal computer? | ||
+ | |||
+ | Se ci sono più passaggi e più formule da utilizzare, oltre alle variabili di input e di output ci possono essere anche variabili temporanee (variabili di lavoro). | ||
+ | |||
+ | Il metodo risolutivo, viene detto anche // | ||
+ | |||
+ | * Esempio in cui il problema è quello di determinare (o calcolare) il valore massimo tra due numeri che sono forniti dall' | ||
+ | * A chiunque si ponesse questo problema, sembrerebbe ovvio rispondere 9, ma descrivere il procedimento mentale che ha portato a questa risposta non è altrettanto facile. | ||
+ | In generale i numeri forniti potrebbero essere qualsiasi (non solo 5 e 9) ed è necessario determinare un metodo risolutivo che ci dia in ogni caso la risposta corretta. Il programmatore ha il compito di descrivere il metodo risolutivo generico. | ||
+ | Un procedimento risolutivo potrebbe essere il seguente: | ||
+ | - determinare i dati di input (dati noti) | ||
+ | - chiamare X il primo numero | ||
+ | - chiamare Y il secondo numero | ||
+ | - chiamare Z il risultato (si desidera il massimo) | ||
+ | - operazione di confronto: se l' | ||
+ | - allora il risultato Z = X | ||
+ | - altrimenti, se è falsa, il risultato Z = Y. | ||
+ | Questo metodo risolutivo funziona in tutti i casi? Oppure ci sono dei casi critici? | ||
+ | Funziona anche se un numero vale zero? Oppure anche nel caso particolare in cui X = Y? | ||
+ | |||
+ | =====Come si descrive un metodo risolutivo? | ||
+ | Un metodo risolutivo (o algoritmo) può essere descritto usando diversi tipi di linguaggio: | ||
+ | * con delle parole (usando un linguaggio naturale o un linguaggio di programmazione) | ||
+ | * con un grafico (diagramma di flusso o flow chart). | ||
+ | * con un linguaggio di programmazione | ||
+ | * con dei numeri (codice macchina) | ||
+ | Quando il programmatore ha individuato il metodo risolutivo può appuntarselo in italiano su un pezzetto di carta. Può disegnarlo con un grafico per farlo capire meglio agli altri. Infine può fornirlo al computer usando un linguaggio di programmazione o in forma numerica, all' | ||
+ | |||
+ | ==== Il diagramma di flusso ==== | ||
+ | |||
+ | Nel caso di un diagramma di flusso (o flow chart) si hanno dei blocchi che contengono le istruzioni da eseguire. La forma del blocco dipende dal tipo di istruzione che essa contiene. | ||
+ | |||
+ | Le forme più usate sono le seguenti: | ||
+ | |||
+ | {{ : | ||
+ | * l' | ||
+ | * il parallelogramma contiene istruzioni di input o output; | ||
+ | * il rettangolo contiene istruzione di assegnazione, | ||
+ | * il rombo contiene espressioni logiche che devono essere valutate (vere o false); | ||
+ | * le frecce orientate collegano tutti gli elementi e determinano il percorso da seguire. | ||
+ | |||
+ | ==== Esempio ==== | ||
+ | Immaginare il semplice problema del calcolo dell' | ||
+ | ^ variabili di input ^ variabili di output ^ | ||
+ | | base | area | | ||
+ | |altezza | | | ||
+ | {{ : | ||
+ | La prossima tabella tiene //traccia// dei valori assunti nel tempo da ogni variabile durante l' | ||
+ | ^ passo ^ input ^ base ^ altezza ^ area ^ output ^ | ||
+ | | i | - | - | - | - | inserire due numeri... | | ||
+ | | ii | 5 | 5 | | ||
+ | | iii | 6 | | 6 | | | | ||
+ | | iv | | ||
+ | | v | | ||
+ | |||
+ | Per esercizio si può provare a realizzare la stessa tabella, fornendo - 5 e 6 come valori di base e altezza. | ||
+ | Si approfondiranno questi diagrammi nell' | ||
+ | |||
+ | ==== Algoritmo ==== | ||
+ | La parola algoritmo può essere usata come sinonimo di " | ||
+ | Gli algoritmi sono stati studiati dai matematici molto prima che venissero inventati i primi calcolatori. | ||
+ | Gli argomenti che possono essere collegati allo studio degli algoritmi sono: | ||
+ | * gli automi a stati finiti | ||
+ | * i linguaggi formali | ||
+ | * la teoria della calcolabilità delle funzioni | ||
+ | * le funzioni calcolabili da macchina di Turing | ||
+ | * le funzioni ricorsive e matematica della ricorsione | ||
+ | * la complessità computazionale | ||
+ | |||
+ | Come è noto, per costruire un teorema o per dimostrarlo formalmente (quando possibile) è necessario fissare delle rigorose ipotesi di partenza. I matematici hanno dovuto quindi fissare delle condizioni che devono essere rispettate per dire di avere un algoritmo. | ||
+ | |||
+ | Un algoritmo per essere valido deve avere delle istruzioni con le seguenti caratteristiche: | ||
+ | |||
+ | * avere un numero finito di istruzioni | ||
+ | * avere delle istruzioni con un limite finito di complessità | ||
+ | * contenere delle istruzioni // | ||
+ | * le istruzioni devono poter essere eseguite dall' | ||
+ | |||
+ | Tuttavia ci sono anche delle caratteristiche inaspettate: | ||
+ | |||
+ | * sono ammesse esecuzioni che non terminano | ||
+ | * non è necessario porre un limite alla lunghezza dei dati in input | ||
+ | * non è necessario porre un limite alla dimensione della memoria dell' | ||
+ | |||
+ | ===== Il compito del programmatore ===== | ||
+ | Nei casi reali, i problemi da risolvere non sono facili come quello che chiedeva di trovare il massimo di due numeri interi. | ||
+ | In questi casi il programmatore può trovare un aiuto seguendo un [[appunti3s: | ||
+ | La documentazione è utilissima per poter fare la necessaria manutenzione al programma, come per la correzione degli errori, e per l' | ||
+ | Vi sono due tipi di documentazione: | ||
+ | * la documentazione delle fasi del processo di sviluppo (si individuano le responsabilità) | ||
+ | * la documentazione delle funzioni usate nel programma (si individuano anche oggetti e variabili) | ||
+ | =====Cos' | ||
+ | |||
+ | Fino ad ora si è parlato di problemi e di metodi risolutivi. | ||
+ | Si può applicare un metodo risolutivo ad un computer in modo che sia in grado di risolvere un determinato genere di problemi. Il computer è flessibile e può eseguire qualsiasi istruzione venga data all' | ||
+ | |||
+ | Si può paragonare un programma ad una lunga e complessa ricetta di cucina. | ||
+ | Il computer è il cuoco che la deve eseguire per l' | ||
+ | Il programmatore cosa è? È l' | ||
+ | Noi possiamo essere programmatori e poi anche utenti, quando proviamo ad utilizzare gli stessi programmi che abbiamo scritto. | ||
+ | |||
+ | Quando dobbiamo insegnare al computer a fare qualcosa, come glie lo possiamo insegnare? Potrebbe eseguire le istruzioni in questa ricetta? | ||
+ | |||
+ | Esempio: **Fiori di zucca ripieni al forno** | ||
+ | - lavare 6 fiori di zucca | ||
+ | - lavare 1 zucchina | ||
+ | - cuocere la zucchina a rondelle con sale ed olio per 10 minuti | ||
+ | - frullare con il mixer la zucchina con 100 gr di ricotta | ||
+ | - riempire i fiori di zucca con il precedente preparato | ||
+ | - mettere in forno ventilato a 160 gradi per 10 minuti | ||
+ | - spolverare le zucchine con parmigiano | ||
+ | - mettere in forno per 5 minuti | ||
+ | |||
+ | Per un cuoco esperto queste istruzioni possono essere semplici da realizzare, ma per altri no: si può notare che richiedono di sapere come si cuoce una zucca o come si accende il forno. | ||
+ | |||
+ | Rispetto ad un vero cuoco, un computer non possiede nemmeno una propria intelligenza. | ||
+ | Le istruzioni che può eseguire un computer, quindi, devono essere molto più dettagliate, | ||
+ | |||
+ | ====== Linguaggi compilati ed interpretati ====== | ||
+ | ===== Il file sorgente ===== | ||
+ | Il programmatore indica le istruzioni da eseguire usando uno specifico linguaggio. | ||
+ | Le scrive dentro dei file di testo, detto anche file sorgente (source), ma di solito non usa l' | ||
+ | * se scrive in linguaggio C++ potrebbe usare per i file di testo l' | ||
+ | * se scrive in linguaggio Python potrebbe usare l' | ||
+ | * se scrive in linguaggio Javascript potrebbe usare l' | ||
+ | * ecc. | ||
+ | |||
+ | Le istruzioni, però, dovranno essere eseguite dalla CPU che comprende solo un linguaggio numerico (detto anche linguaggio macchina) dove ogni numero corrisponde ad una diversa istruzione da eseguire. | ||
+ | |||
+ | ===== La traduzione ===== | ||
+ | |||
+ | La traduzione da linguaggio di programmazione al linguaggio macchina (istruzioni eseguibili dalla CPU) può essere fatta in due modi diversi: | ||
+ | * usando un compilatore: | ||
+ | * usando un interprete: un // | ||
+ | |||
+ | Alcuni linguaggi di programmazione vengono tradotti usando un compilatore, | ||
+ | Sia il compilatore che l' | ||
+ | |||
+ | * Nei linguaggi compilati, come il C++ o il Pascal, una volta tradotto, il file sorgente diventa inutile. Si esegue solo il file eseguibile (.exe). | ||
+ | * Nei linguaggi interpretati, | ||
+ | ===== Esempio in javascript ===== | ||
+ | <code html pagina.html> | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | function miafunzione() | ||
+ | { | ||
+ | var name=prompt(" | ||
+ | if (name!=null && name!="" | ||
+ | { | ||
+ | document.write("< | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | <body onload=" | ||
+ | |||
+ | </ | ||
+ | |||
+ | </ | ||
+ | </ | ||
+ | |||
+ | ===== Verifica ===== | ||
+ | * Cosa rappresenta un blocco a forma di rettangolo? | ||
+ | * Cosa rappresenta un blocco a forma di parallelogramma? | ||
+ | * Da quali colonne è composta la tabella che tiene traccia dell' | ||
+ | |||