Algoritmo algoritmo: un insieme ordinato di operazioni non ambigue ed effettivamente computabili che, quando eseguito, produce un risultato e si arresta.

Slides:



Advertisements
Presentazioni simili
Università degli Studi di Bergamo Facoltà di Lingue e Letterature Straniere Facoltà di Lettere e Filosofia A.A Informatica generale 1 Appunti.
Advertisements

Strutture di controllo in C -- Flow Chart --
Elementi di Informatica
Dall’algoritmo al programma.
INFORMATICA MATTEO CRISTANI.
PROGRAMMAZIONE: linguaggi
DIVERTIRSI CON SCRATCH
Dal problema all’ algoritmo
Realizzazione software
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
Programmazione dei Calcolatori Elettronici
Click to edit Master title styleAlgoritmo algoritmo: un insieme ordinato di operazioni non ambigue ed effettivamente computabili che, quando eseguito,
Istruzioni e algoritmi. Istruzioni Operative I passi elementari che compongono l’algoritmo sono le istruzioni. Distinguiamo: Istruzioni di input Istruzioni.
Unità di apprendimento 6 Dal problema al programma.
Fondamenti di Informatica - D. Talia - UNICAL 1 Fondamenti di Informatica FONDAMENTI DI INFORMATICA Domenico Talia
1 Elementi DI INFORMATICA Università degli Studi di Cagliari Corso di Laurea in Ingegneria Elettronica Linguaggio C A.A. 2011/2012
Huffman Canonico: approfondimento. Come abbiamo visto, Huffman canonico ci permette di ottenere una decompressione più veloce e con un uso più efficiente.
INFORMATICA ALGORITMI, PROGRAMMI, E LINGUAGGI DI PROGRAMMAZIONE.
Fondamenti di Informatica - D. Talia - UNICAL 1 Fondamenti di Informatica PROBLEMI E ALGORITMI LINGUAGGIO MACCHINA.
CONTROLLO DELLA CONCORRENZA
© 2007 SEI-Società Editrice Internazionale, Apogeo
LA PROGRAMMAZIONE: Algoritmi e programmi
La rappresentazione degli algoritmi
Algoritmi Avanzati a.a.2014/2015 Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2015/2016 Prof.ssa Rossella Petreschi
Introduzione al linguaggio C
Dal problema al processo risolutivo
Programmazione per la Musica | Adriano Baratè
I DIAGRAMMI DI FLUSSO Vantaggi e svantaggi.
Algoritmi e soluzioni di problemi
IL CONCETTO DI ALGORITMO
Dal problema al processo risolutivo
Unità di apprendimento 7
Organizzazione fisica
Programmazione strutturata
Forme per rappresentare l’algoritmo:
Tipo di dato: array Un array è un tipo di dato usato per memorizzare una collezione di variabili dello stesso tipo. Per memorizzare una collezione di 7.
il problema dei problemi
Programmazione e Laboratorio di Programmazione
I DIAGRAMMI DI FLUSSO Vantaggi e svantaggi.
Classe III A A.s – 2012 Programma di Informatica
IL CONCETTO DI ALGORITMO
Programmare.
Linguaggio C++ Selezione.
© 2007 SEI-Società Editrice Internazionale, Apogeo
Dall’analisi del problema alla definizione dell’algoritmo
Strutture di Controllo
Secondo Programma in C.
Gli automi.
Esempi di algoritmi.
A = InputBox("Immetti un numero")
Ricorsione 16/01/2019 package.
Definizione di linguaggio di programmazione
Teoria della computabilità
Parti interne del computer
Processi decisionali e funzioni di controllo
Programmazione e Laboratorio di Programmazione
Esercizio Dato un albero binario, definiamo altezza minimale di un nodo v la minima distanza di v da una delle foglie del suo sottoalbero, definiamo invece.
Il Diagramma di Flusso Docente: Maria Savina Rossi Alunne:
Unità D2 Dal problema all’algoritmo
Lezione Terza Primi passi di programmazione
Informatica CdL Scienze e Tecniche Psicologiche a.a
Informatica CdL Scienze e Tecniche Psicologiche a.a
La programmazione strutturata
Algoritmi.
ALGORITMO E’ una successione finita di passi che consente di risolvere tutti i problemi di una classe e di determinare il risultato. Caratteristiche: Finito.
Programmazione e Laboratorio di Programmazione
Transcript della presentazione:

Algoritmo algoritmo: un insieme ordinato di operazioni non ambigue ed effettivamente computabili che, quando eseguito, produce un risultato e si arresta in un tempo finito in termini informali: un algoritmo è una sequenza ordinata di operazioni che risolve un problema specifico

Proprietà un algoritmo deve essere: non ambiguo (i risultati non devono variare in funzione della macchina o persona che esegue l'algoritmo) corretto (deve risolvere un dato problema) realizzabile (deve essere eseguibile con le risorse a disposizione) finito (deve essere composto da un numero finito di passi elementari; le operazioni sono eseguite un numero finito di volte) efficiente (deve avere un costo accettabile, se non ottimo, in termini di risorse consumate: tempo di CPU richiesto per completare, quantità di memoria utilizzata, quantità di bit trasferiti)

Efficienza efficienza è il termine usato per descrivere l’uso attento delle risorse da parte di un algoritmo come si misurano il tempo e lo spazio consumati da un algoritmo, in modo da determinare se è efficiente? efficienza rispetto allo spazio: si può giudicare in base alla quantità di informazioni che l’algoritmo deve registrare nella memoria del computer per svolgere il proprio compito, oltre ai dati iniziali sui quali opera efficienza rispetto al tempo: è un’indicazione della quantità di “lavoro” richiesto dall’algoritmo stesso; è una misura dell’efficienza implicita del metodo, indipendente dalla velocità della macchina su cui è eseguito, dai valori dei dati di ingresso elaborati ma non dalla loro quantità

Complessità descrive l'efficienza dell'algoritmo numero di operazioni svolte dall'algoritmo relativamente alla misura dell'informazione su cui opera l'algoritmo esempio: per mettere in ordine una lista di N numeri interi un algoritmo può eseguire N*N operazioni oppure logN operazioni complessità tipiche degli algoritmi, in ordine crescente: logN, N, NlogN, N2, 2N

Descrizione di un algoritmo un algoritmo è descritto in un linguaggio il linguaggio di descrizione di un algoritmo deve essere adeguato alle caratteristiche del suo esecutore esecutore umano: linguaggio naturale linguaggio grafico (ad esempio i diagrammi di flusso) esecutore automatico (computer): linguaggio di programmazione

Esecuzione l'esecuzione delle azioni nell'ordine specificato dall'algoritmo consente di ottenere, a partire dai dati di ingresso, i risultati che risolvono il problema ESECUTORE una macchina astratta capace di eseguire le azioni specificate dallo algoritmo.

Esempio: la preparazione del caffè Esecutore: essere umano corredato di caffettiera "moka", cucina a gas e macina-caffè; Algoritmo: svitare la caffettiera; se si dispone di caffè macinato: riempire il filtro con il caffè macinato e andare al punto 3 altrimenti se si dispone di caffè in chicchi: macinarlo e tornare al punto 2 altrimenti terminare (il caffè non si può fare..) riempire la parte inferiore della caffettiera con acqua inserire il filtro nella macchina avvitare la caffettiera accendere il fuoco a gas collocare la moka sul fuoco attendere l'uscita del caffè spegnere il fuoco terminare (il caffè è pronto)

Esempio: assicurazione auto scrivere un algoritmo per decidere se l'assicurazione della macchina è scaduta anno corrente < anno scadenza polizza? non è scaduta, fine anno corrente > anno scadenza polizza? è scaduta, fine mese corrente < mese scadenza polizza? non è scaduta, fine mese corrente > mese scadenza polizza? è scaduta, fine giorno corrente < giorno scadenza polizza? non è scaduta, fine giorno corrente > giorno scadenza polizza? è scaduta, fine non è scaduta ma lo sarà tra 24 ore

Il concetto di variabile per eseguire una qualsiasi algoritmo, abbiamo bisogno di poter immagazzinare i risultati temporanei e finali dell'algoritmo concettualmente, le variabili possono essere viste come delle scatole con: un'etichetta che ci permette di identificarne il contenuto dei pezzi di carta al loro interno su cui si possono annotare/modificare i valori di un calcolo che si sta facendo

Variabili una variabile rappresenta una zona di memoria RAM che può essere usata per memorizzare un valore analogia con una scatola di scarpe etichettata in uno scaffale (che rappresenta la RAM): la scatola ha un'etichetta con un nome una posizione nello scaffale un valore (le scarpe che si trovano dentro la scatola) [un tipo (forma della scatola)]* (* vedremo più avanti cos'è e a che serve il tipo di una variabile)

