Introduzione all’informatica

Slides:



Advertisements
Presentazioni simili
Le rette.
Advertisements

© 2007 SEI-Società Editrice Internazionale, Apogeo Unità E1 Dallanalisi del problema alla definizione dellalgoritmo.
Linguaggi algoritmici
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità A1 Informazioni e dati.
ALGORITMI Un algoritmo (detto anche procedura, prescrizione, processo, routine, metodo) è un insieme di regole (dette anche direttive o istruzioni) che,
Presentazione Computer Forensic 27/03/2017
I Poligoni.
Informatica Generale Susanna Pelagatti
Informatica Generale Alessandra Di Pierro
Fondamenti di Informatica
I QUADRILATERI “Per geometria non intendo lo studio artificioso di
1 Istruzioni, algoritmi, linguaggi. 2 Algoritmo per il calcolo delle radici reali di unequazione di 2 o grado Data lequazione ax 2 +bx+c=0, quali sono.
Iterazione enumerativa (for)
Informatica Problema Algoritmo Programma
Informatica 1. Perché linformatica? Perché insegnare informatica agli studenti di ingegneria meccanica? Per rispondere, cominciamo a capire che cosa è
Corso di Laurea in Biotecnologie Informatica (Programmazione)
Corso di Informatica (Programmazione)
SOFTWARE Lhardware è la parte che si può prendere a calci; il software quella contro cui si può solo imprecare. SOFTWARE E linsieme dei dati e dei programmi.
Linguaggi di Programmazione 1 docente: Maurizio Tucci Lezione 0.1 Concetti di Base.
Modelli simulativi per le Scienze Cognitive
Algoritmi.
Strutture di controllo in C -- Flow Chart --
Fondamenti di Informatica Algoritmi
Gli algoritmi.
Algoritmi e diagrammi di flusso
Elementi di Informatica
Elementi di Informatica
Da Problema a Programmazione
Biologia Computazionale - Algoritmi
Dall’algoritmo al programma.
Il Piano Cartesiano .
Algoritmi e Programmazione strutturata
INFORMATICA MATTEO CRISTANI.
PROGRAMMAZIONE: linguaggi
CONCETTI DI BASE 1.0 FONDAMENTI 1.1 HARDWARE 1.2 SOFTWARE 1.3 RETI
BIOINFO3 - Lezione 15 ISTRUZIONI
Fondamenti di Informatica e Informatica di base Prof.ssa Elisa Tiezzi
ECDL Patente europea del computer
Alla fine degli anni quaranta nasceva il mito del cervello elettronico, e tutte le attività connesse allutilizzo del computer venivano indicate tramite.
Linguaggi per COMUNICARE
Programma di Informatica Classi Prime
IO E LA MATEMATICA PROCEDURALE
R 255 G 211 B 8 R 255 G 175 B 0 R 127 G 16 B 162 R 163 G 166 B 173 R 104 G 113 B 122 R 234 G 234 B 234 R 175 G 0 B 51 R 0 G 0 B 0 R 255 G 255 B 255 Supporting.
Rappresentazione degli algoritmi
Rappresentazione dell’informazione nel calcolatore.
La ricorsione.
GLI ALGORITMI VISIBILE SUL BLOG INFORMATICA ANNO SCOLASTICO 2013 / 2014 GABRIELE SCARICA 2°T.
Informatica 3 V anno.
1 Informatica Generale Alessandra Di Pierro Ricevimento: Giovedì ore presso Dipartimento di Informatica, Via Buonarroti,
Algoritmi.
Vincenza Ferrara Novembre 2007 Fondamenti di Matematica e Informatica Laboratorio Informatica I anno a.a
1 Informatica Generale Marzia Buscemi Ricevimento: Giovedì ore , Dipartimento di Informatica, stanza 306-PS o per posta.
L’ELABORATORE ELETTRONICO uno strumento in grado di eseguire insiemi di azioni (“mosse”) elementari le azioni vengono eseguite su oggetti (dati) per produrre.
Algoritmi e Programmazione (in C) Stefano Cagnoni e Monica Mordonini
Informatica e Informatica di Base
Problemi, algoritmi e programmazione
Corsi di Laurea in Biotecnologie
Corso integrato di Matematica, Informatica e Statistica Informatica di base Linea 1 Daniela Besozzi Dipartimento di Informatica e Comunicazione Università.
ALGORITMI Dal problema al programma Definizione di algoritmo
Il computer ragiona? Problemi e algoritmi. Paola Pianegonda2 Cos’è un problema?  Problema è qualsiasi situazione della quale non conosciamo la soluzione.
Programmazione dei Calcolatori Elettronici
Dal problema al programma
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Algoritmi e basi del C Marco D. Santambrogio – Ver. aggiornata al 24 Agosto 2015.
GLI ALGORITMI Appunti preparati dalla prof.ssa Maria D’Angelo.
Analisi matematica Introduzione ai limiti
Informatica Problemi e algoritmi. una situazione che pone delle domande cui si devono dare risposte. Col termine problema o situazione problematica s’indica.
Elementi di calcolo combinatorio e di probabilità. Prof. Ugo Morra Liceo scientifico V. Vecchi di Trani Lezione di potenziamento delle abilità in matematica.
Unità di apprendimento 6 Dal problema al programma.
Dal problema al programma – ciclo di sviluppo del software La scrittura del programma è solo una delle fasi del processo di sviluppo di un'applicazione.
1 ELEMENTI DI CALCOLO COMBINATORIO. 2 Elementi di calcolo combinatorio Si tratta di una serie di tecniche per determinare il numero di elementi di un.
Transcript della presentazione:

Introduzione all’informatica

Perché programmare Perché insegnare programmazione agli studenti di ingegneria civile? Per rispondere, cominciamo a capire che cosa è l’informatica Definizione di Ceri,Mandrioli,Sbattella: “(L’informatica è) la scienza della rappresentazione e dell’elaborazione dell’informazione” Definizione dell’ Association for Computing Machinery (ACM): “L’informatica è lo studio sistematico degli algoritmi che descrivono e trasformano l’informazione: la loro teoria, analisi, progetto, efficienza, realizzazione, e applicazione” L’informatica non è la scienza del calcolatore, non è la scienza di internet, non è la scienza dei siti web...

Perché programmare (2) Una definizione piuttosto rudimentale di “programmazione” potrebbe essere: “Far eseguire al calcolatore ciò che noi vogliamo che faccia” Mediante la programmazione noi diciamo al computer come rappresentare ed elaborare le informazioni Il computer per l’informatica è un mezzo (molto potente), ma non è il fine volendo, si può fare informatica anche senza computer (in origine il “computer” era il “computatore”, ovvero un essere umano) il computer però è molto più efficiente di un essere umano Quali informazioni possiamo rappresentare/elaborare? Di fatto qualunque: fatture, carriera universitaria degli studenti, conto corrente figure geometriche, edifici, ponti, terreni, immagini genoma umano ... Le informazioni che devono essere elaborate da un computer devono prima essere rappresentate in forma digitale

Rappresentazione digitale dell’informazione Caratteri A ogni lettera (maiuscole e minuscole), cifra e simbolo (parentesi, punteggiatura, ...) si assegna un numero, secondo il codice ASCII (American Standard Code for Information Interchange), ad esempio. Immagini L’immagine viene discretizzata in punti, quindi una o più unità di informazione numerica esprime per ogni punto il colore secondo una tabella o indicando le tre componenti RGB. Musica Il suono degli strumenti viene “campionato” a intervalli regolari. Ogni campione contiene informazione numerica che rappresenta la forma d’onda corrispondente. Per i CD la frequenza di campionamento è di 44100 Hz.

Linguaggio di programmazione “Far eseguire al calcolatore ciò che noi vogliamo che faccia” Un linguaggio di programmazione è un modo per descrivere al computer le informazioni da elaborare e le operazioni da compiere Esistono diversi linguaggi di programmazione: C FORTRAN C++ Java Lisp Prolog ... I principi di base sono molto simili tra i vari linguaggi di programmazione, una volta imparati quelli, imparare un nuovo linguaggio di programmazione non è particolarmente difficile quelli che vediamo noi a oggetti funzionale logico

Programmazione per gli ingegneri civili Il computer nasce come macchina per fare calcoli Il computer non è molto “intelligente” (non sa fare più di quello che gli viene detto di fare), ma quel che fa (i calcoli) lo fa molto bene purchè gli venga detto correttamente come farli... Saper programmare significa saper far eseguire al computer i calcoli, le elaborazioni che noi vogliamo che vengano eseguite Il vostro lavoro finita l’università potrebbe essere di dover programmare dei modelli di calcolo di strutture, per decidere se un particolare progetto di ponte è buono o meno

