5. Codifica degli Algoritmi in C

Похожие документы
Qualsiasi programma in C++ segue lo schema:

Lezione 6 Introduzione al C++ Mauro Piccolo

Introduzione alla programmazione in linguaggio C

Prof. Pagani Corrado INTRODUZIONE AL LINGUAGGIO C

Struttura dei programmi C

Informatica (A-K) 5. Algoritmi e pseudocodifica

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I

Fondamenti di Informatica 6. Algoritmi e pseudocodifica

PROGRAMMA = ALGORITMO

INFORMATICA. Strutture iterative

Istruzioni iterative (o cicliche)

Primi passi col linguaggio C

Introduzione alla programmazione. Alice Pavarani

Fondamenti di Informatica

Programmazione in Java (I modulo)

2. Algoritmi e Programmi

Linguaggio C - le strutture di controllo: sequenza, selezione, iterazione

Istruzioni iterative. Istruzioni iterative

STRUTTURE DI CONTROLLO DEL C++

Java SE 7. Strutture di programmazione (2)

Programma del corso. Elementi di Programmazione. Introduzione agli algoritmi. Rappresentazione delle Informazioni. Architettura del calcolatore

#include <stdio.h> main() { - 1 -

L AMBIENTE CODE BLOCKS E L IO

Linguaggio C. strutture di controllo: strutture iterative. Università degli Studi di Brescia. Docente: Massimiliano Giacomin

Qualsiasi programma in C++ segue lo schema:

Compitino di Laboratorio di Informatica CdL in Matematica 13/11/2007 Teoria Compito A

Le Strutture di controllo Del Linguaggio C. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

L AMBIENTE CODE BLOCKS E L IO

Le basi del linguaggio Java

Un esempio per iniziare. Il controllo del programma in C. Altri cenni su printf() Esercizi (printf) printf( 8!=%d, fatt);

Транскрипт:

40 5. Codifica degli Algoritmi in C La traduzione di algoritmi in linguaggi di programmazione rende posbile l esecuzione di programmi da parte del calcolatore. In questo corso codificheremo gli algoritmi nel linguaggio di programmazione C. Questo linguaggio n è direttamente eseguibile dalla macchina ma viene trasformato dal compilatore in un file eseguibile linkando eventualmente porzioni di codice ester. Introdurrremo ora brevemente gli elementi di un linguaggio di programmazione facendo riferimento al linguaggio C. (La seguente sezione n è intesa essere una presentazione esaustiva del linguaggio C, per la quale rimanda al Corso di Laboratorio di Programmazione). Un linguaggio è caratterizzato da una ntas ed una semantica. La ntas è l ineme delle regole che caratterizza le fra del linguaggio che so ben formate e quindi accettabili per il compilatore. La semantica permette di specificare che cosa fa un programma quando viene eseguito. Gli elementi fondamentali di un linguaggio quale il C so le variabili. Ogni variabile ha un me che la identifica (ed in particolare deta la porzione di memoria ad essa associata), ed un tipo, che esprime quali oggetti posso essere assegnati ad essa (e quindi la dimenone dell area di memoria associata) e in quali operazioni può essere utilizzata. Il me di una variabile può essere una quala sequenza di lettere e cifre e può contenere il mbolo "_" (underscore). Ogni me legale inizia con una lettera o con "_". Come abbiamo già visto nel linguaggio dei diagrammi di flusso, una variabile può essere utilizzata in due modi: leggendone il contenuto o assegnandole un valore. A differenza dei diagrammi di flusso, in C, prima di usare una variabile, è neccesario dichiararla. Per esempio, la dichiarazione int var; dice che la variabile di me var è di tipo intero. I tipi di base disponiblili nel linguaggio C so i seguenti: TIPO DIMENSIONE VALORI int da 16 a 32 bit da -2147483648 a 2147483647 float 32 bit reali in precione ngola double 64 bit reali in precione doppia char 8 bit da 128 a 127 E posbile cambiare la dimenone del tipo usando i modificatori: long (per lavorare con valori molto grandi) e short (per limitare la capacità della variabile). In C n este un tipo boolea: gli interi diver da zero vengo ricosciuti come valore True, mentre a zero viene associato il valore False.

