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


INFORMATICA PER LA COMUNICAZIONE, Appunti di Fondamenti di informatica

Appunti completi del corso “Informatica per la comunicazione” tenuto dal prof Riccardo Dondi durante l’anno accademico 2025.

Tipologia: Appunti

2024/2025

In vendita dal 07/05/2025

soniaa.b
soniaa.b 🇮🇹

5

(5)

14 documenti

1 / 76

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
INFORMATICA PER LA COMUNICAZIONE
INFORMATICA
Computer science (scienza dei computer) > noi invece usiamo il termine informatica (da informatique)
origine francese > informazione, una volta si usava il termine scienza dell’informazione per descrivere
l’informatica. Non si occupa solo dei computer o dispositivi digitali, ma l’informatica si occupa degli aspetti
che riguardano l’elaborazione dell’informazione: sistemi di elaborazione automatica di informazione, di
simboli, con poco intervento umano. Elaborazione codificata utilizzando dei simboli (testo è codificato come
simboli). Info nei vari formati che viene elaborata dai computer è codificata come simboli.
Vantaggi elaboratori automatici:
- tempi di elaborazione: velocità, operazioni più veloci.
- affidabilità: nell'effettuare l’elaborazione, anche i computer possono sbagliare, ma di solito sono più
affidabili, fanno meno errori degli umani (operazioni meccaniche/matematiche).
- elaborazione operazioni meccaniche: operazioni aritmetiche sono meccaniche, non c’è nulla di
creativo, per fare queste operazioni gli elaboratori automatici sono utili. Lasciano agli utenti più
tempo per concentrarsi sugli aspetti creativi. Ora non è più così tanto vero, vengono utilizzate
tecnologie anche per la creatività.
Information & Communication Technology: dopo che sono stati creati gli elaboratori meccanici, quelli
precedenti erano isolati, operazioni complesse ma isolati. Ad un certo punto ci si rende conto che era utile
collegare gli elaboratori per scambiarsi i lavori, permettere comunicazioni. Convergenza tra tecnologie
dell’informazione (tecnologie informatiche) e quelle delle telecomunicazioni (si occupavano di far
transitare i dati da un punto all’altro, es. rete telefonica). Fusione e convergenza tra queste due discipline.
SISTEMI AUTOMATICI DI ELABORAZIONE
Come si è arrivati a progettare e realizzare i dispositivi di elaborazione automatica. L’idea di automatizzare
determinati processi, soprattutto operazioni aritmetiche (regole), risale all’antichità (es. abaco). I primi
modelli automatici (semi, calcolatrici) nascono nel 17esimo secolo, l’interesse è automatizzare operazioni
aritmetiche o calcoli matematici:
- pascalina (antenato della calcolatrice, Pascal)
- regolo calcolatore
- stepped reckoner
Sono elaboratori automatici che lavorano per svolgere un solo compito > i calcoli matematici (calcolatrice).
La prospettiva inizia a cambiare nell’800 > si inizia a pensare all’idea di costruire elaboratori non pensati
solo per uno scopo preciso, ma che possano in generale essere elaboratori universali. Il primo ad avere
quest’idea è l’inventore inglese Charles Babbage > progettare una macchina (elaboratore) dotata di due
componenti che ritroviamo anche nei nostri elaboratori > un’unità di memoria per memorizzare i dati in
generale e un’unità di calcolo che nei nostri computer è il processore, quella che elabora la memoria.
Questo è un prototipo che non venne mai realizzato perché la tecnologia non era ancora sufficientemente
sviluppata per permettere la realizzazione concreta. Ada King Lovelace ebbe l’idea di considerare come
questo prototipo di macchina automatica poteva essere utilizzato > scrive i primi programmi che potevano
risolvere dei problemi. G. Boole inventò l’algebra booleana > il contributo nasce in matematica però ne
parliamo perché si basa sul fatto che le espressioni possono avere solo due valori (vero/falso) e i sistemi
che studieremo si basano su questa idea > tutto quello che viene rappresentato sfrutta due possibili valori
(bit).
1
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37
pf38
pf39
pf3a
pf3b
pf3c
pf3d
pf3e
pf3f
pf40
pf41
pf42
pf43
pf44
pf45
pf46
pf47
pf48
pf49
pf4a
pf4b
pf4c

Anteprima parziale del testo

Scarica INFORMATICA PER LA COMUNICAZIONE e più Appunti in PDF di Fondamenti di informatica solo su Docsity!

INFORMATICA PER LA COMUNICAZIONE

INFORMATICA

