Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


Il Concetto di Algoritmo, Appunti di Elementi di Informatica

Appunti trascritti su word prime lezioni di programmazioni in corso ingegneria informatica primo anno

Tipologia: Appunti

2019/2020
In offerta
30 Punti
Discount

Offerta a tempo limitato


Caricato il 29/06/2020

Jashy00
Jashy00 🇮🇹

4.5

(2)

1 documento

1 / 19

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
FONDAMENTI DI INFORMATICA
Il Concetto di Algoritmo
Un algoritmo è un procedimento che risolve un determinato problema attraverso un numero finito
di passi elementari, chiari e non ambigui.
L'algoritmo è un concetto fondamentale dell'informatica, anzitutto perché è alla base della
nozione teorica di calcolabilità: un problema è calcolabile quando è risolvibile mediante un
algoritmo. Inoltre, l'algoritmo è un concetto cardine anche nella fase di programmazione dello
sviluppo di un software: preso un problema da automatizzare, la programmazione costituisce
essenzialmente la traduzione o codifica di un algoritmo per tale problema in programma, scritto in
un certo linguaggio, che può essere quindi effettivamente eseguito da un calcolatore
rappresentandone la logica di elaborazione.
• Metodo, procedura o ricetta generale che specifica come produrre una soluzione per ogni
possibile istanza del problema
• Specificato mediante una sequenza di istruzioni elementari
• Risolvere un problema corrisponde a risolvere un 'opportuna successione di problemi più
semplici è SCOMPOSIZIONE IN SOTTO-PROBLEMI
Un calcolatore è un sistema che, ricevendo in ingresso la descrizione, in un opportuno linguaggio,
di un algoritmo risolvente A[X,Y] per un certo problema P[X,Y] e un dato X, produce come risultato
la soluzione Y dell’istanza P[X,Y]
• Per essere comprensibili al calcolatore, gli algoritmi devono essere espressi in un linguaggio di
programmazione: Programma = algoritmo descritto formalmente attraverso un linguaggio di
programmazione
• Un calcolatore è quindi un esecutore universale di programmi - elabora puri simboli (per esso
“privi di significato”) - non risolve problemi (il problema non è un suo ingresso) ma esegue
programmi!
Elementi Linguistici dell’Esecutore
1. Il linguaggio che è in grado di interpretare
2. L'insieme delle azioni che è in grado di compiere
3. L'insieme delle regole che a ogni frase del linguaggio associano le relative azioni da compiere
Computazione: definizioni
• Computazione: esecuzione di un algoritmo in corrispondenza di certi dati iniziali
• Passo di computazione: ogni singolo passo elementare che l'esecutore compie durante una
computazione
• Processo: sequenza di passi elementari che l'esecutore compie in corrispondenza di certi dati
iniziali durante l'esecuzione di un algoritmo
• Flusso di esecuzione: ordine di esecuzione delle istruzioni Algoritmo = concetto statico Processo=
concetto dinamico
Proprietà di un Algoritmo
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
Discount

In offerta

Anteprima parziale del testo

Scarica Il Concetto di Algoritmo e più Appunti in PDF di Elementi di Informatica solo su Docsity!

