Informatica 2 – modulo C · – B.W. Kernighan e D.M. Ritchie Linguaggio C, II Edizione, Jackson...

16
Programmazione C Massimo Callisto De Donato [email protected] www.cs.unicam.it/massimo.callisto LEZIONE 0 - INTRODUZIONE Università degli studi di Camerino Scuola di scienze e tecnologia - Sezione Informatica A.A. 2011/12

Transcript of Informatica 2 – modulo C · – B.W. Kernighan e D.M. Ritchie Linguaggio C, II Edizione, Jackson...

Page 1: Informatica 2 – modulo C · – B.W. Kernighan e D.M. Ritchie Linguaggio C, II Edizione, Jackson Libri, 1989. – H. Schildt C Guida Completa Mc-Graw-Hill Libri Italia, 1995. –

Programmazione C Massimo Callisto De Donato

[email protected]

www.cs.unicam.it/massimo.callisto

LEZIONE 0 - INTRODUZIONE

Università degli studi di Camerino Scuola di scienze e tecnologia - Sezione Informatica

A.A. 2011/12

Page 2: Informatica 2 – modulo C · – B.W. Kernighan e D.M. Ritchie Linguaggio C, II Edizione, Jackson Libri, 1989. – H. Schildt C Guida Completa Mc-Graw-Hill Libri Italia, 1995. –

Obbiettivi del corso

• Conoscere il linguaggio di programmazione C

• Programmare in linguaggio C

• Padroneggiare gli elementi base del linguaggio

• Conoscenze base da poter applicare in altri linguaggi di programmazione (e.g. C++, JAVA)

• Introduzione ai concetti più avanzati del linguaggio C

Page 3: Informatica 2 – modulo C · – B.W. Kernighan e D.M. Ritchie Linguaggio C, II Edizione, Jackson Libri, 1989. – H. Schildt C Guida Completa Mc-Graw-Hill Libri Italia, 1995. –

Programma nel dettaglio • Introduzione ai linguaggi di programmazione; principi fondamentali;

introduzione storica. Linguaggi funzionali, dichiarativi e logici.

• Organizzazione di un programma in C.

• Tipi, operatori ed espressioni: variabili e costanti; dichiarazioni; operatori aritmetici e logici; conversioni di tipo; espressioni condizionali.

• Strutture di controllo: if-else, else-if, switch-case; cicli for, while e do-while. Array monodimensionali e multidimensionali.

• Funzioni, passaggio di parametri; variabili esterne e static; regole di scope; header file; ricorsione.

• Puntatori e argomenti correlati.

• Strutture; vettori di strutture; puntatori a strutture; strutture ricorsive.

• Input ed output (cenni): standard; accesso a file; lettura e scrittura su file.

Page 4: Informatica 2 – modulo C · – B.W. Kernighan e D.M. Ritchie Linguaggio C, II Edizione, Jackson Libri, 1989. – H. Schildt C Guida Completa Mc-Graw-Hill Libri Italia, 1995. –

Materiale ed esame finale • Testi di riferimento proposti

– B.W. Kernighan e D.M. Ritchie Linguaggio C, II Edizione, Jackson Libri, 1989. – H. Schildt C Guida Completa Mc-Graw-Hill Libri Italia, 1995. – Bellini, A. Guidi Linguaggio C Mc-Graw-Hill Libri Italia, 1999.

• Modalità di esame

– Progetto didattico utilizzando i concetti visti a lezione – Da consegnare qualche giorno prima dell’appello – Da discutere in sede di esame insieme a domande di teoria.

• Per lo sviluppo:

– Code::Blocks per C/C++ (www.codeblocks.org/) – Bloodshed Dev-C++ (www.bloodshed.net/devcpp.html)

• Informazioni aggiuntive – @ [email protected] – www.cs.unicam.it/massimo.callisto – Aula dottorandi del dipartimento di Informatica

Page 5: Informatica 2 – modulo C · – B.W. Kernighan e D.M. Ritchie Linguaggio C, II Edizione, Jackson Libri, 1989. – H. Schildt C Guida Completa Mc-Graw-Hill Libri Italia, 1995. –

I linguaggi di programmazione