Computer science (scienza dei computer) > noi invece usiamo il termine informatica (da informatique ) origine francese > informazione, una volta si usava il termine scienza dell’informazione per descrivere l’informatica. Non si occupa solo dei computer o dispositivi digitali, ma l’informatica si occupa degli aspetti che riguardano l’elaborazione dell’informazione : sistemi di elaborazione automatica di informazione, di simboli, con poco intervento umano. Elaborazione codificata utilizzando dei simboli (testo è codificato come simboli). Info nei vari formati che viene elaborata dai computer è codificata come simboli. Vantaggi elaboratori automatici:

  • tempi di elaborazione: velocità, operazioni più veloci.
  • affidabilità: nell'effettuare l’elaborazione, anche i computer possono sbagliare, ma di solito sono più affidabili, fanno meno errori degli umani (operazioni meccaniche/matematiche).
  • elaborazione operazioni meccaniche: operazioni aritmetiche sono meccaniche, non c’è nulla di creativo, per fare queste operazioni gli elaboratori automatici sono utili. Lasciano agli utenti più tempo per concentrarsi sugli aspetti creativi. Ora non è più così tanto vero, vengono utilizzate tecnologie anche per la creatività.

Information & Communication Technology: dopo che sono stati creati gli elaboratori meccanici, quelli precedenti erano isolati, operazioni complesse ma isolati. Ad un certo punto ci si rende conto che era utile collegare gli elaboratori per scambiarsi i lavori, permettere comunicazioni. Convergenza tra tecnologie dell’informazione (tecnologie informatiche) e quelle delle telecomunicazioni (si occupavano di far transitare i dati da un punto all’altro, es. rete telefonica). Fusione e convergenza tra queste due discipline.

SISTEMI AUTOMATICI DI ELABORAZIONE

Come si è arrivati a progettare e realizzare i dispositivi di elaborazione automatica. L’idea di automatizzare determinati processi, soprattutto operazioni aritmetiche (regole), risale all’antichità (es. abaco). I primi modelli automatici (semi, calcolatrici) nascono nel 17esimo secolo, l’interesse è automatizzare operazioni aritmetiche o calcoli matematici:

  • pascalina (antenato della calcolatrice, Pascal)
  • regolo calcolatore
  • stepped reckoner Sono elaboratori automatici che lavorano per svolgere un solo compito > i calcoli matematici (calcolatrice).

La prospettiva inizia a cambiare nell’800 > si inizia a pensare all’idea di costruire elaboratori non pensati solo per uno scopo preciso, ma che possano in generale essere elaboratori universali. Il primo ad avere quest’idea è l’inventore inglese Charles Babbage > progettare una macchina (elaboratore) dotata di due componenti che ritroviamo anche nei nostri elaboratori > un’unità di memoria per memorizzare i dati in generale e un’unità di calcolo che nei nostri computer è il processore, quella che elabora la memoria. Questo è un prototipo che non venne mai realizzato perché la tecnologia non era ancora sufficientemente sviluppata per permettere la realizzazione concreta. Ada King Lovelace ebbe l’idea di considerare come questo prototipo di macchina automatica poteva essere utilizzato > scrive i primi programmi che potevano risolvere dei problemi. G. Boole inventò l’algebra booleana > il contributo nasce in matematica però ne parliamo perché si basa sul fatto che le espressioni possono avere solo due valori (vero/falso) e i sistemi che studieremo si basano su questa idea > tutto quello che viene rappresentato sfrutta due possibili valori (bit).

Nel ‘900 vennero realizzati i primi modelli funzionanti > Alan Turing matematico inglese che dà un contributo teorico sempre in ambito matematico. Il suo obiettivo era capire se gli elaboratori automatici non ancora costruiti hanno dei limiti nei problemi che riescono a risolvere o no. Nel cercare di rispondere a questa domanda costruisce il modello teorico della macchina di Turing (1936). K. Zuse Germania, prima macchina venne costruita concretamente lì nel 1941 > Z1. Siamo durante la SGM, il suo contributo non si diffonde in tutti i paesi, anzi i progetti che hanno più successo e portano alla diffusione delle macchine avvengono nel contesto britannico e statunitense.