Variabili nella pratica: ogni variabile ha un nome mnemonico, che si usa nel programma per riferirsi alla variabile stessa. ogni variabile contiene un valore che può essere letto e modificato a piacimento durante l’esecuzione di un programma, il sistema operativo mantiene una associazione tra il nome di ogni variabile e l’indirizzo della cella di memoria in cui è memorizzato il suo valore in definitiva una variabile è semplicemente un'astrazione della cella di memoria fisica

Variabili A = Valore oppure A ← Valore significa che il valore specificato a destra dell'uguale viene memorizzato nella zona di memoria RAM etichettata con l'etichetta "A": attenzione: non si tratta di un'equivalenza matematica!!! Valore A

Variabili B = A oppure B ← A significa che un certo valore, precedentemente memorizzato nella zona di memoria etichettata con "A", viene copiato nella zona di memoria etichettata con "B": Valore A B

A A Esempio: incremento Valore + 1 A = A + 1 oppure A ← A + 1 (N.B.: matematicamente ciò non ha alcun senso!) in informatica significa "prima calcoliamo A+1 e poi memorizziamo il risultato del calcolo in A" stiamo quindi considerano il valore di A in due istanti diversi: prima per leggerne il valore e incrementarlo e dopo per memorizzare il suo nuovo valore Valore + 1 A A

Diagrammi di flusso un diagramma di flusso (flow chart) è la definizione grafica delle operazioni che costituiscono un algoritmo è uno strumento efficace per la descrizione degli algoritmi i diagrammi di flusso usano forme geometriche diverse per rappresentare: trasferimento di informazioni (lettura dati, scrittura risultati, visualizzazione dati intermedi) esecuzione di calcoli assunzione di decisioni esecuzione di iterazioni (ripetizione di sequenze di operazioni)

Diagrammi di flusso v  E elaborazione – i blocchi rettangolari rappresentano istruzioni di assegnazione di valori o una modifica dello stato globale della computazione input/output - i blocchi a forma di parallelogramma corrispondono a operazioni di input/output dei dati (lettura da tastiera, visualizzazione su video) decisione – i blocchi a forma di rombo vengono utilizzati per rappresentare istruzioni di salto condizionato inizio/fine – i blocchi ovali vengono utilizzati per rappresentare l’inizio e la fine dell’algoritmo operation yes no condition start stop

Calcolo dell’area di un rettangolo leggi da input l’altezza (H) leggi da input la base (B) calcola l’area H*B dai in output il risultato

Calcola l’area di un rettangolo START Leggi Altezza Leggi Base Area = Base*Altezza Stampa Area STOP

Conversione lire in Euro leggi da input l'importo in lire (antica moneta usata in Italia fino al secolo XX) calcola il corrispettivo in Euro dai in output il risultato

Conversione lire in Euro START Leggi Lire Euro = Lire/1936,27 Stampa Euro STOP

IF-THEN-ELSE selezione tra due istruzioni sulla base di una condizione

Massimo tra due numeri leggi X leggi Y se X > Y altrimenti stampa X stampa Y

Massimo tra due numeri

Pari o dispari leggi N dividi N per 2 se resto = 0 altrimenti scrivi “N è pari” altrimenti scrivi “N è dispari”

Pari o dispari

WHILE-DO I O

ESEMPIO CALCOLO DEL FATTORIALE N!=N*(N-1)*(N-2)*…*2 no N>1? yes START CALCOLO DEL FATTORIALE N!=N*(N-1)*(N-2)*…*2 Leggi N F = N no N>1? yes N=N-1 Stampa F F=F*N STOP

DO-WHILE I O

