Fondamenti di Programmazione -Presentazione del CorsoCdL Ingegneria Informatica e dell'Informazione Sara Brunetti [email protected] 0577 234850 1168 Ufficio 236 Fondamenti di Programmazione Orario di lezione: Mercoledì: 14:00-16:00; Giovedì: 14:00-17:00. Aula: C/D est - Lab143(+124) Ricevimento previa email Il laboratorio NON basta Lavoro a casa! − Compilatore C per Windows (DEVC++5.1.0) 3 Modalità d’esame • Prova scritta con domande di Teoria – Deve essere superato per poter effettuare la prova pratica • Prova pratica al calcolatore di programmazione in C Testi consigliati L.M.Barone, E.Marinari, G.Organtini, F.Ricci-Tersenghi: Programmazione Scientifica, ed. Pearson B.W. Kernighan, D.M.Ritchie. Linguaggio C, Jackson B.W. Kernighan, R.Pike. Programmazione nella pratica, Addison-Wesley A. Bellini, A. Guidi. Linguaggio C-guida alla programmazione, McGraw-Hill ... Obiettivi Imparare le tecniche alla base della programmazione (teoriche e pratiche) al fine di risolvere problemi di ambito scientifico Scientifico: – Tipo di problemi – Approccio Programmazione: – Attività che consente di scrivere programmi – Sequenze di istruzioni “comprensibili al calcolatore” Introduzione INFORMATIQUE = INFORMATION AUTOMATIQUE L'Informatica Gli algoritmi L'esecutore e il linguaggio I programmi L'Informatica e gli algoritmi (informalmente) •Descrizione di un procedimento o di un metodo per la soluzione di un problema Soluzione di ax2+bx+c=0 1. inizio dell’algoritmo; 2. acquisire dall’esterno i valori dei coefficienti a, b e c; 3. calcolare il valore ∆=b2-4ac; 4. se ∆<0, allora non esistono radici reali: eseguire 8; 5. se ∆=0, allora x1=x2=-b/2a: eseguire 7; 6. se ∆>0, allora x1=(-b+√∆)/2a e x2=(-b-√∆)/2a; 7. comunicare all’esterno i valori di x1 ed x2; 8. fine dell’algoritmo. Algoritmo di Euclide 1. Siano x e y due numeri 2. Calcola il resto della divisione di x per y 3. Se il resto è diverso da 0, vai al passo 2 i. Usa y come valore attuale di x, il resto come y ii. Altrimenti prosegui con il passo successivo 4. Il valore di y è la soluzione •Sequenza finita di azioni elementari, eseguibili e non ambigue Esecutori e linguaggi Un esecutore è definito in base a tre elementi: − L'insieme delle istruzioni che capisce (sintassi) − L'insieme delle operazioni che è capace di compiere; − Quali operazioni associa ad ogni istruzione che riconosce (semantica) Se l'esecutore è un calcolatore, l'algoritmo è detto programma − Il linguaggio utilizzato per descrivere l'algoritmo è detto linguaggio di programmazione − L'unico linguaggio di programmazione che un calcolatore capisce è il linguaggio macchina Il calcolatore Macchina elettronica programmabile Programma Input Calcolatore Output Compiti: Eseguire operazioni logiche e/o numeriche Operazioni complesse “spezzate” in operazioni elementari L'informazione Le entità (dati e risultati) su cui opera un calcolatore prendono il nome di informazione L'informazione si misura in bit si/no, falso/vero, 0/1.. − Interruttore acceso/spento − Tensione V=0/V=-0.8 (NIM) − Condensatore Carico/Scarico 8 bit=1byte Kilo: 2 10 Mega: 2 20 Giga: 2 30 Il calcolatore Principali componenti hardware Tipi di memoria Processore Motherboard CPU Hard Disk 14 Componenti hardware principali Organizzazione hardware standard Dispositivi di input − Dispositivi di output − Memoria Processore (CPU) Ad es.: monitor, stampante Insieme in uno stesso contenitore − Dispositivi di input Ad es.: mouse, tastiera Dispositivi di output Processore (CPU) Motherboard − CPU Central Processing Unit Interpreta e esegue le istruzioni Memoria Due Tipi di Memoria Principale (o centrale) − − − − area di lavoro mantiene temporaneamente programmi e dati (mentre il programma è in esecuzione) Accesso veloce (ordine di 100ns) RAM; ROM Ausiliaria (o memoria di massa) − − − − permanente salva programmi e risultati Accesso lento (ordine di ms) Esempi: hard disk, CD... Organizzazione della Memoria Principale Bit = una cifra binaria − Valori 0 o 1 Byte = 8 bit La memoria principale è una lista di locazioni numerate ciascuna di un byte Il numero di byte utilizzato per memorizzare un dato varia con il tipo di dato... indirizzo contenuto 2021 11110000 2022 01111000 2023 10101011 2024 11110111 2025 01100011 2026 01010000 2027 11110100 ... ... Dato 1: 2 byte Dato 2:1 byte Dato 3:3 byte Organizzazione della Memoria Ausiliaria Radice File File Directory Directory File Directory File Directory Directory File Directory File Software Sistema Operativo − Programma supervisore Applicazioni esistenti − − − DOS, Windows, MacOS, UNIX, Linux word-processor/editor web browser compilatori o assembler Applicazioni create dall’utente Il sistema operativo Il sistema operativo è l’insieme di programmi che gestisce il computer: − − − permette l’interazione con il mondo esterno (Input/Output) permette di eseguire programmi dell’utente bilancia le risorse del sistema Sullo stesso PC possono convivere o alternarsi diversi sistemi (es.Linux e Windows o MacOS) 20 Il processore Gli elementi della CPU (Central Processing Unit): Unità di controllo: Unità aritmetico-logica: Legge le istruzioni dalla memoria e ne determina il tipo Esegue operazioni necessarie per eseguire le istruzioni Registri: locazioni di memoria interna usata per i risultati intermedi e info di controllo Il processore La CPU può svolgere un insieme limitato di operazioni: Spostamento di dati (accesso,lettura,scrittura,copia) – Leggi un byte da una locazione di memoria Calcolo – Somma tra loro il contenuto di due registri Controllo di flusso – Salta ad una locazione di memoria 22 Il processore Ad ogni istruzione è associato un codice di N bit – (codice operazione, parametro) La CPU inizia caricando il byte presente nella locazione 0 e lo interpreta come istruzione Ad ogni ciclo di clock, sequenzialmente – A seconda dell’istruzione si interpretano i byte successivi 23 Esempio Supponiamo che i seguenti codici binari corrispondano alle seguenti istruzioni 24 Esempio supponiamo che la memoria del nostro computer sia così riempita (i registri a e b non sono visibili): 25 Esempio supponiamo che la memoria del nostro computer sia così riempita (i registri a e b non sono visibili): viene interpretato come una istruzione set_a Di conseguenza il byte successivo contiene il parametro 11111110 26 Esempio supponiamo che la memoria del nostro computer sia così riempita (i registri a e b non sono visibili): viene interpretato come una istruzione set_a Di conseguenza il byte successivo contiene il parametro 11111110 Risultato: il registro a contiene il valore 00000010 27 Esempio supponiamo che la memoria del nostro computer sia così riempita: viene interpretato come una istruzione set_b Di conseguenza il byte successivo contiene il parametro 11111111 28 Esempio supponiamo che la memoria del nostro computer sia così riempita: viene interpretato come una istruzione set_b Di conseguenza il byte successivo contiene il parametro 11111111 Risultato: il registro b contiene il valore 00000011 29 Esempio supponiamo che la memoria del nostro computer sia così riempita: viene interpretato come una istruzione sum_ab 30 Esempio supponiamo che la memoria del nostro computer sia così riempita: viene interpretato come una istruzione out_a 31 Linguaggio di programmazione Il linguaggio macchina è il linguaggio della CPU Un programma in linguaggio macchina è una sequenza di bit che indica alla CPU le azioni da compiere sui dati (codificati in bit) Linguaggio di programmazione (LP): − Informalmente: modo di esprimere le sequenze di operazioni da far svolgere a un computer mediante istruzioni Linguaggi di programmazione Linguaggio macchina: − − − Linguaggio assembly: − − sequenze di 0 ed 1 rigoroso essenziale simbolico (es. set_a) semplice traduzione aggiuntiva (assembler) Però: dipende dal processore − Il programmatore deve conoscere in dettaglio le caratteristiche della macchina che usa − Impossibile trasferire programmi da una macchina ad un'altra Linguaggi di programmazione Linguaggio di programmazione ad alto livello − − − Indipendente dal processore utilizzato È più semplice comprenderne la struttura Meno errori Gerarchia di linguaggi: da basso livello ad alto livello set_a,2 set_b,3 sum_ab out_a print 2+3 Linguaggi di programmazione Efficienza del programma Programmazione a basso livello Programmazione ad alto livello Facilità e velocità di programmazione Linguaggi di alto livello Ad es. C, FORTRAN,C++,JAVA) ...altri Linguaggi sintatticamente complessi facili da usare dagli umani: la traduzione in linguaggio macchina viene fatta “dietro le scene” sono definiti da una grammatica Il compilatore verifica la correttezza sintattica di un programma conoscendone la grammatica 36