Ci sono una serie di progetti che vengono realizzati dal 1943 > diversi modelli di calcolatore elettronico universale a valvole termoioniche. Uno di questi progetti che va a buon fine riesce a costruire una macchina chiamata EDVAC (Electronic Discrete Variable Computer) > macchina di Von Neumann. Due motivi per cui è importante questo progetto: il primo è che è uno dei primi esempi di elaboratore funzionante; il secondo è che il gruppo di persone che lavora all’EDVAC vede partecipare il matematico Von Neumann, matematico affermato che lavora a questo progetto e insieme agli altri partecipanti costruisce non solo la macchina funzionante (uno dei primi esempi di computer) ma costruisce anche uno schema di quali sono le componenti principali che costituiscono la macchina e di come devono comunicare tra loro. I computer sono sistemi con tante componenti ognuna delle quali fa determinate azioni. I nostri computer si rifanno ancora all’architettura di Von Neumann pk individua componenti principali e come si coordinano tra loro.

  • anni ‘50 : introduzione di transistor computer più piccoli e affidabili.
  • anni ‘60 : fase di miniaturizzazione componenti dei computer > produzione dei primi microprocessori, basati su circuiti integrati.
  • anni ‘70 : personal computer macchine che sono della dimensione dei nostri elaboratori, più piccoli, costi diminuiscono e possono essere usati da individui.
  • anni ‘80 : interfaccia grafica > aspetto fondamentale che cambia è la modalità di interazione tra l’utente e la macchina. Vengono inventate le interfacce grafiche. Fino a quel periodo abbiamo interfacce a caratteri l’utente scrive un comando e l’utente risponde con risultato testuale. Anni ‘ cambia l’interazione > componenti interfacce grafiche: - icona (oggetto grafico) - applicazioni associate a finestre + dispositivi e mouse

Alan Turing (1912-1954)

Matematico inglese, diede contributo fondamentale alla nascita e sviluppo dell’informatica. Turing è considerato il padre dell’informatica > contributo SGM, obiettivo esercito inglese era decifrare messaggi esercito tedesco, sistemi complessi > gli inglesi costruiscono un sistema per decifrare in modo automatico i messaggi. È il primo a parlare di intelligenza artificiale.

Macchina di Turing

  • dispositivo per l’elaborazione automatica dell’informazione.
  • modello teorico di elaborazione automatica > non esistono ancora lui li studia solo. Vuole scoprire i limiti degli elaboratori automatici, se esistono problemi che non sono in grado di risolvere. Costruisce questo modello teorico.
  • il funzionamento imita una persona che svolge calcoli > è la sua ispirazione. Costruisce la sua macchina pensando di automatizzare il processo di una persona che svolge dei calcoli.

La macchina di Turing è costituita da:

  • un alfabeto di simboli > la macchina è associata a un insieme di simboli che la macchina comprende.

Problemi che le MTU non sono in grado di risolvere > ci sono dei limiti, alcuni problemi non sono risolvibili. A Turing non interessa che i calcoli vengano fatti velocemente ma riuscire a farli. Il motivo per cui non è mai stata realizzata concretamente > questa struttura a nastro è antipatica, è noioso anche solo definire il comportamento e poco efficiente perché richiede molto tempo. È importante però il fatto che lui pensa ad un elaboratore universale, come i nostri computer.

Tesi di Church-Turing

Turing ha definito un formalismo per descrivere operazione automatica. Gli studiosi si chiedono, la macchina di Turing riesce a risolvere dei problemi e altri no, ma è una proprietà della macchina o tutti i sistemi automatici hanno queste proprietà? Ci sono problemi che la macchina di Turing non riesce a risolvere e che altri sistemi invece riescono a risolvere? Vengono proposti modelli alternativi > confronto con la macchina di Turing. I due modelli sono equivalenti. L’insieme dei problemi che risolvono sono gli stessi, magari ci sono sistemi più veloci ma i problemi sono gli stessi. Tesi : l’insieme dei problemi risolvibili tramite metodi meccanici equivale all’insieme dei problemi risolvibili dalla macchina di Turing. I problemi risolvibili da sistemi automatici sono quelli che riesce a risolvere la macchina di Turing. Si chiama tesi e non teorema (siamo sicuri) > i due non arrivano a dimostrare questa cosa. Calcolatore in grado di simulare il comportamento di una macchina di Turing universale: Turing Equivalente.

Fasi di elaborazione

Algoritmi hanno l'obiettivo di elaborare dati. Suddivisa in tre parti:

  • come leggere un’informazione in ingresso (input) > metodo che stiamo progettando legge i dati che dobbiamo elaborare. Ha blocchi specifici nei diagrammi di flusso.
  • come elaborarla producendo un certo risultato > vera e propria elaborazione con cui algoritmo arriva a produrre il risultato.
  • come mostrarla all’utente (output) > fase si scrittura. Quello che l’algoritmo ha calcolato viene restituito all’utente. Questo processo di elaborazione ha uno scopo > risolvere un problema. Legge dei dati che devono essere combinati x risolvere un problema.
  • problema : dato un insieme di dati in input, calcolo di una soluzione. Un problema richiede il calcolo di una soluzione. Lo strumento che usiamo per descrivere in che modo il problema viene risolto > algoritmo.
  • calcolo della soluzione > algoritmo , descrive in che modo prendiamo i dati in input e ricaviamo la soluzione al problema.