• Un linguaggio di programmazione è un linguaggio artificiale progettato per impartire delle istruzioni ad un elaboratore

• Un programma è un algoritmo codificato usando un linguaggio di programmazione (e.s. C).

• Ogni linguaggio di programmazione ha:

– una precisa sintassi: • definisce quali sono le frasi legali del linguaggio

– precisa semantica: • definisce il significato di ogni fase

sintatticamente corrette

Page 6: Informatica 2 – modulo C · – B.W. Kernighan e D.M. Ritchie Linguaggio C, II Edizione, Jackson Libri, 1989. – H. Schildt C Guida Completa Mc-Graw-Hill Libri Italia, 1995. –

Evoluzione

• Nel corso degli anni sono stati sviluppati un certo numero di linguaggi di programmazione differenti

• La scelta dipende dal dominio applicativo e dal tipo di problema che vogliamo risolvere

Page 7: Informatica 2 – modulo C · – B.W. Kernighan e D.M. Ritchie Linguaggio C, II Edizione, Jackson Libri, 1989. – H. Schildt C Guida Completa Mc-Graw-Hill Libri Italia, 1995. –

Livelli di astrazione

• Un calcolatore può essere visto a diversi livelli di astrazione.

• Ad ogni livello usiamo un modo specifico per comunicare con il calcolatore.

Page 8: Informatica 2 – modulo C · – B.W. Kernighan e D.M. Ritchie Linguaggio C, II Edizione, Jackson Libri, 1989. – H. Schildt C Guida Completa Mc-Graw-Hill Libri Italia, 1995. –

Livelli di astrazione

• Un calcolatore può essere visto a diversi livelli di astrazione.

• Ad ogni livello usiamo un modo specifico per comunicare con il calcolatore.

Hardware

E costituita da flusso input/output di dati

• Una memoria centrale in cui vengono

memorizzati sia i programmi che i dati

• Un agente di calcolo, detto processore o

CPU (Central Process Unit) che

esegua le azioni programmate sui dati iniziali

Page 9: Informatica 2 – modulo C · – B.W. Kernighan e D.M. Ritchie Linguaggio C, II Edizione, Jackson Libri, 1989. – H. Schildt C Guida Completa Mc-Graw-Hill Libri Italia, 1995. –

Livelli di astrazione

• Un calcolatore può essere visto a diversi livelli di astrazione.

• Ad ogni livello usiamo un modo specifico per comunicare con il calcolatore.

Linguaggio macchina

• Può essere interpretato ed eseguito senza “mediazioni”

• Corrispondono ad operazioni direttamente eseguibili dall’hardware

• Sono strettamente correlate all’architettura dell’elaboratore

• Sono sequenze binarie con cui vengono codificate sia le istruzione che i loro operandi

Page 10: Informatica 2 – modulo C · – B.W. Kernighan e D.M. Ritchie Linguaggio C, II Edizione, Jackson Libri, 1989. – H. Schildt C Guida Completa Mc-Graw-Hill Libri Italia, 1995. –

Livelli di astrazione

• Un calcolatore può essere visto a diversi livelli di astrazione.

• Ad ogni livello usiamo un modo specifico per comunicare con il calcolatore.

Linguaggio assembler

• Costituisce un primo parziale passo verso la semplificazione della programmazione

• Le istruzioni binarie con dei codici mnemonici più facilmente comprensibili dall’uomo

Page 11: Informatica 2 – modulo C · – B.W. Kernighan e D.M. Ritchie Linguaggio C, II Edizione, Jackson Libri, 1989. – H. Schildt C Guida Completa Mc-Graw-Hill Libri Italia, 1995. –

Livelli di astrazione

• Un calcolatore può essere visto a diversi livelli di astrazione.

• Ad ogni livello usiamo un modo specifico per comunicare con il calcolatore.

Linguaggi di alto livello

• Sono più simili ai linguaggi naturali rispetto alle sequenze di 0 e 1 del linguaggio macchina, ma anche rispetto al linguaggio assembler

• Consentono l’utilizzo di simboli matematici e parole chiave tipiche dei linguaggio naturale

Page 12: Informatica 2 – modulo C · – B.W. Kernighan e D.M. Ritchie Linguaggio C, II Edizione, Jackson Libri, 1989. – H. Schildt C Guida Completa Mc-Graw-Hill Libri Italia, 1995. –

