Fondamenti di Programmazione -Presentazione del Corso- CdL Ingegneria Informatica e dell'informazione Sara Brunetti sara.brunetti@unisi.it 0577 234850 1168 Ufficio 236
Fondamenti di Programmazione Orario di lezione: Martedì: 14:00-16:00; Mercoledì: 14:00-17:00. Aula: A, fino al 11/04 poi 468 Lab: 143(+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 (test) 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 P.Deitel, H.Deitel. Il Linguaggio C- Fondamenti e tecniche di programmazione, PEARSON...
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
Informatica Informazione Mezzo per elaborarla Introduzione Procedimenti, algoritmi Mezzo fisico, calcolatore INFORMATIQUE = INFORMATION AUTOMATIQUE ACM/IEEE-CS: L'informatica è lo studio sistematico degli algoritmi che descrivono e trasformano l'informazione: la loro teoria, analisi, progetto, efficienza,realizzazione e applicazione
L'Informatica e gli algoritmi (informalmente) Descrizione di un procedimento o di un metodo per la soluzione di un problema In modo non ambiguo Da un esecutore
Soluzione di ax 2 +bx+c=0 1. inizio dell algoritmo; 2. acquisire dall esterno i valori dei coefficienti a, b e c; 3. calcolare il valore =b 2-4ac; 4. se <0, allora non esistono radici reali: eseguire 8; 5. se =0, allora x 1 =x 2 =-b/2a: eseguire 7; 6. se >0, allora x 1 =(-b+ )/2a e x 2 =(-b- )/2a; 7. comunicare all esterno i valori di x 1 ed x 2 ; 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
Software e hardware Software: Istruzioni per far eseguire ai computer delle azioni e prendere decisioni Hardware: Computer Il software controlla l'hardware Per risolvere problemi complessi abbiamo bisogno di avvalerci della velocità di calcolo di un computer Pc possono eseguire miliardi di calcoli in un secondo Più di quanto un essere umano possa eseguire in tutta la sua vita!!! Il supercomputer Tianhe-2 è in grado di eseguire oltre 33 milioni di miliardi di calcoli al secondo
Software Sistema Operativo Programma supervisore DOS, Windows, MacOS, UNIX, Linux Applicazioni esistenti 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) MacOSX di Apple, ios di Apple per iphone, Android di Google 14
Il calcolatore in astratto 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.. 8 bit=1byte 10 Kilo: 2 20 Mega: 2 Interruttore acceso/spento Tensione V=0/V=-0.8 (NIM) Condensatore Carico/Scarico Giga: 2 30
Componenti hardware principali Dispositivi di input Organizzazione hardware standard Memoria Processore (CPU) Motherboard Dispositivi di output CPU Dispositivi di input Ad es.: mouse, tastiera,touch screen,dispositivi audio... Dispositivi di output Ad es.: monitor, stampante Insieme in uno stesso contenitore Processore (CPU) Central Processing Unit Interpreta e esegue le istruzioni Memoria
Due Tipi di Memoria Principale (o centrale) mantiene temporaneamente programmi e dati (mentre il programma è in esecuzione) - area di lavoro, capacità limitata (2-6GB,128GB) Accesso veloce (ordine di 100ns) RAM; ROM Ausiliaria (o memoria di massa) permanente salva programmi e risultati Capacità (2-6TB), 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 Dato 1: 2 byte 2022 01111000 2023 10101011 Dato 2:1 byte 2024 11110111 Dato 3:3 byte 2025 01100011 2026 01010000
Organizzazione della Memoria Ausiliaria Radice File Directory Directory File Directory Directory Directory File File File Directory File
Il processore Dispositivo capace di eseguire istruzioni Gli elementi della CPU (Central Processing Unit): Unità di controllo: Coordina e supervisiona le operazioni delle altre unità legge le istruzioni dalla memoria e ne determina il tipo Unità aritmetico-logica: Esegue operazioni necessarie per eseguire le istruzioni (somme,sottrazione,moltiplicazione,divisione,meccani smi di decisione) Registri: locazioni di memoria interna usata per i risultati intermedi e info di controllo (decine di byte)
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: sequenze di 0 ed 1 rigoroso essenziale Linguaggio assembly: 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