Algoritmo

Termine che nasce da un matematico persiamo che si occupa di processi algebrici e descrisse alcuni processi in modo da riuscire ad automatizzarli. Obiettivo è di risolvere un problema > algoritmo dice il problema è questo, leggere dati e calcolare soluzione problema. Come descrive modalità di cambiamento dei dati? Tramite una sequenza di istruzioni per elaborare dati in input e produrre la soluzione (output). Es. algoritmo per l’elevamento a potenza. Un algoritmo per essere tale deve possedere alcune caratteristiche:

  • finitezza: deve essere finito, viene eseguito per un tempo finito, l’algoritmo ad un certo punto termina, la sequenza di istruzioni finisce, ha risolto il problema. Non elabora infinitamente.
  • eseguibilità: quando descriviamo l’algoritmo dobbiamo descrivere il processo con cui vengono svolte istruzioni > quali sono? Devono essere istruzioni di base che un elaboratore automatico è potenzialmente in grado di eseguire.
  • correttezza: l’algoritmo deve trovare davvero la soluzione al problema, devono risolvere un problema qualsiasi sia il dato in input (2 elevato alla n quando n > 0).
  • determinismo: gli algoritmi saranno sempre algoritmi deterministici, l’algoritmo ha un insieme di dati in input (es 2 alla n) e se considero l’algoritmo e lo eseguo due volte con lo stesso input il risultato deve sempre essere lo stesso. Gli input possono essere diversi ma ogni volta che lo eseguo il risultato è sempre lo stesso.

Il concetto di algoritmo è legato a:

  • programma : algoritmo scritto in linguaggio comprensibile a un computer.
  • processo : programma in esecuzione. Algoritmo > risolve un problema. Dato un algoritmo possiamo avere tanti programmi (p1, p2…). Per ogni programma posso avere tanti processi (pr1, pr2…) > il processo è un programma in esecuzione, dipende da tanti fattori > uno è il momento in cui lo avvio. Se avvio il programma ora crea un processo, se lo avvio dopo un altro, perché è un programma in esecuzione.

Cos’è un algoritmo?

  1. Un programma eseguibile da un calcolatore > NO, non è un programma e non è eseguibile da un calcolatore.
  2. Le info che devono essere eseguite da un calcolatore > NO, info (dati) non sono eseguiti, sono le istruzioni che sono eseguite.
  3. Una delle componenti della macchina di von Neumann > NO.
  4. L’inversa della funzione esponenziale > NO, è il logaritmo.
  5. Una descrizione delle istruzioni che consentono ad un esecutore di risolvere un problema > SI.

DIAGRAMMI DI FLUSSO

Perché si chiamano diagrammi di flusso? Diagrammi perché si fanno disegni, forme grafiche per definire alcune fasi dell’elaborazione. Di flusso perché l’obiettivo è quello di descrivere i flussi dell’elaborazione che può seguire più percorsi. Come rappresentare algoritmi? Due elementi:

  • blocchi > rappresentazione fasi di un algoritmo, forme geometriche. Sono collegati tra loro da linee con freccia.
  • linee di flusso > servono per descrivere la direzione che segue il flusso dell’elaborazione.

Blocco di inizio e fine

Due blocchi che non descrivono davvero operazioni di elaborazione ma segnano inizio e fine dell’elaborazione. Forma ovale. Inizio freccia in uscita perchè inizia elaborazione, esce solo una freccia. Il blocco fine non ha freccia che esce ma abbiamo finito. Abbiamo una o più frecce che arrivano al blocco fine ma nessuna linea che esce dal blocco. Un solo blocco di inizio ; possono esserci più blocchi fine.

Perché un algoritmo ha solo un blocco inizio?

  1. Per definire la finitezza? No
  2. Perché gli algoritmi permettono solo un’operazione? No, tante.
  3. Falso, possiamo definire più blocchi inizio. No
  4. Per garantire il determinismo > si arriverebbe a due risultati diversi.

Blocco operazione

Operazione svolta, descritta all’interno del blocco. Graficamente è un rettangolo, potrebbero arrivare più frecce ma esce una sola freccia dal blocco operazione. Operazione specifica che viene fatta è scritta all’interno del rettangolo. All’interno specifico il tipo di operazione che viene fatta.