Il Concetto di Algoritmo Un algoritmo è un procedimento che risolve un determinato problema attraverso un numero finito di passi elementari, chiari e non ambigui. L'algoritmo è un concetto fondamentale dell'informatica, anzitutto perché è alla base della nozione teorica di calcolabilità: un problema è calcolabile quando è risolvibile mediante un algoritmo. Inoltre, l'algoritmo è un concetto cardine anche nella fase di programmazione dello sviluppo di un software: preso un problema da automatizzare, la programmazione costituisce essenzialmente la traduzione o codifica di un algoritmo per tale problema in programma, scritto in un certo linguaggio, che può essere quindi effettivamente eseguito da un calcolatore rappresentandone la logica di elaborazione.

  • Metodo, procedura o ricetta generale che specifica come produrre una soluzione per ogni possibile istanza del problema
  • Specificato mediante una sequenza di istruzioni elementari
  • Risolvere un problema corrisponde a risolvere un 'opportuna successione di problemi più semplici è SCOMPOSIZIONE IN SOTTO-PROBLEMI Un calcolatore è un sistema che , ricevendo in ingresso la descrizione, in un opportuno linguaggio, di un algoritmo risolvente A[X,Y] per un certo problema P[X,Y] e un dato X, produce come risultato la soluzione Y dell’istanza P[X,Y]
  • Per essere comprensibili al calcolatore, gli algoritmi devono essere espressi in un linguaggio di programmazione: Programma = algoritmo descritto formalmente attraverso un linguaggio di programmazione
  • Un calcolatore è quindi un esecutore universale di programmi - elabora puri simboli (per esso “privi di significato”) - non risolve problemi (il problema non è un suo ingresso) ma esegue programmi!

Elementi Linguistici dell’Esecutore

  1. Il linguaggio che è in grado di interpretare
  2. L'insieme delle azioni che è in grado di compiere
  3. L'insieme delle regole che a ogni frase del linguaggio associano le relative azioni da compiere

Computazione: definizioni

  • Computazione: esecuzione di un algoritmo in corrispondenza di certi dati iniziali
  • Passo di computazione: ogni singolo passo elementare che l'esecutore compie durante una computazione
  • Processo: sequenza di passi elementari che l'esecutore compie in corrispondenza di certi dati iniziali durante l'esecuzione di un algoritmo
  • Flusso di esecuzione: ordine di esecuzione delle istruzioni Algoritmo = concetto statico Processo= concetto dinamico

