Lezione 8 – A.A. 2016/2017 Prof. Giovanni Acampora

Slides:



Advertisements
Presentazioni simili
Introduzione al linguaggio C
Advertisements

Dichiarazioni e tipi predefiniti nel linguaggio C
Il Linguaggio C.
Corso di Algoritmi e Strutture Dati APPUNTI SUL LINGUAGGIO C
1 Il linguaggio C Precisazioni sull’esperienza in laboratorio.
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
Fondamenti di Informatica - D. Talia - UNICAL 1 Fondamenti di Informatica FONDAMENTI DI INFORMATICA Domenico Talia
1 Elementi DI INFORMATICA Università degli Studi di Cagliari Corso di Laurea in Ingegneria Elettronica Linguaggio C A.A. 2011/2012
Fondamenti di Informatica A - Massimo Bertozzi LE FUNZIONI.
Un semplice programma C /* Programma che stampa un saluto */ #include main() { printf(“Hello World!\n”); }
1 ELEMENTI DI INFORMATICA Università degli Studi di Cagliari Corso di Laurea in Ingegneria Elettrica ed Elettronica Linguaggio C A.A. 2011/2011
NUMERI ed ERRORI MANOLO VENTURIN UNIVERSITÀ DEGLI STUDI DI PADOVA DIP. DI MATEMATICA PURA ED APPLICATA A. A. 2007/2008.
.  I tipi di dati non primitivi sono gli array, le struct e le union.  Gli array sono degli aggregati di variabili dello stesso tipo.  La dichiarazione.
Fondamenti di Informatica - D. Talia - UNICAL 1 Fondamenti di Informatica PROBLEMI E ALGORITMI LINGUAGGIO MACCHINA.
Tipi e Valori Moreno Marzolla
Java: concetti e costrutti base
Introduzione al linguaggio C
Dal problema al processo risolutivo
7. Strutture di controllo Ing. Simona Colucci
Dal problema al processo risolutivo
L’AMBIENTE CODE BLOCKS E L’IO
TIPI PRIMITIVI TIPI STRUTTURATI
JAVA usa una rappresentazione in VIRGOLA MOBILE
Tipo di dato: array Un array è un tipo di dato usato per memorizzare una collezione di variabili dello stesso tipo. Per memorizzare una collezione di 7.
Lezione 9 – A.A. 2016/2017 Prof. Giovanni Acampora
Lezione 5 – A.A. 2016/2017 Prof. Giovanni Acampora
Abbiamo visto Struttura di un programma Commenti
Tipo Carattere Finora abbiamo lavorato con valori numerici.
realizzato dal prof.Conti Riccardo
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Classe III A A.s – 2012 Programma di Informatica
Programmazione e Laboratorio di Programmazione
Programmare.
Strutture di Controllo
Secondo Programma in C.
Struttura di un programma
Programmazione e Laboratorio di Programmazione
Struttura di un programma
Algebra Booleana.
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Sviluppo di un programma
Programmazione e Laboratorio di Programmazione
© 2007 SEI-Società Editrice Internazionale, Apogeo
Definizione di linguaggio di programmazione
Algoritmi e strutture dati APPUNTI SUL LINGUAGGIO C
Sistemi Digitali.
La struttura dei primi programma in C
APPUNTI SUL LINGUAGGIO C Esercizi su File e Alberi Binari
Programmazione e Laboratorio di Programmazione
UNIT 12 INTERFACCIA SERIALE.
Le variabili Tipo Valori ammissibili
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Fondamenti di Informatica
Unità 1 Programmi base.
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Array e Stringhe Linguaggio C.
Programmazione e Laboratorio di Programmazione
PowerShell di Windows PowerShell è un shell che mette a disposizione un prompt interattivo e un interprete a riga di comando , per le sue caratteristiche.
Algoritmi.
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione Procedurale
Transcript della presentazione:

Lezione 8 – A.A. 2016/2017 Prof. Giovanni Acampora Informatica Informatica - A.A. 2016-2017 Lezione 8 – A.A. 2016/2017 Prof. Giovanni Acampora

Introduzione alla programmazione in linguaggio C Ruolo dei linguaggi di programmazione Il primo programma C Tipi semplici in C Operatori principali Operazioni di Input/Output Informatica - A.A. 2016-2017

Linguaggi ad alto e basso livello Come visto la macchina di Von Neumann è capace di eseguire sequenze ben ordinate di istruzioni in linguaggio macchina del tipo: 0110100101000100-0010011000001101-0001… Codice istruzione-indirizzo1…indirizzoN L’istruzione deve essere presente nel set di istruzioni della ALU. Un programma in L.M. è intrinsecamente legato all’hardware per cui è stato realizzato. Il L.M. è un linguaggio di basso livello. I linguaggi che permettono di svincolarsi dalla rappresentazione hardware vengono chiamati linguaggi di alto livello. Informatica - A.A. 2016-2017