La programmazione e gli algoritmi Programmare = far risolvere al computer un determinato problema Il primo, fondamentale passo però è di decidere come il problema va risolto Il “come” un problema viene risolto (in maniera meccanica, cioè eventualmente tramite un calcolatore) è definito mediante un algoritmo

Il concetto di algoritmo Definizione informale di algoritmo: una sequenza precisa e finita di operazioni, comprensibili da un esecutore, che portano allo svolgimento di un compito (cioè alla soluzione del problema considerato) Il termine “algoritmo” deriva dal nome del matematico persiano Muhammad ibn Musa 'l-Khwārizmi, che pubblicò, tra gli altri, il “Libro sulla ricomposizione e sulla riduzione”, dal quale prende le origini la parola Algebra Alcune considerazioni: il concetto di algoritmo presuppone l’esistenza di un esecutore, cioè colui che deve effettivamente compiere le operazioni l’esecutore è spesso, ma non sempre, il computer le operazioni devono essere precise abbastanza per essere comprensibili dall’esecutore il numero di operazioni deve essere finito Esempi di algoritmi: istruzioni per la cottura della pasta istruzioni per il montaggio di un mobile calcolo del massimo comune divisore di numeri naturali prelevamento di denaro tramite terminale Bancomat

Esempio di algoritmo Algoritmo di cottura degli spaghetti: Mettere l’acqua sul fuoco Attendere l’ebollizione Mettere il sale Buttare gli spaghetti Attendere x minuti Scolare la pasta Questo è un algoritmo puramente sequenziale, le operazioni vengono eseguite in un unico ordine, da 1 a 6 Ci sono più modi di risolvere lo stesso problema, quindi ci sono più algoritmi che portano allo stesso risultato. Una semplice variazione dell’algoritmo di cottura degli spaghetti:

Un esempio di algoritmo di calcolo Somma di due numeri tramite pallottoliere 1. sposta la pallina da sinistra a destra nella prima riga, al contempo da destra a sinistra nella terza 2. ripeti l’operazione precedente fino a svuotare la parte sinistra della prima riga. 3. sposta la pallina da sinistra a destra nella seconda riga, al contempo da destra a sinistra nella terza 4. ripeti l’operazione precedente fino a svuotare la parte sinistra della seconda riga. situazione iniziale situazione finale

Algoritmi, programmi, programmatori Gli algoritmi sono descritti tramite programmi, cioè sequenze di istruzioni scritte in un linguaggio (linguaggio di programmazione) comprensibile al calcolatore se l’esecutore è il computer, devo descrivergli ciò che deve fare (l’algoritmo) in un linguaggio che lui capisca ===>linguaggio di programmazione Il compito del programmatore informatico è produrre algoritmi (cioè capire la sequenza di passi che portano alla soluzione di un problema) e codificarli in programmi (cioè renderli comprensibili al calcolatore)

Caratteristiche desiderate degli algoritmi E’ fondamentale che l’algoritmo prodotto sia corretto ed efficiente Un algoritmo deve essere corretto deve cioè risolvere il problema desiderato un algoritmo che risolve un problema diverso da quello desiderato non serve a nulla spesso lo sforzo di capire quale è il problema da risolvere non è banale Un algoritmo deve essere efficiente deve cioè fare un buon uso delle risorse a disposizione (tempo, spazio, ecc.) noi in questo corso non ci preoccuperemo di come scrivere algoritmi (e programmi) efficienti, ma l’efficienza è comunque un problema cruciale per chi scrive algoritmi

Esempio: gestione di una biblioteca Descrizione del problema: Libri disposti sugli scaffali Ogni libro si trova in una precisa e invariabile posizione con due coordinate: scaffale e posizione nello scaffale La biblioteca è dotata di uno schedario (ordinato in ordine alfabetico per autore/i e titolo) Ogni scheda contiene, nell’ordine: cognome e nome dell’autore titolo del libro data di pubblicazione numero dello scaffale in cui si trova numero d’ordine della posizione attribuita al libro nello scaffale. Algoritmo per prelevare un libro dalla biblioteca: Decidi il libro da richiedere Preleva il libro richiesto Il secondo passo non è ancora elementare abbastanza, non è sufficientemente chiaro come vada realizzato. Servono maggiori dettagli

