Laboratorio di Linguistica Computazionale Basi di programmazione
https://linguisticacomputazionale.wordpress.com/ Contatti e materiale Prof. Franco Di Maio: dimaio@unisa.it Dott. Alessandro Maisto: amaisto@unisa.it Materiale e slide: https://linguisticacomputazionale.wordpress.com/
Cosa vuol dire programmare La programmazione consiste nella scrittura di un testo, chiamato programma sorgente, che descrive, in termini di istruzioni note alla macchina, la soluzione del problema in oggetto. Ricerca il valore massimo in una serie di numeri Non esiste una sola soluzione ad un certo problema; potrebbero esistere numerose soluzioni La programmazione consiste nel trovare la strada più efficiente che conduce alla soluzione del problema in oggetto
Cosa vuol dire programmare Si tratta di un’operazione creativa poiché si può dire che non esista un problema uguale ad un altro né soluzioni universali Diversi programmatori scrivono diversi programmi per risolvere lo stesso problema, raggiungendo risultati ugualmente efficienti Scrivere un programma significa adottare la logica funzionale della macchina alle esigenze operative di un certo problema, secondo uno svolgimento sequenziale Le esigenze operative del problema scaturiscono dalla logica risolutiva idonea al conseguimento dei risultati La logica funzionale di macchina è l’insieme di operazioni elementari che questa è in grado di svolgere Per svolgimento sequenziale si intende la successione nel tempo delle operazioni elementari
Cosa vuol dire programmare La prima tappa nella risoluzione di un problema è la determinazione del meccanismo di soluzione. Questo meccanismo, ancora slegato dal programma finale, è detto Algoritmo. Un Algoritmo è una descrizione che specifica una serie di operazioni, eseguendo le quali è possibile risolvere un determinato problema Scrivere un algoritmo per il calcolo della moltiplicazione conoscendo solo la somma e la sottrazione
Cosa vuol dire programmare
Stadi dello sviluppo di un programma Delineazione del problema Ricerca della soluzione migliore Conversione dell’idea in una soluzione formale, ovvero in un testo che descrive la soluzione in modo formale (Algoritmo) Traduzione dell’algoritmo in una sequenza di istruzioni comprensibili all’esecutore (l’elaboratore elettronico). Questa sequenza è il Programma Sperimentazione del programma con un insieme significativo di dati per garantirne il funzionamento in ogni occasione Documentazione del programma a beneficio di chi lo utilizzerà in futuro
Esempio di flusso Problema: calcolo del massimo tra due valori A e B Soluzione: il massimo è il più grande tra A e B Soluzione formale: Max iniziale = 0 Se A>B allora max = A; stop Altrimenti max = B; stop
Difficoltà Punti critici nello sviluppo del programma: Sviluppo della soluzione informale Formalizzazione della soluzione per rendere l’operazione facilmente traducibile in istruzioni del linguaggio di programmazione (sviluppo dell’algoritmo)
Gli Algoritmi Un Algoritmo è una sequenza di operazioni atte a risolvere un dato problema Esempi quotidiani di Algoritmi: Ricette di cucina Istruzioni d’uso di elettrodomestici Regole per guidare un’automobile da un dato punto ad un altro Un algoritmo descrive operazioni di diversa natura che, però, devono possedere delle caratteristiche ben precise
Gli Algoritmi Ogni operazione deve produrre, se eseguita, un effetto osservabile che possa essere descritto L’operazione di spostare un tavolo produce un effetto descritto specificando la disposizione dei mobili nella stanza prima e dopo lo spostamento Allo stesso modo, pensare o pensare al numero 5, non possono essere considerate operazioni poiché il loro effetto non può essere osservato o descritto Ogni operazione deve produrre lo stesso effetto ogni volta che viene eseguita a partire dalle stesse condizioni iniziali (determinismo) Se X vale 5 e Y vale 10, ogni volta che sommeremo X a Y con quei valori iniziali, il risultato dovrà essere sempre 15
Gli Algoritmi L’esecuzione di un algoritmo da parte di un esecutore (umano o macchina), si traduce in una successione di operazioni che vengono effettuate nel tempo in un processo sequenziale Un processo sequenziale è una serie di eventi che occorrono uno dopo l’altro, ognuno con un inizio ed una fine bene identificabile Il processo può essere fisso: sempre lo stesso per ogni esecuzione Talvolta l’algoritmo può evocare più processi sequenziali differenti a seconda delle condizioni iniziali:
Gli Algoritmi Calcolo dell’importo di una fattura (processo fisso) cerca l'aliquota IVA sulla tabella; moltiplica l'importo netto per l'aliquota trovata; somma il risultato all'importo netto. Calcolo dell’importo di una fattura con possibilità che la merce sia soggetta a IVA SE la merce da fatturare è soggetta a IVA ALLORA Cerca la corretta aliquota IVA sulla tabella e moltiplica l'importo per l'aliquota trovata. Somma il risultato all'importo netto. ALTRIMENTI - Tieni conto solo dell'importo di partenza
Gli Algoritmi Nel secondo caso il processo dipende dai dati da elaborare. Il processo descrive un insieme costituito da due sequenze di esecuzione diverse Il numero di sequenze d’esecuzione descritte da uno stesso algoritmo non è noto a priori e può essere infinto solleva il ricevitore; componi il numero; SE qualcuno risponde ALLORA conduci la conversazione ALTRIMENTI deponi il ricevitore e RIPETI L'INTERO PROCEDIMENTO
Generare un algoritmo per la ricerca del massimo tra 4 numeri Gli Algoritmi L’algoritmo descrive infinite sequenze di esecuzione, corrispondenti al fatto che la telefonata riesca al 1, 2, 3, …N tentativo Si potrà avere un processo ciclico che potrebbe non avere mai termine se l’interlocutore non risponde mai al telefono Generare un algoritmo per la ricerca del massimo tra 4 numeri
Generare un algoritmo per la ricerca del massimo tra 4 numeri Gli Algoritmi Generare un algoritmo per la ricerca del massimo tra 4 numeri
Gli Algoritmi il processo descritto non è ottimizzato ma valido solo per sequenze di quattro numeri. Se volessimo trovare il massimo tra 5 o più numeri? Per operazioni su elementi della stessa specie i dati vanno Strutturati, ad esempio in un vettore caratterizzato da etichette e indici N[1], N[2]… genericamente N[i], dove la ‘i’ rappresenta l’etichetta dell’indice
Gli Algoritmi È possibile generalizzare l’algoritmo rispetto al numero di elementi trattati: Indicare il numero di elementi come parametro (variabile) Anziché 4 elementi si parlerà genericamente di num_dati elementi Il valore di num_dati potrà essere stabilito di volta in volta.
I linguaggi di programmazione Essendo il linguaggio un’astrazione, esistono alcuni fondamentali elementi sintattici essenziali per l’uso del linguaggio stesso: Parole chiave (Keyword) Dati Identificatori Istruzioni
Le Parole Chiave Sono vocaboli riservati al traduttore per riconoscere elementi del linguaggio Tutte le istruzioni sono identificate da una keyword. I.e. PRINT è la keyword che identifica il comando di visualizzazione su schermo Non possono essere usate per altri scopi (sono riservate al traduttore o interprete) Costituiscono i mattoni della sintassi del linguaggio
I dati Per il calcolatore il dato è un insieme di bit memorizzato in memoria centrale Per l’utente il dato è una quantità associata ad un certo significato Il linguaggio di programmazione permette di visualizzare il dato contenuto nel calcolatore dall’utente Il dato è identificato da: Un nome (identificatore) Una rappresentazione (tipo) Una modalità di accesso (variabile, costante)
I dati L’identificatore indica il nome di un dato in un programma il nome deve essere unico all’interno del suo ambiente di esistenza Es: somma, volume, diametro Il tipo stabilisce il codice con cui i dati sono rappresentati in memoria Numeri interi, numeri frazionari, caratteri ASCII ecc. Definisce la capienza di quel dato (l’intervallo di valori che può assumere) Definisce quali operatori possono agire su quel dato Modalità di accesso ai dati: Variabili, modificabili in qualunque punto del programma Costanti, dati di sola lettura il cui valore è assegnato una volta per tutte
Le istruzioni Sono le operazioni che il linguaggio è in grado di eseguire: Pseudoistruzioni: non sono eseguibili ma si tratta di direttive i cui effetti sono visibili durante l’esecuzione delle istruzioni eseguibili Istruzioni elementari: sono operazioni più o meno riconducibili a operazioni dirette sull’hardware della macchina quali operazioni di input/output, lettura di dati dalla memoria, ecc. Istruzioni di controllo del flusso: permettono di eseguire strutture complesse quali if- then-else, while-do, repeat-until
Esempio di programma
Linguaggi di programmazione Imparare un linguaggio significa conoscere le Keyword, i tipi predefiniti, le istruzioni e la loro sintassi durante il corso verrà appreso il linguaggio Python