Laboratorio di Informatica Generale I UD Seconda esercitazione

Documenti analoghi
Primi passi col linguaggio C

Introduzione alla programmazione in linguaggio C

Primi programmi in C

Introduzione al linguaggio C Primi programmi

Precisazione sui tipi in ANSi C

1

Introduzione alla programmazione. Alice Pavarani

Introduzione al linguaggio C

Laboratorio di Programmazione 1. Docente: dr. Damiano Macedonio Lezione 5 31/10/2013

Lezione 5: Introduzione alla programmazione in C

I Fondamenti del Linguaggio

Il linguaggio C. Prof. E. Occhiuto INFORMATICA 242AA a.a. 2010/11 pag. 1

Dati due punti sul piano calcolare la loro distanza

Tipi di dato, Alessandra Giordani Lunedì 7 maggio 2011

Struttura dei programmi e Variabili

Burocrazia: Primi passi con il linguaggio C. Diversi tipi di linguaggio. Un solo linguaggio

Tipi e Valori. Moreno Marzolla Dipartimento di Informatica Scienza e Ingegneria (DISI) Università di Bologna

Il primo programma C. Un programma utile. Compilazione & linking con il compilatore GNU. Introduzione alla programmazione in linguaggio C

Laboratorio di Programmazione 1. Docente: dr. Damiano Macedonio Lezione 4 24/10/2013

Corso sul linguaggio C

Ingresso ed Uscita in C. Informatica 1 / 15

C: primi elementi. Lezione 4

I/O da tastiera + Alessandra Giordani Lunedì 2 maggio

Lezione 1. Ing. Colazzo Sebastiano

Fondamenti di Informatica. Ingegneria elettronica

LIBRERIE STANDARD in C

Tipi di dato semplici

LIBRERIE STANDARD in C Le librerie standard

Il sistema C è formato dal linguaggio C, dal preprocessore, dal compilatore, dalle librerie e da altri strumenti di supporto.

Introduzione al C. Lez. 1 Elementi. Rossano Venturini

Input/Output. Lettura e scrittura Caratteri e Stringhe: Terminale e file. Input/output. caratteri stringhe formattato ascii binari

Tipi e Valori. Moreno Marzolla Dipartimento di Informatica Scienza e Ingegneria (DISI) Università di Bologna

LIBRERIE STANDARD in C. LIBRERIE STANDARD in C

C O P Y R I G H T ( C ) W W W. F O N D A M E N T I. I N F O

Linguaggio C. Tipi predefiniti. Università degli Studi di Brescia. Prof. Massimiliano Giacomin. Prof. M. Giacomin

Struttura dei programmi C

Prof. Pagani Corrado INTRODUZIONE AL LINGUAGGIO C

Rappresentazione di interi

Introduzione alle operazioni di I/O con formato e tipi primitivi

Laboratorio di Informatica I

Tipi di dato. Le variabili in C. Problema: dato in input un carattere, se esso è una lettera minuscola, trasformarla in maiuscola.

Il linguaggio C. Notate che...

Primi esempi di programmi. Il tipo int Le variabili Altri tipi interi Operatori di assegnazione

Unità Didattica 1 Linguaggio C. Fondamenti. Struttura di un programma.

Le variabili nel linguaggio C

Linguaggio C: introduzione

Compendio sottoinsieme del C++ a comune col C. (Libreria standard, Input/Output, Costanti, Dichiarazioni e typedef, Memoria Dinamica)

Funzioni. Unità 1. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

Elementi di informatica. Programmare in C

Il linguaggio C - Introduzione

Assegnamento. Ricordiamo che l esecuzione di x = exp corrisponde a: Esempio: somma = 5; a = 2; somma = somma + a; somma 5 = 7 a 2 2

Tipi di dati fondamentali. Tipi di dati fondamentali. Utilità dei tipi di dati nelle dichiarazioni. Il tipo di dati char. Codice ASCII.

L AMBIENTE CODE BLOCKS E L IO

Sintassi: Per la dichiarazione di variabili dei tipi fondamentali:

#include <stdio.h> /* l esecuzione comincia dalla funzione main */ int main()

La Programmazione. Cos è la programmazione? Concetti preliminari

Perché il linguaggio C?

Introduzione al C. Lez. 1 Elementi. Rossano Venturini