Gestione della biblioteca (2) Decidi il libro da richiedere Cerca la scheda del libro richiesto Segnati numero scaffale e posizione Cerca lo scaffale indicato Accedi alla posizione indicata e preleva il libro Scrivi i tuoi dati sulla "scheda prestito“ Questo algoritmo è già più preciso, ma potrebbe essere dettagliato ulteriormente Il passo più complicato è certamente il 2: come faccio per “cercare la scheda del libro richiesto”?

Sottoalgoritmo Mi serve un nuovo algoritmo per risolvere il problema “dato l’autore e il titolo di un libro, trova la scheda corrispondente nello schedario” mi serve un sottoalgoritmo per risolvere il passo 2 Il primo algoritmo che probabilmente viene in mente: esamina la prima scheda dello schedario Se autore e titolo della scheda corrente sono quelli cercati allora stop, ricerca conclusa con successo, altrimenti passa alla scheda successiva Se sei in fondo allo schedario allora stop, la scheda cercata non esiste altrimenti passa alla scheda successiva ripeti dal passo 2. Questo algoritmo certamente funziona (controllo tutte le schede, prima o poi, se la scheda esiste, la trovo)

Considerazioni e miglioramenti Se cerco un libro di Asimov, con pochi passi di questo algoritmo di ricerca arrivo alla scheda desiderata, ma se cerco un libro di Zulueta da Costa? Si intuisce che l’algoritmo non è dei più efficienti... Per fare un algoritmo più efficiente possiamo sfruttare il fatto di sapere che lo schedario è ordinato per autore: prendi la scheda centrale dello schedario se è la scheda cercata la ricerca ha termine con successo se la scheda cercata segue alfabeticamente quella esaminata, ripeti la ricerca nella seconda metà dello schedario altrimenti ripeti la ricerca nella prima metà Questo algoritmo però ha un problema... non contempla il caso in cui la scheda cercata non esista più precisamente, il caso in cui ad un certo punto la parte di schedario in cui fare la ricerca sia vuota

Ulteriore modifica Modifica che lo rende corretto anche nel caso in cui la scheda non esista: se lo schedario è vuoto allora termina con insuccesso altrimenti prendi la scheda centrale dello schedario Ora l’algoritmo non solo è corretto, ma è anche “più efficiente” di quello precedente In realtà, a guardarlo bene, ci impiega un po’ di più a trovare il libro di Asimov, ma molto di meno a trovare quello di Zulueta da Costa... ...ma sono considerazioni che non approfondiremo ulteriormente

Algoritmi per il disegno Esecutore: persona munita di programma CAD Operazioni elementari: le operazioni di disegno di un software CAD: disegna una linea dati 2 punti perpendicolare ad un altra linea ... disegna un arco di circonferenza dato il centro, il raggio, ... trova l’intersezione di due linee Esattamente come per la ricerca di un libro in uno schedario, ci sono modi più o meno efficienti di fare delle operazioni di disegno Se un’operazione viene fatta tante volte, trovare la maniera più efficiente di eseguirla può portare il disegnatore (voi!) a risparmiare un sacco di tempo e di energie Inoltre, un algoritmo di disegno potrebbe anche essere implementato (cioè programmato) in un apposito linguaggio di programmazione che ha comandi di disegno AutoCAD, per esempio, ha dei veri e propri linguaggi di programmazione (AutoLisp, ObjectARX) che permettono di automatizzare le operazioni di disegno

Bisettrice Problema: dato un angolo, disegnarne la bisettrice Algoritmo: Disegna un arco con centro nel vertice dell’angolo, in modo da intersecare i due lati dell’angolo. Per ogni lato dell’angolo: 2.1 Disegna la perpendicolare al lato che parte dal punto di intersezione dell’arco con il lato Disegna una linea dal vertice dell’angolo al punto di intersezione delle due perpendicolari disegnate al punto 2; quella è la bisettrice L’algoritmo per il disegno della bisettrice è un algoritmo “di base”, che può essere riutilizzato come sottoalgoritmo in molti altri problemi. Per esempio, per il disegno degli spioventi di un tetto