Proprietà di un Algoritmo

  • Finitezza: costituito da un numero finito di istruzioni
  • Univocità: ogni istruzione è univocamente interpretabile
  • Effettività: esiste un esecutore capace di eseguire ogni istruzione in un tempo finito
    • Determinismo: per qualunque dato di ingresso, a ogni passo della computazione, esiste al più un passo successivo.
  • Correttezza: calcola correttamente la funzione rappresentata
  • Efficienza: perviene alla soluzione del compito impiegando una certa quantità di risorse fisiche
  • Terminazione: l'esecuzione termina in un numero finito di passi di computazione Elementi degli algoritmi
  • Oggetti: le entità su cui opera l’algoritmo
  • Operazioni: interventi da effettuare sugli oggetti
  • Strutture di controllo : sequenza, selezione, iterazione OggettiPossono essere : – Costanti – Variabili • Possono rappresentare: – Dati iniziali del problema – Informazioni ausiliarie – Risultati parziali – Risultati finali Costanti • Rappresentano dei valori che non variano durante l’esecuzione dell’algoritmo • Possono essere sia numeriche che alfanumeriche • Nel caso di costanti alfanumeriche il valore deve essere racchiuso tra doppi apici • Esempio – 5 è una costante numerica (il numero 5) – “prova” è una costante alfanumerica – “5” è una costante alfanumerica (il carattere 5) Variabili • Sono dei contenitori di valori identificati da nomi simbolici – x, y, somma, risultato, … (il nome di una variabile deve sempre iniziare con un carattere non numerico) • Il nome della variabile rappresenta una scatola • Il valore della variabile il suo contenuto - Le variabili devono avere un tipo che rappresenta: – I valori ammissibili – Le operazioni che possono essere compiute sui suoi valori - Esempio: una variabile di tipo numerico – può assumere solo valori numerici – può apparire come operando in una espressione matematica (e.g., x/y è corretta se x e y sono variabili di tipo numerico) - Esempio: una variabile di tipo alfanumerico (stringa) – può assumere qualunque valore – non ha senso applicare l’operazione di divisione (e.g., se a=“ciao” e b=“mamma” cosa vuol dire a/b?)
  • Attenzione! Tutte le variabili devono essere inizializzate Assegnamento • L’assegnamento è l’operazione che permette di modificare il valore di una variabile • Si indica con il simbolo := • x:=6 indica che ora la variabile x contiene il valore 6 • Attenzione! x:=6 è diverso da x = 6 – Il primo modifica il valore della variabile – Il secondo predica sul valore corrente della variabile • Regole fondamentali: – A sinistra dell’operatore di assegnamento deve esserci il nome di una e una sola variabile – A destra dell’operatore di assegnamento può esserci una costante, una variabile o anche un’espressione complessa – Il tipo di dato della variabile a sinistra deve essere compatibile con il tipo di dato ottenuto dall’espressione a destra

 Un diagramma a blocchi descrive il flusso delle operazioni da eseguire per realizzare la trasformazione, definita nell’algoritmo, dai dati iniziali ai risultati  Ogni istruzione dell’algoritmo viene rappresentata all’interno di un blocco elementare elementare, la cui forma grafica è determinata dal tipo di istruzione  I blocchi sono collegati tra loro da linee di flusso, munite di frecce, che indicano il susseguirsi di azioni elementari

  • Esistono dei vincoli da rispettare per progettare buoni programmi BSC – Blocco Strutturato Composto Sequenza e Selezione BSC – Blocco Strutturato Composto Selezione Semplice BSC – Blocco Strutturato Composto Ciclo a condizione iniziale SB generici e SBS
  • Teorema di Boem-Jacopini: per ogni SB non strutturato esiste uno SBS debolmente equivalente (ottenibile attraverso trasformazione funzionale)
  • l teorema di Böhm-Jacopini, enunciato nel 1966 dagli informatici Corrado Böhm e Giuseppe Jacopini, è un teorema di informatica teorica il quale afferma che qualunque algoritmo può essere implementato in fase di programmazione (in diagramma di flusso, pseudocodice o codice sorgente) utilizzando tre sole strutture dette strutture di controllo: la sequenza, la selezione ed il ciclo (iterazione), da applicare ricorsivamente alla composizione di istruzioni elementari (ad esempio, istruzioni eseguibili con il modello di base della macchina di Turing).
  • SBS permette di risolvere ogni problema solubile Ø Dal punto di vista funzionale SBS è potente quanto SB!
  • SBS non permette di rappresentare ogni possibile algoritmo Ø Dal punto di vista algoritmico SBS è meno potente di SB!

Codice

  • Insieme di regole che:
  • stabiliscono associazioni fra configurazioni e entità di informazione
  • specificano come i simboli devono essere combinati

