Nessun titolo diapositiva

Transcript

Nessun titolo diapositiva
Università degli studi della Tuscia
Dipartimento di Scienze Ecologiche e Biologiche
Corso di laurea in Scienze Ambientali
A.A. 2013-2014 - II semestre
Colloquio di informatica (5 crediti)
Prof. Pier Giorgio Galli
([email protected])
Problema
Secondo le statistiche
ufficiali di youtube ogni
minuto vengono caricate un
certo numero di ore video.
Supposto che tale attività
aumenti ogni ora del 3% in un
giorno quante ore video
verrebbero caricate?
(Trova la soluzione prima di passare alle
prossime diapositive)
Ricerca dei dati
Ricerca del procedimento
risolutivo del problema
Ogni ora aumento del 3%
le ore caricate l'ora
precedente, al termine
faccio la somma delle
ore caricate per ogni
ora.
Implementazione
Costante
Implementazione del
procedimento risolutivo
del problema con un
foglio di calcolo
=b4+(b4*3)/100
=b5+(b5*3)/100
=somma(b4:b27)
Presentazione della soluzione
In un giorno
vengono caricate
206.558,82 ore video
Dal problema alla soluzione
Intuitivamente il processo che abbiamo
seguito può essere schematizzato:
Ricerca dei
dati del
problema
Ricerca e
implementazione
del procedimento
risolutivo
Soluzione
Gli algoritmi
Gli algoritmi sono metodi formali per la soluzione di una classe problemi in un numero
finito di passi.
Ogni problema è caratterizzato dai dati iniziali e dei risultati che si vogliono ottenere:
risolvere un problema significa ottenere in uscita i risultati desiderati a partire da un
certo insieme di dati presi in ingresso. Possiamo assumere che ciascun problema
consista di un insieme di casi particolari, o istanze di una classe di problemi. Se, ad
esempio, conosco l'algoritmo per calcolare l'area del triangolo nota la base e l'altezza,
allora conosco la procedura per calcolare l'area di tutti i triangoli.
Dati
(input)
Algoritmo
Dati
(output)
Gli algoritmi derivano il loro nome dal matematico arabo Muhammad ibn Musa alKhwarizmi (Corasmia o Baghdad, 780 circa – 850 circa) [il vocabolo algebra, invece,
deriva dal suo libro al-Kitāb al-mukhtasar fī hisāb al-jabr wa l-muqābala]
Proprietà fondamentali degli
algoritmi (parte 1)
Proprietà caratteristiche degli algoritmi:
 i passi costituenti devono essere "elementari", ovvero non ulteriormente
scomponibili (atomicità);
 i passi costituenti devono essere interpretabili in modo diretto e univoco
dall'esecutore, sia esso umano o artificiale (non ambiguità);
 l'algoritmo deve essere composto da un numero finito di passi e richiedere una
quantità finita di dati in ingresso (finitezza)
 l'esecuzione deve avere termine dopo un tempo finito (terminazione);
 l'esecuzione deve portare a un risultato univoco (effettività);
 a ogni passo, il successivo deve essere uno e uno solo, ben determinato