Linguaggi di programmazione

Linguaggio C Informatica Grafica

Ingresso ed Uscita in C. Luca Abeni

Elementi di informatica

Input/Output di numeri

Il corpo di tutte le funzioni deve essere contenuto tra parentesi graffe

Introduzione al C. Lez. 1 Elementi

Programmare in C. Maurizio Palesi Salvatore Serrano. Valori. Operazioni. Un insieme di valori del tipo. Per operare su tali valori Tipi

IL PRIMO PROGRAMMA IN C

Introduzione alla programmazione. Walter Didimo

$QDOLVLGHOSURJUDPPDTXDGUDWR

Programmazione Procedurale in Linguaggio C++

Tipi di dato semplici

Corso Programmazione

Tipi di dato semplici

Il linguaggio C. Notate che...

Le librerie standard. ! La libreria standard del C è in realtà un insieme di librerie

Linguaggi di Programmazione

Introduzione al C. Lezione 1 Elementi. Rossano Venturini. Pagina web del corso

LEZIONE 1 LE BASI DEL LINGUAGGIO C

Informatica 1 Tipi e dichiarazioni in C++ C++ - Tipi e dichiarazioni 1

Perché il linguaggio C?

Informatica. Stefano Lodi. 16 novembre in linguaggio C

Lab 02 Tipi semplici in C

Aritmetica dei puntatori

Corso di Laboratorio di programmazione e calcolo

Alcune regole di base per scrivere un programma in linguaggio C

1 PANORAMICA SUL LINGUAGGIO C

Fondamenti di Informatica T-1 Modulo 2

Lezione V Fondamenti di Ingresso/Uscita

Introduzione al C. Informatica Generale - Introduzione al C Versione 1.0, aa p.1/17

Università degli Studi di Ferrara

Fondamenti di Informatica T-1 Modulo 2

INPUT E OUTPUT DI VALORI NUMERICI

Transcript:

Laboratorio di Informatica Generale I UD Seconda esercitazione Danilo Severina 2 marzo 2006 Il Compilatore Il linguaggio C ha le seguenti caratteristiche: è molto efficiente, cioè permette di scrivere programmi veloci e compatti; consente di programmare ad alto livello, pensando ai problemi logici e non alla macchina fisica, ma permette anche di programmare a basso livello: offre quindi i vantaggi di entrambe le categorie; è un linguaggio apparentemente povero: non possiede istruzioni di entrata/uscita, nè istruzioni per operazioni matematiche; ogni funzione diversa dai costrutti di controllo o dalle operazioni elementari sui tipi dati è affidata ad un insieme di librerie esterne (in questo modo, mantenedo il linguaggio compatto, è possibile estendere le funzionalità o modificare quelle esistenti semplicemente aggiungendo o modificando librerie); è portabile: i programmi scritti secondo le regole dello standard ANSI possono essere compilati ed eseguiti su ogni tipo di calcolatore, sono cioè portabili. Naturalmente, un programma che usa caratteristiche particolari di un certo computer non è portatile. Un programma C non può essere eseguito immediatamente. Deve prima essere tradotto in codice macchina, cioè compilato in una forma eseguibile: il testo scritto dal programmatore è detto programma sorgente o codice sorgente (source) e viene tradotto nel prodotto finale che è detto codice eseguibile. I compilatori sono fondamentali per la moderna informatica. Essi agiscono come traduttori, trasformando i linguaggi di programmazione orientati all uomo (human oriented) nei linguaggi di programmazione orientati alla macchina (machine oriented). Per la maggior parte degli utenti, un compilatore può quindi essere visto come una scatola nera, che compie una trasformazione tra due diversi linguaggi. 1

