Presentazione di PowerPoint - Dipartimento di …bloisi/didattica/ingegneriaClinica...C. Corso...

50
Corso di Laboratorio di Informatica Ingegneria Clinica – BCLR Unità 1 Introduzione al C Domenico Daniele Bloisi

Transcript of Presentazione di PowerPoint - Dipartimento di …bloisi/didattica/ingegneriaClinica...C. Corso...

Corso di Laboratorio di InformaticaIngegneria Clinica – BCLR

Unità 1

Introduzione al C

Domenico Daniele Bloisi

Docente

Ing. Domenico Daniele Bloisi, PhDRicercatore

Dipartimento di Ingegneria Informatica, Automaticae Gestionale “Antonio Ruberti”Via Ariosto 25(adiacente Piazza Dante,

A fermate Manzoni, Vittorio Emanuele, Tram 3 fermata via Labicana)

Email: [email protected]

Home page: http://www.dis.uniroma1.it/~bloisi2013/2014Introduzione al C

Unità 1Pagina 2

Ricevimento

In aula, subito dopo le lezioni Su appuntamento (tramite invio di una email) presso: Dipartimento di Ingegneria Informatica, Automatica e Gestionale Antonio Ruberti, via Ariosto 25 - II piano, stanza A209

Si invitano gli studenti a controllare regolarmente la bacheca degli avvisihttp://www.dis.uniroma1.it/~bloisi/didattica/labinf1314.html#Avvisi

2013/2014Introduzione al CUnità 1

Pagina 3

Orari

Lunedì 12.00 – 13.30 Aula 15, via Scarpa 14

Lunedì 14.00 – 17.15Aula 15, Laboratorio Didattico via Tiburtina 205

Martedì 14.00 – 15.30 Aula 16, via Scarpa 14

Mercoledì 12.00 – 13.30 Aula 15, via Scarpa 14

2013/2014Introduzione al CUnità 1

Pagina 4

Programma PreliminareLaboratorio di Informatica

Concetti introduttivi. Algoritmo, variabili, identificatori simbolici, parole chiave, standard input e standard output, esecuzione di programmi C su macchine reali, compilazione, ambiente gcc.

Struttura sintattica di un programma C. Istruzione di assegnamento, istruzioni di ingresso/uscita, istruzioni composte, condizioni, strutture iterative (for, while, do...while). Parte dichiarativa, dichiarazione di variabili, dichiarazione di costanti, direttive del preprocessore, istruzioni printf e scanf con relative specifiche di conversione.

Tipo di dato. Tipi semplici predefiniti del C, tipo int, tipo float, tipo char, valutazione delle espressioni booleane. Puntatori, aritmetica dei puntatori, operatori aritmetici, operatori logici, operatori di incremento/decremento.

Funzioni. Il concetto di sottoprogramma, definizione delle funzioni, parametri formali, passaggio di parametri per valore e per riferimento, i blocchi, visibilità (scope) degli identificatori, ciclo di vita delle variabili, passaggio di parametri di tipo array.

Strutture dati dinamiche. Allocazione e cancellazione della memoria: malloc, e free, allocazione dinamica di array

Gestione dei File in C. Apertura di un file in C, lettura e scrittura formattata su file (fprintf,fscanf), lettura e scrittura di caratteri e righe su file, chiusura di un file, gestione degli errori e fine file.

2013/2014Introduzione al CUnità 1

Pagina 5

Materiale didattico

2013/2014Introduzione al CUnità 1

Pagina 6

Libro di testo:P. J. Dietel, H. M. DietelC. Corso completo di programmazione4^ ed., Apogeo, 2010.

In alternativa, può essere utilizzato un qualsiasi altro testo sul C.

Diario delle lezioni: http://www.dis.uniroma1.it/~bloisi/didattica/labinf1314.html#Diario

Modalità di esame

2013/2014Introduzione al CUnità 1

Pagina 7

L'esame ha la durata di 120 minuti e prevede due parti:

1. Prima parte AL CALCOLATORE, in cui lo studente dovrà svolgere 2 esercizi di programmazione in C, di tipologia simile a quelli affrontati durante le esercitazioni (max. 16 punti);

