際際滷

際際滷Share a Scribd company logo
INFORMATICA   Introduzione alla Programmazione
Cosa impariamo in questo corso? file eseguibile Sviluppo di un programma editor compilatore linker file sorgente file oggetto libreria
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.  Esempio:  ricerca del valor massimo in una serie di numeri. In generale non esiste una sola soluzione ad un certo problema; le soluzioni potrebbero essere numerose. La programmazione consiste proprio nel trovare la strada pi湛 efficiente che conduce alla soluzione del problema in oggetto.
Cosa vuol dire programmare? Programmare 竪 unoperazione creativa! Si pu嘆 dire infatti che non esiste un problema uguale a un altro! che non esistono soluzioni universali. In generale programmatori diversi scrivono programmi diversi per risolvere lo stesso problema: le soluzioni possono essere ugualmente efficienti! Programmare  竪 unoperazione generalmente molto complessa, organizzata per  step successivi. A parte i casi riferentesi ai problemi pi湛 banali 竪 completamente inefficiente  un approccio diretto (scrivere cio竪 direttamente il programma sorgente definitivo partendo dal testo del problema).
Cosa vuol dire programmare? Scrivere un programma significa  adattare la l ogica 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 voluti. 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? Per risolvere un problema con un elaboratore elettronico, conviene passare attraverso una serie di tappe intermedie, che condurranno alla fine alla scrittura del programma. La prima di queste tappe 竪 la determinazione del meccanismo di soluzione del problema. Questo meccanismo che non ha ancora alcun legame con quello che sar il programma finale 竪 detto  algoritmo . Algoritmo  dunque, 竪 una descrizione che specifica una serie di operazioni, eseguendo le quali 竪 possibile risolvere un determinato problema.
Stadi di sviluppo di un programma  Si deve risolvere un  problema La prima fase consiste nella ricerca della soluzione migliore Successivamente si converte lidea in una soluzione formale, ovvero in un testo che descrive la soluzione in modo formale ( algoritmo ) Lalgoritmo viene tradotto in una sequenza di istruzioni comprensibili allesecutore (in questo caso lelaboratore elettronico): questa sequenza si chiama  programma   Il programma deve essere provato con un insieme significativo di dati per garantire che funzioner in ogni occasione (qualsiasi siano i dati di input). Infine occorre documentare opportunamente il programma a beneficio di chi lo user ed eventualmente lo modificher.
Stadi di sviluppo di un programma Soluzione formale Programma Problema Soluzione Strumenti automatici/ metodi formali Tecniche di programmazione Esperienza
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: 1.  max iniziale = 0 2.  se A >B allora max = A; stop 3.  altrimenti max = B; stop Soluzione formale Problema Soluzione
Difficolt I punti critici nello sviluppo del programma risiedono essenzialmente: nello sviluppo di una soluzione informale  nella formalizzazione della soluzione per rendere pi湛 semplice loperazione di traduzione nelle regole (istruzioni) del linguaggio di programmazione. La formalizzazione della soluzione di un problema significa proprio sviluppare un  algoritmo !
Esempio di flusso Problema: calcolo del massimo comun divisore (MCD) fra due valori. Soluzione: definizione di MCD! Soluzione formale: ??? Soluzione formale Problema Soluzione
Algoritmo Algoritmo  竪 una  sequenza di operazioni  atte a risolvere un dato problema. L'esperienza quotidiana suggerisce infiniti esempi di algoritmi: oltre a una ricetta da cucina o alle istruzioni per l'uso di un elettrodomestico ne possiamo individuare moltissimi altri come le indicazioni per un lavoro a maglia, le regole per calcolare la somma o la moltiplicazione di due numeri, le regole per guidare un automobile da casa al Politecnico, ecc. Le  operazioni  che un algoritmo pu嘆 prescrivere possono essere di natura assai differente, ma devono possedere, per poter essere considerate tali, delle caratteristiche ben precise.
Algoritmo Ogni operazione deve produrre, se eseguita, un  effetto osservabile  che possa essere descritto. Ad esempio, l'esecuzione dell'operazione di  spostare il tavolo  produce un effetto che pu嘆 essere descritto specificando la disposizione dei mobili nella stanza prima e dopo lo spostamento. Invece,  pensare   o  pensare al numero 5   non possono essere considerate operazioni poich辿 non 竪 affatto chiaro come il loro effetto possa essere osservato e descritto.
Algoritmo O gni operazione deve produrre lo stesso effetto ogni volta che viene eseguita a partire dalle stesse condizioni iniziali ( determinismo ). Cos狸 se X vale 5 e Y vale 10, tutte le volte che eseguiamo la somma di X e Y con quei valori iniziali, il risultato dovr essere sempre 15.
Algoritmo L'esecuzione di un algoritmo da parte di un esecutore - uomo o macchina - si traduce in una successione di operazioni che vengono effettuate nel tempo evocando un  processo sequenziale  . Per   processo sequenziale   sintende una serie di eventi che occorrono uno dopo l'altro, ognuno con un inizio e una fine bene identificabile .
Algoritmo Talvolta il processo 竪 fisso, cio竪 竪 sempre lo stesso ad ogni diversa esecuzione.  Esempio: algoritmo per calcolare l'importo di una fattura: c erca l'aliquota IVA sulla tabella; moltiplica l'importo netto per l'aliquota trovata; somma il risultato all'importo netto. Questo algoritmo 竪 composto da tre  istruzioni , che devono essere eseguite in sequenza.
Algoritmo Talvolta lo stesso algoritmo pu嘆 evocare pi湛 processi sequenziali differenti, a seconda delle condizioni iniziali. Esempio: il precedente algoritmo, quando 竪 richiesto di dover  considerare la possibilit che la merce in esame non sia soggetta a IVA, diventa: 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.
Algoritmo In questo caso, il processo evocato non 竪 fisso, ma dipende dai dati da elaborare, in particolare dal tipo di merce da fatturare: l'algoritmo descrive un insieme costituito da due sequenze di esecuzione diverse. Esistono situazioni, ancora pi湛 complesse, in cui il numero di sequenze d'esecuzione descritte da uno stesso algoritmo non solo non 竪 noto a priori, ma addirittura pu嘆 essere infinito.
Algoritmo Ad esempio, consideriamo l'algoritmo per effettuare una telefonata: solleva il ricevitore; componi il numero; SE  qualcuno risponde ALLORA conduci la conversazione ALTRIMENTI deponi il ricevitore e RIPETI L'INTERO PROCEDIMENTO.
Algoritmo L'algoritmo descrive infinite sequenze d'esecuzione, corrispondenti al fatto che la telefonata riesca al 1  , 2  , 3  , ... tentativo. Si potr avere un processo ciclico che potrebbe non avere  mai termine se l'interlocutore non risponde mai al telefono! Si pu嘆 dire che  un algoritmo   竪 un  testo  in grado di descrivere un insieme di sequenze di   esecuzione .
Algoritmo Supponiamo di voler specificare un algoritmo per effettuare il prodotto di due numeri interi col metodo delle addizioni successive. L'algoritmo potrebbe essere costituito semplicemente dal seguente testo: si  sommi il moltiplicando a se stesso un numero di volte uguale al valore del moltiplicatore.  Specifichiamo con maggiore dettaglio le operazioni richieste evitando i costrutti ambigui. Ad esempio, potremmo scrivere: Si sommi il moltiplicando a se stesso, e si decrementi di uno il valore del moltiplicatore. Si sommi ancora il moltiplicando al valore ottenuto dalla precedente somma, e si decrementi di nuovo il valore ottenuto dalla precedente sottrazione. Si ripeta il procedimento fino a che, per decrementi successivi, non si raggiunga il valore uno.
Algoritmo Per evitare ambiguit, si 竪 stati costretti ad usare le espressioni:  valore ottenuto dalla precedente somma   valore ottenuto dalla precedente sottrazione   per specificare, di volta in volta, di quale valore si sta parlando.  Per distinguere tali valori si ricorre a  simboli  o  identificatori  per riferirsi senza ambiguit, di volta in volta, al valore desiderato.
Algoritmo Ad esempio: Sichiami  M  il valore del moltiplicando ed  N  il valore del moltiplicatore e sia  M1  il risultato (inizialmente zero). Si ripetano le seguenti operazioni fino a che il valore di  N  non diventi uguale a 0: si sommi il valore del moltiplicando  M  al valore di  M1  e si chiami il risultato ancora  M1 ; si sottragga 1 dal valore di  N , e si chiami il risultato ancora  N . Alla fine il valore di  M1  竪 il risultato cercato. I simboli  M ,  N  e  M1  sono detti  i dentificatori di variabili   M1  竪 detto  accumulatore di risultato
Formalizzazione della soluzione La differenza tra una soluzione informale e una formale sta nel modo di rappresentare un algoritmo: Informale:   descrizione a parole   Formale:  descrizione in termini di sequenza di operazioni elementari Sono disponibili numerosi strumenti per rappresentare una soluzione in modo formale, i pi湛 utilizzati sono: diagrammi di flusso (grafico) pseudo-codice (testo)
Formalizzazione della soluzione Pseudocodice Vantaggi Immediato Svantaggi Meno astratto Interpretazione pi湛 complicata Diagrammi di flusso   Vantaggi Pi湛 intuitivi perch竪 grafici Pi湛 astratti Svantaggi Richiedono apprendimento della funzione dei vari tipi di blocco
Diagrammi di flusso (flow-chart) Sono strumenti grafici che rappresentano levoluzione logica della risoluzione del problema Sono composti da: blocchi elementari per descrivere azioni e decisioni (esclusivamente di tipo binario) archi orientati per collegare i vari blocchi e per descrivere la sequenza di svolgimento delle azioni
Diagrammi di flusso  (flow-chart) I blocchi elementari sono: Blocco di  Start Blocco di  Stop Blocco di  azione generica Blocco di  azione di I/O Blocco di  decisione binaria Blocco di  connessione (Simbolo di  richiamo di un blocco)
Flow-chart: Blocco di inizio/fine START STOP
Flow-chart: Blocchi di azione azione di I/O azione generica
Flow-chart: Blocco di decisione V F condizione
Flow-chart: Connettore
Esempio di flowchart Acquisire un valore A e visualizzarne il valore assoluto A >= 0? stop start si no Leggi un valore A Stampa A Stampa -A
Le etichette Allinterno dei blocchi che costituiscono un flow-chart si indica lazione che quel blocco rappresenta. Come si indica questazione? Normalmente si tratta di un testo il pi湛 sintetico possibile, ricorrendo anche a simboli mutuati altrove Ad esempio il simbolo: A    m significa riponi  m  nel contenitore etichettato  A .
Costruzione di flow-chart Per mezzo dei flow-chart si possono rappresentare flussi logici complicati a piacere. E per嘆 preferibile scrivere  flow-chart  strutturati , che seguano cio竪 le regole della programmazione strutturata. Cos狸 facendo si ottiene: maggiore formalizzazione dei problemi riusabilit del codice maggiore leggibilit
Flow-chart strutturati Definizione formale:  un flow-chart si dice strutturato quando 竪 composto da  strutture  elementari  indipendenti tra loro . Una  struttura elementare  竪 una composizione particolare di blocchi elementari avente un solo ingresso e una sola uscita. Un flow-chart strutturato 竪 sempre riconducibile a un flow-chart elementare costituito da un'unica azione (ovvero un unico blocco). Differenza rispetto a un flow-chart non strutturato 竪 dunque lassenza di  salti incondizionati  all'interno del flusso logico del diagramma.
Diagrammi di flusso strutturati Un diagramma di flusso 竪 strutturato se contiene solo un insieme predefinito delle seguenti  strutture elementari : uno ed  uno solo  blocco  START uno ed  uno solo  blocco  STOP blocchi di azione e/o di input-output blocchi di tipo  IF - THEN - ( ELSE ) blocchi di tipo  WHILE - DO blocchi di tipo  REPEAT - UNTIL
Teorema di B旦hm - Jacopini In altre parole, qualunque flusso logico pu嘆 essere realizzato utilizzando solamente le due strutture di controllo: meccanismo di decisione binaria (if  then  else) meccanismo di ripetizione (loop) (do  while / repeat  until) insieme ai blocchi di azione e di input/output Qualunque diagramma di flusso  竪  sempre trasformabile in un diagramma di flusso strutturato equivalente a quello dato.
Sequenza I O I O struttura-1 struttura-2 struttura
If-Then-Else V F O I condizione struttura-1 struttura-2
If-Then V F O I condizione struttura
While-Do condizione V F O I struttura
Repeat-Until condizione V F O I struttura
FOR Una derivazione interessante del costrutto DO WHILE 竪 il  ciclo a contatore , che ha la forma: FOR variabile FROM  valore_iniz  TO  valore_fin  DO sequenza di operazioni; A  variabile  si attribuiscono tutti i valori compresi tra  valore_iniz  e  valore_fin  e, per ogni attribuzione, si esegue la sequenza di  istruzioni . Se all'inizio  valore_iniz  竪 maggiore di  valore_fin , la  sequenza di operazioni   non viene eseguita mai.
Esempio: diagramma strutturato START V F 4 1 3 STOP 2 5 (segue)
Esempio: diagramma strutturato START V F 1 STOP 2 5 (segue) Prima semplificazione 3,4
Esempio: diagramma strutturato START 1 STOP 5 START STOP Seconda semplificazione Terza semplificazione 2,3,4 1,2,3,4,5
Esempio: diagramma non strutturato START STOP 3 V F 4 1 5 2 Per essere strutturato dovrebbe mancare il blocco 2 oppure il blocco 4
Esercizio Dimostrare che il seguente flow-chart 竪 strutturato: stop start
Soluzione: passo 1 stop start 1 2 3 4 5 6 7 8 9
Soluzione: passo 1 stop start 1 2 3 4 5 6 7 8 9
Soluzione: passo 1 stop start 1 2 3 6 7 8,9 4,5
Soluzione: passo 2 stop start 1 2 3 6 7 8,9 4,5
Soluzione: passo 2 stop start 1 2 7 8,9 3,4,5,6
Soluzione: passo 3 stop start 1 2 7 8,9 3,4,5,6
Soluzione: passo 3 stop start 1 2 8,9 3,4,5,6,7
Soluzione: passo 4 stop start 1 2 8,9 3,4,5,6,7
Soluzione: passi 4 e 5 start stop start stop 1 8,9 2,3,4,5,6,7
Classi di problemi I problemi che si incontrano nellattivit di programmazione possono essere classificati in tre categorie: problemi di tipo sequenziale problemi di tipo condizionale problemi di tipo iterativo
Problemi sequenziali In questo tipo di problema la soluzione consiste in una semplice sequenza di operazioni  La caratteristica principale 竪 rappresentata dallassenza di alternative valide per la soluzione che conducono ad un  flusso di esecuzione unico. Lesempio pi湛 significativo 竪 una ricetta di cucina
Problemi sequenziali: esempio Esempio:  Calcolare e stampare la media di tre valori numerici x, y e z. I tre dati siano acquisiti da tastiera. Soluzione informale: sommare i tre valori e dividere per 3 Soluzione formale: pseudocodice 1. Leggi il primo valore -> x 2. Leggi il secondo valore -> y 3. Leggi il terzo valore -> z 4. media = (x + y + z) / 3 5. Stampa media
Problemi condizionali Questa volta la soluzione 竪 rappresentata da una sequenza di operazioni con pi湛 alternative La caratteristica principale in questo caso 竪 dovuta proprio alle alternative che tuttavia devono essere tutte perfettamente formalizzate e che conducono pertanto ad un  numero FISSO di flussi di esecuzione. Esempio: istruzioni di installazione di un dispositivo che prevede casi particolari.
Problemi condizionali: esempio Esempio:  Calcolare e stampare il massimo tra tre valori numerici x, y  e  z. I tre valori siano acquisiti da tastiera. Restrizioni:  in un elaboratore elettronico possiamo confrontare due soli numeri per volta! il confronto deve essere eseguito in cascata Soluzione formale: pseudocodice: 1. Leggi i tre valori (A, B, C) 2. Se A > B allora vai a 5 3.  Se B > C allora Max = B; stop 4.  Max = C; stop 5. Se A > C allora Max = A; stop 6  Max = C; stop
Problemi condizionali diagramma di flusso della soluzione adottata Leggi A, B e C max = A max = C A > B? stop stop B > C? A > C? si no no no si si max = B max = C stop stop Si osservano  4 flussi di esecuzione!!!!!
Problemi iterativi La soluzione 竪 rappresentata dalla ripetizione di una serie di operazioni per un certo numero di volte. La caratteristica principale 竪 rappresentata dal fatto che il numero di flussi di esecuzione NON 竪 predicibile ed 竪 dipendente dai dati che vengono elaborati La maggior parte dei problemi pratici si traduce in programmi iterativi Esempio: problemi tipo continua loperazione A fino a che...
Problemi iterativi: esempio Esempio: Calcolare la somma dei primi N numeri interi, dove N 竪 acquisito da tastiera Soluzione   : Dobbiamo calcolare Somma =   (i=1...N)  i. Esempio:  se N=4  =>  Somma = 1+2+3+4 = 10. La soluzione deve essere una soluzione iterativa, ovvero una serie di operazioni ripetuta pi湛 volte.
Problemi iterativi Soluzione formale: pseudocodice 1. Leggi un valore -> N 2. S 0  = 0;  (S 竪 un accumulatore di  risultato) 3. i = 1;  (i 竪 un contatore) 4. Se i > N allora vai a 8 5. S j  = S j-1  + i 6. i = i+1 7. Vai a 4 8. Stampa S N 9. Stop
Problemi iterativi Diagramma di flusso S 0  = 0 stampa S N i > N? stop si no S i  =  i  +  S i-1 i = i+1 i = 1 N flussi di esecuzione!!!   start Leggi N
Problemi iterativi Struttura generale output fine iterazione? stop SI NO operazione  iterativa aggiornamento  della condizione inizializzazioni start
Problemi iterativi Un problema iterativo si suddivide in 4 fasi fondamentali: Inizializzazione ovvero a ssegnazione delle condizioni iniziali delliterazione:  senza queste operazioni la correttezza del risultato non 竪 garantita Controllo della condizione di fine iterazione che si pu嘆 riassumere nella  domanda: sono finiti i dati da processare? Spesso si tratta del test:  indice = valore massimo ammissibile  ? Operazione iterativa, ovvero l operazione che deve essere ripetuta ad ogni ciclo Aggiornamento della condizione: che deve agire su uno dei valori che costituiscono la condizione di fine iterazione  per evitare cicli infiniti
Dal problema alla soluzione Realizziamo un algoritmo per la ricerca del massimo fra quattro numeri.  Etichettiamo con  N1 ,  N2 ,  N3 ,  N4  e  max  gli identificatori dei quattro numeri e del massimo che cerchiamo. Ipotizziamo dapprima che il numero pi湛 grande sia  N1  e lo mettiamo in  max. Confrontiamo ora il contenuto di  max  con  N2  : se  N2  竪  pi湛 grande allora trascriviamo in  max  tale elemento, se invece  N2  竪 pi湛 piccolo non alteriamo il contenuto di  max . Ripetiamo il procedimento con  N3  e  N4 .
Dal problema alla soluzione Lalgoritmo risultante sar del tipo: Leggi N1, N2, N3, N4 max     N1 Se N2 >  max  ALLORA max     N2 Se  N3 > max  ALLORA max     N3 Se N4 > max  ALLORA max     N4 stampa Il massimo 竪  max
Dal problema alla soluzione Si osservi come il precedente non sia un processo ottimizzato in quanto 竪 valido solo per 4 elementi. Se vogliamo trovare il massimo fra 5 elementi occorrer aggiungere un altro confronto. Quando si devono effettuare operazioni su elementi simili, cio竪 della stessa specie, conviene strutturare i dati, ad esempio in un  vettore   e utilizzare etichette con indici. Ogni  elemento del vettore   si individua mediante un indice che lo distingue dagli altri dello stesso tipo. Normalmente si rappresenteranno cos狸:  N[1] ,  N[2]  o, pi湛 genericamente,  N[I] , dove  I  funge da etichetta dell'indice.
Dal problema alla soluzione Usando questa notazione possiamo modificare il precedente diagramma di flusso. Per I da 1 a 4 leggi N[I] max     N[1] Per  I che va da 2 a 4 Se N[I] >  max   ALLORA max     N[I] stampa Il massimo 竪  max I due algoritmi differiscono tra loro sostanzialmente: il primo procede direttamente dall'inizio alla fine; il secondo itera perch辿 contiene un ciclo o  loop .
Dal problema alla soluzione Meglio ancora generalizzare lalgoritmo rispetto al numero di elementi trattati. Ci嘆 si pu嘆 realizzare ad esempio indicando 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 oppure addirittura richiesto allutente, per cui lalgoritmo diventa:
Dal problema alla soluzione 1  Leggi  num_dati 2  I    1 3  Finch辿 (While) I     num_dati 3.1   leggi N[I] 3.2   incrementa I 4   max     N[1] 5  I    2 6  Finch辿 (While) I     num_dati 6.1   Se (IF) N[I] >  max   ALLORA 6.1.1   max     N[I] 6.2   incrementa I 7  stampa Il massimo 竪  max
Il linguaggio di programmazione
Dalla soluzione al programma La scrittura del programma vero e proprio 竪 praticamente immediata a partire dalla soluzione formale I linguaggi di programmazione forniscono infatti costrutti che realizzano: Operazioni semplici Strutture condizionali Strutture iterative
Elementi del linguaggio Essendo il linguaggio unastrazione, esistono alcuni fondamentali elementi sintattici essenziali per luso del linguaggio stesso: parole chiave ( keyword ) dati  identificatori istruzioni Gli elementi sintattici definiscono la struttura formale di tutti i linguaggi di programmazione
Parole chiave (keyword) Sono vocaboli riservati al traduttore per riconoscere elementi del linguaggio Per esempio, le istruzioni sono tutte identificate da una keyword. Ad esempio la keyword  PRINT  in Basic identifica il comando di visualizzazione su schermo Non possono essere usate per altri scopi Costituiscono i mattoni della sintassi del linguaggio
Dati Dalla parte del calcolatore: un dato 竪 un insieme di bit memorizzato in memoria centrale Dalla parte dellutente:  un dato 竪 una quantit associata ad un certo significato Il linguaggio di programmazione supporta la vista utente Un  dato  竪 individuato da: nome ( identificatore ) rappresentazione ( tipo ) modalit di accesso ( variabile, costante   )
Rappresentazione dei dati 100 101 103 102 107 106 105 104 110 109 108 Indirizzi X; intero; valore=3 3  a c; carattere; valore=a t; reale; valore=-11.564 -11.564 Memoria
Identificatore Indica il nome di un  dato  (e di altre entit) in un programma Permette di battezzare in modo intuitivo i dati Esempio: somma, volume, diametro ,  Il nome deve ovviamente essere unico allinterno del suo ambiente di esistenza (spesso questo ambiente coincide con lintero programma)
Tipo Stabilisce il codice col quale i dati sono rappresentati in memoria (numeri interi in  complemento a 2,  numeri frazionari in  floating-point,  caratteri in  ASCII,  ecc.). Stabilisce lo  spazio  occupato da un dato nella memoria del calcolatore (numero di celle di memoria). Definisce la  capienza  di quel dato (lintervallo di valori che pu嘆 assumere). Definisce quali  operatori  possono agire su quel dato.
Tipo di accesso Indica le modalit di accesso ai dati: Variabili sono modificabili in qualunque punto del programma Costanti sono dati a sola lettura il valore 竪 assegnato una volta per tutte allinizio del programma e non 竪 modificabile
Istruzioni Sono le operazioni che il linguaggio 竪 in grado di eseguire; possono essere suddivise in: pseudoistruzioni  : non sono vere e proprie istruzioni perch辿 non sono eseguibili. Si tratta di direttive i cui effetti sono visibili durante lesecuzione delle istruzioni eseguibili istruzioni elementari  : sono o perazioni pi湛 o meno riconducibili a operazioni dirette sullhardware 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 PROGRAM   demo ; // definizione di istruzione CONSTANTS pig  = 3.14159; val  = 0.19; VARIABLES x :  INTEGER; y :  REAL; c :  CHARACTER; BEGIN PROGRAM x  = 2; IF  ( y  > 2)  THEN   y  =  x  *  pig ; PRINT   x ,   y ; END PROGRAM istr. di controllo del flusso specifica di tipo pseudoistruzioni istruzioni eseguibili istr. elementare istr. elementare
Linguaggio di  programmazione Imparare un linguaggio significa conoscere le keyword i tipi predefiniti le istruzioni e la loro sintassi ATTENZIONE: conoscere un linguaggio non significa saper programmare! In questo corso impareremo il linguaggio C Imparato un linguaggio 竪 semplice e immediato trasferire i concetti ad altri linguaggi!

