Università di Camerino Scuola di Scienze e Tecnologie Sezione di Matematica Corso di INFORMATICA 2 (Matematica e Applicazioni) Anno Accademico 2014/15 3 Anno Primo Semestre Docenti: Paolo Gaspari Roberto Pennesi
Informazioni Utili Testi consigliati A. Bellini, A. Guidi: Linguaggio C guida alla programmazione, Mc-Graw-Hill. Brian W. Kernighan, Dennis M. Ritchie: Il linguaggio C principi di programmazione e manuale di riferimento, seconda edizione, PEARSON, 2007. Paul Deitel, Harvey Deitel: Il linguaggio C Fondamenti e tecniche di programmazione, PEARSON, 2013. Slide delle lezioni. Tools di sviluppo Eclipse (https://www.eclipse.org) Microsoft visual studio 2008 o succ. Modalità dell esame Prova scritta. Prova orale. Info docenti Dr. Paolo Gaspari (paolo.gaspari@unicam.it) Dr. Pennesi Roberto (roberto.pennesi@unicam.it) Ricevimento: Plesso di Matematica
Obiettivi formativi Acquisire i fondamenti della programmazione. Conoscere linguaggio di programmazione C. Programmare in C, implementare algoritmi. Conoscere gli elementi di base del linguaggio Java. Dato un problema di bassa/media complessità essere in grado di determinare l algoritmo di risoluzione ed implementare il programma. Grazie ai concetti appresi, essere in grado di affrontare altri linguaggi di programmazione.
Introduzione Contenuti del corso Introduzione ai linguaggi di programmazione: principi fondamentali; definizioni; paradigmi di programmazione (procedurale e object-oriented); storia del linguaggio C, Java. Organizzazione di un programma in C: Hello World, descrizione struttura, commenti, case-sensitive, parole chiave, convenzioni, preprocessore, ecc. Identificatori, Variabili, Tipi, operatori ed espressioni: variabili e costanti; dichiarazioni; assegnamento; operatori aritmetici, relazionali e logici; conversioni di tipo; espressioni condizionali. Strutture di controllo: selezione (if, if-else, else-if, switch-case); iterazione (cicli for, while e do-while). Array: definizione di vettori; array monodimensionali e multidimensionali; ordinamento e ricerca; stringhe. Funzioni: definizione; passaggio di parametri; variabili esterne e static; regole di scope; header file. Puntatori: e argomenti correlati; relazione tra array e puntatori. Strutture; definizione; vettori di strutture; puntatori a strutture; liste. Input ed output: standard; accesso a file; lettura e scrittura su file. Programmazione a Oggetti: caratteristiche principali (ereditarietà, polimorfismo, ); concetto di classe; Linguaggio Java: definizione di classi, attributi e metodi; istanza di oggetti; costruttore e distruttore. Elementi di java: sintassi, strutture di controllo, tipo; lavorare con le API; esempi.
Prerequisiti Argomenti noti Cosa s intende per Informatica e cos è un Elaboratore. Bit e Byte Codifica dell informazione Basi numeriche e conversioni. Hardware e Software. Architettura dei calcolatori Modello di Von Neuman: Sistema operativo e software applicativo. Algoritmi diagrammi di flusso - pseudo codice. Cenni su Linguaggi di Programmazione.
Cosa e' la programmazione? La programmazione è l'attività di sviluppare programmi per un calcolatore. Lo scopo della scrittura di un programma è la risoluzione di un problema. Per risolvere un problema bisogna: 1. Formulare il problema in modo più o meno formale (specifica dei requisiti). 2. Capire il problema e scomporlo in parti gestibili (analisi del problema). 3. Progettare una soluzione (algoritmo). 4. Implementare la soluzione (scrittura del codice). 5. Testare la soluzione e correggere eventuali errori (verifica del programma, testing e debugging). 6. Tenere sempre aggiornato il programma (manutenzione). Un algoritmo è un procedimento formale che risolve un determinato problema attraverso un numero finito di passi. Caratteristiche principali: la sequenza di istruzioni deve essere finita (finitezza) ; la procedura deve portare ad un risultato (effettività); le istruzioni devono essere eseguibili materialmente (realizzabilità); le istruzioni devono essere espresse in modo non ambiguo (non ambiguità). Un programma è l implementazione (codifica) di un algoritmo in un linguaggio di programmazione.
Un linguaggio di programmazione è un linguaggio formale utilizzato per comunicare con un calcolatore. E costituito da un insieme di parole e di simboli e un insieme di regole per combinarli. Al pari di un qualsiasi linguaggio naturale è dotato di un lessico, di una sintassi e di una semantica ben definiti. Lessico: insieme delle regole formali per la scrittura delle parole in un linguaggio; Sintassi: insieme di regole grammaticali per definire le frasi corrette composte dalla parole del linguaggio; Semantica: significato delle frasi del linguaggio; Classificazione dei linguaggi di programmazione: I linguaggi di programmazione possono essere classificati in base al livello di astrazione dalle caratteristiche fisiche della macchina (hardware).
Linguaggio macchina Linguaggio formale che un computer è in grado di eseguire senza mediazioni o conversioni. Le istruzioni sono strettamente correlate all architettura dell elaboratore. Le istruzioni e i dati sono rappresentati da sequenze binarie. Linguaggio assembler Codice operativo operando 00000010 000000011011100 00000110 000000011111100 00000100 000000011011100 Costituisce un primo parziale passo verso la semplificazione della programmazione. Le istruzioni binarie con dei codici mnemonici più facilmente comprensibili dall uomo. Codice operativo operando Codice mnemonico 00000010 000000011011100 LOAD 220 00000110 000000011111100 SUM 252 00000100 000000011011100 MEM 220
Linguaggi di alto livello Permettono di scrivere programmi con un linguaggio più vicino a quello naturale (pensiero umano). Astrazione dalla macchina di riferimento e semplificazione della scrittura dei programmi. Consentono l utilizzo di simboli matematici e parole chiave tipiche del linguaggio naturale. Il programma (codice sorgente) deve essere tradotto in linguaggio macchina (codice oggetto). Esempi di linguaggi evoluti: Fortran, Pascal, C, Java, ecc. Evoluzione Linguaggi:
Paradigmi di programmazione: I linguaggi di programmazione si possono classificare in funzione del loro paradigma (modello) di programmazione. Non ci si riferisce ai diversi linguaggi di programmazione ( es. un linguaggio può contemplare più paradgmi di programmazione ), ma alla metodologia o all organizzazione con cui vengono creati i programmi. Paradigmi principali: Programmazione imperativa o procedurale (es. Fortran, C, Pascal). Ad oggetti (es. C++, Java). Funzionale (es. Lisp). Logica ( es. Prolog ). Programmazione Procedurale: Il problema è scomposto in sottoproblemi, che possono essere risolti in maniera semi-indipendente; cosicchè il programma è costituito da diverse funzioni (procedure o subroutines) ognuna disegnata per uno scopo. Il corpo del programma è esso stesso una funzione: main(). Note: Approccio Top/Down Strutture dati + algoritmi = programmi
Si tratta di una programmazione strutturata con l obiettivo di rendere un flusso ordinato l esecuzione dei programmi. Sono previste delle strutture di controllo (costrutti) che consentono di alterare la sequenza di esecuzione delle istruzioni che costituiscono il programma: Sequenza Selezione Iterazione ( senza uso di goto label, tipico dei programmi non strutturati, es. basic ). Sequenza: Il concetto di Blocco è essenziale per la programmazione strutturata; s intende un insieme di istruzioni con una sola entrata (inizio esecuzione) ed una sola uscita (termine esecuzione).
Selezione: Iterazione:
Compilatore & Interprete: L esecuzione di un programma, non è altro che l esecuzione sulla CPU della sequenza di istruzioni. Affinché un programma scritto in un qualsiasi linguaggio di programmazione (alto livello) sia comprensibile e quindi eseguibile da parte di un calcolatore, occorre tradurlo nel linguaggio della macchina. Interprete: traduce ed esegue il programma sorgente istruzione per istruzione. Compilatore: il programma sorgente viene convertito interamente prima di essere eseguito.
Passi necessari per creare ed eseguire un programma (ciclo di vita del software):