2. Seconda parte SU CARTA, in cui lo studente dovrà rispondere a 2 domande su argomenti trattati durante il corso (max. 14 punti).

Maggiori dettagli:

http://www.dis.uniroma1.it/~bloisi/didattica/labinf1314.html#Esami

9 unità didattiche

Unità 1: introduzione al linguaggio C e funzione mainUnità 2: variabili e tipi di datoUnità 3: istruzioni condizionaliUnità 4: istruzioni di cicloUnità 5: funzioni e ricorsioneUnità 6: puntatoriUnità 7: array e matriciUnità 8: stringhe e fileUnità 9: direttive del preprocessore

2013/2014Introduzione al CUnità 1

Pagina 8

Unità didattiche

Obiettivi del corso

• Imparare i concetti di algoritmo e programma

• Imparare a risolvere problemi in modo algoritmico

• Imparare a tradurre un algoritmo in programma

• Imparare a scrivere programmi in linguaggio C

2013/2014Introduzione al CUnità 1

Pagina 9

Sommario – Unità 1: Introduzione

• Architettura dei calcolatori• Linguaggi di programmazione• Programmi = dati + operazioni• Primo programma C• Scrittura, compilazione, esecuzione di un programma• Errori nei programmi• Invocazione di funzioni

2013/2014Introduzione al CUnità 1

Pagina 10

Come è fatto un calcolatore?

• Hardware– Processore– Memoria– Periferiche

• Funzionamento– Esegue istruzioni elementari– Esegue istruzioni molto velocemente– Deve essere programmato: il software, cioè i programmi, caratterizzano il compito che esso svolge

2013/2014Introduzione al CUnità 1

Pagina 11

Componenti di un calcolatore

2013/2014Introduzione al CUnità 1

Pagina 12

Schema di un calcolatore

Tastiera,Mouse,Stampante,Modem

bus

Porte I/O

CPU

Controllerdischi

Memoria

Schedavideo

Schedaaudio

Schedarete

Hard disk,CD/ROM,DVD

Monitor

Casse,Microfono

Altro PC,Internet

2013/2014Introduzione al CUnità 1

Pagina 13

Architettura di Von Neumann

2013/2014Introduzione al CUnità 1

Pagina 14

http://it.wikipedia.org/wiki/Architettura_di_von_Neumann

Linguaggi di programmazione

• Linguaggio macchina 21 40 16 100 163 240

• Linguaggio assemblativo (Assembler) iload intRate bipush 100 if icmpgt intError

• Linguaggi ad alto livello if (intRate > 100) ...

2013/2014Introduzione al CUnità 1

Pagina 15

Gerarchia di astrazioni

6 programma applicativo

5 linguaggio di programmazione

4 Linguaggio assembly (assemblativo)

3 Nucleo di sistema operativo

2 Linguaggio macchina

1 Microprogramma

0 Logica digitale

livello

basso

alto

2013/2014Introduzione al CUnità 1

Pagina 16

Linguaggio di Programmazione

Insieme di istruzioni che indicano al calcolatore cosa fare.

Le istruzioni hanno una sintassi e una semantica ben determinata.

Esempi sono il C (studiato in questo corso), il Pascal, il Java, etc.

La traduzione verso il basso avviene tramite un compilatore.

2013/2014Introduzione al CUnità 1

Pagina 17

• SINTASSI − L'insieme delle regole che specificano come scrivere un programma formalmente corretto. − Come in italiano, è possibile scrivere un testo formalmente corretto, ma senza alcun significato.

• SEMANTICA − Regole per attribuire un significato alle istruzioni e alla loro composizione, cioè ai programmi. − Analogamente, l'italiano assegna un significato alle parole e una logica ai costrutti.

Sintassi e Semantica

2013/2014Introduzione al CUnità 1

Pagina 18

Programma

I programmi caratterizzano i compiti che il calcolatore svolge.

Un programma (indipendentemente dal linguaggio in cui è scritto) è costituito da due aspetti fondamentali:

• DATI rappresentazione delle informazioni relative al dominio di interesse.

• OPERAZIONI manipolazioni della rappresentazione che realizzano le funzionalità richieste.

2013/2014Introduzione al CUnità 1