Il GCC è il compilatore C standard per la piattaforma Linux, in quanto supporta tutti i moderni standard C, come l ANSI C, ed ha molte estensioni proprie, che possono essere usate per l ottimizzazione del codice. Essendo un compilatore multi-piattaforma, consente anche di compilare codice per macchine non-intel. Il GCC ha moltissime opzioni, ma se ne useranno solo un limitato sottoinsieme. Se si usa Linux, il compilatore classico è bf GCC (normalmente presente in ogni installazione), se invece si usa MS-DOS, si può usare l apposito porting di GCC, DJGPP, che dovrebbe funzionare anche sotto la maggior parte delle versioni di Windows. La vesione DOS del compilatore suddetto si può scaricare da http://www.delorie.com/djgpp, mentre la verisone Linux e presente in tutte le distribuzioni del sistema operativo. Si possono avere approfondite in formazioni consultando il sito http://gcc.gnu.org/. La compilazione Le fasi di compilazione sono due: Generazione di un file oggetto (xyz.o) Generazione del file eseguibile (xyz.exe oppure xyz) Entrambe le fasi si eseguono invocando il comando gcc seguito dagli opportuni parametri. La generazione del file oggetto si ottiene con il comando gcc -c xyz.c (Solo compilazione, no linking) Il risultato di tale comando è il file xyz.o. La generazione del file eseguibile si ottiene con il comando gcc -o xyz xyz.o (Linking) Il risultato di tale comando è il file xyz. Per semplificare ulteriormente la procedura di generazione di un file eseguibile si può utilizzare il comando gcc -o xyz xyz.c Il secondo parametro non è più un file.o, ma è il sorgente.c contenente il codice scritto dall utente. (Questo è il comando che si userà nella successiva parte del corso.) NB: se si utilizza il comando gcc xyz.c senza il parametro -o, il compilatore genera un file eseguibile chiamato a.out. Nelle versioni di SO Linux esitono anche altri compilatori, ognuno dei quali supporta un diverso linguaggio di programmazione. Seguono alcuni esempi: linguaggio C, compilatore gcc linguaggio C++, compilatore g++ 2

linguaggio Fortran, compilatore gcc-g77 linguaggio Java, compilatore gcc-java Le variabili Il nome di una variabile deve soddisfare i seguenti vincoli: deve iniziare con una lettera ; deve contenere solo lettere o cifre; è ammesso anche il carattere di sottolineato ( ). Esempi di nomi di variabile validi e non validi: linguaggio c linguaggioc ANSIC 123 3parole non valido: contiene uno spazio valido valido non valido: inizia con una cifra. Ogni variabile definita in un programma C deve essere caratterizzata da un tipo: possono essere tipi standard oppure tipi non-standard definiti dall utente stesso. Per ora ci si occuperà solamente del primo genere. Tipi di variabili I tipi standard di variabili previste dal linguaggio C sono brevemente descritti in seguito. Si noti che il numero di byte utilizzati per la rappresentazione di ogni singolo tipo può variare da una piattaforma ad un altra: esistono solo alcune relazioni che compilatore garantisce (come si vedrà in seguito un tipo int non può occupare più byte della rappresentazione di un long int). char Sono usati tipicamente per rappresentare un carattere ASCII o un byte di memoria. Il tipo char per default è equivalente a signed char. In ogni caso la sintassi ammessa è: [signed unsigned] char. (Nel caso che il tipo venga specificato come signed char o unsigned char, questo prevale sul default assunto durante la compilazione.) int Rappresentazione tipica per numeri interi con o senza segno. Per default i numeri interi sono con segno. Sintassi ammessa: [ signed unsigned ] int [ signed unsigned ] short [ int ] 3

[ signed unsigned ] long [ int ] In ogni caso il compilatore deve garantire la relazione: sizeof(short int) sizeof(int) sizeof(long int) float double Il loro impiego è per la rappresentazione di numeri reali in singola precisione (float) o in doppia precisione (double). Molti compilatori supportano anche il tipo long double per la rappresentazione di un numero reale in quadrupla precisione. Sintassi ammessa: float [ long ] double In ogni caso il compilatore deve garantire la relazione: sizeof(float) sizeof(double) sizeof(long double) void Questo tipo specifica un insieme vuoto di valori. Viene utilizzato nella dichiarazione e definizione di funzioni come le funzioni che non ritornano valori (equivalenti alle procedure del Pascal), oppure che non accettano parametri. Altro impiego frequente è nel dichiarare un puntatore generico, senza cioè specificare il tipo a cui esso punta. Primi programmi Primo esempio Creare un file #include <stdio.h> es2-primo.c con il seguente contenuto: int main() { printf("ciao mondo!\n"); return 0; } Compilazione: gcc -o primo es2-primo.c Esecuzione:./primo #include Direttiva per includere una libreria che contiene le definizione di funzioni. Esistono diverse librerie: stdio.h, stdlib.h, math.h,... 4