Sistema numerico binario. Il sistema numerico binario è un sistema numerico posizionale in base

  1. Esso utilizza solo due simboli, di solito indicati con 0 e 1, invece delle dieci cifre utilizzate dal sistema numerico decimale. Ciascuno dei numeri espressi nel sistema numerico binario è definito "numero binario ". Quanti bit e un carattere? Quanti byte occupa la stessa frase scritta in codice UNICODE? 15 caratteri → 15 x 2 byte = 30 byte Page 10 Codifica dell'informazione: soluzione 4. Dati 12 bit per la codifica, quante informazioni distinte si possono rappresentare? Con una codifica come quelle viste in precedenza, sono necessari 3 bit per carattere. Qual è il massimo numero intero rappresentabile con 16 bit? L'intervallo di valori interi che è possibile memorizzare in 16 bit parte da 0 fino a 65535 (ovvero 16 bit possono codificare 65536 informazioni), o da -32768 fino a 32767 usando la codifica complemento a due. Cos'è il bit di segno? Il bit più significativo corrisponde anche al bit del segno di un numero binario con segno in notazione complemento a due o complemento a uno: "1" identifica un numero di segno negativo, "0" identifica un numero di segno positivo. Quali sono i caratteri Ascii? Tabella caratteri ASCII ASCII (si pronuncia "askii") è il codice standard per i microcomputer e consiste di 128 numeri decimali che vanno da 0 a 127. I numeri che vanno da 128 a 255 costituiscono il set di caratteri estesi che comprendono caratteri speciali, matematici, grafici e di lingue straniere. Codifica di Numeri Naturali
    • Il significato della cifra dipende dalla posizione in cui si trova all’interno della successione di cifre ²Esempio: 4243 = 4x103 + 2x102 + 4x101 + 3x
  • 1101due = 1dieci x 23 dieci + 1dieci x 22 dieci + 0dieci x 21 dieci + 1dieci x 20 dieci = 8dieci + 4dieci
  • 0dieci + 1dieci = 13dieci Codifica di Numeri Interi
  • Codifica con modulo e segno: - Primo bit della successione per indicare il segno - Restanti bit per indicare il valore assoluto - Con n bit si possono rappresentare interi da -2n-1^ + 1 e 2n-1^ -
  • Codifica in complemento a due: - Con n bit, La rappresentazione di un numero binario x corrisponde a 2n+x - Si possono rappresentare i numeri da –2n-1^ fino a 2n-1- Codifica di Numeri Reali Notazione scientifica per numeri binari
  • Il numero 101010000due può essere rappresentato come
    • Basta memorizzare segno, mantissa ed esponente Codifica dei Numeri Reali Standard IEEE-
  • IEEE (Institute of Electrical and Electronic Engineers) stabilisce il numero di bit per mantissa ed esponente
    • Numeri a precisione singola: 32 bit è 1 bit per segno, 8 bit per esponente, 23 bit per mantissa Si possono rappresentare numeri tra -10-38^ e -10-38^ e tra 10-38^ e 10^38. Con notazione non normalizzata fino a 10-
  • Numeri a precisione doppia: 64 bit è 1 bit per segno, 11 bit per esponente, 52 bit per mantissa Si possono rappresentare numeri tra -10-308^ e -10-308^ e tra 10-308 e 10^308 La Macchina di Von Neumann E’ il modello secondo il quale è organizzata la maggior parte dei moderni elaboratori Componenti della macchina di Von Neumann: L’unità centrale di elaborazione o CPU è costituita dai circuiti elettronici capaci di leggere (dalla memoria centrale), decodificare (interpretare) ed eseguire (impartendo gli opportuni comandi alle varie parti del sistema) le istruzioni di un programma, una alla volta. L’esecuzione delle istruzioni può comportare operazioni di elaborazione di dati (per esempio, operazioni aritmetiche) ovvero di trasferimento di dati (per esempio, dalla memoria centrale all’interfaccia di una periferica). La memoria centrale contiene le istruzioni di un programma e i dati necessari alla sua esecuzione. Le periferiche sono le apparecchiature che consentono all’elaboratore di scambiare informazioni con il mondo esterno, mediante operazioni di ingresso (verso l’elaboratore) e uscita (verso l’esterno). Vengono in realtà considerate appartenenti alla macchina di Von Neumann solo le interfacce di collegamento verso le periferiche, mentre le periferiche sono considerate componenti separati.
  • Codice operativo --> tipo istruzione
  • Operandi sorgente e destinazione --> dato o indirizzi dove recuperare/depositare i dati (nei registri o in memoria)
  • Esistono tre tipologie di operandi:
  • Immediato: contiene il valore del dato
  • Registro : contiene un riferimento ad un registro della CPU
  • Memoria : contiene l'indirizzo della parole di memoria dove c'è il dato Dati e istruzioni di programma sono codificate in forma binaria, cioè mediante sequenze finite di bit. Una istruzione codificata si compone di due parti: il codice operativo e uno o più operandi: Il codice operativo specifica, secondo una convenzione dipendente dalla specifica macchina, l’istruzione da eseguire. Per ogni macchina esistono tanti codici operativi differenti quante sono le istruzioni presenti nell’insieme (set) delle istruzioni che la macchina è in grado di interpretare ed eseguire. Gli operandi contengono, ancora in una forma codificata dipendente dalla specifica macchina, le informazioni necessarie a reperire i dati sui quali l’istruzione deve operare. Il linguaggio macchina è quindi strettamente legato alla architettura della macchina. Periodo di Clock
  • Un orologio (clock) fornisce una cadenza temporale a cui tutte le attività elementari sono sincronizzate
  • Un segnale di clock è un livello di tensione che evolve con un periodo (tempo di ciclo) predeterminato e costante (intervallo di tempo fra 2 fronti di salita successivi)
  • La frequenza di clock è l'inverso del periodo (numero di cicli di clock al secondo) Logiche di Progettazione della CPU
  • CISC (Complex Instruction Set Computer) : basata sull'idea di realizzare a livello hardware funzionalità sempre più complesse
  • RISC (Reduced Instruction Set Computer): basata sull'idea di avere poche istruzioni che i compilatori riescono a tradurre efficacemente in linguaggio macchina Il Linguaggio Assembly
  • Il linguaggio assembly è la rappresentazione simbolica del linguaggio macchina (binario)
  • L'assembly è più leggibile:
  • Permette di associare dei nomi simbolici alle configurazioni di bit che indicano codici di operazioni o indirizzi di registri
  • Permette l'utilizzo di variabili cioè nomi simbolici per identificare certe parole di memoria che contengono dati
  • Permette l'utilizzo di etichette cioè nomi simbolici per identificare certe parole di memoria che contengono istruzioni - Assemblatore: traduce da linguaggio assembly in linguaggio macchina La Memoria
    • Supporto alla CPU: deve fornire alla CPU dati e istruzioni il più rapidamente possibile
    • Archivio dati e programmi, ne garantisce la conservazione a calcolatore spento e la reperibilità anche dopo elevati periodi
    • Diverse esigenze (contrastanti): o velocità per il supporto alla CPU o non “volatilità”, costi contenuti ed elevate dimensioni per l'archivio
    • Obiettivo: avere una memoria grande e veloce (ed economica)
    • Compromesso: integrare memoria piccola e veloce con altri dispositivi grandi e lenti
    • Caricare i dati in base ai principi di località spaziale e temporale Concettualmente, può essere vista come una sequenza di celle: ogni cella di memoria contiene una parola o word. Le parole di un elaboratore hanno tutte la stessa lunghezza, mentre elaboratori differenti possono avere parole di lunghezza differente. Valori tipici della lunghezza di parola: 8/16/32/64 bit. La Memoria Classificazione in Base all'Accesso