Pagina 19

Rappresentazione delle informazioni

Le informazioni si rappresentano mediante tipi di dato.

Un tipo di dato raccoglie informazioni dello stesso tipo (ad esempio, i numeri interi, i caratteri, le stringhe, ecc.).

Nei linguaggi di programmazione ad alto livello esistono tipi di dato predefiniti ed è possibile definire tipi per rappresentare informazioni di interesse specifiche per un’applicazione (esempio, autovetture, persone, ecc.).

2013/2014Introduzione al CUnità 1

Pagina 20

Classi di Dati

Possono essere distinte due classi di dati

1. Semplici o primitivi• Es. numeri interi, numeri reali, caratteri, …• Dipendono dal linguaggio

2. Complessi, definiti a partire dai dati primitivi• Es. numeri immaginari, matrici, …• Possono sia dipendere dal linguaggio sia essere creati dal programmatore

2013/2014Introduzione al CUnità 1

Pagina 21

Realizzazione delle operazioni

In genere, si realizza un’operazione quando deve essere risolto un problema.

Problema (Specifica): dato un nominativo, trovare il corrispondente numero telefonico su un elencotelefonico.

Per delegare ad un calcolatore la soluzione di un problema è necessario individuare un algoritmo che risolva il problema.

2013/2014Introduzione al CUnità 1

Pagina 22

Algoritmo: definizione

AlgoritmoAlgoritmo

Procedimento risolutivo attraverso il quale otteniamo la soluzione ad un problema, ovvero un insieme di passi che, eseguiti in ordine, permettono di calcolare i risultati a partire dalle informazioni date in ingresso.

Informazioni in ingresso

INPUT

Sequenzaordinata di passi

ALGORITMO

Risultati

OUTPUT

2013/2014Introduzione al CUnità 1

Pagina 23

Algoritmo: proprietà

Un algoritmo è caratterizzato da:

• non ambiguità: le istruzioni devono essere univocamente interpretabili dall’esecutore

• eseguibilità: ogni istruzione deve poter essere eseguita (in tempo finito) con le risorse a disposizione

• finitezza: l’esecuzione dell’algoritmo deve terminare in tempo finito per ogni insieme di dati in ingresso

2013/2014Introduzione al CUnità 1

Pagina 24

Algoritmo: esempio

Problema (Specifica): dato un nominativo, trovare il corrispondente numero telefonico su un elenco telefonico.

Algoritmo: scandire sequenzialmente i nominativi presenti nell’elenco fino a trovare quello cercato, quindi restituire il numero di telefono associato al nominativo.

È un buon algoritmo per risolvere il problema?

2013/2014Introduzione al CUnità 1

Pagina 25

Codifica

Una volta individuato l’algoritmo, questo va codificato nel linguaggio di programmazione prescelto.

2013/2014Introduzione al CUnità 1

Pagina 26

Compilazione

Un compilatore è un programma traduttore, impiegato per produrre codice oggetto (in linguaggio macchina) a partire da codice sorgente scritto in un dato linguaggio di programmazione di livello più alto.

Questo processo si chiama compilazione.

2013/2014Introduzione al CUnità 1

Pagina 27

Paradigmi di Programmazione (1/2)Esistono differenti paradigmi di programmazione che si distinguono per l’enfasi che pongono sui due aspetti fondamentali:dati (oggetti) e operazioni.

I paradigmi di programmazione principali sono:

1. IMPERATIVO: enfasi sulle operazioni intese come azioni, comandi, istruzioni che cambiano lo stato dell’elaborazione; gli oggetti sono funzionali alla elaborazione

2. FUNZIONALE: enfasi sulle operazioni intese come funzioni che calcolano risultati; gli oggetti sono funzionali alla elaborazione

3. ORIENTATO AGLI OGGETTI: enfasi sugli oggetti che complessivamente rappresentano il dominio di interesse; le operazioni sono funzionali alla rappresentazione

2013/2014Introduzione al CUnità 1

Pagina 28

Paradigmi di Programmazione (2/2)

In genere, in un programma sono utilizzati più paradigmi di programmazione.

Quindi i linguaggi di programmazione forniscono supporto (in misura diversa) per i vari paradigmi.