Assembler Il primissimo passo nella gerarchia dei linguaggi è il linguaggio assembler. Si tratta di un linguaggio di basso livello che però ammette una rappresentazione “human readable” del programma. Linguaggio Macchina 010001010101001001 001010101000101001 110010101010010010 111001010010100100 Linguaggio Assembler LOAD R1,X LOAD R2,Y ADD R3,R1,R2 STORE R3,Y Il linguaggio assembler è una semplice traduzione del L.M., i comandi assembler ammettono una trascrizione 1 a 1 con quelli della ALU, e sono quindi specifici per ogni CPU. Un assemblatore è quella parte del sistema operativo che trascrive un programma in assembler nel suo corrispondente in L.M. Informatica - A.A. 2016-2017

Linguaggi ad alto livello (I) Agli albori della programmazione (fino alla nascita del FORTRAN alla fine degli anni ’50) l’assembler era l’unico linguaggio esistente. Sebbene l’assembler possa in principio essere utilizzato direttamente per implementare qualsiasi algoritmo esso presenta numerose gravi limitazioni per un utilizzo in progetti complessi: Portabilità Leggibilità Riutilizzabilità Controllo degli errori Questo ha portato alla creazione di linguaggi più vicini al linguaggio naturale e più lontani da quello della macchina…. Informatica - A.A. 2016-2017

Linguaggi ad alto livello (II) Un linguaggio di alto livello NON ammette una semplice traduzione 1 a 1 con le istruzioni della macchina, ma definisce costrutti e comandi specifici del linguaggio e indipendenti dalla macchina su cui devono essere eseguiti. Il processo di traduzione in L.M. (l’unico veramente compreso dal calcolatore) è quindi di gran lunga più complesso che per un programma assembler. Programma in C , C++, FORTRAN, JAVA,… COMPILATORE o INTERPRETE Istruzioni in L.M. Informatica - A.A. 2016-2017

Dall’algoritmo al processo (I) Algoritmo/Pseudocodice Editor o ambiente di sviluppo grafico Programma Sorgente Preprocessore COMPILATORE Analisi lessicale : “ortografia” Analisi sintattica (parsing) : “grammatica/logica” Analisi semantica: “significato” Ottimizzazione, assembling File oggetto Informatica - A.A. 2016-2017

Dall’algoritmo al processo (II) File oggetto Linker + librerie esterne Programma eseguibile Loader Processo in memoria Informatica - A.A. 2016-2017

Compilazione Analisi lessicale (scanning): la sequenza di caratteri del programma sorgente è scomposta in unità fondamentali (lessemi) caratterizzate da un identificativo numerico univoco (token). I simboli non riconosciuti generano un messaggio di errore e la fine della compilazione. Analisi sintattica (parsing): le sequenze di token vengono analizzate per vedere se corrispondono a costrutti sintatticamente definiti all’interno del linguaggio. Le regole per costruire questi costrutti formano la grammatica del linguaggio. Analisi semantica: le sequenze di istruzioni riconosciute dal parser vengono interpretate e si generano le sequenze di codice assembler necessarie per realizzarle. Informatica - A.A. 2016-2017