41 5.1. Espresoni Semplici Le espresoni del C posso contenere variabili, numeri e i seguenti operatori: OPERATORE SIGNIFICATO * prodotto / diviso + somma - sottrazione % Modulo (resto delle divione intera) Sebbene ci a un unico mbolo per ognu degli operatori *, /, + e, in realtà ce ne so molte veroni, a seconda del tipo di variabili cui so applicati. Per esempio, c è un operatore * che, due interi, restituisce un intero; un altro che, applicato a due numeri float, restituisce un float, e così via. La scelta dell operatore sarà fatta dal compilatore in base al tipo dei suoi operandi. Nella maggioranza dei ca questa tuazione n provoca problemi. Comunque, per la divione, il comportamento può risultare n ovvio. Ad esempio, 1 / 2 restituirà 0, perché gli operandi so entrambi di tipo intero e quindi viene selezionato l operatore / fra interi, che restituisce l intero che approsma il risultato; al contrario, 1.0 / 2.0 restituirà 0.5, perché gli operandi so entrambi float e quindi viene selezionata la divione fra float. 5.2. Assegnamento L istruzione che assegna il valore ad una variabile è, come nel caso dei diagrammi di flusso, l assegnamento, che in C è detato dall'operatore "=". Ad esempio, se la variabile a è stata dichiarata di tipo intero, l'assegnazione a = 100; attribuisce ad a il valore 100. A nistra dell'operatore di assegnamento comparirà una variabile e a destra una espresone che deve avere tipo compatibile con quello della variabile. 5.3. Schema di un Programma C Un programma in C è costituito da dichiarazioni di variabili e di funzioni e di una particolare funzione di me main, che costituisce il codice eseguito quando fa partire l eseguibile generato dalla compilazione del programma. Ad esempio: #include <stdio.h> Dichiarazione di variabili e di funzioni int main(void) {... istruzioni... } La funzione main viene richiamata per prima in fase di esecuzione; anch essa restituisce un valore al stema operativo.

5.4. Funzioni di I/O In C n esto funzioni predefinite per l input e l output; per questo è necessario includere nel file sorgente delle librerie esterne; questo è fatto dalla direttiva #include <stdio.h> che permette di utilizzare le funzioni contenute nella libreria stdio, che mette a dispozione, fra le altre, la funzione: printf(stringa_formato,... espresoni ); La funzione printf ha un numero di parametri variabile. Il primo specifica il formato del testo che dovrà essere stampato, mentre le espresoni che seguo so i valori che dederiamo stampare e la cui stampa è determinata dalla stringa_formato. Esempio 27 Sia a una variabile dichiarata di tipo intero, con valore 100 e a f una variabile float con valore 3.14. L'istruzione stampa: printf( La variabile a = %d e la variabile f = %f, a, f); La variabile a=100 e la variabile f=3.14. I due mboli % indica che in quel punto dovrà comparire il valore delle variabili elencate in coda, mentre la lettera indica il tipo di dato che ci aspetta di trovare. Per una tabella dei codici di formato rimanda ad un quala testo sul C. Si faccia attenzione perchè n c è alcun controllo da parte del compilatore che ci a constenza fra il numero dei % (e il loro tipo) nella stringa di formato ed i parametri che seguo. Per cui posso ottenere risultati inaspettati. 5.5. Operatori Brevi Il linguaggio C permette di utilizzare delle scorciatoie nella scrittura delle istruzioni. Quando a nistra e a destra di un assegnamento compare la stessa variabile, come ad esmpio in: i = i+1, può scrivere i += 1. In generale ogni assegnamento del tipo: v = v op espresone, dove op è u degli operatori della tabella data in precedenza ed espresone è una quala espresone, può essere abbreviato in v op = espresone L incremento e il decremento di 1 della variabile v posso essere ulteriormente abbreviati in: v++, ++v, v--, e v. 5.6. Istruzioni Strutturate Le istruzioni di assegnamento posso essere combinate attraverso la sequenzializzazione espressa da ; nel modo seguente: a=3; b=a+1 Dapprima segue l assegnamento a=3 e poi b=a+1. Iltre, più istruzioni posso essere raggruppate in un blocco usando parente graffe {}. Ci so infine costrutti di selezione e di iterazione che presenteremo brevemente. 42