Y = 11

Se X diventa 28, Y rimane 11.

Es. numero1 <— 10 numero2 <— 20 somma <— numero1 + numero somma <— 30

Es. x <— 10 x <— x+1 (voglio incrementare valore x) x <— 11 oppure x <— x-1 (voglio decrementare x) x <— 9

Riguardando l’algoritmo somma di due numeri abbiamo blocco di inizio, il parallelogramma (primo blocco di lettura) quello che leggiamo viene memorizzato nella variabile numero 1. Nel blocco successivo il numero letto viene memorizzato nella variabile numero 2. Il blocco rettangolare memorizza nella variabile somma la variabile numero 1 + variabile numero 2. Il blocco somma restituisce il contenuto della variabile somma.

Algoritmo che calcola la differenza tra il numero X e il numero Y (da leggere in input):

Nel blocco operazione definisco la variabile che chiamo differenza > gli assegno X (contenuto prima variabile) meno Y (contenuto seconda variabile). Output e restituisco il contenuto di differenza.

Variabile strutturata Dati strutturati: dati collegati per il tipo di informazione rappresentata. In che senso ho dati che sono correlati? Numero di matricola e voti esami. Servono tutti per descrivere la stessa entità. In alcuni casi mi servono strutture che memorizzano dati strutturati. Non basta avere una variabile per dato. Mi serve un sistema che memorizza tutti i dati collegati. Variabile strutturata: utilizzata per memorizzare un dato strutturato. Sono variabili utilizzate per memorizzare i dati che hanno questa strutturazione (tabelle).

  • Vettore : sequenza lineare di celle (orizzontale o verticale)
  • Matrice : tabella di celle (tante righe e colonne, sia orizzontale che verticale).

Vettore

Sequenza lineare di celle. Variabile strutturata > la variabile ha un nome e valore. Le variabili strutturate hanno un nome X e tanti valori, quante sono le celle da cui quel vettore è composto. La difficoltà è che le operazioni che facciamo (assegnamento ecc.) non vengono fatte su tutto il vettore ma sulle celle del

vettore. Non prendo il vettore complessivo e dico fai la somma di tutti i valori > ma prendi la cella e sommala a qualcos’altro. Prendi il primo valore + 1, secondo valore + 1. Lavoro sui valori delle singole celle, che sono anche loro variabili ma semplici. Come faccio a definire le variabili di ogni cella? Devo usare il nome del vettore (X) e l’indice della cella (X0, X2).

X0 <— 5 (a X0 assegno il valore 5) X2 <— 3 (a X2 assegno il valore 3)

Matrice

Si lavora con le singole celle. Devo specificare due indici > l’indice della riga in cui si trova la cella e l’indice della colonna. Gli indici partono da zero.

X2,1 <— 10

X0.4 <— 22

Esempio

  • lettura di due dati in input
  • scrittura di un vettore
    • nella prima cella del primo numero
    • nella seconda cella del secondo numero
    • nella terza cella della somma tra i due numeri

Blocco di controllo

Il blocco è rappresentato da un rombo > prima usciva una sola freccia, nel blocco di controllo escono più frecce. Ci sono due frecce che escono dal blocco di controllo, si creano delle alternative, percorsi di sx e dx. Tramite i blocchi di controllo possiamo iniziare a creare alternative. In base a cosa si decide di seguire il percorso di sx o dx? In base a quello che c’è scritto nel blocco di controllo. Nel blocco viene scritta una

Negazione

!: nega il valore booleano a cui è applicato. X e y le usiamo immaginando che siano condizioni non variabili. Essendo una condizione può assumere due valori (vero o falso). La negazione si applica ad una sola condizione e nega il valore, cambia, inverte il valore booleano. Se il valore è falso la negazione è vero e se il valore è vero è falso. La negazione si indica con il simbolo! Per capire cosa succede si usano tabelle di verità, una colonna indica il valore della condizione x e di fianco la negazione di x che mi dice come cambia il valore. Se x è falsa, la negazione di x è vera. Se x è vera e la neghiamo otteniamo valore opposto.

Congiunzione

&: congiunzione, e commerciale, and; viene applicata prendendo due condizioni x e y. x&y è vera quando sia x che y, entrambe le condizioni, sono vere, devono obbligatoriamente esserlo, allora anche la loro congiunzione è vera. Se una è falsa o entrambe sono false è tutto falso.

Disgiunzione