More Related Content

1 Programmazione

  • 1. INFORMATICA Introduzione alla Programmazione
  • 2. Cosa impariamo in questo corso? file eseguibile Sviluppo di un programma editor compilatore linker file sorgente file oggetto libreria
  • 3. 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. Esempio: ricerca del valor massimo in una serie di numeri. In generale non esiste una sola soluzione ad un certo problema; le soluzioni potrebbero essere numerose. La programmazione consiste proprio nel trovare la strada pi湛 efficiente che conduce alla soluzione del problema in oggetto.
  • 4. Cosa vuol dire programmare? Programmare 竪 unoperazione creativa! Si pu嘆 dire infatti che non esiste un problema uguale a un altro! che non esistono soluzioni universali. In generale programmatori diversi scrivono programmi diversi per risolvere lo stesso problema: le soluzioni possono essere ugualmente efficienti! Programmare 竪 unoperazione generalmente molto complessa, organizzata per step successivi. A parte i casi riferentesi ai problemi pi湛 banali 竪 completamente inefficiente un approccio diretto (scrivere cio竪 direttamente il programma sorgente definitivo partendo dal testo del problema).
  • 5. Cosa vuol dire programmare? Scrivere un programma significa adattare la l ogica 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 voluti. 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.
  • 6. Cosa vuol dire programmare? Per risolvere un problema con un elaboratore elettronico, conviene passare attraverso una serie di tappe intermedie, che condurranno alla fine alla scrittura del programma. La prima di queste tappe 竪 la determinazione del meccanismo di soluzione del problema. Questo meccanismo che non ha ancora alcun legame con quello che sar il programma finale 竪 detto algoritmo . Algoritmo dunque, 竪 una descrizione che specifica una serie di operazioni, eseguendo le quali 竪 possibile risolvere un determinato problema.
  • 7. Stadi di sviluppo di un programma Si deve risolvere un problema La prima fase consiste nella ricerca della soluzione migliore Successivamente si converte lidea in una soluzione formale, ovvero in un testo che descrive la soluzione in modo formale ( algoritmo ) Lalgoritmo viene tradotto in una sequenza di istruzioni comprensibili allesecutore (in questo caso lelaboratore elettronico): questa sequenza si chiama programma Il programma deve essere provato con un insieme significativo di dati per garantire che funzioner in ogni occasione (qualsiasi siano i dati di input). Infine occorre documentare opportunamente il programma a beneficio di chi lo user ed eventualmente lo modificher.
  • 8. Stadi di sviluppo di un programma Soluzione formale Programma Problema Soluzione Strumenti automatici/ metodi formali Tecniche di programmazione Esperienza
  • 9. 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: 1. max iniziale = 0 2. se A >B allora max = A; stop 3. altrimenti max = B; stop Soluzione formale Problema Soluzione
  • 10. Difficolt I punti critici nello sviluppo del programma risiedono essenzialmente: nello sviluppo di una soluzione informale nella formalizzazione della soluzione per rendere pi湛 semplice loperazione di traduzione nelle regole (istruzioni) del linguaggio di programmazione. La formalizzazione della soluzione di un problema significa proprio sviluppare un algoritmo !
  • 11. Esempio di flusso Problema: calcolo del massimo comun divisore (MCD) fra due valori. Soluzione: definizione di MCD! Soluzione formale: ??? Soluzione formale Problema Soluzione
  • 12. Algoritmo Algoritmo 竪 una sequenza di operazioni atte a risolvere un dato problema. L'esperienza quotidiana suggerisce infiniti esempi di algoritmi: oltre a una ricetta da cucina o alle istruzioni per l'uso di un elettrodomestico ne possiamo individuare moltissimi altri come le indicazioni per un lavoro a maglia, le regole per calcolare la somma o la moltiplicazione di due numeri, le regole per guidare un automobile da casa al Politecnico, ecc. Le operazioni che un algoritmo pu嘆 prescrivere possono essere di natura assai differente, ma devono possedere, per poter essere considerate tali, delle caratteristiche ben precise.
  • 13. Algoritmo Ogni operazione deve produrre, se eseguita, un effetto osservabile che possa essere descritto. Ad esempio, l'esecuzione dell'operazione di spostare il tavolo produce un effetto che pu嘆 essere descritto specificando la disposizione dei mobili nella stanza prima e dopo lo spostamento. Invece, pensare o pensare al numero 5 non possono essere considerate operazioni poich辿 non 竪 affatto chiaro come il loro effetto possa essere osservato e descritto.
  • 14. Algoritmo O gni operazione deve produrre lo stesso effetto ogni volta che viene eseguita a partire dalle stesse condizioni iniziali ( determinismo ). Cos狸 se X vale 5 e Y vale 10, tutte le volte che eseguiamo la somma di X e Y con quei valori iniziali, il risultato dovr essere sempre 15.
  • 15. Algoritmo L'esecuzione di un algoritmo da parte di un esecutore - uomo o macchina - si traduce in una successione di operazioni che vengono effettuate nel tempo evocando un processo sequenziale . Per processo sequenziale sintende una serie di eventi che occorrono uno dopo l'altro, ognuno con un inizio e una fine bene identificabile .
  • 16. Algoritmo Talvolta il processo 竪 fisso, cio竪 竪 sempre lo stesso ad ogni diversa esecuzione. Esempio: algoritmo per calcolare l'importo di una fattura: c erca l'aliquota IVA sulla tabella; moltiplica l'importo netto per l'aliquota trovata; somma il risultato all'importo netto. Questo algoritmo 竪 composto da tre istruzioni , che devono essere eseguite in sequenza.
  • 17. Algoritmo Talvolta lo stesso algoritmo pu嘆 evocare pi湛 processi sequenziali differenti, a seconda delle condizioni iniziali. Esempio: il precedente algoritmo, quando 竪 richiesto di dover considerare la possibilit che la merce in esame non sia soggetta a IVA, diventa: 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.
  • 18. Algoritmo In questo caso, il processo evocato non 竪 fisso, ma dipende dai dati da elaborare, in particolare dal tipo di merce da fatturare: l'algoritmo descrive un insieme costituito da due sequenze di esecuzione diverse. Esistono situazioni, ancora pi湛 complesse, in cui il numero di sequenze d'esecuzione descritte da uno stesso algoritmo non solo non 竪 noto a priori, ma addirittura pu嘆 essere infinito.
  • 19. Algoritmo Ad esempio, consideriamo l'algoritmo per effettuare una telefonata: solleva il ricevitore; componi il numero; SE qualcuno risponde ALLORA conduci la conversazione ALTRIMENTI deponi il ricevitore e RIPETI L'INTERO PROCEDIMENTO.
  • 20. Algoritmo L'algoritmo descrive infinite sequenze d'esecuzione, corrispondenti al fatto che la telefonata riesca al 1 , 2 , 3 , ... tentativo. Si potr avere un processo ciclico che potrebbe non avere mai termine se l'interlocutore non risponde mai al telefono! Si pu嘆 dire che un algoritmo 竪 un testo in grado di descrivere un insieme di sequenze di esecuzione .
  • 21. Algoritmo Supponiamo di voler specificare un algoritmo per effettuare il prodotto di due numeri interi col metodo delle addizioni successive. L'algoritmo potrebbe essere costituito semplicemente dal seguente testo: si sommi il moltiplicando a se stesso un numero di volte uguale al valore del moltiplicatore. Specifichiamo con maggiore dettaglio le operazioni richieste evitando i costrutti ambigui. Ad esempio, potremmo scrivere: Si sommi il moltiplicando a se stesso, e si decrementi di uno il valore del moltiplicatore. Si sommi ancora il moltiplicando al valore ottenuto dalla precedente somma, e si decrementi di nuovo il valore ottenuto dalla precedente sottrazione. Si ripeta il procedimento fino a che, per decrementi successivi, non si raggiunga il valore uno.
  • 22. Algoritmo Per evitare ambiguit, si 竪 stati costretti ad usare le espressioni: valore ottenuto dalla precedente somma valore ottenuto dalla precedente sottrazione per specificare, di volta in volta, di quale valore si sta parlando. Per distinguere tali valori si ricorre a simboli o identificatori per riferirsi senza ambiguit, di volta in volta, al valore desiderato.
  • 23. Algoritmo Ad esempio: Sichiami M il valore del moltiplicando ed N il valore del moltiplicatore e sia M1 il risultato (inizialmente zero). Si ripetano le seguenti operazioni fino a che il valore di N non diventi uguale a 0: si sommi il valore del moltiplicando M al valore di M1 e si chiami il risultato ancora M1 ; si sottragga 1 dal valore di N , e si chiami il risultato ancora N . Alla fine il valore di M1 竪 il risultato cercato. I simboli M , N e M1 sono detti i dentificatori di variabili M1 竪 detto accumulatore di risultato
  • 24. Formalizzazione della soluzione La differenza tra una soluzione informale e una formale sta nel modo di rappresentare un algoritmo: Informale: descrizione a parole Formale: descrizione in termini di sequenza di operazioni elementari Sono disponibili numerosi strumenti per rappresentare una soluzione in modo formale, i pi湛 utilizzati sono: diagrammi di flusso (grafico) pseudo-codice (testo)
  • 25. Formalizzazione della soluzione Pseudocodice Vantaggi Immediato Svantaggi Meno astratto Interpretazione pi湛 complicata Diagrammi di flusso Vantaggi Pi湛 intuitivi perch竪 grafici Pi湛 astratti Svantaggi Richiedono apprendimento della funzione dei vari tipi di blocco
  • 26. Diagrammi di flusso (flow-chart) Sono strumenti grafici che rappresentano levoluzione logica della risoluzione del problema Sono composti da: blocchi elementari per descrivere azioni e decisioni (esclusivamente di tipo binario) archi orientati per collegare i vari blocchi e per descrivere la sequenza di svolgimento delle azioni
  • 27. Diagrammi di flusso (flow-chart) I blocchi elementari sono: Blocco di Start Blocco di Stop Blocco di azione generica Blocco di azione di I/O Blocco di decisione binaria Blocco di connessione (Simbolo di richiamo di un blocco)
  • 28. Flow-chart: Blocco di inizio/fine START STOP
  • 29. Flow-chart: Blocchi di azione azione di I/O azione generica
  • 30. Flow-chart: Blocco di decisione V F condizione
  • 32. Esempio di flowchart Acquisire un valore A e visualizzarne il valore assoluto A >= 0? stop start si no Leggi un valore A Stampa A Stampa -A
  • 33. Le etichette Allinterno dei blocchi che costituiscono un flow-chart si indica lazione che quel blocco rappresenta. Come si indica questazione? Normalmente si tratta di un testo il pi湛 sintetico possibile, ricorrendo anche a simboli mutuati altrove Ad esempio il simbolo: A m significa riponi m nel contenitore etichettato A .
  • 34. Costruzione di flow-chart Per mezzo dei flow-chart si possono rappresentare flussi logici complicati a piacere. E per嘆 preferibile scrivere flow-chart strutturati , che seguano cio竪 le regole della programmazione strutturata. Cos狸 facendo si ottiene: maggiore formalizzazione dei problemi riusabilit del codice maggiore leggibilit
  • 35. Flow-chart strutturati Definizione formale: un flow-chart si dice strutturato quando 竪 composto da strutture elementari indipendenti tra loro . Una struttura elementare 竪 una composizione particolare di blocchi elementari avente un solo ingresso e una sola uscita. Un flow-chart strutturato 竪 sempre riconducibile a un flow-chart elementare costituito da un'unica azione (ovvero un unico blocco). Differenza rispetto a un flow-chart non strutturato 竪 dunque lassenza di salti incondizionati all'interno del flusso logico del diagramma.
  • 36. Diagrammi di flusso strutturati Un diagramma di flusso 竪 strutturato se contiene solo un insieme predefinito delle seguenti strutture elementari : uno ed uno solo blocco START uno ed uno solo blocco STOP blocchi di azione e/o di input-output blocchi di tipo IF - THEN - ( ELSE ) blocchi di tipo WHILE - DO blocchi di tipo REPEAT - UNTIL
  • 37. Teorema di B旦hm - Jacopini In altre parole, qualunque flusso logico pu嘆 essere realizzato utilizzando solamente le due strutture di controllo: meccanismo di decisione binaria (if then else) meccanismo di ripetizione (loop) (do while / repeat until) insieme ai blocchi di azione e di input/output Qualunque diagramma di flusso 竪 sempre trasformabile in un diagramma di flusso strutturato equivalente a quello dato.
  • 38. Sequenza I O I O struttura-1 struttura-2 struttura
  • 39. If-Then-Else V F O I condizione struttura-1 struttura-2
  • 40. If-Then V F O I condizione struttura
  • 41. While-Do condizione V F O I struttura
  • 42. Repeat-Until condizione V F O I struttura
  • 43. FOR Una derivazione interessante del costrutto DO WHILE 竪 il ciclo a contatore , che ha la forma: FOR variabile FROM valore_iniz TO valore_fin DO sequenza di operazioni; A variabile si attribuiscono tutti i valori compresi tra valore_iniz e valore_fin e, per ogni attribuzione, si esegue la sequenza di istruzioni . Se all'inizio valore_iniz 竪 maggiore di valore_fin , la sequenza di operazioni non viene eseguita mai.
  • 44. Esempio: diagramma strutturato START V F 4 1 3 STOP 2 5 (segue)
  • 45. Esempio: diagramma strutturato START V F 1 STOP 2 5 (segue) Prima semplificazione 3,4
  • 46. Esempio: diagramma strutturato START 1 STOP 5 START STOP Seconda semplificazione Terza semplificazione 2,3,4 1,2,3,4,5
  • 47. Esempio: diagramma non strutturato START STOP 3 V F 4 1 5 2 Per essere strutturato dovrebbe mancare il blocco 2 oppure il blocco 4
  • 48. Esercizio Dimostrare che il seguente flow-chart 竪 strutturato: stop start
  • 49. Soluzione: passo 1 stop start 1 2 3 4 5 6 7 8 9
  • 50. Soluzione: passo 1 stop start 1 2 3 4 5 6 7 8 9
  • 51. Soluzione: passo 1 stop start 1 2 3 6 7 8,9 4,5
  • 52. Soluzione: passo 2 stop start 1 2 3 6 7 8,9 4,5
  • 53. Soluzione: passo 2 stop start 1 2 7 8,9 3,4,5,6
  • 54. Soluzione: passo 3 stop start 1 2 7 8,9 3,4,5,6
  • 55. Soluzione: passo 3 stop start 1 2 8,9 3,4,5,6,7
  • 56. Soluzione: passo 4 stop start 1 2 8,9 3,4,5,6,7
  • 57. Soluzione: passi 4 e 5 start stop start stop 1 8,9 2,3,4,5,6,7
  • 58. Classi di problemi I problemi che si incontrano nellattivit di programmazione possono essere classificati in tre categorie: problemi di tipo sequenziale problemi di tipo condizionale problemi di tipo iterativo
  • 59. Problemi sequenziali In questo tipo di problema la soluzione consiste in una semplice sequenza di operazioni La caratteristica principale 竪 rappresentata dallassenza di alternative valide per la soluzione che conducono ad un flusso di esecuzione unico. Lesempio pi湛 significativo 竪 una ricetta di cucina
  • 60. Problemi sequenziali: esempio Esempio: Calcolare e stampare la media di tre valori numerici x, y e z. I tre dati siano acquisiti da tastiera. Soluzione informale: sommare i tre valori e dividere per 3 Soluzione formale: pseudocodice 1. Leggi il primo valore -> x 2. Leggi il secondo valore -> y 3. Leggi il terzo valore -> z 4. media = (x + y + z) / 3 5. Stampa media
  • 61. Problemi condizionali Questa volta la soluzione 竪 rappresentata da una sequenza di operazioni con pi湛 alternative La caratteristica principale in questo caso 竪 dovuta proprio alle alternative che tuttavia devono essere tutte perfettamente formalizzate e che conducono pertanto ad un numero FISSO di flussi di esecuzione. Esempio: istruzioni di installazione di un dispositivo che prevede casi particolari.
  • 62. Problemi condizionali: esempio Esempio: Calcolare e stampare il massimo tra tre valori numerici x, y e z. I tre valori siano acquisiti da tastiera. Restrizioni: in un elaboratore elettronico possiamo confrontare due soli numeri per volta! il confronto deve essere eseguito in cascata Soluzione formale: pseudocodice: 1. Leggi i tre valori (A, B, C) 2. Se A > B allora vai a 5 3. Se B > C allora Max = B; stop 4. Max = C; stop 5. Se A > C allora Max = A; stop 6 Max = C; stop
  • 63. Problemi condizionali diagramma di flusso della soluzione adottata Leggi A, B e C max = A max = C A > B? stop stop B > C? A > C? si no no no si si max = B max = C stop stop Si osservano 4 flussi di esecuzione!!!!!
  • 64. Problemi iterativi La soluzione 竪 rappresentata dalla ripetizione di una serie di operazioni per un certo numero di volte. La caratteristica principale 竪 rappresentata dal fatto che il numero di flussi di esecuzione NON 竪 predicibile ed 竪 dipendente dai dati che vengono elaborati La maggior parte dei problemi pratici si traduce in programmi iterativi Esempio: problemi tipo continua loperazione A fino a che...
  • 65. Problemi iterativi: esempio Esempio: Calcolare la somma dei primi N numeri interi, dove N 竪 acquisito da tastiera Soluzione : Dobbiamo calcolare Somma = (i=1...N) i. Esempio: se N=4 => Somma = 1+2+3+4 = 10. La soluzione deve essere una soluzione iterativa, ovvero una serie di operazioni ripetuta pi湛 volte.
  • 66. Problemi iterativi Soluzione formale: pseudocodice 1. Leggi un valore -> N 2. S 0 = 0; (S 竪 un accumulatore di risultato) 3. i = 1; (i 竪 un contatore) 4. Se i > N allora vai a 8 5. S j = S j-1 + i 6. i = i+1 7. Vai a 4 8. Stampa S N 9. Stop
  • 67. Problemi iterativi Diagramma di flusso S 0 = 0 stampa S N i > N? stop si no S i = i + S i-1 i = i+1 i = 1 N flussi di esecuzione!!! start Leggi N
  • 68. Problemi iterativi Struttura generale output fine iterazione? stop SI NO operazione iterativa aggiornamento della condizione inizializzazioni start
  • 69. Problemi iterativi Un problema iterativo si suddivide in 4 fasi fondamentali: Inizializzazione ovvero a ssegnazione delle condizioni iniziali delliterazione: senza queste operazioni la correttezza del risultato non 竪 garantita Controllo della condizione di fine iterazione che si pu嘆 riassumere nella domanda: sono finiti i dati da processare? Spesso si tratta del test: indice = valore massimo ammissibile ? Operazione iterativa, ovvero l operazione che deve essere ripetuta ad ogni ciclo Aggiornamento della condizione: che deve agire su uno dei valori che costituiscono la condizione di fine iterazione per evitare cicli infiniti
  • 70. Dal problema alla soluzione Realizziamo un algoritmo per la ricerca del massimo fra quattro numeri. Etichettiamo con N1 , N2 , N3 , N4 e max gli identificatori dei quattro numeri e del massimo che cerchiamo. Ipotizziamo dapprima che il numero pi湛 grande sia N1 e lo mettiamo in max. Confrontiamo ora il contenuto di max con N2 : se N2 竪 pi湛 grande allora trascriviamo in max tale elemento, se invece N2 竪 pi湛 piccolo non alteriamo il contenuto di max . Ripetiamo il procedimento con N3 e N4 .
  • 71. Dal problema alla soluzione Lalgoritmo risultante sar del tipo: Leggi N1, N2, N3, N4 max N1 Se N2 > max ALLORA max N2 Se N3 > max ALLORA max N3 Se N4 > max ALLORA max N4 stampa Il massimo 竪 max
  • 72. Dal problema alla soluzione Si osservi come il precedente non sia un processo ottimizzato in quanto 竪 valido solo per 4 elementi. Se vogliamo trovare il massimo fra 5 elementi occorrer aggiungere un altro confronto. Quando si devono effettuare operazioni su elementi simili, cio竪 della stessa specie, conviene strutturare i dati, ad esempio in un vettore e utilizzare etichette con indici. Ogni elemento del vettore si individua mediante un indice che lo distingue dagli altri dello stesso tipo. Normalmente si rappresenteranno cos狸: N[1] , N[2] o, pi湛 genericamente, N[I] , dove I funge da etichetta dell'indice.
  • 73. Dal problema alla soluzione Usando questa notazione possiamo modificare il precedente diagramma di flusso. Per I da 1 a 4 leggi N[I] max N[1] Per I che va da 2 a 4 Se N[I] > max ALLORA max N[I] stampa Il massimo 竪 max I due algoritmi differiscono tra loro sostanzialmente: il primo procede direttamente dall'inizio alla fine; il secondo itera perch辿 contiene un ciclo o loop .
  • 74. Dal problema alla soluzione Meglio ancora generalizzare lalgoritmo rispetto al numero di elementi trattati. Ci嘆 si pu嘆 realizzare ad esempio indicando 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 oppure addirittura richiesto allutente, per cui lalgoritmo diventa:
  • 75. Dal problema alla soluzione 1 Leggi num_dati 2 I 1 3 Finch辿 (While) I num_dati 3.1 leggi N[I] 3.2 incrementa I 4 max N[1] 5 I 2 6 Finch辿 (While) I num_dati 6.1 Se (IF) N[I] > max ALLORA 6.1.1 max N[I] 6.2 incrementa I 7 stampa Il massimo 竪 max
  • 76. Il linguaggio di programmazione
  • 77. Dalla soluzione al programma La scrittura del programma vero e proprio 竪 praticamente immediata a partire dalla soluzione formale I linguaggi di programmazione forniscono infatti costrutti che realizzano: Operazioni semplici Strutture condizionali Strutture iterative
  • 78. Elementi del linguaggio Essendo il linguaggio unastrazione, esistono alcuni fondamentali elementi sintattici essenziali per luso del linguaggio stesso: parole chiave ( keyword ) dati identificatori istruzioni Gli elementi sintattici definiscono la struttura formale di tutti i linguaggi di programmazione
  • 79. Parole chiave (keyword) Sono vocaboli riservati al traduttore per riconoscere elementi del linguaggio Per esempio, le istruzioni sono tutte identificate da una keyword. Ad esempio la keyword PRINT in Basic identifica il comando di visualizzazione su schermo Non possono essere usate per altri scopi Costituiscono i mattoni della sintassi del linguaggio
  • 80. Dati Dalla parte del calcolatore: un dato 竪 un insieme di bit memorizzato in memoria centrale Dalla parte dellutente: un dato 竪 una quantit associata ad un certo significato Il linguaggio di programmazione supporta la vista utente Un dato 竪 individuato da: nome ( identificatore ) rappresentazione ( tipo ) modalit di accesso ( variabile, costante )
  • 81. Rappresentazione dei dati 100 101 103 102 107 106 105 104 110 109 108 Indirizzi X; intero; valore=3 3 a c; carattere; valore=a t; reale; valore=-11.564 -11.564 Memoria
  • 82. Identificatore Indica il nome di un dato (e di altre entit) in un programma Permette di battezzare in modo intuitivo i dati Esempio: somma, volume, diametro , Il nome deve ovviamente essere unico allinterno del suo ambiente di esistenza (spesso questo ambiente coincide con lintero programma)
  • 83. Tipo Stabilisce il codice col quale i dati sono rappresentati in memoria (numeri interi in complemento a 2, numeri frazionari in floating-point, caratteri in ASCII, ecc.). Stabilisce lo spazio occupato da un dato nella memoria del calcolatore (numero di celle di memoria). Definisce la capienza di quel dato (lintervallo di valori che pu嘆 assumere). Definisce quali operatori possono agire su quel dato.
  • 84. Tipo di accesso Indica le modalit di accesso ai dati: Variabili sono modificabili in qualunque punto del programma Costanti sono dati a sola lettura il valore 竪 assegnato una volta per tutte allinizio del programma e non 竪 modificabile
  • 85. Istruzioni Sono le operazioni che il linguaggio 竪 in grado di eseguire; possono essere suddivise in: pseudoistruzioni : non sono vere e proprie istruzioni perch辿 non sono eseguibili. Si tratta di direttive i cui effetti sono visibili durante lesecuzione delle istruzioni eseguibili istruzioni elementari : sono o perazioni pi湛 o meno riconducibili a operazioni dirette sullhardware 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
  • 86. Esempio di programma PROGRAM demo ; // definizione di istruzione CONSTANTS pig = 3.14159; val = 0.19; VARIABLES x : INTEGER; y : REAL; c : CHARACTER; BEGIN PROGRAM x = 2; IF ( y > 2) THEN y = x * pig ; PRINT x , y ; END PROGRAM istr. di controllo del flusso specifica di tipo pseudoistruzioni istruzioni eseguibili istr. elementare istr. elementare
  • 87. Linguaggio di programmazione Imparare un linguaggio significa conoscere le keyword i tipi predefiniti le istruzioni e la loro sintassi ATTENZIONE: conoscere un linguaggio non significa saper programmare! In questo corso impareremo il linguaggio C Imparato un linguaggio 竪 semplice e immediato trasferire i concetti ad altri linguaggi!

