Università di Roma “Tor Vergata” Fondamenti di Informatica 1 Ingegneria Gestionale FOI1BIS_GES CORSO COORDINATO CON FOI1_GES PROF. V.GRASSI obiettivo: introduzione a dell’informatica conoscenze di base informatica come metodologia di risoluzione di problemi con l’ausilio di una “macchina” definire un metodo istruire una risolutivo macchina ____________________________________ Docente: Sandro Moriggi mio orario ricevimento: martedì ore 14:50 - 15:50 aula T7 (forse...) e-mail: [email protected] N.B.: nell'OGGETTO della e-mail specificare 1 L1 Fondamenti di Informatica 1 - Vincenzo Grassi – FOI1BIS_GES Sandro Moriggi Università di Roma “Tor Vergata” "studente:NOME_COGNOME" 2 L1 Fondamenti di Informatica 1 - Vincenzo Grassi – FOI1BIS_GES Sandro Moriggi Università di Roma “Tor Vergata” • materiale didattico: 1) A. Domenici, G. Frosini: Introduzione alla programmazione ed elementi di strutture dati con il linguaggio C++ - FRANCO ANGELI 2) V. Grassi - Note per il corso di Fondamenti di Informatica 1 (a.a. 2000/2001) - dispensa (disponibile sul sito del corso) è possibile consultare anche 3) Deitel & Deitel - C++ Fondamenti di programmazione - APOGEO è possibile consultare anche 4) Derek M. Capper - Introduzione a C++ per le scienze e l'ingegneria - McGraw-Hill • ambiente di programmazione: DevC++ in distribuzione libera su: http://www.bloodshed.net/devcpp.html 3 L1 Fondamenti di Informatica 1 - Vincenzo Grassi – FOI1BIS_GES Sandro Moriggi Università di Roma “Tor Vergata” (per scaricare il software è consigliabile usare il Download from Simtel.net (ultima riga della pag.) e poi riferimento "italy") oppure il link diretto http://www.simtel.net/autodownload.html?mirror=47 &product=17456&key=00ceeaf13c425823e3eb • per programma del corso, lucidi delle lezioni, dispensa, esercizi, comunicazioni: consultare: Pagina Didattica S.Moriggi http://www.uniroma2.it/didattica/foi1bis_ges (in corso di aggiornamento) i lucidi delle lezioni (sostanzialmente identici) sono attualmente(12/12/01) disponibili sulla pag. didattica del prof. V. Grassi http://www.uniroma2.it/didattica/foi1_no modalità d’esame (provvisorie, da precisare in seguito): • una prova scritta di metà corso 4 L1 Fondamenti di Informatica 1 - Vincenzo Grassi – FOI1BIS_GES Sandro Moriggi Università di Roma “Tor Vergata” • una prova scritta finale [probabilmente 5 L1 preceduta da una prova pratica su PC] Fondamenti di Informatica 1 - Vincenzo Grassi – FOI1BIS_GES Sandro Moriggi Università di Roma “Tor Vergata” applicazioni informatiche: • animazione • elaborazione di suoni • reti di ipertesti (WWW) • calcolo scientifico (sintesi molecolare, fluidodinamica, …) •… cosa c’è dietro? rappresentare informazione capacità di manipolare rappresentazioni 6 L1 Fondamenti di Informatica 1 - Vincenzo Grassi – FOI1BIS_GES Sandro Moriggi Università di Roma “Tor Vergata” PREMESSA -------- Informatica presente in tutti i settori dell'industria, dei servizi e della vita privata grande diffusione di dispositivi elettronici che effettuano l'elaborazione automatica di informazioni § personal computer § office automation (aspetti amministrativi di un'azienda) § scrittura di documenti, fogli elettronici, posta elettronica § CAD, CAM (progettazione) § sistemi di controllo di processi industriali § basi di dati (gestione e manipolazione di archivi di dati) § sistemi di supporto alle decisioni § sistemi integrati nei dispositivi di uso comuni [sistemi embedded: televisori, VCR, cellulari, lavatrici, automobili, ...] 7 L1 Fondamenti di Informatica 1 - Vincenzo Grassi – FOI1BIS_GES Sandro Moriggi Università di Roma “Tor Vergata” Ogni sistema informatico e` costituito da - una parte HARDWARE (dispositivi elettronici) - una parte SOFTWARE (programmi) Dal momento che e` il SOFTWARE che determina caratteristiche e funzionalita` specifiche di un sistema informatico, ci concentreremo prevalentemente sugli aspetti legati allo sviluppo di programmi (programmazione) per risolvere determinati problemi 8 L1 Fondamenti di Informatica 1 - Vincenzo Grassi – FOI1BIS_GES Sandro Moriggi Università di Roma “Tor Vergata” PROBLEMA Un PROBLEMA nasce • se un SOGGETTO intende raggiungere una META e • se è fallito un primo tentativo per raggiungerla risolvere un problema significa: potere identificare § STATO INIZIALE § PROCEDIMENTO DI ESECUZIONE § STATO FINALE possedere un criterio di verifica del risultato ottenuto dati iniziali 9 L1 PROCEDIMENTO→ ← verifica dati finali Fondamenti di Informatica 1 - Vincenzo Grassi – FOI1BIS_GES Sandro Moriggi Università di Roma “Tor Vergata” per attuare il procedimento di soluzione sono necessari: 1.RISOLUTORE: chi si occupa di risolvere teoricamente il problema; impartisce le istruzioni 2.ESECUTORE: qualcuno o qualche cosa che possiede tutte le capacità per risolvere operativamente il problema, seguendo le istruzioni fornite dal risolutore Il risolutore nel formulare le istruzioni relative alla soluzione del problema deve tenere conto dei seguenti elementi: § REPERTORIO dell’esecutore: quali sono le azioni che l’esecutore è capace di svolgere effettivamente § FINITEZZA delle azioni da svolgere: il procedimento deve cominciare e finire dopo l’esecuzione di un certo numero (piccolo o grande) di azioni § DETERMINISMO delle azioni: ogni azione svolta dall’esecutore determina, cioè stabilisce senza ambiguità, quale sarà l’azione successiva 10 L1 Fondamenti di Informatica 1 - Vincenzo Grassi – FOI1BIS_GES Sandro Moriggi Università di Roma “Tor Vergata” ESEMPIO: ricerca di un numero telefonico fonti di informazione: (A) rubrica telefonica (B) elenco telefonico INFORMAZIONI ORGANIZZATE DIVERSAMENTE: (A) rubrica: § cognomi e numeri telefonici divisi per gruppi di lettere (A-B, C-D, ...) § all'interno di un gruppo cognomi in ordine casuale (B) elenco: § informazioni ordinate per cognome e poi per nome § intestazione associata ad ogni pagina ricerca di un cognome: dipende da come sono organizzate le informazioni: (A) rubrica: 1. cerchiamo la pagina con la lettera giusta 2. all'interno della pagina ricerca sequenziale (B) elenco: 1. apriamo l'elenco in un punto opportuno 2. avanti o indietro per gruppi di pagine fino a quella giusta 3. nella pagina avanti o indietro per gruppi di nomi 11 L1 Fondamenti di Informatica 1 - Vincenzo Grassi – FOI1BIS_GES Sandro Moriggi Università di Roma “Tor Vergata” Per risolvere problemi che richiedono ricerca e/o manipolazione di informazione e` necessario individuare un METODO RISOLUTIVO, ovvero una sequenza di operazioni che ci permette • a partire dalle informazioni a disponibili (dati di ingresso) • di ricavare i risultati (dati di uscita) ALGORITMO la struttura del metodo risolutivo e` legata al modo in cui le informazioni sono organizzate per automatizzare la soluzione del problema dobbiamo RAPPRESENTARE le informazioni ed il metodo risolutivo in un linguaggio eseguibile dal calcolatore (LINGUAGGIO DI PROGRAMMAZIONE) PROGRAMMA 12 L1 Fondamenti di Informatica 1 - Vincenzo Grassi – FOI1BIS_GES Sandro Moriggi Università di Roma “Tor Vergata” ALGORITMI E PROGRAMMI Problemi da risolvere usando elaboratori possono essere di natura molto varia. ESEMPI 1) Dati due numeri, trovare il maggiore 2) Dato un elenco di nomi e numeri di telefono (rubrica o elenco telefonico) e un nome, trovare il numero di telefono corrispondente 3) Data la struttura di una rete stradale e le informazioni sui flussi dei veicoli, determinare il percorso più veloce da AaB 4) Scrivere tutti i numeri pari che non sono la somma di due numeri primi (Congettura di Goldbach) 5) Decidere per ogni programma C++ e per ogni dato in ingresso, se il programma termina quando viene eseguito su quel dato 13 L1 Fondamenti di Informatica 1 - Vincenzo Grassi – FOI1BIS_GES Sandro Moriggi Università di Roma “Tor Vergata” CARATTERISTICA COMUNE AI PROBLEMI Informazioni in ingresso Informazioni in uscita trasformate → OSSERVAZIONE SULLA FORMULAZIONE DEI PROBLEMI § descrizione non fornisce un metodo risolutivo (si pensi all'es. 3) § descrizione del problema è talvolta AMBIGUA o IMPRECISA (ad es., 2 con Mario Rossi che compare più volte) § per alcuni problemi non è noto un metodo risolutivo (ad es. 4) § esistono problemi per i quali è stato dimostrato che non può esistere un metodo risolutivo (ad es. 5) Noi consideriamo solo problemi per i quali è noto esistere un metodo risolutivo. 14 L1 Fondamenti di Informatica 1 - Vincenzo Grassi – FOI1BIS_GES Sandro Moriggi Università di Roma “Tor Vergata” PER DELEGARE AD UN CALCOLATORE LA SOLUZIONE DI UN PROBLEMA E` NECESSARIO 1) individuare un ALGORITMO che risolve il problema, ovvero un insieme di passi che, eseguiti in ordine, permettono a partire dalle informazioni a disposizione di calcolare i risultati PROPRIETA` DI UN ALGORITMO: • NON-AMBIGUITA’: le istruzioni devono essere univocamente interpretabili dall'esecutore • ESEGUIBILITA’: ogni istruzione deve poter essere eseguita (in tempo finito) con le risorse a disposizione • FINITEZZA: l'esecuzione dell'algoritmo deve terminare in tempo finito per ogni insieme di dati in ingresso 15 L1 Fondamenti di Informatica 1 - Vincenzo Grassi – FOI1BIS_GES Sandro Moriggi Università di Roma “Tor Vergata” 2) rappresentare in un linguaggio di programmazione (LDP) a) l'algoritmo a) b) le informazioni a disposizione c) le informazioni utilizzate dall'algoritmo d) le informazioni fornite al termine programma (codifica di un algoritmo in un LDP) b) dati in ingresso c) dati ausiliari d) dati in uscita RIASSUMENDO: PROBLEMA 16 L1 ALGORITMO PROGRAMMA Fondamenti di Informatica 1 - Vincenzo Grassi – FOI1BIS_GES Sandro Moriggi Università di Roma “Tor Vergata” § soluzione di un problema = RAPPRESENTAZIONE + ALGORITMO ? rappresentazione ( rappresentazione ( ) = [alt, largh, prof] ) = [ p_alt, p_largh] algoritmo: (alt < p_alt) e (largh < p_largh)? si ⇒ OK no ⇓ (alt < p_largh) e (largh < p_alt)? si ⇒ OK no ⇓ … (quanti tentativi ancora?) 17 L1 Fondamenti di Informatica 1 - Vincenzo Grassi – FOI1BIS_GES Sandro Moriggi Università di Roma “Tor Vergata” rappresentazione: uso di strumenti formali per rappresentare in modo simbolico un “frammento” di realtà algoritmo: sequenza finita di operazioni elementari che manipolano simboli per costruire una soluzione del problema nota: finito può anche essere molto grande ⇓ macchine per eseguire algoritmi informatica = punto di confluenza di: • metodi di soluzione (Euclide ~300 a.C., …, al-Kuwarizmi ~1000 d.C., …Hilbert ~1800 d.C., Gödel, Turing, ~1900 d.C., …) • macchine per manipolare simboli secondo regole date (abaco ?a.C., …, macchina di Babbage ~1800 d.C., … ENIAC ~1940 d.C., …) 18 L1 Fondamenti di Informatica 1 - Vincenzo Grassi – FOI1BIS_GES Sandro Moriggi Università di Roma “Tor Vergata” le macchine sono “stupide” ⇓ manipolazione “sintattica”, siamo noi a dare un significato ai simboli Esempio: determinare z = MCD(n,m) n,m∈N D(n) def = insieme dei divisori di n D(n) = { k | n = k·q, k∈N+, q∈N } {0} z = MCD(m,n) = max{D(m)∩D(n)} m,n 19 L1 MCD z Fondamenti di Informatica 1 - Vincenzo Grassi – FOI1BIS_GES Sandro Moriggi N+=N- Università di Roma “Tor Vergata” algoritmo: 1. prendi due numeri n e m 2. scrivi m in una casella di nome x scrivi n in una casella di nome y 3. se x=0 oppure y=0 allora: termina rispondendo: « problema banale o irrisolvibile » altrimenti: calcola il resto r di x diviso y se r=0 allora: termina rispondendo « il risultato è il valore scritto in y » altrimenti: sovrascrivi in x il valore scritto in y, sovrascrivi in y il valore di r 4. ritorna ad eseguire 3 (l’algoritmo dato è noto come algoritmo di Euclide per il calcolo di MCD) 20 L1 Fondamenti di Informatica 1 - Vincenzo Grassi – FOI1BIS_GES Sandro Moriggi Università di Roma “Tor Vergata” quali “abilità” (capacità di eseguire operazioni) sono necessarie per eseguire l’algoritmo? a) leggere e scrivere numeri b) eseguire operazioni aritmetiche c) seguire un flusso di operazioni utilizzando tre regole base: i. sequenza ii. scelta iii. iterazione “chiunque” sappia fare a, b e c può eseguire l’algoritmo, anche se ignora cosa è MCD le macchine reali (calcolatori) sanno fare solo operazioni di tipo a, b e c come fanno macchine così “primitive” ad eseguire applicazioni complesse? tutto è rappresentabile tramite numeri (“digitalizzazione”) 21 L1 Fondamenti di Informatica 1 - Vincenzo Grassi – FOI1BIS_GES Sandro Moriggi Università di Roma “Tor Vergata” Esempio 1: elaborazione testi testo ⇓ sequenza di caratteri ⇓ sequenza di numeri si usa una tabella analoga a questa: a↔1 b↔2 c↔3 d↔4 e↔5 • • • z ↔ 26 A ↔ 27 B ↔ 28 C ↔ 29 D ↔ 30 E ↔ 31 . ↔ 53 : ↔ 54 ; ↔ 55 , ↔ 56 (spazio) ↔ 57 • • • Z ↔ 52 • • • … Ada cade ⇔ 27 4 1 57 3 1 4 5 22 L1 Fondamenti di Informatica 1 - Vincenzo Grassi – FOI1BIS_GES Sandro Moriggi Università di Roma “Tor Vergata” Esempio 2: elaborazione suoni onda sonora ⇓ “discretizzazione” ⇓ sequenza di numeri 1 2 3 4 5 • • • • • • • • • • ⇓ 4 5 4 4 4 2 2 5 3 4 23 L1 Fondamenti di Informatica 1 - Vincenzo Grassi – FOI1BIS_GES Sandro Moriggi Università di Roma “Tor Vergata” Esempio 3: elaborazione immagini immagine ⇓ “discretizzazione” ⇓ sequenza di triple di numeri 1 2 3 1 2 3 codifica: casella bianca → 0 casella non bianca → 1 decodifica: 24 L1 0 → casella bianca 1 → casella grigia Fondamenti di Informatica 1 - Vincenzo Grassi – FOI1BIS_GES Sandro Moriggi Università di Roma “Tor Vergata” 1 2 3 1 2 3 codifica (1,1,1) (1,2,0) (1,3,0) (2,1,1) (2,2,1) (2,2,0) (3,1,1) (3,2,1) (3,3,1) decodifica approssimazione della rappresentazione 25 L1 Fondamenti di Informatica 1 - Vincenzo Grassi – FOI1BIS_GES Sandro Moriggi Università di Roma “Tor Vergata” come si comunica con una macchina che rappresenta tutto tramite numeri? si usa un linguaggio fatto di numeri !!! linguaggio macchina: 0001 1100 1000 0110 1101 1101 0000 0010 problemi: • difficile (per essere umani) da scrivere, leggere, correggere • legato ad una particolare macchina linguaggi Java,…): di alto livello (C++, Pascal, if (5>0) somma = 5 + 6; • istruzioni “vicine” al linguaggio umano • istruzioni indipendenti da una particolare macchina ⇓ necessità di tradurre nel linguaggio macchina 26 L1 Fondamenti di Informatica 1 - Vincenzo Grassi – FOI1BIS_GES Sandro Moriggi