|: or, o, disgiunzione; vera sé almeno uno dei valori a cui è applicata è vero. L’unico caso in cui x | y è falsa è quando entrambe sono false.

Se nego il falso ottengo vero. La parte tra parentesi è vera ma siccome neghiamo il valore vero otteniamo il falso. Prendi prima parte interna.

È vera se entrambe le parti sono vere. Se la prima parte è falsa tutto è falso.

Strutture di controllo

Possiamo costruire percorsi non lineari ma con alternative. Le due strutture di controllo che possiamo creare sono:

- diramazioni > arrivo a un blocco di controllo e ho due alternative e in base a quello che c’è scritto nel blocco di controllo ne seguo una.

  • iterazioni (cicli) > c’è un certo processo che viene ripetuto, eseguito un certo numero di volte. Si crea una struttura ciclica che viene ripetuta tante volte finchè succede qualcosa e terminiamo iterazione. Tutto dipende dalla condizione scritta nel blocco di controllo.

Diramazioni

La linea di flusso arriva al blocco di controllo > condizione che può essere vera o falsa. Se la condizione è vera seguiamo una strada, se è falsa seguiamo l’altra. Diramazione > costrutto IF-THEN-ELSE (funzione di se nel foglio di calcolo).

Processo perchè non è necessariamente solo un’operazione, ci possono essere altre cose, diramazioni, iterazioni. Esempio:

Diramazione: massimo tra due numeri Scriviamo un algoritmo che:

  • legge due numeri
  • restituisce il numero massimo

La freccia sta per assegnamento.

Diramazione: massimo tra tre numeri Scriviamo un algoritmo che legge tre numeri e restituisce il numero massimo.

Scriviamo un algoritmo per decidere se accettare il voto di un esame:

  • voto compreso tra 18 e 30
  • voto >= media → accettato
  • voto < media → rifiutato

Abbiamo una diramazione, dalla diramazione discendono due linee di flusso, vero o falso, in uno dei due casi abbiamo una diramazione che segue una diramazione. Devo leggere la variabile voto, arrivo a una diramazione in cui controllo che il voto sia ammissibile tra 18 e 30, uso due condizioni e siccome devono valere entrambe devo usare un operatore booleano quello di congiunzione, sarà vera quando varranno entrambe le condizioni. Sarà vera o falsa : quando è falsa andrò a scrivere "voto non ammissibile", se è vero dovrò decidere se accettare o meno. Leggo un altro numero che è la mia media voti, e devo confrontare il voto con la media, se è maggiore o minore, avrò un'altra condizione. Ho due altre possibilità, se vero stampo "voto accettato", se falso "voto rifiutato".

La lettura della media può essere fatta prima o dopo il voto, solo che prima in questo caso non avevo bisogno della media.

Iterazione (o cicli): operazione o insieme di operazioni applicate ripetutamente

Abbiamo una iterazione quando ci sono alcune operazioni che vengono eseguite tante volte. Fino ad ora abbiamo visto operazioni che seguono sempre un percorso solo, dall'altro verso il basso, eseguiamo le operazioni una sola volta. Quando abbiamo una iterazione ad un certo punto abbiamo linee di flusso che mi riportano indietro.

Per esempio il riporto nell'addizione, le stesse operazioni vengono eseguite tante volte per ogni coppia di cifre, idea di iterazione.

Blocco di controllo con al suo interno una condizione , quando ha un certo valore allora continuo a eseguire determinate operazioni, quando la condizione cambia il valore invece l'iterazione termina. Si può chiamare anche ciclo.

Se la condizione è vera seguo la linea rossa e sono all'interno dell'iterazione. Quando la condizione diventa falsa non eseguo più questa parte, termino l'iterazione. È possibile anche l'opposto.

Esempi:

Scrittura di un algoritmo che

  • Legge un numero e lo memorizza nella variabile n
  • Stampa n volte il testo «Informatica»

(parallelepipedo è il blocco di lettura)

Se la condizione è vera, devo fare due operazioni, stampare informatica (lo metto nel blocco di output), ogni volta che faccio l'iterazione stampo informatica e devo ricordarmi che se devo stampare 3 volte, la volta dopo saranno 2 e poi 1, devo quindi decrementare il valore di n, non è più quello di prima, gli assegno il valore che aveva prima meno 1, perché ho già fatto una volta la stampa.

Eseguo l'iterazione fino a che n è maggiore di 0.

Iterazione per calcolare X alla Y

Scrivere un algoritmo che

  • legge la base x e l’esponente y
  • calcola il valore x alla y

X moltiplicato Y volte.

