P1-La_Programmazione (33784317).pdf
Document Details
Uploaded by GreatCubism
Politecnico di Torino
2023
Tags
Related
- CIT 0513 Computer & Programming - Chapter 1 PDF
- Introduction to Computers and Programming PDF
- Lecture-fundamental-concept-of-algorithm-Introduction-to-Computer-Science (1).docx
- CSC 111 Introduction to Computer Science PDF
- Unit 1-Introduction To Programming And Computer Science PDF
- Introduction to Python Programming PDF
Full Transcript
Unità P1: Introduzione alla programmazione BREVE INTRODUZIONE AD HARDWARE, SOFTWARE E SVILUPPO DI ALGORITMI Capitolo 1 This Photo by Unknown Author is licensed under CC BY-SA...
Unità P1: Introduzione alla programmazione BREVE INTRODUZIONE AD HARDWARE, SOFTWARE E SVILUPPO DI ALGORITMI Capitolo 1 This Photo by Unknown Author is licensed under CC BY-SA Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 1 Convenzioni grafiche Capitolo 1 File contenente Riferimento ai l’esercizio risolto capitoli/ paragrafi 📜 hello.py (presente in 1.7 del libro esempi.zip) Caratteri a spaziatura fissa Istruzioni Python Argomenti opzionali o non fondamentali Link di https://www.example.com/xyz approfon- dimento Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 2 Unità P1: Obiettivi Introduzione agli elaboratori elettronici e alla programmazione o Hardware e software dei computer e programmazione o Scrivere ed eseguire il primo programma in Python o Diagnosticare e correggere errori di programmazione o Usare pseudo-codice per descrivere un algoritmo Diagrammi di Flusso (Flow Chart) come supporto per il Problem Solving o Rappresentazione o Passaggi progettuali Introduzione a Python o Strumenti o Linguaggio Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 3 Introduzione ai sistemi di elaborazione Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 4 Definizione di Informatica L’Informatica (Computer Science) è la scienza che si occupa dello studio della rappresentazione e manipolazione dell’informazione Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 5 Elaboratore elettronico input output (dati) (risultati) (calcolo / elaborazione) Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 6 Problemi Come codificare i dati in un formato che sia comprensibile dall’elaboratore Come codificare gli ordini come sequenza di operazioni che produce l’elaborazione desiderata Come decodificare il risultati in un formato che possa essere compreso dall’utente umano Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 7 Informazione digitale: tutto diventa «bit» Testo Dati Voce 01101100 10100101 Musica Immagini Video Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 8 Hardware e Software Un calcolatore elettronico è composto da due parti Hardware: la componente fisica, consiste di dispositivi elettronici e parti meccaniche, magnetiche ed ottiche Software: la parte «intangibile», consiste di: o Programmi: le «istruzioni» per l’hardware o Dati: le informazioni su cui lavorano i programmi Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 9 Hardware Hardware comprende gli elementi fisici di un sistema di elaborazione o Esempi: monitor, mouse, memoria esterna, tastiera, …. La central processing unit (CPU) controlla l’esecuzione del programma e l’elaborazione di dati I dispositivi di memoria comprendono la memoria interna (RAM) e la memoria secondaria o Hard disk o Dischi Flash o CD/DVD I dispositivi di Ingresso / Uscita (Input / output) permettono all’utente di interagire con il computer o Mouse, tastiera, stampante, schermo, … Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 10 Vista semplificata dell’hardware di un PC Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 11 Software Software viene tipicamente sviluppato sotto forma di «programma applicativo» (App) o Microsoft Word è un esempio di software o I Giochi elettronici sono software o I sistemi operativi ed i driver dei dispositivi sono anch’essi software Software o Il Software è una sequenza di istruzioni e decisioni implementata in qualche linguaggio e tradotta in una forma che possa essere eseguita nel computer o Il Software gestisce i dati utilizzati dalle varie istruzioni I computer eseguono istruzioni molto semplici in rapida successione o Le istruzioni più semplici vengono raggruppate per eseguire compiti più complessi La programmazione è l’atto di progettare ed implementare i programmi software Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 12 Programmi Un programma per computer indica al computer la sequenza di passi necessaria a completare un determinato compito o Il programma consiste di un (elevatissimo) numero di istruzioni primitive (semplicissime) I computer possono eseguire un ampio spettro di compiti perché possono eseguire diversi programmi o Ciascun programma è progettato per indirizzare il computer affinché lavori su un compito specifico Programmazione: o È l’atto (e anche l’arte) di progettare, implementare e verificare (testare) i programmi Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 13 Eseguire un programma Le istruzioni di un programma ed i relativi dati (come testi, numeri, audio o video) sono memorizzati in formato digitale Per eseguire un programma, questo deve essere portato in memoria, dove la CPU lo possa leggere La CPU esegue il programma un’istruzione per volta o Il programma può anche reagire agli input provenienti dall’utente Le istruzioni e gli input dell’utente determinano l’esecuzione del programma o La CPU legge i dati (compreso l’input utente), li modifica e li riscrive nuovamente in memoria, sullo schermo, o sulla memoria di massa Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 14 Cucinare vs Programmare Hardware Software Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 15 Cucinare vs Programmare Hardware Software Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 16 Cucinare vs Programmare Ingredients/Data Instructions/Code Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 17 Cosa vuol dire “programmare”? La programmazione consiste nello scrivere un «documento» (file sorgente) che descrive la soluzione al problema considerato In generale, “la” soluzione a un dato problema non esiste o La programmazione consiste nel trovare la soluzione più efficiente ed efficace per il problema, secondo opportune metriche Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 18 Cosa vuol dire “programmare”? Programmare è un’attività “creativa”! o Ogni problema è diverso da ogni altro problema o Non ci sono soluzioni sistematiche/analitiche o soluzioni “universali”! Programmare è un’operazione complessa o Un approccio “diretto” (dal problema direttamente al codice sorgente) è impraticabile o Solitamente, lo sviluppo è organizzato in diverse fasi (raffinamenti) successivi Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 19 Sviluppo di un programma Problema Soluzione informale Soluzione formale Programma Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 20 Cosa impareremo in questo corso? Dalla specifica di un problema, fino alla realizzazione di una soluzione a tale problema, sotto forma di un programma Costruire un programma Il primo corso di INGEGNERIA al Politecnico Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 21 Cosa impareremo in questo corso? Ad acquisire la predisposizione mentale (forma mentis) necessaria ad affrontare compiti di «problem posing» e «problem solving» o Analizzare un problema e decomporlo in problemi più piccoli o Descrivere la soluzione di un problema, in modo chiaro e non ambiguo o Analizzare ed esplicitare i passi del nostro ragionamento Queste capacità sono utili in tutte le discipline scientifiche (e non scientifiche) In particolare… o …a PENSARE come ‘pensa’ un computer o … PARLARE ad un computer in modo che ci possa ‘comprendere’ Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 22 Strumenti per il Problem Solving Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 23 Le Regole Devo risolvere il problema ed immaginare di avere solamente un foglio di carta (memoria) ed una penna Ogni informazione che ho bisogno di ricordare deve essere scritta sul foglio di carta Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 24 Esercizio Trovare chi sia lo studente più anziano presente nell’aula Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 25 Algoritmi 1.7 Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 26 Algoritmo Linguaggio visuale strutturato Operazioni sequenziali Sotto-operazioni Ripetizioni Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 27 Pensare come un programmatore Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 28 Pensare come un programmatore Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 29 Una prima definizione Algoritmo Un algoritmo è una descrizione passo-passo di come risolvere un problema Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 30 Introduzione agli algoritmi Per fare in modo che un computer esegua un compito, il primo passo è scrivere un algoritmo Un Algoritmo è: o Una sequenza (l’ordine è importante!) di azioni da compiere (istruzioni) per svolgere il compito dato, e raggiungere un obiettivo specifico o Come una ‘ricetta’ Per i problemi più complessi, gli sviluppatori software studiano un algoritmo, poi lo formalizzano come pseudo-codice o diagrammi di flusso, prima di iniziare la scrittura di un programma vero e proprio Sviluppare algoritmi richiede fondamentalmente capacità di problem solving o Tali capacità sono utili in molti campi, anche al di fuori dell’informatica Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 31 Algoritmo: Definizione formale Un algoritmo descrive una sequenza di passi con le seguenti caratteristiche: Non ambigua o Non vi possono essere delle «assunzioni» sulla conoscenza necessaria per eseguire l’algoritmo o L’algoritmo usa istruzioni precise Eseguibile o L’algoritmo può essere svolto, in pratica Termina o L’algoritmo, prima o poi, dovrà necessariamente terminare e fermarsi Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 32 Problem Solving: Progettazione di algoritmi Gli algoritmi sono semplicemente dei piani operativi o Piani dettagliati che descrivono i passi per risolvere un problema specifico Alcuni li conosciamo già o Calcolare l’area di un cerchio o Trovare la lunghezza dell’ipotenusa di un triangolo Alcuni sono più complessi e richiederanno più passi o Risolvere un’equazione di 2o grado o Trovare il MCD tra due numeri o Calcolare π con 100 cifre decimali o Calcolare la traiettoria di un razzo Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 33 Algoritmi nella vita quotidiana 1. metti l’acqua 2. accendi il fuoco 3. aspetta 4. se l’acqua non bolle torna a 3 5. butta la pasta 6. aspetta un po’ 7. assaggia 8. se è cruda torna a 6 9. scola la pasta Chi si è accorto che manca il sale? Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 34 Un semplice esempio Un semplice algoritmo per prepararti un succo d’arancia o Per semplicità, assumiamo che le seguenti condizioni siano verificate: Hai un bicchiere pulito nell’armadio Hai del succo d’arancia nel frigorifero Un algoritmo valido potrebbe essere: o Prendi un bicchiere dall’armadio o Vai al frigorifero e prendi la bottiglia del succo d’arancia o Apri la bottiglia del succo d’arancia o Versa il succo d’arancia dalla bottiglia al bicchiere o Rimetti la bottiglia del succo d’arancia nel frigorifero o Bevi il succo Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 35 Esempio di Problem Solving Problema: Calcola il massimo tra AeB Problema Soluzione: Se A>B, il massimo Soluzione sarà A, altrimenti sarà B informale o NOTA: e se sono uguali? Soluzione formale: Soluzione 1. inizialmente: max = 0 formale 2. se A > B allora max = A; stop 3. altrimenti max = B; stop Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 36 Esempio di Problem Solving Problema: Calcola il Massimo Comun Problema Divisore (MCD) tra A e B Soluzione: Per definizione il MCD è il Soluzione numero intero più grande che li divide informale esattamente (sia A che B). Possiamo allora provare con tutti i numeri interi tra 1 ed A oppure B Soluzione Soluzione formale: ??? formale Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 37 Esempio: scegliere un’automobile Definizione del problema: o Avete la scelta di scegliere l’acquisto di un’auto tra due possibili o Una ha una maggiore efficienza (minor consumo di benzina), ma è anche più costosa o Conoscete il prezzo e l’efficienza (in km per litro) di entrambe le auto o Prevedete di tenere l’auto per 10 anni o Quale auto è più conveniente? Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 38 Sviluppare l’algoritmo Determinare gli input e l’output Dalla definizione del problema, sappiamo: o Car 1: Prezzo d’acquisto, Efficienza o Car 2: Prezzo d’acquisto, Efficienza o Prezzo al litro = $1.40 o Km annuali percorsi = 15,000 o Durata = 10 anni Per ciascuna auto dovremo calcolare: o Effettivo carburante consumato in un anno o Costo annuale del carburante o Costi operativi di ciascuna auto o Costo totale dell’auto Sceglieremo l’auto con il costo minore Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 39 Formalizzazione della soluzione PSEUDO-CODICE FLOW CHART Pro Pro o Immediato o Più intuitivo: formalismo grafico o Descrizione dell’algoritmo più astratta Contro o Descrizione dell’algoritmo non molto astratta Contro o L’interpretazione è più complessa o Richiede l’apprendimento del significato dei blocchi o Difficile rappresentare operazioni più complesse o troppo astratte Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 40 Tradurre l’algoritmo in pseudo-codice Dividere il problema in sotto-problemi più semplici o ‘Calcola il costo totale’ di ciascuna auto o Per calcolare il costo totale annuale dobbiamo calcolare i costi operativi o I costi operativi dipendono dal costo annuale del carburante o Il costo annuale è il prezzo al litro * il consumo annuale o Il consumo annuale è la percorrenza totale / l’efficienza Descrivere ciascuno dei sotto-problemi come pseudo-codice o costo totale = prezzo di acquisto + costi operativi Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 41 Pseudo-codice Per ciascuna auto, calcola il costo totale o Carburante consumato all’anno = kilometri percorsi all’anno / efficienza o Costo annuo carburante = prezzo al litro * carburante consumato all’anno o Costo operativo = durata * costo annuo carburante o Costo totale = prezzo di acquisto + costo operativo Se costo totale 1 < costo totale 2 o Scegli auto 1 Altrimenti o Scegli auto 2 Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 42 Esempio: conto corrente bancario Definizione del problema: o Depositate $10,000 in un conto corrente che garantisce un interesse del 5 percento all’anno. Quanti anni sono necessari affinché il saldo del conto corrente arrivi al doppio della cifra originaria? Come lo risolviamo? o Metodo manuale Fare una tabella Aggiungere nuove righe fino a trovare il risultato o Usare un foglio di calcolo! Costruiamo una formula Calcoliamo ogni linea a partire da quella precedente Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 43 Sviluppo dei passi dell’algoritmo o Depositate $10,000 in un conto corrente che garantisce un interesse del 5 percento all’anno. Quanti anni sono necessari affinché il saldo del conto corrente arrivi al doppio della cifra originaria? Dividiamolo in passi o Iniziamo con un valore 0 per l’anno ed un saldo di $10,000 o Ripetiamo le seguenti operazioni finché il saldo rimane inferiore a $20,000 Aggiungi 1 al valore dell’anno Moltiplica il saldo per 1.05 (corrisponde all’aumento del 5%) o La risposta sarà il valore finale dell’anno Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 44 Tradurre in pseudo-codice Pseudo-codice o Via di mezzo tra il linguaggio naturale ed un linguaggio di programmazione Passi da eseguire o Poni il valore dell’anno a 0 o Poni il valore del saldo a $10,000 o Finché il saldo è minore di $20,000 Aggiungi 1 al valore dell’anno Moltiplica il saldo per 1.05 o Restituisci il valore dell’anno come risposta finale Lo pseudo-codice si traduce facilmente in Python Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 45 Dalla Soluzione al Programma Scrivere un programma è un’operazione quasi immediata, se si parte da una soluzione formale (pseudo-codice o flow chart) I linguaggi di programmazione offrono diversi costrutti ed istruzioni, di complessità variabile o Dipende dal linguaggio utilizzato Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 46 Quali linguaggi? Diversi livelli di astrazione o Linguaggi ad alto livello Elementi del linguaggio hanno complessità equivalente ai blocchi dei diagrammi di flusso strutturati (condizionali, cicli,…) Esempi: C, C++, Java, JavaScript, Python, ecc. Indipendenti dall’hardware o Linguaggi ‘assembler’ Elementi del linguaggio sono istruzioni microarchitetturali Fortemente dipendenti dall’hardware Esempio: Linguaggio Assembler del microprocessore Intel Core Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 47 Quali linguaggi? – Esempi Linguaggi ad alto livello … if x > 3: x = x + 1 … Linguaggio assembler … Specifico per una specifica LOAD Reg1, Mem architettura (microprocessore) ADD Reg1, 10 … Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 48 Astrazione dei dati 100 101 x; integer; 3 102 value=3 103 Indirizzi c; character; ‘a’ 104 di memoria value=‘a’ 105 106 t; real; 107 -11.564 value=-11.564 108 Memoria Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 49 Istruzioni Operazioni supportate dal linguaggio di programmazione, che saranno eseguite traducendole in codice macchina o Pseudo-istruzioni Direttive all’interprete o compilatore del linguaggio, non corrispondono ad effettivo codice eseguibile o Istruzioni elementari (o primitive) Operazioni che corrispondono direttamente ad operazioni hardware Esempio: interazioni con dispositivi di I/O, accesso ai dati, modifica dei dati o Istruzioni di controllo del flusso Permettono l’esecuzione di operazioni complesse, controllando l’esecuzione di sequenze di istruzioni elementari Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 50 Esempio di programma PROGRAM prova; identifiers // test program Pseudo-instruction KEYWORDS CONSTANTS pi = 3.14159 coeff = 0.19 Allocate memory cells VARIABLES x: INTEGER Specify data types Control y: REAL flow c: CHARACTER instruction BEGIN PROGRAM x = 2; Primitive instructions “Running” IF (y > 2) THEN y = x * pi; part PRINT x, y; END PROGRAM Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 51 Costruire Casi di Prova (Test Case) 3.6 Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 52 Problem Solving: Test Per verificare la correttezza di un programma, occorre testarlo (collaudarlo) o Un Test (o Caso di Test) è un insieme di input che viene usato per verificare se il programma genera l’output corretto, in quel caso specifico Nessun test sarà mai completo al 100%, ma dovrebbe coprire tutti i possibili comportamenti del programma Cercare di ottenere una copertura completa di tutti i punti di decisione (alternative) o Creare test separati per ogni alternativa del programma (es., nazionale/internazionale) o Creare test le “condizioni limite”: il valore minimo (massimo), un valore appena sopra il minimo (max), appena sotto il min (max), appena sopra/sotto una soglia interna al programma, … o Creare test per valori speciali (0, 1, numeri molto grandi, …) o Creare test per valori non validi (valori negativi, stringhe anziché numeri, valori vuoti, …) Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 53 Pianificare… Cercare di fare una stima ragionevole del tempo necessario a: o Progettare l’algoritmo o Sviluppare i casi di test o Tradurre l’algoritmo in codice, e scrivere tale codice o Testare e correggere (debug) il programma Lasciare sempre del tempo extra per problemi imprevisti Con il crescere dell’esperienza le stime diventeranno via via più precise. È comunque meglio avere del tempo in più rispetto a consegnare in ritardo Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 54 Usare Flow Chart per Sviluppare e Raffinare Algoritmi 3.5 Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 55 Problem Solving: Flow Chart Un diagramma di flusso (flow chart) mostra la struttura delle decisioni e delle attività necessari a risolvere un problema Elementi principali dei flow chart: Connetterli con frecce Ciascun ramo di una decisione può contenere Le frecce devono andare verso i altre attività ed altre blocchi, non verso altre frecce decisioni Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 56 Usare i Flow Chart I Flow Chart sono uno strumento eccellente Aiutano a visualizzare il flusso, lo svolgimento, dell’algoritmo Costruire un flow chart o Collegare le attività ed i blocchi di input / output nella sequenza in cui dovranno essere eseguiti o Quando occorre prendere una decisione, usare il rombo (istruzione condizionale) che possiede due uscite o Mai indirizzare una freccia verso un ramo «interno» Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 57 Diagrammi di flusso: Blocchi di inizio/fine Start Stop 58 Diagrammi di flusso: Blocchi di azione azione azione generica di I/O 59 Diagrammi di flusso: Blocco di decisione V condizione F 60 Diagrammi di flusso: Blocco di connessione 61 Diagramma di flusso : Esempio Start 1 F 2 5 V 3 Stop 4 62 Costruzione di diagrammi di flusso Per mezzo dei diagrammi di flusso si possono rappresentare flussi logici complicati a piacere E’ però preferibile scrivere diagrammi di flusso strutturati, che seguano cioè le regole della programmazione strutturata Così facendo si ottiene: o Maggiore formalizzazione dei problemi o Riusabilità del codice o Maggiore leggibilità 63 Diagrammi di flusso strutturati Definizione formale: o Diagrammi di flusso strutturati: Composti da strutture elementari indipendenti tra loro o Struttura elementare = Composizione particolare di blocchi elementari o Sempre riducibili ad un diagramma di flusso elementare costituito da un'unica azione Rispetto a diagrammi di flusso non strutturati questo implica l’assenza di salti incondizionati all'interno del flusso logico del diagramma 64 Diagrammi di flusso strutturati (Cont.) Un diagramma di flusso è detto strutturato se contiene solo un insieme predefinito di strutture elementari: o Uno ed uno solo blocco Start o Uno ed uno solo blocco Stop o Sequenza di blocchi (di azione e/o di input-output) o If - Then - ( Else ) o While - Do o Repeat - Until 65 Sequenza struttura-1... struttura struttura-2 66 If-Then-Else V condizione F struttura-1 struttura-2 67 If-Then V condizione F struttura 68 While-Do condizione F V struttura 69 Do – While struttura condizione F V 70 Teorema di Böhm - Jacopini Qualunque diagramma di flusso è sempre trasformabile in un diagramma di flusso strutturato equivalente a quello dato Quindi, qualunque flusso logico può essere realizzato utilizzando solamente due strutture di controllo: o Meccanismo di decisione o Meccanismo di ripetizione (loop) 71 Flow Chart: Spese di spedizione Le spese di spedizione sono $5 negli Stati Uniti continentali (48 stati) e $10 verso Hawaii ed Alaska. Le spedizioni estere (extra- USA) costano anch’esse $10 Tre rami alternativi: Ramo Ramo Ramo “internazionale” Hawaii/Alaska 48 stati Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 72 Non incrociare i rami Le spese di spedizione sono $5 negli Stati Uniti continentali (48 stati) e $10 verso Hawaii ed Alaska. Le spedizioni estere (extra- USA) costano anch’esse $10 Non fate così! International Hawaii/Alaska Lower 48 Branch Branch Branch Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 73 Flow Chart finale Le spese di spedizione sono $5 negli Stati Uniti continentali (48 stati) e $10 verso Hawaii ed Alaska. Le spedizioni estere (extra- USA) costano anch’esse $10 Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 74 Scelte e decisioni complesse sono difficili! I computer sono usati anche per ordinare e dirigere i bagagli negli aeroporti Questi sistemi: o Leggono le etichette sulle valigie o Ordinano gli elementi o Instradano gli elementi presso i nastri trasportatori o Operatori umani poi metteranno le valigie sui bus Nel 1993, Denver costruì un nuovo aeroporto con un sistema di gestione bagagli “allo stato dell’arte” in cui sostituiva gli operatori umani con carrelli robotizzati o Il sistema fallì o L’aeroporto non poteva aprire senza la gestione bagagli… o Il sistema fu sostituito (ci volle oltre 1 anno) o Il costo stimato: circa 1 miliardo di dollari (del 1994) o L’azienda che aveva progettato il sistema (ovviamente?) fallì Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 75 Esercizio Fred vende mazzi di fiori al centro commerciale Un giorno Joe, il capo di Fred, gli dice che in qualunque momento della giornata, egli (Joe) ha bisogno di sapere: o Quanti mazzi di fiori sono stati venduti o Qual era il valore del mazzo più costoso venduto o Qual era il valore del mazzo meno costoso venduto o Qual era il valore medio dei mazzi venduti Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 76 Esercizio Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 77 Disegnare e “eseguire” diagrammi di flusso Con Carta e Penna (o a mente, per quelli più semplici) Con applicazioni di disegno o LucidChart o Diagrams.net / Draw.io o Smartdraw o Microsoft Visio Con appositi programmi didattici o Controllo della struttura o Talvolta, esecuzione dell’algoritmo http://www.flowgorithm.org/ Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 78 Introduzione a Python 1.3, 1.4, 1.5, 1.6 Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 79 Il linguaggio Python All’inizio degli anni ’90 Guido van Rossum progettò ciò che sarebbe diventato il linguaggio di programmazione Python Van Rossum non era soddisfatto dei linguaggi esistenti o Erano ottimizzati per scrivere grandi programmi, eseguibili in modo efficiente Voleva un linguaggio che permettesse di creare rapidamente i programmi, ma anche modificarli in modo semplice o Progettato per avere una sintassi più semplice e pulita degli altri linguaggi come Java, C and C++ (più facile da apprendere) o L’ambiente Python aveva un approccio “batterie comprese”, offrendo subito la disponibilità di molte funzioni utili in modo standard o Python è interpretato, rendendo più facile lo sviluppo ed il test di brevi programmi I programmi Python sono eseguiti dall’interprete Python o L’interprete legge il programma e lo esegue Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 80 https://www.python.org/ Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 81 https://docs.python.org/ Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 82 Altri siti utili https://realpython.com/ o Molti tutorial a diversi livelli di approfondimento https://devdocs.io/python/ o Guida alle funzioni della libreria standard ed elenco dei moduli disponibili Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 83 Ambienti di programmazione Ci sono vari modi per creare un programma o Usando un sistema integrato di sviluppo (IDE, Integrated Development Environment) IDLE, PyCharm, Visual Studio Code, Wing 101, … o Usando un semplice editor di testi Blocco note, Notepad++, Atom, vi, gedit, … Usate il metodo ed il tool con cui vi trovate più a vostro agio o Nel corso useremo l’IDE Visual Studio Code o l’IDE on-line replit.com o Gli esempi del libro usano l’IDE Wing o Spyder Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 84 Componenti di un IDE L’editor del codice sorgente aiuta il programmatore con: o Visualizzazione dei numeri di linea del codice o Evidenziazione e colorazione della sintassi (commenti, testi, …) o Indentazione automatica del codice o Evidenziazione degli errori di sintassi o Completamento automatico dei nomi Finestra di output o L’output (testuale) generato dal programma Debugger o Strumenti di ausilio alla ricerca degli errori logici nel programma Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 85 Programmazione con un editor di testi Si può anche usare un semplice editor di testi per scrivere il codice Salvando il file come hello.py, usare una finestra di comando per: o Compilare & eseguire il programma (Compila ed) esegue il programma: python hello.py Sorgente del Output del programma: programma in Hello, world hello.py Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 86 Il nostro primo programma Il classico programma ‘Hello World’ in Python o print è un esempio di una istruzione (statement) Python IDE write Text editor hello.py IDE 📜 hello.py run Console Output Nota: questo simbolo indica che il file è disponibile tra il materiale del corso Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 87 Scrivere un programma in Python Attenzione agli errori di battitura – es.: ‘print’ vs. ‘primt’ PyTHon fA diFFereNza tra MAIUscole e minuSCOLE Gli spazi sono importanti, soprattutto all’inizio della linea (indentazione o rientro) Le linee che iniziano con # sono commenti (vengono ignorati da Python) Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 88 Dal sorgente all’esecuzione del programma Il compilatore legge il programma e genera le istruzioni binarie (byte code, semplici istruzioni per la Macchina Virtuale Python) o La Macchina Virtuale Python è un programma che si comporta come la CPU del computer (esegue istruzioni, in software) o Ogni libreria necessaria (es. per la grafica) viene automaticamente trovata ed inclusa dalla macchina virtuale Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 89 L’IDE di Visual Studio Code Sorgente del programma Debugger Errori File di progetto Output Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 90 Progetto vs. Programma vs. File Un singolo Programma potrebbe essere molto grande, in tal caso sarà composto da molti File diversi Gli IDE permettono di raggruppare un insieme di File correlati in un “Progetto” o In Visual Studio Code, un progetto corrisponde ad una cartella (Folder) Ogni volta che vogliamo creare un nuovo Programma, dovremo o Creare un nuovo Progetto (Folder) o Creare uno (o più) File Python all’interno del Progetto Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 91 Creare un nuovo progetto Nuova cartella di Progetto Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 92 Creare un file Python Nome file (.py) New file Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 93 Scrivere un programma Python Elenco file del Scrivere il progetto programma Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 94 Eseguire il programma Run ▶ Run ▶ Output del programma Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 95 Organizzare il lavoro Il ‘codice sorgente’ è salvato nel file.py Creiamo una cartella per il corso di Informatica Creiamo una cartella di progetto per ciascun programma, all’interno della cartella di Informatica o Un programma sarà composto da uno o più file.py Fare backup regolari e frequenti dei propri dati o Su chiavetta USB (o più di una) o Su un disco di rete (servizio cloud) or hard disk esterno o Fatelo. Davvero. Sempre. Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 96 Modalità interattiva di Python L’interprete di Python normalmente carica un intero programma ed esegue le istruzioni in esso contenute o Procedimento simile ad altri linguaggi (compilati) In alternativa: in modo interattivo, Python può eseguire un’istruzione per volta o Permette di scrivere velocemente dei ‘programmini di test’ o Permette di provare e sperimentare con le varie istruzioni o Permette di scrivere istruzioni Python direttamente nella finestra di console Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 97 Modalità interattiva di Python Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 98 Modalità interattiva di Python Scrivere REPL e selezionare Python: Start REPL Premere F1 per aprire la finestra di comando REPL = Read, Evaluate, Print Loop Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 99 Modalità interattiva di Python Finestra interattiva Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 100 IDE On-line : https://replit.com File di progetto Output del Sorgente del programma e programma console interattiva Opzione fantastica per esempi rapidi, per testare frammenti di programma, per evitare di creare un intero Progetto per una piccola parte di codice,, … Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 101 Sintassi Python: Print Usare la funzione print() in Python o Una funzione è un insieme di istruzioni (con un nome) che svolge un compito (task) particolare (in questo caso, stampare un valore su schermo) o È codice che qualcun altro ha scritto per noi! Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 102 Sintassi per le funzioni Python Per usare (o ‘chiamare’) una funzione in Python, occorre specificare: o Il nome della funzione che vogliamo usare Nell’esempio precedente, il nome era print o Tutti i valori (argomenti, parametri) di cui la funzione ha bisogno per svolgere il proprio compito In questo caso, "Hello World!" o Gli argomenti sono racchiusi tra parentesi tonde o Se vi sono più argomenti, sono separati da virgole. Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 103 Stringhe Una sequenza di caratteri racchiusa tra apici o virgolette è chiamata Stringa o Può essere racchiusa tra 'apici singoli' o Può essere racchiusa tra "apici doppi" o "virgolette" Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 104 Altri esempi della funzione print Stampare valori numerici o print(3 + 4) o Valuta l’espressione 3 + 4 e visualizza 7 Passare più valori alla funzione o print("The answer is", 6 * 7) o Visualizza The answer is 42 o Tutti i valori passati alla funzione vengono visualizzati, uno dopo l’altro, separati da uno spazio Per default, la funzione print crea una nuova linea (va «a capo») ogni volta che stampa i suoi argomenti print("Hello") print("World!") o Stampa due linee di testo: Hello World! Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 105 Il nostro secondo programma # Computes and Prints 7 print(3 + 4) # Prints "Hello World!" in two lines print("Hello") print("World!") # Prints multiple values with a single print function call print("My favorite numbers are", 3 + 4, "and", 3 + 10) # Prints three lines of text with a blank line print("Goodbye") print() print("Hope to see you again") 📜 printtest.py Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 106 Errori ERRORI A TEMPO DI COMPILAZIONE ERRORI A TEMPO DI ESECUZIONE (RUN-TIME) O ERRORI DI SINTASSI O ERRORI LOGICI Scrittura, maiuscole, punteggiatura Il programma viene eseguito, ma non produce il risultato corretto Ordine delle istruzioni, corrispondenza delle parentesi, virgolette, indentazione, … Il programma può andare in ‘crash’ Il compilatore non crea alcun programma Sono i più difficili da trovare e correggere eseguibile o Anche per programmatori più esperti Correggere il primo errore evidenziato, poi ri-compilare o Ripetere finché tutti gli errori no sono corretti Solitamente rivelati ed evidenziati direttamente dall’IDE Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 107 Errori di sintassi Gli errori di sintassi vengono catturati dal compilatore Verificare cosa succede se… o Sbagliamo una maiuscola Print("Hello World!") o Dimentichiamo le virgolette print(Hello World!) o Virgolette non corrispondenti print("Hello World!') o Parentesi non corrispondenti print('Hello' Proviamo ciascun esempio nell’IDE o Nel sorgente del programma o Nella console Python interattiva o Quali messaggi di errore vengono generati? Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 108 Errori Logici Verificare cosa succede se… o Dividiamo per zero print(1/0) o Sbagliamo il testo print("Hello, Word!") o Dimentichiamo q.cosa (cancellare linea 2) Il programma compila «normalmente» e viene eseguito o L’output però non è quello che ci aspettiamo Proviamo ciascun esempio nell’IDE o Quali errori vengono generati? Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 109