ESEMPIO CALCOLO DEL FATTORIALE N!=N*(N-1)*(N-2)*…*2 yes no N>1? START CALCOLO DEL FATTORIALE N!=N*(N-1)*(N-2)*…*2 Leggi N F = N N=N-1 F=F*N yes no Stampa F N>1? STOP

Scambio dei valori di due variabili Leggi valore prima variabile X Leggi valore seconda variabile Y Conserva X in una variabile temporanea Aux Assegna il valore di Y ad X Assegna il valore di Aux a Y Scrivi X Scrivi Y

Scambio dei valori di due variabili

Esercizi dati 2 numeri in input trovare e stampare in output il max dati 3 numeri in input stamparli in ordine crescente dati 2 numeri in input stampare in output la somma sul prezzo di un prodotto viene praticato lo sconto del 3% se costa meno di 1.000.000 e del 5% se costa di più; dato in input il prezzo P, calcolare il prezzo da pagare secondo la regola sopra descritta sul prezzo di un biglietto di un treno viene applicato un supplemento del 7% se il treno è di tipo "a", del 12% se è di tipo "b" e del 18% se è di tipo "c"; per gli altri treni non c'è supplemento; calcolare il prezzo totale del biglietto, a seconda del tipo di treno e comunicare il tipo di treno con il prezzo calcolato

Esercizi dati in input i min, ore e sec stampare in output il totale dei secondi data in input una data verificare se è giusta dato in input 100 valori stampare in output la somma dei numeri positivi e la somma dei negativi dato in input una parola stampare in output se è una palindrome o no dato in input una parola stampare in output il numero delle vocali

Programma ogni computer è una macchina in grado di eseguire azioni elementari su dati l'esecuzione delle azioni elementari viene attivata tramite sequenze di istruzioni le istruzioni sono espresse attraverso frasi di un opportuno linguaggio di programmazione un programma non è altro che la formula-zione testuale di un algoritmo in un linguaggio di programmazione

Algoritmo e programma un programma è la formulazione, in un certo linguaggio di programmazione, di un algoritmo che risolve un dato problema

Algoritmi vs. programmi calcolo del fattoriale: esiste un solo algoritmo per calcolare il fattoriale esistono teoricamente infinite implementazioni (e quindi programmi) per il calcolo del fattoriale, una per ogni linguaggio di programmazione esistente e quindi: per ogni programma esiste un solo algoritmo per ogni algoritmo esistono infiniti programmi

Linguaggi di programmazione I linguaggi di programmazione ad alto livello permettono di scrivere programmi con una notazione adatta agli esseri umani, e in alcuni casi molto intuitiva. Usando degli opportuni traduttori (compilatori ed interpreti) lo stesso programma può essere usato su macchine diverse Fortran, Cobol, Pascal, Ada, C, C++, Java, Lisp, ML, Prolog,...

Il compilatore un programma scritto in un linguaggio ad alto livello è detto programma sorgente. per essere eseguito su un computer, va tradotto nel linguaggio macchina del computer (il linguaggio del processore) il compilatore è un programma che esegue la traduzione, producendo il programma oggetto, ossia una sequenza di istruzioni in linguaggio macchina il compilatore segnala anche eventuali errori di sintassi nella scrittura del programma sorgente

Il compilatore programma P scritto nel linguaggio L compilatore per P sul computer M programma P’ nel linguaggio macchina di M esecuzione di P’ su M

L'interprete in alternativa alla compilazione, un programma sorgente può essere interpretato. un interprete è un programma che non produce alcun programma oggetto, ma legge il ogni istruzione del programma sorgente e genera le istruzioni macchina corrispondenti, che vengono passate all’hardware per l'esecuzione.

Compilatori Vs. Interpreti programma compilato vantaggi: la traduzione avviene una sola volta, e poi il programma oggetto può essere eseguito quanto si vuole svantaggi: la compilazione richiede un certo tempo di esecuzione programma interpretato vantaggi: il programma può essere eseguito subito senza dover attendere la fine della compilazione svantaggi: la traduzione avviene mentre si esegue il programma con conseguenze rallentamento dell'esecuzione alcuni linguaggi permettono entrambe le scelte attualmente, i computer sono così potenti che anche la compilazione di lunghi programmi non richiede molto tempo