Leggo x e y, variabile P dove memorizzo il risultato a cui assegno il valore 1.

Blocco di controllo : y >=

Iterazione : vero/falso, assegno a P il valore di P per X, e cambio il valore di Y con Y-1. Se è falso restituisco il valore P.

Iterazione per scrivere in un vettore

I vettori sono sequenze di celle, costruire un diagramma di flusso, che legge dei numeri che devono essere copiati nelle celle di un vettore V di 10 celle.

Scrivere un algoritmo per:

  • la lettura di dieci numeri
  • la copiatura nel vettore v dei numeri, nelle celle v0 , v1,..., v

Ogni iterazione legge quel valore e lo inserisce nella cella , come facciamo a passare di cella in cella? usiamo gli indici , che dobbiamo quindi incrementare da 0 a 9.

Blocco inizio

Blocco operazione : in cui uso una variabile che chiamo i a cui assegno 0, che è la prima cella dove inizio a scrivere con la prima iterazione il primo numero.

Blocco di controllo : i<= 9, se i supera 9 esce falso.

Iterazione : se risulta vera dovrà fare lettura e memorizzazione nella cella che ha indice i, quindi operazione di lettura (rombo) alla cella V con indice i assegno l'input (anche solo Vi), devo poi aumentare il valore di i, per spostarmi nelle altre celle, quindi blocco operazione e ad i assegno il valore i+1.

Iterazione: somma di un vettore Scrivere un algoritmo per determinare la somma dei numeri contenuti in un vettore di 5 elementi. Iniziare dalla prima cella e leggere contenuto cella. Abbiamo bisogno di un’altra variabile, mentre scorriamo il vettore deve calcolare la somma. Serve una variabile che memorizza l’indice della cella. La prima variabile la chiamiamo i e diamo il valore 0 pk iniziamo dalla cella v0. Ci serve altra variabile dove memorizziamo la somma che di volta in volta calcoliamo > blocco operazione. i <— 0; h <— 0: ho dato valore alle due variabili. Blocco di controllo. Devo fare due operazioni nell’iterazione: aumentare valore variabile i, assegno alla variabile i il valore i + 1. Prima devo aggiornare il valore della somma, ovvero della variabile h. All’inizio è 0, ogni volta che faccio iterazione devo aggiungere alla variabile h quello che sto leggendo nella cella. h <— h + v Aumentare valore i <— i + 1. Cosa devo scrivere nel blocco di controllo? Fino a quando continuo? Fino a quando ho fatto la somma dei 5 elementi. Quando l’indice è 5 o più di 5 vuol dire che ho letto tutti i numeri. Continuo a fare l’interazione fino a che i < 4. Risultato > variabile h. Blocco fine. All’esame bisogna costruirlo > per verificare a dx.

Per calcolare la media aritmetica? Si sommano i valori e li dividiamo per il numero di valori. Bisogna fare solo una modifica. La media si calcola prendendo la somma dei valori e dividendola per il numero di valori

h/i pk quando esco dall’interazione il valore di i (quando i è uguale a 4 fa l’ultima operazione > quando valore della condizione è falso è 5) > i valori che ho sommato sono 5, partendo da 0. La media (variabile h) è uguale alla somma dei valori (valore che aveva prima h) diviso i.

10 quindi t diventa 3. Quarta cella no, resta 3. Ho trovato 3 numeri > 10. Cella successiva ha un valore > 10 quindi t diventa 4. Fino qui l’iterazione viene continuamente svolta. Altro valore > 10, t diventa 5 (ho sommato numeri > 10). Non devo più fare somme, mi fermo. Al blocco di controllo 5 è minore o uguale a 4, falso > esco dall’iterazione. Quando esco restituisco h (somma dei 5 numeri) > blocco fine.

Esercizio di ripasso Scrivere un algoritmo che risolve il seguente problema:

  • dato un vettore v di 10 celle in input
  • scrive su un vettore x il contenuto di v in ordine inverso