Editor's Notes

  • #4: 11 25 (Prog - feb97) 2 息 A.Lioy - Politecnico di Torino (1992-97) Sistemi di Elaborazione delle Informazioni
  • #5: 11 25 (Prog - feb97) 2 息 A.Lioy - Politecnico di Torino (1992-97) Sistemi di Elaborazione delle Informazioni
  • #8: 12 26 (Prog - feb97) 2 息 A.Lioy - Politecnico di Torino (1992-97) Sistemi di Elaborazione delle Informazioni
  • #9: 13 27 (Prog - feb97) 2 息 A.Lioy - Politecnico di Torino (1992-97) Sistemi di Elaborazione delle Informazioni
  • #10: 16
  • #11: 17
  • #12: 18
  • #25: 20 29 (Prog - feb97) 3 息 A.Lioy - Politecnico di Torino (1992-97) Sistemi di Elaborazione delle Informazioni
  • #26: 21 29 (Prog - feb97) 3 息 A.Lioy - Politecnico di Torino (1992-97) Sistemi di Elaborazione delle Informazioni
  • #27: 23 (Prog - feb97) 4 息 A.Lioy - Politecnico di Torino (1992-97) Sistemi di Elaborazione delle Informazioni
  • #28: 24
  • #29: 25 (Prog - feb97) 5 息 A.Lioy - Politecnico di Torino (1992-97) Sistemi di Elaborazione delle Informazioni
  • #30: 26 (Prog - feb97) 7 息 A.Lioy - Politecnico di Torino (1992-97) Sistemi di Elaborazione delle Informazioni
  • #31: 27 (Prog - feb97) 9 息 A.Lioy - Politecnico di Torino (1992-97) Sistemi di Elaborazione delle Informazioni
  • #32: 28 (Prog - feb97) 10 息 A.Lioy - Politecnico di Torino (1992-97) Sistemi di Elaborazione delle Informazioni
  • #33: 29
  • #35: 31 (Prog - feb97) 11 息 A.Lioy - Politecnico di Torino (1992-97) Sistemi di Elaborazione delle Informazioni
  • #36: 32 (Prog - feb97) 11 息 A.Lioy - Politecnico di Torino (1992-97) Sistemi di Elaborazione delle Informazioni
  • #37: 33 (Prog - feb97) 12 息 A.Lioy - Politecnico di Torino (1992-97) Sistemi di Elaborazione delle Informazioni
  • #38: 34
  • #39: 35 (Prog - feb97) 14 息 A.Lioy - Politecnico di Torino (1992-97) Sistemi di Elaborazione delle Informazioni
  • #40: 36 (Prog - feb97) 15 息 A.Lioy - Politecnico di Torino (1992-97) Sistemi di Elaborazione delle Informazioni
  • #41: 37 (Prog - feb97) 16 息 A.Lioy - Politecnico di Torino (1992-97) Sistemi di Elaborazione delle Informazioni
  • #42: 38 (Prog - feb97) 17 息 A.Lioy - Politecnico di Torino (1992-97) Sistemi di Elaborazione delle Informazioni
  • #43: 39 (Prog - feb97) 18 息 A.Lioy - Politecnico di Torino (1992-97) Sistemi di Elaborazione delle Informazioni
  • #45: 41 (Prog - feb97) 20 息 A.Lioy - Politecnico di Torino (1992-97) Sistemi di Elaborazione delle Informazioni
  • #46: 42 (Prog - feb97) 21 息 A.Lioy - Politecnico di Torino (1992-97) Sistemi di Elaborazione delle Informazioni
  • #47: 43 (Prog - feb97) 22 息 A.Lioy - Politecnico di Torino (1992-97) Sistemi di Elaborazione delle Informazioni
  • #48: 44 (Prog - feb97) 24 息 A.Lioy - Politecnico di Torino (1992-97) Sistemi di Elaborazione delle Informazioni
  • #49: 45
  • #50: 45
  • #59: 48
  • #60: 49
  • #61: 50
  • #62: 51
  • #63: 52
  • #64: 53
  • #65: 54
  • #66: 55
  • #67: 57
  • #68: 58
  • #69: 59
  • #70: 60
  • #77: 62
  • #78: 63
  • #79: 64
  • #80: 65
  • #81: 66
  • #83: 68
  • #84: 69
  • #85: 70
  • #86: 71
  • #87: 72