Linguaggio di alto livello • L’aumento della complessità dei programmi ha reso necessario

sviluppare linguaggi di programmazione più semplici dei linguaggi assembler.

• Questi permettono di usare costrutti allo scopo di:

1. Astrazione dalla macchina di riferimento

2. Semplificazione della scrittura dei programmi

3. Similarità con il ragionamento umano

• Appositi software - compilatori - provvedono:

a) Tradurre le istruzioni dei un linguaggio di alto livello (codice sorgente)

b) in equivalente codice eseguibile

c) dalla macchina di riferimento (codice oggetto)

• Sono meno efficienti rispetto al linguaggio assembler e al linguaggio macchina

Page 13: Informatica 2 – modulo C · – B.W. Kernighan e D.M. Ritchie Linguaggio C, II Edizione, Jackson Libri, 1989. – H. Schildt C Guida Completa Mc-Graw-Hill Libri Italia, 1995. –

Tipologie • I linguaggi di programmazione possono essere ulteriormente classificati in

base al loro paradigma di programmazione.

• Ci riferiamo alla metodologia con cui vengono specificati i programmi.

• Non ci riferiamo ai diversi linguaggi di programmazione (i costrutti ed i modi sono spesso simili) ma a come viene organizzata la programmazione.

• I principali paradigmi di programmazione:

– Programmazione imperativa (e.g. C)

– Ad oggetti (e.g. C++/Java)

– Funzionale (e.g. Lisp).

Page 14: Informatica 2 – modulo C · – B.W. Kernighan e D.M. Ritchie Linguaggio C, II Edizione, Jackson Libri, 1989. – H. Schildt C Guida Completa Mc-Graw-Hill Libri Italia, 1995. –

Programmazione imperativa • Un programma è una serie di istruzioni da eseguire in sequenza.

• Costrutti dedicati permettono di alterare tale flusso (di esecuzione): – if-then-else

– cicli

– procedure e funzioni con passaggio di parametri

• Il programmatore deve: – Definire le strutture dati

– Gli algoritmi che operano su di essi

• L’esecuzione non è altro che l’esecuzione sulla CPU delle sequenze di istruzioni.

• Esempi: Fortran, Cobol, Pascal, C.

Page 15: Informatica 2 – modulo C · – B.W. Kernighan e D.M. Ritchie Linguaggio C, II Edizione, Jackson Libri, 1989. – H. Schildt C Guida Completa Mc-Graw-Hill Libri Italia, 1995. –

Storia del linguaggio C • Sviluppato nel 1973 (AT&T Bell Labs) da Dennis M. Ritchie. Nel 1978 venne

formalizzato insieme a B. W. Kernighan.

• Caratteristiche fondamentali: intuitivo, flessibile, estremamente potente ed efficacie nel codice macchina prodotto.

• Tra i linguaggi di programmazione ad alto livello è il più potente e veloce.

• Presto uscirono compilatori per il linguaggio C per tutte le nuove architetture hardware.

• Nel 1983, l’American National Standards Institute (ANSI) definì uno standard per il linguaggio C.

• La versione finale dello standard C (1989) venne tradotta nel 1999 come standard ISO C Standard ANSI/ISO.

Page 16: Informatica 2 – modulo C · – B.W. Kernighan e D.M. Ritchie Linguaggio C, II Edizione, Jackson Libri, 1989. – H. Schildt C Guida Completa Mc-Graw-Hill Libri Italia, 1995. –

Elementi principali • Elementi del linguaggio:

Case sensitive (distingue tra minuscole e maiuscole) Tipi di dati base (interi, vettori, …) Strutture di controllo (if, while, ...) Decomposizione dei programmi (Funzioni e librerie)

o Funzioni standard di I/O (fles, terminale, stampanti) o Gestione stringhe o Gestione dinamica della memoria o Funzioni matematiche o altre librerie

• La grande potenza: Definire tipi di dati derivati (typedef, strutture) Accesso all'hardware se necessario (puntatori) Riutilizzo del codice (librerie del S.O, esterne) ...

• Ma.. Il linguaggio C richiede una certa padronanza di utilizzo!