int main() Il corpo del programma. Tutte le istuzioni che il programma deve eseguire devono essere contenute in questa funzione tra le parentesi graffe. printf(...); Istrizione per la stampa a video. return 0; (numero ZERO) Notifica la fine del programma. Secondo esempio #include <stdio.h> int main() { char car; int n1, n2, totint; float f3, totfloat; printf("inserisci un carattere: "); scanf("%c", &car); printf("\ninserisci un numero intero n1: "); scanf("%i", &n1); printf("\ninserisci un secondo numero intero n2: "); scanf("%i", &n2); printf("\ninserisci un numero decimale n3: "); scanf("%f", &f3); printf("\n\n%c%c %c\n%c\n", car, car, car, car); totint=n1+n2; printf("n1+n2= %d\n\n", totint); totint=n1*n2; printf("n1*n2= %d\n\n", totint); totfloat=n1/n2; printf("n1/n2= %f\n\n", totfloat); totfloat=(float)n1/(float)n2; printf("(float)n1/(float)n2= %f\n\n", totfloat); totfloat=(float)n1/n2; printf("(float)n1/n2= %f\n\n", totfloat); totfloat=n1+f3; printf("n1+f3= %f\n\n", totfloat); } return 0; 5

Terzo esempio #include <stdio.h> int main() { printf("\n%f\n",.1+.1+.1+.1+.1+.1+.1+.1+.1+.1); printf("\n%e\n",.1+.1+.1+.1+.1+.1+.1+.1+.1+.1); printf("\n%f\n",.1+.1+.1+.1+.1+.1+.1+.1+.1+.1-1); printf("\n%e\n",.1+.1+.1+.1+.1+.1+.1+.1+.1+.1-1); } return 0; Perché il programma fornisce risultati diversi? Funzioni printf() La funzione printf e una funzione di output e permette di stampare a video sequenze di caratteri. È utilizzata per informare l utente riguardo alle operazioni da compiere (output) oppure per informarlo dei risultati ottenuti dall esecuzione del programma. La struttura della funzione prevede l utilizzo di specificatori di formato, i quali definiscono il formato dei dati, cioè come si deve interpretarli e come si deve scriverli. Per utilizzare la funzione printf è necessrio includere il file header stdio.h. Formato: printf( stringa,...); stringa è un parametro obbligatorio: può contenere una sequanza di caratteri (una frase) che devono essere inseriti tra virgolette (... ) e alcuni specificatori di formato. Per ogni specificatore di formato si deve definire quale dato deve essere scritto a video. I dati da formattare e scrivere possono essere: costanti, variabili o espressioni. Esempi: printf("ciao Mondo!"); printf("ciao %c%c%c%c%c!", M, o, n, d, o ); printf("prova %d", 16); printf("prova %d", 16+21); printf("prova %d %d", 16, 22); printf(%d, 33); Specificatori di formato: 6

%d %i valori interi relativi in base decimale %f %e valori con virgola in notazione normale ed esponenziale, rispettivamente %g come %f o %e, ma sceglie in modo automatico il modo di scrittura migliore %c carattere %s stringa (si vedrà poi!!) %u interi assoluti in base ottale %x interi assoluti in base esadecimale Sequenze di escape: \n new line \t tabulazione orizzontale \" carattere virgolette scanf() La funzione scanf è una funzione di input e permettere all utente di inserire dei dati. Ha un formato molto simile alla printf: un primo parametro obbligatorio che può comprendere una sequenza di caratteri inseriti tra virgolette e specificatori di formato (questa volta almeno uno è obbligatorio!!). Gli specificatori di formato sono gli stessi visti per la funzione printf. La sintassi della funzione prevede che come destinazione dei dati forniti in input dall utente siano definiti gli indirizzi delle variabili. Esempi: scanf("%c", &car); scanf("%d", &intero); scanf("%f", &floatingpoint); scanf("%c%d", &car, &intero); scanf("%c %d", &car, &intero); NB: le parentesi graffe si ottengono con la combinazione di tasti { ==> AltGr + Shift + [ } ==> AltGr + Shift + ] { ==> AltGr + 7 } ==> AltGr + 0 7