Informatica Varie Definizioni 1. “Scienza degli Elaboratori Elettronici” Elettronici” Fondamenti di Informatica (Lettere J-Z) Introduzione Computer Science 2. “Scienza dell’ dell’Informazione” Informazione” “Scienza della Rappresentazione e della Elaborazione dell’ dell’Informazione” Informazione” Prof. Francesco Lo Presti L’informatica studia le caratteristiche dell’ dell’informazione e i modi di usarla, immagazzinarla, trasportarla e manipolarla in modo automatico Introduzione L’Informatica comprende: 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Calcolatore Metodi per la rappresentazione dell’ dell’informazione Metodi per la rappresentazione delle soluzioni Linguaggi di programmazione Linguaggi di integrazione Architettura dei calcolatori Sistemi operativi Reti di Calcolatori Basi di Dati Tecnologie Web Algoritmi … Un calcolatore elettronico è una macchina programmabile per la rappresentazione, la memorizzazione, l’l’elaborazione e la trasmissione delle informazioni Deve essere in grado di: Due Anime 2 Tecnologica: Tecnologica: I calcolatori elettronici ed i sistemi che li utilizzano Metodologica: Metodologica: I metodi per la soluzione di problemi e la gestione delle informazioni Introduzione Decomposizione 3 Eseguire istruzioni sui dati Controllare il flusso di esecuzione Memorizzare le istruzioni e i dati su cui operare Interagire con gli utenti e gli altri sistemi Hardware: Hardware: Struttura fisica del calcolatore Software: Software: Insieme di programmi che consentono all’ all’hardware di svolgere compiti utili Introduzione 4 Programma e Programmazione Algoritmo Programma Sequenza di istruzioni che il computer esegue e di decisioni che il computer prende per svolgere una certa attività attività Istruzioni 9 estrarre un numero da una posizione della memoria 9 sommare due numeri 9 inviare la lettera A alla stampante 9 se un dato è negativo, proseguire il programma da una certa istruzione anziché anziché dalla successiva (decisione (decisione)) Si dice algoritmo la descrizione di un metodo di soluzione di un problema che Ogni programma svolge una diversa funzione, anche complessa Programmazione sia eseguibile sia priva di ambiguità ambiguità arrivi ad una conclusione in un tempo finito Un computer può risolvere soltanto quei problemi per i quali sia noto un algoritmo L’attività attività di progettare e realizzare un programma Introduzione 5 Cosa e’ un calcolatore? Quale tipo di problemi è possibile risolvere con un computer? 9 impaginare testi o giocare a scacchi Introduzione 6 Calcolatore Elettronico “A device that computes, especially a programmable electronic machine that performs highhigh-speed mathematical or logical operations or that assembles, stores, correlates, or otherwise processes information” information” -- The American Heritage Dictionary of the English Language, 4th Edition, 2000 Macchina per l’l’esecuzione automatica di algoritmi General Purpose: Purpose: puo’ puo’ svolgere qualsiasi elaborazione di cui sia noto un algoritmo risolutivo Programma e’ un algoritmo espresso in un linguaggio di programmazione Linguaggio macchina binario: binario: l’l’insieme delle istruzioni direttamente eseguibile dal calcolatore Istruzione Macchina operazione logico/aritmetica su dati o di trasferimento dati codificata in binario 9 Esempio 10000110010100000 istruisce il calcolatore di effettuare una somma Introduzione 7 Programma eseguibile: eseguibile: un algoritmo espresso in Introduzione linguaggio macchina 8 Modello di Von Neumann Calcolatore Elettronico Processore Accetta in ingresso informazioni codificate in forma digitale 2. Le elabora attraverso un programma memorizzato 3. Produce informazioni in uscita 1. Dati Programma memorizzato in esecuzione Unità di controllo Computer Bus Introduzione Dispositivi di I/O Interfaccia di I/O Interfaccia di I/O Memoria Unità di elaborazione dati Risultati Dispositivi di I/O dati indirizzi controllo 9 Introduzione Processore - Central Processing Unit (CPU) Processore - Central Processing Unit (CPU) Provvede all’ all’esecuzione delle istruzioni macchina Ciclo di Esecuzione Processore e’ e’ composto da due sottosistemi: 1. Unità Unità di Controllo (Control) – Parte di Controllo 1. 2. 3. 10 Prelievo Istruzione dalla Memoria Decodifica Istruzione Esecuzione Istruzione 2. Ogni Processore e’ caratterizzato da un proprio linguaggio macchina Controlla il sequenziamento e l’l’esecuzione delle istruzioni generando i segnali di controllo Unita’ Unita’ di Elaborazione (Datapath (Datapath)) – Parte Operativa Esegue le istruzioni ALU Banco di Registri (Register (Register File) 9 Esegue operazioni logico aritmetiche sui dati 9 Memoria interna CPU 9 Program Counter (PC) – Indirizzo Prossima Istruzione 9 Instruction Register (IR) – Codice Istruzione da eseguire Introduzione 11 Introduzione 12 Processore - Central Processor Unit (CPU) Il Bus La struttura di interconnessione più più comune Bus Controllo Bus Interno CPU ALU PC IR Bus Dati Unità di Elaborazione Registri Bus Indirizzi percorsi di comunicazione tra due o più più dispositivi mezzo di trasmissione condiviso Usualmente di tipo broadcast 9 I dati sono visibili da tutte le unità unità connesse Processore Unità di controllo Unità di Controllo Bus Introduzione Volatile RAM – Random Access Memory Cella elementare di memoria può memorizzare solo due valori: valori: 0 o 1, cifra binaria (binary digit -> bit) Tipicamente cella=1 cella=1 byte (8 bit) nell’ nell’intervallo [0,1,… [0,1,…,M,M-1] Veloce (~10(~10-100ns) Costosa Dimensioni contenute (fino a qualche Gigabyte) E’ organizzata come una gerarchia di memorie byte M-1 byte M-2 M dimensione della memoria La memoria e’ vista come un vettore di byte Memoria La CPU (ma non solo) accede alle informazioni in scrittura/lettura tramite indirizzo della cella Indirizzi a m bit: spazio di indirizzamento 2m 9 Non necessariamente M= 2m Operazioni: Operazioni: Lettura/Scrittura Memoria Secondaria: Secondaria: Dischi, Dischi, CD, etc.. 14 Ogni locazione e’ associata ad un indirizzo 9 Cache di primo e secondo livello… livello… Introduzione composte da un numero fisso di bit Contiene istruzioni/dati dei programmi in esecuzione 9 Memoria ad accesso casuale – Tempo di accesso costante 9 SRAM, DRAM, etc. dati indirizzi controllo Composta di celle, celle, o locazioni, locazioni, a loro volta 9 …in formato binario Interfaccia di I/O La Memoria Centrale Memoria Primaria: Primaria: Memoria Centrale Interfaccia di I/O 13 La Memoria Dispositivi di I/O Memoria Unità di elaborazione dati Segnali di Controllo Dispositivi di I/O Memoria di lungo periodo - non volatile Tempo di accesso maggiori (~ms e piu’ piu’), economica Introduzione 15 Per ragioni di efficienza le operazioni di lettura/scrittura vengono effettuate per gruppi di byte detti parola (word) 1 parola= parola= 1,2,4,8 byte byte 1 byte 0 8 bit Introduzione 16 Software Il Sistema Operativo Programmi che vengono eseguiti dal sistema Software di base 9 Sistema Operativo Software Applicativo 9 Word Processor Insieme (complesso) di programmi Organizzazo a strati Strato software che opera sopra l’l’hardware e gestisce l’l’elaboratore Hardware Software di Base Funzioni Ciascuno con funzionalità funzionalità di livello più più alto rispetto a quelli sottostanti Ö Concetto di Macchina Virtuale Introduzione 18 Alcune Domande Fondamentali Risolvono problemi specifici degli utenti: Il SO realizza una “macchina virtuale” virtuale” 17 Programmi Applicativi Processore: Sistema Multiutente Memoria Centrale: Memoria Virtuale Memoria Secondaria: File System Gli utenti vedono l’l’elaboratore solo tramite il Sistema Operativo Gestione delle risorse disponibili 9 Processore, Memoria, Dischi, etc, etc, Software Applicativo Introduzione Windows, Linux, Linux, MacOs X, Symbian, Symbian, etc. Quali istruzioni esegue un eleboratore? eleboratore? Quali problemi puo’ puo’ risolvere un eleboratore? eleboratore? Esistono problemi che un elaboratore non puo’ puo’ risolvere? Che ruolo ha il linguaggio di programmazione? Word processor Fogli elettronici Database Giochi Etc. 9 Scritti in linguaggi di programmazione di alto livello Ambiente di Programmazione L’insieme dei programmi che consentono la scrittura, la verifica e l’l’esecuzione di nuovi programmi 9 Fase di sviluppo Introduzione 19 Introduzione 20 Problemi da Risolvere Risoluzione di Problemi I problemi che siamo interessati a risolvere sono di natura molto varia: 1. Trovare il maggiore fra due numeri 2. Dato un elenco di nomi e numeri di telefono, trovare il numero di una data persona 3. Problema del lupo, della capra e del cavolo 4. Dati a e b, risolvere l’ l’equazione ax+b=0 5. Stabilire se una parola precede alfabeticamente un’ un’altra 6. Ordinare una lista di elementi 7. Creare, alterare suoni 8. Analizzare e riconoscere immagini 9. Salvare e recuperare delle informazioni 10. Trasmettere informazioni … La descrizione di un problema non fornisce (in generale) un metodo per risolverlo Non tutti i problemi sono risolvibili attraverso l’l’uso del calcolatore: Esistono classi di problemi per le quali la soluzione automatica non è proponibile. As esempio: Introduzione Introduzione 22 Esempio di Problema Un algoritmo è una sequenza finita di mosse/azioni che risolve in un tempo finito una classe di problemi 1. 2. L'esecuzione delle azioni nell'ordine specificato dall'algoritmo consente di ottenere, a partire dai dati di ingresso, i risultati che risolvono il problema 3. 4. Esecutore è una macchina astratta capace di eseguire le azioni specificate dall’ dall’algoritmo Noi considereremo sui problemi che ammettono un metodo risolutivo Ö Funzioni Calcolabili 21 Algoritmo Se il problema ammette infinite soluzioni Per problemi per i quali non è stato trovato un metodo risolutivo 5. Problema: Come si cucina un uovo al burro? Soluzione Far sciogliere in un tegamino 20g. di burro Quando il burro assume un colore dorato rompere il guscio dell’ dell’uovo Far scivolare delicatamente nel tegamino albume e tuorlo Rosolare Quando l’l’albume è ben rappreso spegnere il fuoco Il calcolatore è un caso particolare di esecutore Introduzione 23 Introduzione 24 Esempio di Problema 1. 2. 3. 4. Algoritmi e Programmi Problema: Risolvere l’l’equazione ax+b=0 Soluzione leggi i valori di a e b calcola –b dividi quello che hai ottenuto per a e chiama x il risultato stampa x Passi per la risoluzione di un problema: individuazione di un procedimento risolutivo scomposizione del procedimento in un insieme ordinato di azioni Ö Algoritmo rappresentazione dei dati e dell’ dell’algoritmo attraverso un formalismo comprensibile dal calcolatore (linguaggio di programmazione) Ö Programma Metodo di Risoluzione Linguaggio di Programmazione Inizio Dichiarazione: a, b, w, z contengono numeri interi Prodotto di due numeri naturali Leggi a e b w ← a; z ← 0; Sì z←z +b w←w–1 w>0? No Scrivi Fine Introduzione 25 Dati e istruzioni Tipi di dati Numeri naturali o interi o reali Caratteri alfanumerici Dati logici o booleani Array o vettore di n elementi Istruzioni Operazioni di Input/Output Operazioni AritmeticoAritmetico-logiche Strutture di Controllo Problema Algoritmo main() main(){ {/* /*prodotto prodottoCC*/ */ unsigned unsignedint inta,a,b;b; int w, z; int w, z; scanf("%d scanf("%d%d",&a,&b); %d",&a,&b); zz==0;0; ww==a;a; while while(w (w> >0) 0){ { zz==zz++b;b; ww==ww––1;1; }} printf("%d", printf("%d",z); z); }} Programma Introduzione 26 Algoritmi e Variabili Gli algoritmi sono parametrici: (1, -2, 0.34) (A, B, ..) (Vero, Falso) Falso) ({1,2,3}) (es. leggi, scrivi) (es. max = A + B) (es. SE, RIPETI ) Introduzione 27 producono un risultato che dipende da un insieme di dati di partenza; descrivono la soluzione non di un singolo problema, ma di una intera classe di problemi strutturalmente equivalenti. Esempi: 9 l’algoritmo per la moltiplicazione di due numeri specifica come effettuare il prodotto di tutte le possibili coppie di numeri; 9 l’algoritmo per la ricerca di un libro nello schedario della biblioteca vale per tutti i possibili libri; 9… Introduzione 28 Algoritmi e Variabili Le istruzioni dell’ dell’algoritmo fanno riferimento a variabili Contenitore per dati Astrazione delle cella di memoria Memoria x 8 y 4 a 3 29 assegna a una variabile il risultato ottenuto dalla valutazione di un’ un’espressione circ ← 2 × r × pi 9 il risultato dell’ dell’espressione 2 × r × pi viene calcolato utilizzando i valori contenuti nelle variabili r e pi e il risultato viene poi assegnato alla variabile circ; circ; Introduzione 30 Introduzione 32 Rappresentazione degli algoritmi in istruzioni di assegnamento combinate con espressioni introdurre nel contenitore identificato dal nome della variabile il valore specificato a destra dell’ dell’assegnamento; Esempi: r ← 35 (assegna 35 alla variabile il cui nome è r), pi ← 3,14 … 6 totale Uso delle Variabili l’esecutore usa il valore contenuto nelle variabili per calcolare il risultato dell’ dell’espressione, per esempio var1 + var2 × var3 oppure var1 / var2 – var3, … in istruzioni di assegnamento/assegnazione Introduzione All’ All’interno di espressioni, espressioni, Somma x ad y Se a>o allora … Come in matematica una variabile è un sinonimo per indicare un dato Variabile: Variabile: Nome associato ad una locazione di memoria Uso delle Variabili la stessa variabile può comparire in entrambi i lati dell’ dell’istruzione di assegnamento 9k ← k + 1 9 il valore contenuto in k viene utilizzato per trovare il valore dell’ dell’espressione k + 1 che viene memorizzato come nuovo valore di k. Introduzione 31 Linguaggio naturale Diagramma a blocchi Pseudo codice Linguaggio di programmazione Rappresentazione degli algoritmi Linguaggio Naturale Diagrammi di flusso Diagramma di flusso Inizio Sollevare il ricevitore Attendere il segnale di linea libera Comporre il numero … START START END END I/O I/O PROCESS PROCESS Inizio Fine Operazioni di ingresso/uscita Elaborazione Leggi xey d ←x – y Sì d>0? No Sì Scrivi “max è x” Scrivi “max è y” Predicato Predicato No SUB-PROCESS Selezione a due vie Fine Introduzione Sottoprogramma 33 Esempio Introduzione 34 Somma dei primi N numeri naturali Esempio: dati in ingresso due numeri x e y, si calcoli e stampi il maggiore. Inizio Inizio Inizio Leggi n Leggi xey ris ← 0 i←0 d ←x – y Sì d>0? Scrivi “max è x” Leggi n No No ris ← ris + i i ← i +1 Scrivi “max è y” i>n? ris ← n No Sì Scrivi ris Fine n ← n –1 ris ← ris + n n<1? Sì Scrivi ris Fine Fine Introduzione 35 Introduzione 36 Somma dei primi N numeri naturali Inizio 1 Leggi n 2 ris ← 0 i ←0 3 4 No ris ← ris + i i ← i +1 i>n? Sì 5 Scrivi ris 6 Fine T posiz. n ?? t01 c 4 t02 d 4 t03 e 4 t04 f 4 t05 e 4 t06 f 4 t07 e 4 t08 f 4 t09 e 4 t10 f 4 t11 e 4 t12 f 4 t13 e 4 t14 g 4 t15 h i ?? ?? 0 0 1 1 2 2 3 3 4 4 5 5 5 Somma dei primi N numeri naturali ?? ?? 0 0 0 0 1 1 3 3 6 6 10 10 10 Esiste infatti una soluzione analitica: note ris n × (n + 1) / 2 L’algoritmo è molto più più semplice (il numero di istruzioni da eseguire è costante e non dipende dal valore di n). Variabili non ancora definite Letto il valore 4 e inserito in n i < n ⇒ posiz. 4 i < n ⇒ posiz. 4 i < n ⇒ posiz. 4 T posiz. t01 c t02 d t03 e t04 f i = n ⇒ posiz. 4 i > n ⇒ posiz. 5 N ris ?? 4 4 4 ?? ?? 10 10 note Variabili non ancora definite Letto il valore 4 e inserito in n Calcolato il risultato 10=4×5/2 Stampato risultato (10) 3 Scrivi ris 4 Fine Stampato risultato (10) 37 Introduzione 38 Programmi e Programmazione Inizio Programma: Programma: È la descrizione di un algoritmo in un particolare linguaggio di programmazione. Quali “parole chiave” chiave” ? Quali dati ? Quali operazioni elementari ? Quali meccanismi di combinazione ? Un linguaggio di programmazione è una notazione formale per descrivere algoritmi che è comprensibile ad un calcolatore. Dichiarazione : a, b, w, z contengono numeri interi Leggia e b w ← a; z ← 0; z ←z + b w ←w – 1 Leggi n ris ← n × (n + 1) / 2 Prodotto di due numeri naturali Sì 1 2 i < n ⇒ posiz. 4 Introduzione Dati a, b interi positivi w, z interi Risoluzione leggi a e b z ← 0 w ← a finché w > 0 ripeti z ← z + b w ← w – 1 fine ciclo scrivi z fine Inizio w > 0? No Scrivi z Fine Introduzione 39 Introduzione 40 Linguaggi di Programmazione Linguaggi di Programmazione Ogni linguaggio è caratterizzato da: 1. sintassi: sintassi: l’l’insieme di regole formali per la scrittura di programmi in quel linguaggio, che dettano le modalità modalità per costruire frasi corrette nel linguaggio stesso. 2. semantica: semantica: l’l’insieme dei significati da attribuire alle frasi (sintatticamente corrette) costruite nel linguaggio. Esistono diversi tipi di Linguaggi di Programmazione Linguaggi macchina e linguaggi assembler Linguaggi imperativi (PASCAL, FORTRAN, C, BASIC, …) le azioni da compiere sono indicate in una sequenza che partendo dai dati si completa calcolando i risultati : if a > 0 print (“valore positivo” positivo”) else print (“valore negativo” negativo”); Linguaggi dichiarativi (logici - PROLOG, funzionali - LISP) Una frase può essere sintatticamente corretta e tuttavia non aver alcun significato! Lo stesso può accadere per una istruzione. Introduzione Introduzione 42 Linguaggi di Programmazione e Astrazione Esistono linguaggi a vari livelli di astrazione Linguaggi orientati agli oggetti (C++, Java, Smalltalk, Smalltalk, ….) un programma è la definizione di una funzione o l’l’elenco delle regole logiche che portano a verificare una condizione. 41 Linguaggi di Programmazione ogni azione è indicata in codice binario o con operazioni molto semplici e “rudimentali” rudimentali” : ADD X, Y oppure STORE A Linguaggio Macchina 0100 0000 0000 1000 0100 0000 0000 1001 0000 0000 0000 1000 Sono basati sul concetto di oggetto software che rappresenta un oggetto del mondo reale (un numero, un archivio, un testo, una matrice). I dati sono rappresentati come oggetti e le azioni da compiere come operazioni da effettuare sugli oggetti. Di solito sono realizzati come estensione dei linguaggi imperativi. Un programma modella un problema reale come una collezione di oggetti software che interagiscono. Introduzione Linguaggio Assembler LOAD X ADD Y STORE Z Sequenze di istruzioni macchina in binario direttamente eseguibili dal processore Istruzioni hanno corrispondenza 1 a 1 con quelle macchina, ma vengono espresse con nomi simbolici Linguaggio di Alto Livello main ( ) { int a=0; cout << a+5; return 0; } 43 Indipendente dalla macchina. Astrazione dati Introduzione 44 Da un linguaggio di programmazione ad alto livello al linguaggio macchina Il processo di traduzione completo swap(int v[], int k) Un linguaggio di programmazione ad alto livello { Offre astrazioni notevoli int temp; temp = v[k]; v[k] = v[k+1]; v[k+1] = temp; 9 Variabili, tipizzazione dei dati 9 Procedure, funzioni 9 Programmazione ad oggetti 9 Gestione di eccezioni } Programma in linguaggio ad alto livello Aumenta la produttività produttività del programmatore Permette al programma di essere indipendente dal computer sul quale viene sviluppato 10001100011000100000000000000000 10001100111100100000000000000100 10101100111100100000000000000000 10101100011000100000000000000100 45 Introduzione 00000011111000000000000000001000 46 Il Compilatore Il programma che effettua la traduzione prende il nome di compilatore Il programma risultante puo’ puo’ essere eseguito direttamente sul calcolatore Compilatore C++/Assembler Il programma risultante PLM equivalente a PL1 ma scritto nel linguaggio LM ProgrammaLM Computer Dati L’interprete legge il codice del programma da eseguire e ne simula l’esecuzione, esecuzione, generando i relativi risultati L’interprete e’, in sostanza, sostanza, un simulatore di un calcolatore virtuale il cui linguaggio macchina e’ il linguaggio interpretato Introduzione Il Compilatore sostituisce a ogni istruzione del programma PL1, scritto nel linguaggio L1, una sequenza di istruzioni scritte nel linguaggio macchina LM ProgrammaC++ L’interpretazione e’ un processo di esecuzione indiretta di un programma ad opera di un programma detto interprete assemblatore 00000000100011100001100000100001 La compilazione e’ un processo di traduzione che, che, a partire da un programma scritto in linguaggio simbolico, simbolico, ne genera una versione equivalente in assembler/linguaggio assembler/linguaggio macchina muli $2, $5, 4 add $2, $4, $2 lw $15, 0($2) lw $16, 4($2) sw $16, 0($2) sw $15, 4($2) jr $31 00000000101000010000000000011000 Compilazione ed Interpretazione Programma in linguaggio assembler (MIPS) traduce da un linguaggio di programmazione ad alto livello al linguaggio assembler Talvolta traduce direttamente da linguaggio di programmazione ad alto livello a linguaggio macchina Introduzione compilatore Programma in linguaggio macchina binario (MIPS) Programma compilatore swap: ProgrammaLM Risultati Computer 47 Introduzione 48 L’interprete Interpretazione o compilazione? Per eseguire PL1, scritto in L1, l’interprete, interprete, scritto in LM, analizza – passo passo - ogni istruzione da eseguire di PL1 e ne realizza l’effetto, effetto, eseguendo una sequenza di istruzioni del linguaggio di LM ad essa equivalenti Ogni linguaggio puo’ puo’ essere sia interpretato che compilato Interprete C++ Il C, C++ sono normalmente compilati L’interpretazione e’ piu’ piu’ lenta dell’ dell’esecuzione diretta Programma C++ Dati Migliore diagnostica Maggiore portabilita’ portabilita’ 9 L’interprete, interprete, se scritto in un linguaggio diffuso, diffuso, puo’ puo’ essere reso piu’ piu’ facilmente disponibile su un nuovo calcolatore Risultati Talvolta, Talvolta, compilazione ed interpretazione sono combinate Computer Per combinare i vantaggi Si compila in un linguaggio intermedio che poi e’ e’ interpretato 9 Approccio utilizzato per l’esecuzione dei programmi in Java Introduzione 49 Algoritmi: Esercizi 50 Algoritmi: Esercizi L’esecutore deve leggere una sequenza di numeri naturali (cioè (cioè interi positivi maggiori di zero) e calcolare (per poi stamparlo) il minimo Introduzione la sequenza di valori si intende finita quando l’l’utente inserisce un valore negativo L’esecutore deve leggere una sequenza di numeri naturali (cioè (cioè interi positivi maggiori di zero) e calcolare (per poi stamparli) il massimo, minimo e la media la sequenza di valori si intende finita quando l’l’utente inserisce un valore negativo Esempio Data la sequenza 3, 67, 2, 41,7,41,7,-1, l’l’esecutore stampa “il minimo è 2 Introduzione 51 Introduzione 52