3.15k likes | 3.32k Views
Master in BIOINFORMATICA Corso propedeutico di Informatica DOCENTE: Elisa Tiezzi UNIVERSITA’ DI SIENA. Programma. Introduzione all’informatica Cos’è l’informatica Introduzione al concetto di algoritmo Struttura dell’elaboratore Introduzione al concetto di programma
E N D
Master in BIOINFORMATICA Corso propedeutico di Informatica DOCENTE: Elisa Tiezzi UNIVERSITA’ DI SIENA
Programma Introduzione all’informatica • Cos’è l’informatica • Introduzione al concetto di algoritmo Struttura dell’elaboratore • Introduzione al concetto di programma • Esecuzione delle istruzioni • L’organizzazione dell’unità centrale di elaborazione (CPU) • La memoria centrale • La memoria secondaria • Dispositivi di input/output Linguaggi di programmazione • Introduzione ai linguaggi di programmazione
Elementi del Linguaggio Java • Ambiente di lavoro • Struttura di un programma • Tipi di dati fondamentali • Istruzioni di input/output • Costrutto decisionale if-then-else • I cicli con contatore for • Cicli condizionali while • Dati strutturati: stringhe e vettori • Cicli for annidiati • Classi e oggetti • Implementazioni di algoritmi Introduzione alla Complessità • Complessità di problemi • Analisi del caso medio e caso pessimo • Valutazione della complessità: relazioni di ricorrenza Progetto e analisi di alcuni algoritmi di Ordinamento • Ricorsività • Divide et impera • Mergesort • Quicksort Sistemi operativi • Windows
LIBRO UTILI • JAVA Fondamenti di Progettazione software John Lewis, William Loftus ADDISON-WESLEY • Java: An introduction to computer science and programming, 2 edizione Walter Savitch Prentice-Hall, Inc
INFORMATICA Alla metà del 900 il MONDO dell’INFORMAZIONE diviene importante. INFORMATICA = insieme degli strumenti teorici e pratici che hanno lo scopo di elaborare l’informazione. Il termine corrisponde al francese INFORMATIQUE (contrazione di INFORMATION AUTOMATIQUE) che compare verso la metà degli anni sessanta. In realtà l’informatica si occupa non solo dell’elaborazione dei dati ma anche della scienza e dell’ingegneria dei calcolatori. Gli anglosassoni usano il termine COMPUTER SCIENCE per sottolineare questa seconda accezione.
L’informatica ha quindi due significati: • Insiste sull’oggetto = PROCEDURA EFFETTIVA O ALGORITMO • Insiste sullo strumento = CALCOLATORE ELETTRONICO
ALGORITMO Le radici dell’algoritmica sono antiche. Anche se il suo assetto teorico definitivo è stato raggiunto nella prima metà di questo secolo e le tecniche di progetto ed analisi di algoritmi hanno segnato progressi enormi con la recente diffusione di calcolatori elettronici, i primi esempi di algoritmi risalgono alle origini della storia dell’uomo e sono registrati in documenti di matematica antica. La parola ALGORITMO fu creata nel latino medievale per assonanza con il nome del matematico persiano Al-Khuwarizmi.
Informalmente la parola algoritmo indica la specificazione dei passi elementari che un esecutore deve compiere per giungere alla soluzione di un problema. • ALGORITMO = complesso di istruzioni…. • precisamente determinato in maniera da non consentire situazioni di dubbio • universalmente comprensibile nel senso che chiunque possa applicarle • abbastanza generali da potersi applicare ad ogni problema di una data classe • tali che applicate ai dati forniscano criteri per determinare quando la soluzione è raggiunta e questo avvenga in un numero finito di passi
Alcuni algoritmi I più antichi algoritmi non banali conosciuti oggi furono registrati dallo scriba egizio Ahmes (1650 a.c.) Algoritmo moltiplicazione (dati A E B risultato P) -poni P=0 assegnazione -finché A≠0 ripeti la sequenza iterazione se A è dispari allora addiziona B a Pesecuzione dimezza A trascurando il restocondizionata raddoppia B
Definizione intuitiva di algoritmo • Elenco finito di istruzioni che specificano una serie di operazioni, eseguendo le quali e’ possibile risolvere ogni istanza di un problema di un dato tipo
Proprietà degli algoritmi • FINITI • NON AMBIGUI • GENERALI
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 , allora non esistono radici reali: eseguire 8; 5. se , allora x1=x2=-b/2a: eseguire 7; 6. se , allora x1=(-b+)/2a e x2=(-b-)/2a; 7. comunicare all’esterno i valori di x1 ed x2; 8. fine dell’algoritmo.
Descrizione degli algoritmi Diagramma a blocchi (flow chart): rappresentazione grafica di un algoritmo che indica il flusso delle trasformazioni descritte dall’algoritmo che devono essere eseguite a partire dai dati iniziali per ottenere i risultati finali.
input azione begin falso vero C output end Blocchi elementari
begin a, b, c b2-4ac V F V F x1=-b/2a x1=(-b+)/2a x2=-b/2a x2=(-b-)/2a x1, x2 radici c.c. end Esempio su ax2+bx+c=0
Il gioco dei quindici Quindici oggetti, ad esempio fiammiferi, sono su una tavola. Il primo giocatore ne raccoglie 1, 2 o 3. Il secondo giocatore ne raccoglie a sua volta 1, 2 o 3. Quindi è ancora il primo giocatore a raccogliere 1, 2 o 3 fiammiferi. I giocatori alternano le loro mosse finchè sul tavolo non esistono più fiammiferi. Il giocatore che è costretto a raccogliere l’ultimo fiammifero è il perdente. Descrivere una strategia vincente per il primo giocatore.
Problema delle dodici monete Tra 12 monete di identico aspetto potrebbe nascondersene una falsa e pertanto di peso diverso. Disponendo di una bilancia a 2 piatti per confrontare gruppi di monete, si vuole individuare la moneta falsa e stabilire se essa pesi più o meno delle altre, mediante non più di 3 pesate.
Soluzione del gioco dei quindici Siano A il primo giocatore e B il secondo 1. Prima mossa: A raccoglie 2 fiammiferi 2. Mosse successive: se B raccoglie k fiammiferi (k<=3), allora A raccoglie 4-k fiammiferi
1, 2, 3, 4 : 5, 6, 7, 8 1L 2L 3L 4L 5P 6P 7P 8P 1P 2P 3P 4P 5L 6L 7L 8L 9L 10L 11L 12L 9P 10P 11P 12P 0 1, 2, 5 : 3, 4, 6 1, 2, 5 : 3, 4, 6 1L 2L 6P 5P 3L 4L 5L 3P 4P 1P 2P 6L 7P 8P 7L 8L 1:2 7:8 3:4 3:4 7:8 1:2 9, 10 : 11, 1 1L 6P 2L 8P imp 7P 3L 5P 4L 4P 5L 3P 7L imp 8L 2P 6L 1P 9L 10L 11P 9P 10P 11l 12L 12P 0 9:10 12:1 9:10 9L 11P 10L 12L 0 12P 10P 11L 9P Soluzione del gioco delle monete
Breve storia dei calcolatori • Primi strumenti di calcolo meccanici • Abaco • 1600 • Pascal (somma e sottrazione) • Leibniz (moltiplicazione e divisione) • 1800 • Babbage (quadrato e stampa) • Babbage (macchina analitica) • Ada Augusta Lovelace (prima programmatrice) • Schede perforate utilizzate nel 1890 (inizio di IBM)
1944 • Mark I (primo calcolatore elettromeccanico) • 1946 • ENIAC • 1949 • EDSAC (macchina di tipo Von Neumann) • Anni successivi • Stessa architettura ma tecnologia più avanzata • 1960 • Internet (fine anni sessanta per esigenze militari, si chiamava Arpanet) • 1989 • www (word wide web: enorme enciclopedia)
Hardware Pezzi fisici tangibili che supportano l’elaborazione (chip di silicio, fili elettrici, tastiera, dischi, stampanti….) Software I componenti hardware sono inutili se non ricevono precise istruzioni. Un programma è una serie di istruzioni che l’hardware esegue in sequenza.
Componenti hardware principali • Dispositivi di input • Ad es.: mouse, tastiera • Dispositivi di output • Ad es.: monitor, stampante • Insieme in uno stesso contenitore • Processore (CPU) • Central Processing Unit • Interpreta e esegue le istruzioni • Memoria Organizzazione hardware standard Memoria Dispositivi di input Processore (CPU) Dispositivi di output
Due Tipi di Memoria • Principale • area di lavoro • mantiene temporaneamente programmi e dati (mentre il programma è in esecuzione) • Ausiliaria • permanente • salva programmi e risultati • Esempi: floppy & hard disk, CD, nastri
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
Radice Directory File Directory File Directory Directory File File Directory Directory File File Organizzazione della Memoria Ausiliaria
Programma Input Output Programma • Insieme di istruzioni che il calcolatore deve eseguire Calcolatore
Tipi di Programmi • Sistema Operativo • Programma supervisore • DOS, Windows, MacOS, UNIX, Linux • Applicazioni esistenti • word-processor/editor • web browser • compilatori o assembler • Applicazioni create dall’utente
Informazione Esistono due formati per memorizzare l’informazione: ANALOGICO DIGITALE L’informazione analogica è continua La tecnologia digitale spezza e cresce proporzionalmente alla l’informazione in tanti pezzi sorgente di informazione che rappresenta come numeri Es: termometro di mercurio, segnali Es: compact disc elettrici
I computer moderni sono digitali: Ogni tipo di informazione è spezzato in blocchi. Ogni blocco è rappresentato da un numero e l’informazione è memorizzata sotto forma di sequenza di numeri. Il computer digitale memorizza l’informazione sotto forma di numeri binari (base 2). La singola cifra binaria si chiama bit (binary digit). La base del sistema indica quante cifre si hanno a disposizione e il valore posizionale di ogni cifra in un numero.
Sistemi posizionali Il sistema di numerazione decimale è basato sull’alfabeto decimale {0,1,2,3,4,5,6,7,8,9} ed ogni numero è rappresentato come sequenza di simboli di tale alfabeto. Ad ogni simbolo è associato un peso a seconda della posizione. Es: 2863=2x103 +8x102+6x101+3x100
In generale i sistemi numerici posizionali in base b2 rappresentano ogni numero con m cifre in base b: N=cm-1…….c0 Dove i ci denotano elementi di un insieme di b simboli che corrispondono ai primi b numeri naturali 0…..b-1. Vale N=∑cibi Es:11002=1x23+1x22+0x21+0x20
Come comunicare • Linguaggio macchina: • sequenze di 0 ed 1 • rigoroso • essenziale • Linguaggio assembler: • simbolico • semplice traduzione aggiuntiva • Linguaggio naturale: • linguaggio preferito dall’essere umano • ambiguo, ridondante, non preciso • Linguaggio di programmazione ad alto livello
Storia Moderna • PASCAL (1970) • Programming in Logic (1971) • C (1974) • ADA(1980)
Storia Contemporanea • C++ (1985) • Java (1994)
Tipi di programmazione • Funzionale • Logica • Procedurale • Orientata agli oggetti
macchina traduttore programma Codice in l. macchina macchina Codice in l. macchina dati risultati Traduttori
Compilatori ed interpreti • Compilatore • programma che traduce un programma in linguaggio ad alto livello in un programma in linguaggio più semplice che il calcolatore può eseguire (più o meno) direttamente. • Interprete • programma che traduce ed esegue una dopo l’altra le istruzioni che compongono il programma sorgente
L’approccio di Java • Sia compilato che interpretato • Codice intermedio: “Byte Code” • codice a basso livello portabile • simile al codice assembler ma indipendente dall’hardware • invisibile ai programmatori Java • L’interprete traduce dal byte code in un programma nel linguaggio macchina della macchina specifica
Programmi precedentemente compilati Dati in input Compilatore Java Programma in Byte-Code Interprete Esecuzione Output del Programma Java L’ambiente Java Programma Java
Cosa è Java • Linguaggio di programmazione familiare • Simile a C e C++ • Linguaggio di programmazione orientato a oggetti • Facile da modificare e altamente riutilizzabile • Linguaggio robusto • Restrizioni per evitare che le applicazioni generino errori • Linguaggio ad alte prestazioni • Strumenti per la gestione di più processi • Linguaggio portabile • Applicazioni eseguibili su Windows, Linux o MacOS • Linguaggio semplice • Pochi strumenti base e molte librerie
compilatore Windows codice eseguibile Windows codice sorgente compilatore Linux codice eseguibile Linux compilatore MacOS codice eseguibile MacOS Compilatori tradizionali
compilatore Windows interprete bytecode Windows codice sorgente compilatore Linux interprete bytecode Linux Java bytecode compilatore MacOS interprete bytecode MacOS Compilatore Java
Programmazione • Concetti base: • dati • istruzioni • Dati: • variabili • tipi • Istruzioni: • istruzioni base • strutture di controllo • sotto-programmi
Variabili e tipi • Variabile: • locazione di memoria a cui è dato un nome con cui chiamarla ed utilizzarla • programmatore usa il nome senza necessariamente sapere che esso faccia riferimento ad una locazione di memoria • Tipo: • ogni variabile ha un tipo che indica che genere di dati la variabile può contenere • una variabile può contenere dati di tipo intero (ad es., 15 o 2038), oppure dati di tipo carattere (ad es., ‘a’ o ‘£’) oppure dati di tipo stringa (ad es., “java” o “pascal”)
Istruzioni base • Assegnazioni ed espressioni: • comandi per leggere e scrivere dati in una variabile e per fare calcoli • esempio: interest = amount * 0.07; • Input/Output: • comandi per ricevere dati dall’utente o da un file su disco e comandi per inviare dati nell’altra direzione
Strutture di controllo • Un programma è una sequenza di istruzioni • Il calcolatore esegue le istruzioni nell’ordine in cui esse appaiono, una dopo l’altra • molto limitato • Le strutture di controllo sono istruzioni speciali che consentono di modificare il normale flusso di istruzioni • Due tipi base di strutture di controllo • cicli • permettono di ripetere una sequenza di istruzioni • diramazioni • permettono di decidere tra due o più diverse alternative di proseguimento
Sotto-programmi • I programmi sono spesso abbastanza complessi da dover essere scomposti in “pezzi” più maneggevoli • Un sotto-programma consiste di istruzioni per svolgere un certo compito raggruppate insieme in un’unità a cui è dato un nome • il nome può essere usato come sostituto dell’intero insieme di istruzioni • Esempio • uno dei compiti del programma consiste nel disegnare un rettangolo sullo schermo • scrivere le necessarie istruzioni e raggrupparle in un sotto-programma di nome drawRect • ogni volta che il programma deve disegnare un rettangolo, lo può fare con una semplice istruzione: drawRect(); • Vantaggi: • risparmio di scrittura, organizzazione, riutilizzo