2013/2014Introduzione al CUnità 1

Pagina 29

Il linguaggio C

Il C è un linguaggio di programmazionead alto livello, che supporta i paradigmiimperativo e funzionale.

Assembler C Lisp “puro”Lisp

Linguaggioimperativo puro

Linguaggiofunzionale puro

2013/2014Introduzione al CUnità 1

Pagina 30

Mini storia del C• Il C nasce dall'idea di avere un linguaggio ad alto livello che permettesse di scrivere in modo efficiente un sistema operativo

• Ken Thompson nel 1969 si ispirò a due linguaggi esistenti CPL e BCPL e creò il linguaggio "B", ancora troppo poco efficiente per scrivere un sistema operativo

• Un suo collaboratore, Dennis Ritchie, nel 1972, migliorò il "B" tramite vari passaggi, arrivando ad una nuova versione: "C", con il quale fu quasi interamente riscritto il sistema operativo UNIX per il PDP-11, con tempi inaspettatamente brevi

• Il successo ottenuto spinse Thompson, Ritchie e Kernighan ad utilizzare il C per scrivere il sistema operativo di altre Macchine. Da quel momento C ed UNIX rimangono legati indissolubilmente

• Il C subisce un lungo processo di standardizzazione che si concretizza nello standard: ISO/IEC 9899-1990

2013/2014Introduzione al CUnità 1

Pagina 31

http://cm.bell-labs.com/cm/cs/cbook/

Perché il C?

• Molto vicino alla struttura di un calcolatore

• Può maneggiare attività di basso livello (Esplicita manipolazione di byte ed indirizzi)

• Ha strutture di alto livello

• Punto di partenza per linguaggi object oriented, quali C++ e Java

• Permette di generare programmi molto efficienti

2013/2014Introduzione al CUnità 1

Pagina 32

Iniziamo a programmare

Cosa occorre:

Carta e Penna (per preparare l'algoritmo)

Un Editor di Testo

Un compilatore

Ambiente diSviluppoIntegrato

IDE

(per codificare l'algoritmo)

2013/2014Introduzione al CUnità 1

Pagina 33

Configurazione supportata durante il corso

Editor di testo: Notepad++ (http://notepad-plus-plus.org/) − Editor guidato dalla sintassi (colorazione, indentazione, etc...) − Oltre al C supporta molti altri formati

Compilatore: gcc − Disponibile su diverse piattaforme (Windows, Linux, Mac) − Istruzioni per l’installazione

http://www.dis.uniroma1.it/~bloisi/didattica/labinf1314.html#Software

2013/2014Introduzione al CUnità 1

Pagina 34

Il primo programma C

#include <stdio.h>

int main() { printf("Il mio primo programma C."); return 0;}

2013/2014Introduzione al CUnità 1

Pagina 35

Istruzioni del programma (1/2)

Il programma è costituito da una serie di istruzioni o direttive per il compilatore.

Le istruzioni hanno il seguente significato:

#include <stdio.h>

direttiva per includere la definizione di funzioni e variabili predefinite nel linguaggio e relativi e alla gestione dell’input/output (I/O).

int main() {...}

definizione della funzione main che racchiude il programma principale. Ogni programma C deve contenere una e una sola funzione main().

2013/2014Introduzione al CUnità 1

Pagina 36

Istruzioni del programma (2/2)

printf("Il mio primo programma C.");

istruzione di stampa su video della frase

Il mio primo programma C.

L'istruzione printf è una funzione C che visualizza a schermo ciò che viene passato ad essa come argomento.

return 0;

istruzione che termina l’esecuzione della funzione main e restituisce il risultato 0.

Nota: il C è case-sensitive, cioè distingue tra caratteri minuscoli e caratteri maiuscoli.es. printf è diverso da Printf

2013/2014Introduzione al CUnità 1

Pagina 37

Scrivere, compilare ed eseguire un programma C

1. SCRITTURA − Si scrive il programma usando un editor di testo − Il programma viene salvato sul computer in un file2. COMPILAZIONE − Il file contenete il programma viene consegnato al compilatore − Il compilatore, se non rileva errori sintattici, genera un file eseguibile contenete la traduzione − Altrimenti segnala gli errori e termina3. ESECUZIONE − Il file eseguibile viene mandato in esecuzione − Anche più volte, senza doverlo ricompilare

2013/2014Introduzione al CUnità 1

Pagina 38

Scrittura del programma

La preparazione del testo di un programma comporta la scrittura di un file di testo contenente il programma. Per un programma C il nome del file deve essere: <nome>.c

dove:• <nome> denota il nome del file contenente il testo del programma, ad esempio primo.c• c è l’estensione che indica che il file contiene un programma C.

La scrittura di un programma può essere effettuata con qualsiasi programma che consenta la scrittura di un testo (editor).Es. Edit, Notepad, Vim, Notepad++, Emacs,...Attenzione: Il formato di salvataggio deve essere quello di testo non formattato (ad esempio, un file doc non va bene!)

2013/2014Introduzione al CUnità 1

Pagina 39

2013/2014Introduzione al CUnità 1

Pagina 40

Scrittura in Notepad++

È consigliabile rendere visibile l'estensione dei file nel sistema operativo, per evitare di creare file del tipo “primo.c.txt”

L’interazione con il compilatore gcc avviene dando il comando in modo diretto, cioè non tramite l’interfaccia grafica

Compilazione del Programma

2013/2014Introduzione al CUnità 1

Pagina 41

Esecuzione del programma

2013/2014Introduzione al CUnità 1

Pagina 42

Compilazione ed Esecuzione

Se il processo di compilazione è corretto, il compilatore non stampa alcuna informazione, altrimenti stampa dei messaggi di errore.

2013/2014Introduzione al CUnità 1

Pagina 43

Il ciclo Edita-Compila-Verifica

beginScrittura

programmaCompilazioneprogramma

Errori dicompilazione

?

Verificaprogramma

Errori diesecuzione

?

end

SI

NOSI

NO

2013/2014Introduzione al CUnità 1

Pagina 44

Secondo Programma in C

#include <stdio.h>

int main() { printf("Il mio secondo programma C\n"); printf("... e ne seguiranno molti.\n"); return 0;}

La sequenza di due istruzioni comporta l’esecuzione delle due istruzioni nell’ordine in cui sono scritte.

\n indica di andare a capo (new line).

2013/2014Introduzione al CUnità 1

Pagina 45

Errori

Il seguente programma contiene diversi errori.

#include <stdio.h>int main () { printf("I miei primi errori in C...\n") Printf("...e non saranno gli ultm!!!\n"); return 0;}

Tipi di errori:– Sintassi– Semantica– Logica

2013/2014Introduzione al CUnità 1

Pagina 46

Errori di Sintassi

Errori dovuti alla violazione delle regole sintattiche del linguaggio.

Esempio:printf("I miei primi errori in C...\n")manca il ’;’

Questi errori sono individuati dal compilatore.>gcc -o errori errori.cerrori.c: In function 'main':errori.c:18:4: error: expected ';' before 'Printf'>

2013/2014Introduzione al CUnità 1

Pagina 47

Errori Semantici

Errori dovuti alla impossibilità di assegnare un significato ad un’istruzione.

Esempio:Printf("...e non saranno gli ultm!!!\n");errore di battitura nella funzione printf

Questi errori a volte sono individuati dal compilatore (errori di semantica statica), altre volte sono individuati a tempo di esecuzione (errori di semantica dinamica).

>gcc -o errori errori.c>errori.c: undefined reference to ‘Printf’>

2013/2014Introduzione al CUnità 1

Pagina 48

Errori Logici

Errori relativi alle funzionalità realizzate dal programma (differenti da quelle desiderate).Esempio:"...e non saranno gli ultm!!!",la stringa da stampare non è corretta.

Questi errori possono essere individuati solo analizzando o eseguendo test di verifica del programma.

>gcc -o errori errori.c>erroriI miei primi errori in C......e non saranno gli ultm!!!>

2013/2014Introduzione al CUnità 1

Pagina 49

Programma Corretto

#include <stdio.h>

int main () { printf("I miei primi errori in C...\n"); printf("...e non saranno gli ultimi!!!\n"); return 0;}

2013/2014Introduzione al CUnità 1

Pagina 50