Algoritmo degli spioventi Problema: dato il perimetro di un tetto, disegnarne gli spioventi Algoritmo: Per ogni coppia di lati del tetto (anche quelle non consecutive): 1.1 se i lati non sono paralleli, allora disegna la bisettrice dell’angolo 1.2 altrimenti disegna la retta a metà dei due lati Individua tutti i punti di intersezione fra tre bisettrici, chiama questo insieme P. Seleziona da P le intersezioni in cui 2 bisettrici hanno l'estremo di partenza in uno spigolo del tetto, e tra queste seleziona le prime che si incontrano partendo dagli spigoli stessi; chiama questo insieme S. Disegna le linee congiungenti i punti di S con gli spigoli con cui sono collegati. Dai punti dell'insieme S, prosegui lungo la terza bisettrice fino ad incontrare un nuovo punto di intersezione di P in cui almeno una bisettrice ha l'estremo di origine in uno spigolo del tetto; chiama l'insieme delle nuove intersezioni così congiunte I. Disegna le linee congiungenti le intersezioni in I con gli spigoli con cui sono collegate. Disegna le linee congiungenti tra loro i punti dell'insieme I che sono connessi da una bisettrice. Le linee disegnate ai passi 4, 6 e 7 costituiscono le linee degli spioventi del tetto.

Un algoritmo numerico Problema: calcolo del massimo comun divisore (MCD) di due numeri naturali Algoritmo banale: Prendi il minore tra i due numeri Se li divide entrambi allora stop, è il MCD altrimenti, passa al numero immediatamente inferiore ripeti dal passo 2 Un algoritmo più efficiente è quello inventato da Euclide: Se il numero più piccolo dei due divide esattamente (cioè con resto 0) il più grande allora stop, quello è il MCD. altrimenti, calcola il resto della divisione dei due numeri, e ripeti dal passo 2 usando come numeri il resto ed il minore dei numeri di partenza Usiamo l’algoritmo per calcolare il MCD di 2079 e 987: dividiamo 2079 per 987 e otteniamo quoziente=2 e resto=105 dividiamo 987 per 105 e otteniamo quoziente=9 e resto=42 dividiamo 105 per 42 e otteniamo quoziente=2 e resto=21 dividiamo 42 per 21 e otteniamo quoziente=2 e resto=0 siamo arrivati a resto nullo: l’ultimo divisore (21) è il MCD che stiamo cercando

Il concetto di variabile Ad ogni ripetizione dell’algoritmo ci sono 4 numeri in gioco: i due numeri di cui si vuole il MCD, il quoziente, ed il resto: dividiamo 2079 per 987 e otteniamo quoziente=2 e resto=105 dividiamo 987 per 105 e otteniamo quoziente=9 e resto=42 ... dividiamo  per  e otteniamo quoziente= e resto= Diamo un nome alle 4 “caselle” per distinguerle una dall'altra: dividiamo x per y e otteniamo quoziente=q e resto=r x, y, q, r è come se fossero dei “contenitori” in cui noi mettiamo dei valori quando passeremo a parlare di linguaggi di programmazione (e di C in particolare) questi “contenitori” li chiameremo “variabili” attenzione!!! Non è il è il concetto matematico di “variabile”, ma qualcosa di diverso (vedremo meglio) In questi “contenitori” posso mettere dei valori, per esempio potrei mettere il valore 2079 nel contenitore x, il contenuto del contenitore r nel contenitore y x  2079 y  r Potrei anche fare cose “più complicate”, per esempio mettere nel contenitore q il valore della divisione di ciò che sta in x per ciò che sta in y: q  x/y

riscriviamo l'algoritmo... Obiettivo: dati due numeri non nulli a e b (con a>b) trovare il loro MCD metti il numero a nel contenitore x metti il numero b nel contenitore y dividi il contenuto di x per il contenuto di y; metti il quoziente in q, ed il resto in r se r è uguale a 0, allora stop, y contiente il MCD cercato altrimenti, metti in x il valore che c'è in y, ed in y il valore che c'è in r ripeti dal passo 3 Riscriviamo ulteriormente l'algoritmo x  a y  b q  x/y, r  x-q*y se r = 0, allora stop, y è il MCD altrimenti x  y, y  r

Notazione: diagrammi di flusso inizio dati in ingresso (input) istruzione condizione? dati in uscita (output) sì no fine

mettere l’acqua sul fuoco attendere l’ebollizione mettere il sale attendere x minuti scolare la pasta

sì no r = 0? x  y y  r y è l’MCD a,b (a>b) x  a y  b q  x/y r  x-q*y r = 0? sì no x  y y  r y è l’MCD