Il valore scritto in v0 deve essere copiato in v9, il valore il v1 deve essere copiato in v8. Blocco di inizio > tutte le volte che abbiamo a che fare con un vettore dobbiamo leggere le celle usando la variabile i (facciamo iterazione, che parte da v0 e arriva all’ultima) i <— 0. Poi dato che devo leggere tutte le celle devo fare iterazione > blocco di controllo, in cui devo scrivere la condizione > mi devo fermare quando supera 9, i <=9. Possibilità che la condizione sia vera o falsa. Noi facciamo iterazione quando l’indice è <=9. Definiamo i blocchi che ci permettono di costruire l’interazione. Dobbiamo avere due blocchi operazione. Dire che l’indice i viene incrementato i <— i +1. Ma prima devo fare un’altra operazione > devo copiare qualcosa che sta in v0 qualcosa che sta in x. Blocco operazione > la prima operazione dell’interazione dice, prendi il contenuto di vi e assegnalo a una variabile/cella del vettore x. Che indice ha la cella del vettore x? Quando sono nella prima iterazione i vale 0, che valore ha l’indice di x? 9. Devo copiare in x9, v0. Alla seconda iterazione i varrà 1 pk sono in v1 > vado a copiare 8. All’interno dell’iterazione l’indice del vettore I viene aumentato di uno. Invece qui parte da 9 e ogni volta che fa l’iterazione viene decrementato. Prima tolgo 1, poi 2. Il contenuto di v1 lo assegno a x9-1 (che è l’indice di x, pk quando i vale 0 stiamo prendendo v0 e lo stiamo assegnando a x9). Per la parte destra dell’assegnamento continua a crescere (l’indice di vi) mentre l’indice della variabile x continua a diminuire. Finchè arriviamo a v9 e x0. A x0 diamo v9. Quando è falso restituisco il vettore x (in cui ho copiato i numeri/caratteri in ordine inverso). Quando i è maggiore di 9 esco dall’iterazione.

LINGUAGGIO DI PROGRAMMAZIONE

I diagrammi servono a descrivere il processo di un algoritmo , ma i computer non comprendono i diagrammi di flusso ma altri linguaggi. Se analizzassimo il linguaggio compreso dalle singole macchine si chiama linguaggio macchina > istruzioni elementari ma scritte come sequenze binarie. Se volessimo tradurre gli algoritmi in linguaggio macchina dovremmo scrivere in sequenze 0,1. Operazioni elementari > ogni operazione associata a una codifica, c’è un codice binario costituito da sequenze di 0 e 1. Es: somma

0111 111. Per difficoltà nella costruzione di macchine non necessariamente due processori parlano lo stesso linguaggio. Possono parlare linguaggi diversi > utilizzano rappresentazioni diverse delle istruzioni. Quando abbiamo processori con le stesse codifiche > sono detti compatibili , usano lo stesso linguaggio macchina. Sia per evitare problemi di compatibilità, sia pk scrivere in codice binario è complicato > sono stati introdotti i linguaggi di programmazione : linguaggi di alto livello (livello di astrazione distante dalla macchina. Caratteristiche:

  • non usano codice binario ma del testo, sintassi molto precisa, parole che si rifanno al linguaggio naturale inglese > non abbiamo bisogno di ricordarci le codifiche di tutte le operazioni. vengono definite operazioni più complesse.
  • altro vantaggio > un programma scritto in un linguaggio di programmazione non è immediatamente comprensibile alla macchina. La macchina parla il codice 0,1 > ci devono essere delle componenti che prendono i programmi scritti in linguaggio di alto livello e li traducono , sono dei traduttori. Io scrivo il messaggio attraverso il linguaggio di alto livello, sono poi i traduttori che lo adattano alle altre macchine. Ognuno ha il suo traduttore per la lingua specifica, nel linguaggio macchina specifico.

Uno dei sistemi di traduzione più diffusi è il compilatore : traduttore da linguaggio di alto livello in linguaggio macchina. Scriviamo il codice sorgente > programma scritto in linguaggio di alto livello. Per riuscire ad eseguirlo dobbiamo tradurlo > chiediamo al compilatore di tradurlo per noi. Il compilatore legge il programma scritto in linguaggio di alto livello, costruisce un altro codice corrispondente che si chiama codice eseguibile > programma scritto in linguaggio macchina. Quello che produce il compilatore è il codice eseguibile pk può essere eseguito, è specifico di una macchina o famiglia di macchine. Il vantaggio è che non ci preoccupiamo delle singole macchine ma lavoriamo ad alto livello.

ARCHITETTURA DELL’ELABORATORE

Gli elaboratori sono sistemi di elaborazione > sono sistemi di elaborazione pk abbiamo tante componenti. Elaboratori sono costituiti da un certo numero di componenti, ogni componente svolge una certa funzione. Vantaggio il fatto di poter specializzare le componenti ma va opportunamente affrontato > dobbiamo prevedere un funzionamento coordinato. Ci rifacciamo all’architettura di Von Neumann > ha proposto architettura, ha definito componenti principali, molte di queste le abbiamo anche nei nostri elaboratori, se ne sono aggiunte alcune rispetto a questa architettura proposta nel 1944.