Un disco magnetico, in informatica, è una tipologia di supporto di memorizzazione a memoria magnetica che si contraddistingue per avere forma fisica discoidale. Attualmente il disco magnetico è ampiamente utilizzato come supporto di memoria di massa ma il suo utilizzo futuro è seriamente minacciato dai supporti di memoria a stato solido. Tali supporti infatti stanno acquisendo quote di mercato sempre maggiori in precedenza detenute dal disco magnetico. Interfacce di Ingresso/Uscita Ogni interfaccia d'ingresso-uscita di un sistema digitale a programma memorizzato è collegata alle unità periferiche del sistema per mezzo di un certo numero di linee d'interconnessione elettrica sulle quali transitano i segnali digitali provenienti da o diretti a tali unità. Tutte queste linee sono suddivise in gruppi chiamati porte d'ingresso uscita. Interfacce di Ingresso/Uscita Indirizzamento & Sincronizzazione

  • Indirizzamento:
  • I/O mappato in memoria
  • I/O isolato
  • Sincronizzazione:
  • A controllo di programma
  • A interruzione
  • Ad accesso diretto della memoria  Memorie o Memoria RAM o Memorie ROM o Memoria cache o Gerarchia di memorie  Periferiche

o Collegamento o Interfaccia o Meccanismi di sincronizzazione Le Memorie Caratteristiche  Volatilità/Persistenza  Velocità  Capacità  Costo (per bit): rapporto tra il costo del dispositivo e la sua capacità  Modalità di accesso o Diretta (o casuale): il tempo di accesso è indipendente dalla posizione o Sequenziale: il tempo di accesso dipende dalla posizione o Mista: combinazione dei due casi precedenti Funzionalità  Supporto alla CPU  Archivio (memorie di massa) La memoria centrale (RAM) Funzionalità  Supporto alla CPU: Durante l’esecuzione di un programma, il programma stesso ed i dati su cui opera sono “registrati” nella memoria principale del calcolatore Tecnologia  Circuiti integrati su semiconduttore Caratteristiche  Volatile  Modalità di accesso: casuale  Velocità La memoria centrale (RAM) Velocità  Parametri per la valutazione o Tempo di accesso = tempo intercorrente tra l’istante in cui ha inizio una operazione di accesso alla memoria (lettura o scrittura) e l’istante in cui viene completata