(determinismo).
Da Wikipedia, l'enciclopedia libera.
Proprietà fondamentali degli
algoritmi (parte 2)
Così, ad esempio, "rompere le uova" può essere considerato legittimamente un passo
elementare di un "algoritmo di cucina" (ricetta), ma non potrebbe esserlo anche
"aggiungere sale quanto basta", data l'ambiguità di questa frase.
Un passo come "preparare un pentolino di crema pasticcera" non può considerarsi
legittimo perché ulteriormente scomponibile in sotto-operazioni (accendere il fuoco,
regolare la fiamma, mettere il pentolino sul fornello, ecc.) e anche perché
contenente ambiguità (quanta crema?); potrebbe, però, essere associato a un
opportuno rimando a un'altra sezione del ricettario, che fornisca un sotto-algoritmo
apposito per questa specifica operazione. Questo suggerisce che, per comodità
d'implementazione, gli algoritmi possano essere modulari, ovvero orientati a risolvere
specifici sotto-problemi, e gerarchicamente organizzati. Inoltre, una ricetta che
preveda la cottura a microonde non può essere preparata da un esecutore sprovvisto
dell'apposito elettrodomestico; questo rimanda al problema della realizzabilità degli
algoritmi, ovvero della loro compatibilità con le risorse materiali e temporali a
disposizione. Infine, possono darsi più algoritmi validi per risolvere uno stesso
problema, ma ognuno con un diverso grado di efficienza.
Da Wikipedia, l'enciclopedia libera
Rappresentazione grafica degli
algoritmi
Algoritmo risolutivo della classe di
problemi Calcolare l'area del triangolo
rappresentato graficamente con un
diagramma di flusso.
Inizio
leggi b
leggi h
area(b*h)/2
scrivi area
Inizio
L'esecutore ottiene dall'esterno
il valore della variabile b (il
valore della base del triangolo)
Si legge: la variabile di nome area
assume il valore della variabile b
moltiplicata per il valore della
variabile h diviso 2
L'esecutore invia all'esterno il
valore della variabile area (il
valore dell'area del triangolo)
Diagramma di flusso
Il diagramma di flusso è una delle
possibili rappresentazioni grafiche
dell'algoritmo
1.
2.
3.
si parte dal blocco iniziale
si segue la freccia in uscita
si giunge al blocco successivo e si effettua
l'operazione descritta nel blocco
4. si procede iterando i passi 2 e 3 fino a
giungere al blocco finale.
Tra le operazioni si distinguono:
• azione, che comportano una attività o
un'elaborazione
• test, che indicano due o più direzioni in base
a un fattore di decisione
• ingresso/uscita, che comportano l'immissione
di informazioni dall'esterno oppure l'invio di
informazioni verso l'esterno
Da Wikipedia, l'enciclopedia libera
Rappresentazione degli
algoritmi
Una combinazione di blocchi elementari può
descrivere un algoritmo se:
1. viene usato un numero finito di blocchi
2. lo schema inizia con un blocco iniziale e
termina con un blocco finale
3. ogni blocco soddisfa le condizioni di validità:
a) blocco azione e blocco lettura/scrittura:
ha una sola freccia entrante e una sola
freccia uscente
b) blocco di controllo: ha una sola freccia
entrante e due frecce uscenti
4. ogni freccia deve entrare in un blocco
5. dal blocco iniziale seguendo le frecce deve
essere possibile raggiungere ogni blocco
6. da ogni blocco dev'essere possibile raggiungere
il blocco finale
Esecuzione degli algoritmi
Chi esegue gli algoritmi è l'esecutore. L'esecutore può essere una persona
o una macchina.
Chi esegue gli algoritmi non deve avere necessariamente consapevolezza
delle istruzioni che sta eseguendo. Chiunque (in grado di eseguire le
operazioni indicate nei blocchi) può calcolare l'area del triangolo
eseguendo l'algoritmo rappresentato con il diagramma di flusso. Questo
non implica che l'esecutore conosca cosa sia un triangolo e neanche cosa
sia l'area di una figura geometrica.
Il diagramma di flusso è una efficace rappresentazione dell'algoritmo
quando l'esecutore è una persona, non lo è altrettanto quando
l'esecutore è una macchina.
Se gli algoritmi devono essere eseguiti da computer allora è necessario
descriverli con specifici linguaggi: i linguaggi di programmazione.
Linguaggi di programmazione
Un linguaggio di programmazione è un linguaggio formale, dotato (al pari
di un qualsiasi linguaggio naturale) di un lessico, di una sintassi e di una
semantica ben definiti. È utilizzabile per il controllo del comportamento
di un computer.
Un algoritmo scritto con un linguaggio di programmazione assume il
nome di programma [per computer]
Chi scrive algoritmi facendo uso di linguaggi di programmazione è un
programmatore [di computer]
Linguaggio macchina 1
Il linguaggio macchina o codice macchina è il linguaggio in cui sono scritti i
programmi eseguibili per computer.
Il linguaggio macchina è basato su un alfabeto detto binario perché
comprende due soli simboli, generalmente indicati con 0 e 1. Il processore o
CPU è quella componente hardware di un computer che è in grado di
eseguire i programmi solo se scritti in linguaggio macchina. In altre parole in
linguaggio macchina sono definite l'insieme di istruzioni fondamentali che un
processore è in grado di compiere (instruction set).
Da wikipedia, l’enciclopedia libera
Istruzione in linguaggio macchina che somma il contenuto
di due registri della CPU
Linguaggio macchina 2
I programmi scritti in linguaggio macchina sono formati da istruzioni
elementari, che vengono codificate in forma numerica e che consentono di
effettuare operazioni aritmetiche, conversioni di bit e poco altro.
Scrivere programmi in tale linguaggio è quindi estremamente difficoltoso:
un'operazione basilare può richiedere anche tre o quattro istruzioni; si rende
così necessario molto codice anche per i programmi più semplici. Il fatto che
tale codice sia solamente numerico comporta inoltre grosse possibilità di
errori e difficoltà nell'individuarne. È necessario inoltre avere
continuamente a che fare con le caratteristiche fisiche della macchina in cui
si programma: bisogna ad esempio specificare manualmente gli indirizzi di
memoria in cui salvare le informazioni e i registri del processore in cui
mantenere i dati temporanei.
Da wikipedia, l’enciclopedia libera
Linguaggio Assembly
Il linguaggio assemblativo o linguaggio assembly è, tra i linguaggi di
programmazione, quello più vicino al linguaggio macchina.
Per questo il linguaggio assembly è catalogato come linguaggio di
programmazione a basso livello dove per linguaggio a basso livello si intende il
sottogruppo di linguaggi di programmazione orientati alla macchina.
Da wikipedia, l’enciclopedia libera
Il programma produce in output la scritta "Ciao ciao mondo"
L'assemblatore
Il programma scritto in assembly risulta relativamente più
leggibile di quello scritto in linguaggio macchina, con il
quale mantiene però un totale (o quasi totale)
isomorfismo. Il programma scritto in assembly non può
essere eseguito direttamente dal processore; esso deve
essere tradotto nella forma binaria corrispondente,
usando uno specifico programma detto assembler che
converte le istruzioni assembly nel corrispondente
linguaggio macchina.
Programma in
linguaggio
assembly
Assembler
Programma
(eseguibile dalla
CPU) in linguaggio
macchina
Linguaggi di programmazione ad
alto livello
Un linguaggio di programmazione ad alto livello non è direttamente
eseguibile dalla CPU di un computer, ma è più vicino o familiare alla
logica del nostro linguaggio naturale. L'idea di fondo è che i
programmi ad alto livello possono essere ricondotti a programmi in
linguaggio macchina in modo automatico facendo uso di un
programma (compilatore) li converte in linguaggio macchina. Il
linguaggio ad alto livello quindi astrae dalle caratteristiche fisiche
della macchina in cui si opera. Quest'idea fu introdotta in informatica
negli anni cinquanta, soprattutto grazie al lavoro di John Backus
presso la IBM, dove fu sviluppato il primo compilatore per il linguaggio
Fortran.
Programma in
linguaggio di
programmazione
ad alto livello
Compilatore
Programma
(eseguibile dalla
CPU) in linguaggio
macchina
Storia dei linguaggi di
programmazione – Fortran
Il Fortran è uno dei primi
linguaggi di programmazione,
essendo stato sviluppato a
partire dal 1954, da un
gruppo di lavoro guidato da
John Backus. Il primo
manuale di riferimento per il
programmatore del FORTRAN
I, "The FORTRAN automatic
coding system for the IBM
704 EDPM", scritto dallo
stesso Backus, è del 1956.
Il fortran è un linguaggio
specializzato per algoritmi
risolutivi di problemi
scientifici.
Il programma produce in
output la scritta "Hello, world"
Storia dei linguaggi di
programmazione - COBOL
Il COBOL è uno dei primi
linguaggi di
programmazione ad essere
stato sviluppato.
Progettato nel 1959, nasce
ufficialmente nel 1961,
grazie ad un gruppo di
lavoro composto dai
membri dell'industria
americana e da alcune
agenzie governative degli
Stati Uniti con lo scopo di
creare un linguaggio di
programmazione adatto
all'elaborazione di dati
commerciali.
Il programma produce in output
la scritta "HELLO, WORLD"
Storia dei linguaggi di
programmazione - BASIC
Il BASIC è un linguaggio di
programmazione ad alto
livello sviluppato nel 1964
presso l'Università di
Dartmouth. Il BASIC, fu
progettato per essere un
linguaggio semplice da
imparare. Nacque infatti,
come dice il suo nome, per
poter essere usato anche da
principianti. E' un linguaggio
general purpose.
Il programma produce in
output la scritta "hello, world"
Storia dei linguaggi di
programmazione - PASCAL
Il Pascal fu così chiamato in
onore del matematico e filosofo
francese Blaise Pascal, inventore
della prima macchina
calcolatrice automatica.
Wirth, il creatore del linguaggio,
era un docente di
programmazione e sentiva la
mancanza di un vero linguaggio
di programmazione adatto alla
didattica e che fosse dotato di
strutture dati avanzate. La
prima implementazione del
linguaggio divenne operativa nel
1970.
Il programma produce in
output la scritta "Hello, World"
Storia dei linguaggi di
programmazione - C
Il C (1972) è un linguaggio di
programmazione con costrutti
semplici e vicini al funzionamento
dell'hardware dei calcolatori. La
grammatica e la sintassi del C sono
molto libere e flessibili, permettendo
di scrivere istruzioni complesse e
potenti in poche righe di codice. In C
è per programmatori esperti.
Il C è particolarmente adatto per
scrivere il software di base. La sua
importanza tuttavia, crebbe solo dopo
il 1978 con la pubblicazione da parte
di Brian Kernighan e Dennis Ritchie
del libro The C Programming Language
nel quale il linguaggio venne definito
in modo preciso.
Il programma produce in
output la scritta "Hello, world"
Storia dei linguaggi di
programmazione - Java
Java è un linguaggio di programmazione, specificatamente progettato per
essere il più possibile indipendente dalla piattaforma di esecuzione. I
programmi java vengono eseguiti da un processore virtuale detto Java
Virtual Machine
Java è stato creato a partire da ricerche effettuate alla Stanford University
agli inizi degli anni Novanta.
Al 2014, Java risulta essere uno dei linguaggi di programmazione più usati
al mondo.
Il programma
produce in
output la scritta
"Hello, world"
Dal problema al programma
Problema
Analisi
Algoritmo
Implementazione
Programma
Esecuzione
Risultati
Dati
L'esecutore (programmi)
Programma
(Applicazione)
Viene eseguito
Implementazione
dell'algoritmo
La calcolatrice a corredo del
sistema operativo Windows è
un programma (sequenza di
istruzioni) che viene eseguito
dalla CPU (hardware) del
computer.
CPU
L'esecutore (script)
Script
(Applicazione)
Viene eseguito
Software
Implementazione
dell'algoritmo
La calcolatrice on line è un programma
(sequenza di istruzioni) che viene
eseguito dal browser (software) che a
sua volta viene eseguito dalla CPU
(hardware) del computer. Questa
tipologia di programmi assume il nome
di script.
http://www.calcolatriceonline.it
Visual Basic Scripting Edition
Programma
(script)
Windows Script
Host (software)
Dati
CPU
Negli esempi di
programmazione useremo il
linguaggio VBScript
(abbreviazione di Microsoft's
Visual Basic Scripting
Edition). È un sottoinsieme
di Visual Basic (a sua volta
derivato dal Basic) utilizzato
in Windows Script Host (e in
altri ambienti software)
come linguaggio di scripting
general-purpose.
Windows Script Host viene
fornito a corredo dei sistemi
operativi Windows
Produzione ed esecuzione di
uno script VBScript
1.
2.
3.
4.
5.
Avviare blocco note.
Scrivere le istruzioni nel linguaggio VBSscript.
Salvare il file con estensione vbs.
Eseguire (doppio clic) lo script.
Se necessario riaprire lo script per modificarlo e/o correggerlo
(tasto destro Apri con).
Attenzione!
Se uno script VBS, per un
errore di programmazione,
non termina, l'esecuzione
può essere interrotta
terminando il processo
wscript.exe.