Corso di Informatica CdL in Matematica e CdL in Matematica per le Applicazioni Prof. G. Nicosia Dipartimento di Matematica e Informatica Facoltà di Scienze MM.FF.NN. Università degli Studi di Catania A. A. 2006/2007 Informatica
Sommario 1 2 3 4 5 Informatica
Sommario 1 2 3 4 5 Informatica
Sommario 1 2 3 4 5 Informatica
Sommario 1 2 3 4 5 Informatica
Sommario 1 2 3 4 5 Informatica
Sommario 1 2 3 4 5 Informatica
Sommario 1 2 3 4 5 Informatica
L unico modo per imparare un linguaggio di programmazione consiste nell utilizzarlo. Brian W. Kernighan & Dennis M. Ritchie, Linguaggio C, 1989. La programmazione si impara con la pratica e che, per sviluppare le proprie doti, è essenziale che vengano scritti e provati sul computer il maggior numero di programmi possibile. T. M. R. Ellis, Programmazione Strutturata in Fortran77, 1995. Informatica
Un programma C è costituito da funzioni e variabili. Una funzione contiene istruzioni che specificano le operazioni da effettuare. Le variabili memorizzano i valori usati durante l esecuzione. Un programma C inizia l esecuzione a partire dalla funzione main. #include <stdio.h> main() printf("salve, mondo!\n"); compilazione cc salve.c -o salve (o gcc salve.c -o salve) esecuzione salve (o./salve) Informatica
Il secondo programma C Problema C = (5/9)(F 32) Nuove idee dichiarazioni, variabili, espressioni aritmetiche, cicli, output formattato, commenti. #include <stdio.h> /* stampa la tabella Fahrenheit-Celsius per fahr = 0, 20,..., 200 */ main() int fahr, celsius, lower, upper, step; lower = 0; upper = 300; step = 20; fahr = lower; while (fahr <= upper) celsius = 5 * (fahr-32) /9; printf("%d\t%d\n", fahr, celsius); /* %d stampa int */ fahr = fahr + step; N.B. In C, come in molti altri linguaggi, la divisone fra interi effettua un troncamento (i.e., 5/9 verrebbe troncato a zero). P.S. L indentazione migliora la leggibilità del codice ed enfatizza la struttura logica di un programma. Informatica
Variabili In C, prima di poter essere utilizzate, tutte le variabili devono essere dichiarate, prima di una qualsiasi istruzione eseguibile. Una dichiarazione definisce le proprietà della variabile. Int definisce gli interi (a 16-bit o a 32-bit, dipende dalla macchina). float definisce le variabili decimali, in genere una quantità a 32 bit e 6 bit significativi. Riassumendo, il C prevede i seguenti tipi di dati fondamentali: char carattere (un byte) short intero corto (16-bit) int intero (16 o 32 bit) long intero lungo (32 bit) float numero decimale in singola precisione (32 bit) double numero decimale in doppia precisione (64 bit) Informatica
Il secondo programma C modificato #include <stdio.h> /* stampa la tabella Fahrenheit-Celsius per fahr = 0, 20,..., 200 */ main() float fahr, celsius; /* versione floating point */ int lower, upper, step; lower = 0; upper = 300; step = 20; fahr = lower; / * conversione da interi a numeri decimali */ while (fahr <= upper) / * conversione da interi a numeri decimali */ celsius = (5.0/9.0) * (fahr-32.0); printf("%3.0f\t%6.1f\n", (float) fahr, celsius); /* %f stampa float */ fahr = fahr + step; 5.0/9.0 è una divisione fra due numeri decimale quindi non viene troncata. Regola generale: se un operatore artimetico ha gli operandi interi, l operazione eseguita è intera; se un operatore ha un argomento intero ed uno decimale, prima di eseguire l operazione l intero viene convertito in un decimale. Segue che se avessimo scritto (fahr - 32), il valore 32 sarebbe stato trasformato automaticamente in un floating point Informatica
Istruzione For #include <stdio.h> /* stampa la tabella Fahrenheit-Celsius per fahr = 0, 20,..., 200 */ main() int fahr; for (fahr=0; fahr <= 300; fahr = fahr +20) printf("%3.0f\t%6.1f\n", (float) fahr, (5.0/9.0) * (fahr-32.0) ); fahr=0; fahr<=300; fahr = fahr +20; terminazione in generale Inizializzazione, viene eseguita una sola volta, prima di entrare nel ciclo. Condizione di controllo del ciclo: se è vera, viene eseguito il corpo del ciclo. istruzione incremento e la condizione di controllo viene nuovamente testata. Il ciclo termina quando la condizione diventa falsa. L inizializzazione, la condizione e l incremento possono essere espressioni di qualsiasi tipo. Regola generale In ogni contesto in cui è consentito l uso del valore di una variabile di un certo tipo, è possibile utilizzare anche espressioni di quel tipo ma più complesse. Informatica
Ciclo For versus Ciclo while main() int fahr; for (fahr=0; fahr <= 300; fahr = fahr +20) printf("%3.0f\t%6.1f\n", (float) fahr, (5.0/9.0) * (fahr-32.0) ); main() float fahr; int lower, upper, step; lower = 0; upper = 300; step = 20; fahr = lower; while (fahr <= upper) printf("%3.0f\t%6.1f\n", (float) fahr, (5.0/9.0) * (fahr-32.0)); fahr = fahr + step; Informatica
#include <stdio.h> #define LOWER 0 #define UPPER 300 #define STEP 20 main() int fahr; for (fahr=lower; fahr <= UPPER; fahr = fahr + STEP) printf("%3.0f\t%6.1f\n", fahr, (5.0/9.0) * (fahr-32.0) ); #define nome testo da sostituire #define definisce un nome simbolico, o costante simbolica, come una particolare stringa di caratteri. dopo una tale definizione, tutte le occorrenze di nome (purchè, non siano racchiuse fra apici e non facciano parte di un altra stringa) vengono rimpiazzate con il corrispondente test da sostituire (float fahr) forza la variabile intera ad essere trattata come float (operatore unitario di cast). La funzione printf si aspetta come primo argomento un float (%3.0f) e, se si trova ad operare su qualcosa di diverso, produce un risultato privo di significato. Provate a togliere (float). Informatica
Costanti Simboliche 2: macro con argomenti #include <stdio.h> #define LOWER 0 #define UPPER 300 #define STEP 20 #define RULE(x) (5.0/9.0) * (x-32.0) main() int fahr; for (fahr=lower; fahr <= UPPER; fahr = fahr + STEP) printf("%3.0f\t%6.1f\n", (float) fahr, RULE(fahr) ); È possibile definire macro con argomenti, in modo che il testo da sostituire dipenda dai parametri delle diverse chiamate. Ogni invocazione della macro RULE viene espansa in codice in linea. Ogni occorrenza di un parametro formale (x nel nostro esempio) viene rimpiazzata con il corrispondente argomento reale (fahr nel nostro esempio). Non è necessario avere macro diverse per diversi tipi di dati. Informatica
Esercizio Scrivere un programma che stampi una tabella di corrispondenza fra temperatura Celsius e Fahrenheit in modo che stampi la tabella in ordine inverso (cioè, partendo dai 300 gradi e scendendo fino a 0). Informatica