Università degli studi di Camerino Scuola di scienze e tecnologia - Sezione Informatica Programmazione C Massimo Callisto De Donato massimo.callisto@unicam.it www.cs.unicam.it/massimo.callisto LEZIONE 0 - INTRODUZIONE A.A. 2011/12
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
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 dowhile. 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.
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 @ massimo.callisto@unicam.it www.cs.unicam.it/massimo.callisto Aula dottorandi del dipartimento di Informatica
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
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
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.
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
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
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
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
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
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).
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.
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.
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!