Caratteristiche Generali del C Il C è un linguaggio:  semplice (~30 keywords)  tipizzato  strutturato  procedurale Basso livello (vicino all’architettura del sistema, il cuore (kernel) del sistema operativo linux e` scritto in C) Grande flessibilità (adatto a piccoli e grandi progetti, adatto per implementare il SW per online ed offline ...) Informatica - A.A. 2016-2017

Il primo programma in C /* Hello world: il mio primo programma C */ Commento su più righe; il compilatore ignorerà tutto quanto compreso fra /* e */. /* Hello world: il mio primo programma C */ #include<stdio.h> int main(){ //inizio del programma printf(“Hello world \n”); //fine del programma return 0; } Direttiva al preprocessore per includere le dichiarazioni delle funzioni standard di I/O Commento su una riga; il compilatore ignorerà i caratteri fra // e la fine del rigo. Simbolo di fine istruzione Informatica - A.A. 2016-2017

Il programma in C un’insieme funzioni e variabili. la funzione speciale main è l’inizio del programma (deve esistere) int main() { int ierr; ..... return ierr; } Informatica - A.A. 2016-2017

Compilazione & linking con il compilatore GNU $ gcc [opzioni] [–lnomelib] [-o file.exe] file.c Cerca le librerie di nome: libnomelib.a in una sequenza di directories di default ed effettua il linking. Esempio: -lm effettua il link con la libreria di funzioni matematiche /usr/lib/libm.a Nome del file sorgente C Genera in output un eseguibile chiamato file.exe invece del default, che è a.out Nome del compilatore: include anche il linker Informatica - A.A. 2016-2017

Esempi Da evitare!!!: $ gcc –Wall primo.c –o primo.c Comando Output File Run command $ gcc –Wall primo.c a.out ./a.out $ gcc –Wall primo.c –o primo primo ./primo $ gcc –Wall matr.c –lm –o matr.exe matr.exe ./matr.exe $ gcc –Wall matr.c –o matr.exe -lm $ gcc –Wall primo.c –o primo.c Da evitare!!!: Informatica - A.A. 2016-2017

Un programma utile Un programma utile Questo valore non può essere cambiato /* Euroconvertitore */ #include<stdio.h> int main(){ float cifra_in_lire, cifra_in_euro; const float conv_fact = 1936.27; printf(“Inserisci la cifra in lire \n”); scanf(“%f”,&cifra_in_lire); cifra_in_euro = cifra_in_lire/conv_fact; printf(“Il controvalore euro e\’ %f \n”, cifra_in_euro); return 0; } Dichiarazione delle variabili. Legge dallo standard Input un tipo float e lo mette nella variabile cifra_in_lire Scrive sullo standard Output un messaggio contenente un tipo float che è il contenuto della variabile cifra_in_euro !!! Attenzione: il C e’ “case sensitive” !!! Informatica - A.A. 2016-2017

Cosa calcola questo programma ? #include <stdio.h> int main() { int i, numVal, value; double sum; scanf("%d", &numVal); sum = 0; for(i = 0; i < numVal; i++) { scanf("%d",&value); sum = sum + value; } printf("\n %lf\n", sum/numVal); return 0; Legge un dato dallo standard input Scrive caratteri nello standard output Informatica - A.A. 2016-2017

/* Calcolo della media di numeri interi */ #include <stdio.h> int main() { int i, numVal, value; double sum; printf(“\nMedia di una sequenza di numeri interi\n"); printf("Quanti interi vuoi introdurre ? "); scanf("%d", &numVal); sum = 0; for(i = 0; i < numVal; i++) { printf(“Entra Valore n.%d: ",i+1); scanf("%d",&value); sum = sum + value; } printf("\n Media = %lf\n", sum/numVal); return 0; Informatica - A.A. 2016-2017

Variabili e tipi Come ampiamente discusso la rappresentazione interna di un numero intero con segno è diversa da quella di un intero senza segno. Ci sono poi almeno tre possibili rappresentazioni dei numeri in virgola mobile secondo lo standard IEEE754: singola doppia e quadrupla precisione rispettivamente con 32, 64 e 128 bit. I caratteri vengono rappresentati tramite il codice ASCII e necessitano di un byte (8 bit). Il tipo di una variabile deve essere sempre dichiarato Il linguaggio C e’ tipizzato Informatica - A.A. 2016-2017

Tipi semplici predefiniti in C (I) Tipi interi: int = intero con segno, 32 bit short = intero con segno, 16 bit long = intero con segno, 64 bit unsigned int = come int ma senza segno unsigned short = come short ma senza segno unsigned long = come long ma senza segno I tipi character sono in realtà interi di 8 bit: char = intero di 1 byte Informatica - A.A. 2016-2017

Tipi semplici predefiniti in C (II) Tipi float: float = virgola mobile, 32 bit double = virgola mobile, 64 bit long double = virgola mobile, 128 bit Il tipo più usato è il double, float è conveniente talvolta per risparmiare memoria in vettori di grandi dimensioni. In aggiunta a questi tipi c’è il tipo speciale void che rappresenta l’assenza di valore (valore vuoto). Vedremo meglio il suo utilizzo in seguito. Informatica - A.A. 2016-2017

Il qualificatore const Il qualificatore const può essere premesso a qualsiasi tipo, indicando che la variabile così definita non verrà modificata nel corso del programma. In tal caso bisogna assegnare il valore iniziale alla variabile in fase di definizione: const int max_iterazioni = 100; const char no = ‘n’; const float pigreco = 3.141592; Informatica - A.A. 2016-2017

Sommare patate con cipolle… Nelle operazioni con tipi diversi, di norma un tipo inferiore viene “promosso” al tipo superiore secondo la scala: Char, short => int =>long => float =>double =>long double Esempio: Se i è un int e f è un float i viene promosso a float e il risultato dell’operazione i + f è a sua volta un float Bisogna ovviamente fare molta attenzione alle conversioni in cui si perde informazione, dove può avvenire un troncamento, come nel caso i=x con i int e x float. Informatica - A.A. 2016-2017

Operatori aritmetici, relazionali e logici + - * / % Operatore modulo: x%y è il resto della divisione di x per y e quindi vale zero se x è multiplo di y Operatori relazionali: > >= < <= == != Operatori di uguaglianza e disuguaglianza: x = = y è vera se x è uguale a y x != y è vera se x è diverso da y Operatori logici: && || AND logico OR logico Informatica - A.A. 2016-2017

Operatori di incremento e decremento Spesso in un programma occorre incrementare o decrementare di 1 una variabile. Il C dispone di particolari operatori dedicati a ciò, che sono: ++ -- Se usati rispettivamente prima o dopo di una variabile ne determinano il preincremento (variabile prima incrementata e poi utilizzata) o il postincremento (variabile prima utilizzata e poi incrementata). Informatica - A.A. 2016-2017

Esempi n = 5; k = n++; n = 5; k = ++n; n = 5; n = 5; n++; ++n; Da ora in poi k è uguale a 5 ed n è uguale a 6 n = 5; k = ++n; Da ora in poi k è uguale a 6 ed n è uguale a 6 n = 5; n++; n = 5; ++n; Da ora in poi n è uguale a 6 Informatica - A.A. 2016-2017

Operatori di assegnamento Un’altra particolare classe di operatori del C permette di scrivere in forma compatta le operazioni in cui una variabile viene modificata a partire da sé stessa. Ad esempio: x += 2 è equivalente a x = x + 2 x -= 3 è equivalente a x = x - 3 y *= x è equivalente a y = y*x y *= x + 1 è equivalente a y = y*(x + 1) z %= x è equivalente a z = z%x Informatica - A.A. 2016-2017

Funzione printf (I) printf e’ una funzione della libreria stdio che permette ad un programma di passare informazioni allo standard output. Il formato con cui sono presentati i numeri e le stringhe di caratteri e’ definito da un insieme di regole e simboli di formattazione. printf(formato, arg1, arg2….); printf(“%f %f %f %f”, x, y, x*y, x/y); formato : stringa di caratteri che contiene le informazioni per la formattazione, i descrittori del formato arg1,arg2..: nomi di variabili di cui si vuole stampare il contenuto Informatica - A.A. 2016-2017

Funzione printf (II) La stringa di controllo e’ costituita da caratteri ordinari e da direttive per il controllo del formato. Il descrittore del formato ha la seguente forma: %[-][ampiezza][.precisione]tipo - allineamento del campo a sinistra (default a destra) ampiezza il numero totale di campi di carattere che il dato occupera’ (e’ necessario avere una stima dei valori che la variabile puo’ assumere) ; printf(“%13.6f %15.6e %f”, x, y, x/y); Informatica - A.A. 2016-2017

Funzione printf (III) precisione il numero max di caratteri da stampare per una stringa; il minimo numero di cifre da stampare per un intero il numero di cifre decimali per un numero floating point d per dati di tipo int; f per dati di tipo float; lf per dati di tipo double; c per dati di tipo char; s per le stringhe e,E,g per dati di tipo double con notazione scientifica; tipo Informatica - A.A. 2016-2017

Funzione printf (III) Esempi: printf(“%f %f %f %f”, x, y, x*y, x/y); printf(“%13.6f %15.6e %f”, x, y, x/y); printf(“\n Index = %d Value = %f”, i, item); printf(“Client%s owns %d points\n”, Name,PN); p.s.: Usare “man 3 printf” per ulteriori dettagli Informatica - A.A. 2016-2017

Funzione scanf Esempi: Non dimenticare !! scanf e’ una funzione della libreria stdio che permette ad un programma di ottenere informazioni dallo standard input. Esempi: scanf(“%f %f %f %f”, &x, &y, &z, &time); Non dimenticare !! scanf(“%d %d %f”, &i, &j, &v); p.s.: Usare “man 3 scanf” per ulteriori dettagli Informatica - A.A. 2016-2017

Esempio: area di un cerchio /* programma per il calcolo dell’area di un cerchio */ #include <stdio.h> int main(){ float raggio, area; printf(“\n Dammi il raggio [cm]: ”); scanf(“%f”,&raggio); area = 3.14159 * raggio * raggio; printf(“\n Area = %f ”, area); return 0; } Informatica - A.A. 2016-2017

Sequenze di Escape Escape Sequence Character ASCII Value \a \b \f \n Sono delle combinazioni di caratteri composte da \ (backslash) seguita da uno o piu’ caratteri. Sono di solito usate per specificare alcune particolari funzioni di terminali e stampanti Escape Sequence Character ASCII Value \a \b \f \n \r \t \v \’ \\ Alert/bell Backspace Formfeed Newline Carriage return Horizontal tab Double quotation Single quotation Backslash 7 8 12 10 13 9 11 34 92 Informatica - A.A. 2016-2017