Le memorie ROM riscrivibili EEPROM  Allo scopo di mantenere permanentemente le informazioni necessarie all’avvio del computer attualmente vengono utilizzate memorie riscrivibili come le EEPROM (Electrically Erasable Programmable ROM) che possono essere programmate, cancellate -tipicamente usando tensioni elettriche più alte del normale- e riscritte (la stessa tecnologia delle memorie flash) PROM, EPROM  Altre memorie utilizzate alle stesso scopo sono state la PROM (Programmable ROM) che può essere scritta una sola volta, e la EPROM (Erasable PROM) che è una PROM cancellabile mediante esposizione a raggi ultravioletti e riscrivibile Memoria Cache Sebbene la RAM sia una memoria “veloce”, la CPU elabora dati ed istruzioni molto più velocemente del tempo necessario a prelevarli dalla memoria Principio di Localitàlocalità temporale : un programma tende a riutiizzare un dato che era stato usato recentemente  località spaziale : un programma tende ad utiizzare un dato che ha un indirizzo vicino a un dato usato recentemente Memoria Cache  Memoria piccola e veloce inserita tra la memoria centrale e la CPU per “sfruttare” il principio di località Gerarchia di Memorie Gerarchia di Memorie

Periferiche Periferica:  Qualunque dispositivo esterno collegato ad un calcolatore. In particolare hanno funzioni di: o Unità di Ingresso  Tastiera, Mouse, Scanner  … microfono, fotocamere, lettori di codice a barre, sensori, … o Unità di Uscita  Monitor, Stampanti  Casse, Sound blaster, Plotter … o Unità di Ingresso/Uscita  Dischi, Modem, schede fax… Collegamento tra “centro” e periferiche Indirizzamento  Ad un dispositivo è associato un insieme (univoco) di indirizzi. Il dispositivo è in grado di riconoscere un indirizzo posto sul bus di indirizzi come proprio, e di rispondere ai comandi inviati sul bus di controllo Collegamento dispositivo-bus  Interfaccia hardware di I/O: o Decodificatore degli indirizzi o Circuiti di controllo o Registri dei dati e di stato Interfaccia di I/O Decodificatore  Abilita il dispositivo a riconoscere il proprio indirizzo quando viene trasmesso sulle linee degli indirizzi Circuiti di controllo  Coordinano il trasferimento di I/O Registro dei dati  Mantiene il dato in ingresso da trasferire al processore o in uscita per trasferirlo al dispositivo Registro di stato  Tiene traccia dello stato della periferica (occupata, libera, non disponibile …)

Prossima lezione Linguaggi e programma  Linguaggi di programmazione  Sintassi, Lessico e Semantica  Ciclo di vita di un programma (scritto in un linguaggio ad alto livello)