43 if (else) : permette di eseguire condizionalmente delle istruzioni. Le ntas del costrutto so le seguenti: if (condizione) else istruzione2; if (condizione) La condizione è un espresone; se il suo valore è diverso da 0, viene eseguita l istruzione1 altrimenti nel primo caso è eseguita l istruzione2, e, nel secondo, l'istruzione che segue. Nella condizione posso essere usati i seguenti operatori relazionali: OPERATORE SIGNIFICATO <= Mire o uguale < Mire > Maggiore >= Maggiore o uguale == Uguale!= Diverso I precedenti operatori, quando applicati, ritorneran un valore intero che è diverso da zero se la condizione è vera o uguale a zero altrimenti. Visti come diagrammi di flusso i costrutti precedenti corrispondo ai seguenti: istruzione1 istruzione2 istruzione1 Nel caso voglia eseguire più di un istruzione, basterà usare un blocco al posto di istruzione1 e/o istruzione2. La keyword else viene sempre riferita al costrutto if più vici; nel caso di costrutti del tipo: if (condizione1) if (condizione2) else istruzione2; istruzione3; l else è riferito al test sulla condizione2. Nel caso volesse far riferire l else alla condizione1 dovrebbero usare le parente per raggruppare il secondo costrutto if nel modo seguente:

44 if (condizione1) {if (condizione2) } else istruzione2; istruzione3; Notare che, come un blocco è conderato un unica istruzione, anche un costrutto if o if-else viene conderato come un unica istruzione. I cicli (loop) permetto di eseguire un blocco di codice un numero di volte indefinito, finché risulta vera una condizione. Il linguaggio C mette a dispozione tre cicli fondamentali: while, for e do-while (qui descriveremo solo i primi due). while: La ntas del costrutto è la seguente while (condizione) istruzione; La condizione è come nel caso del costrutto if una espresone. Se il suo valore è diverso da zero esegue l istruzione e poi ritorna alla valutazione del costrutto while. istruzione Anche in questo caso, se voglio eseguire più istruzioni può usare un blocco. for : questa è l'istruzione iterativa più complessa. La sua ntas è la seguente: for ( condizione; istruzione2) istruzion3; L istruzione1 viene eseguita prima di entrare nel ciclo, che corriponde ad un ciclo while in cui viene eseguita prima l istruzione3 (che è il body del for) e poi la istruzione2 (che è l istruzione di iterazione). Una o più delle precedenti istruzioni può mancare. Il for corrisponde al seguente diagramma di flusso: istruzione1 istruzione2 istruzione3

45 I seguenti cicli for corrispondo ad un ciclo while: 5.7. Commenti for ( ; condizione; ) istruzione; for ( ; condizione; istruzione); Il commento è una porzione del testo che n viene conderata dal compilatore. Durante la fase di compilazione, i commenti vengo trascurati, pertanto n compaio all inter del file eseguibile. Servo per esplicitare affermazioni n altrimenti ricoscibili, o per chiarire il gnificato di una porzione di codice. Verran usati per scrivere, tra le altre antazioni, l invariante del ciclo. All inter del commento può comparire quala mbolo; n este una lunghezza masma consentita per i commenti. Il compilatore C ricosce due tipi di commento: /* questo è un commento racchiuso tra le due barre con gli asterischi e può trovar su più righe */ // questo è un commento che termina alla fine della riga. // Per proseguire è necessario riscrivere il doppio slash all'inizio // di ogni riga