Estratto del documento

Programmazione 2024/2025

Com'è fatto un calcolatore?

Hardware e software

Un sistema di elaborazione delle informazioni (computer o calcolatore) è composto da elementi fisici (materiali) e logici (informazioni):

  • La parte fisica (elettronica, magnetica, ottica, ecc.) è detta hardware (letteralmente, ferramenta).
  • La parte logica (dati e programmi) è detta software.
  • I dati rappresentano qualunque tipo di informazione (numeri, testi, immagini, suoni, filmati, ecc.).
  • I programmi sono formati da insiemi di istruzioni (elementari) che vengono eseguite in un ordine stabilito.

Ci occuperemo (quasi) esclusivamente di software.

Architettura di un computer

Il modello di Von Neumann

Nel 1946 John von Neumann elaborò un modello teorico dell’architettura di un elaboratore che è tuttora valido e molto utilizzato. La grande maggioranza dei computer odierni, infatti, ha un’architettura che può essere ricondotta al modello di von Neumann.

Il modello schematizza in modo omogeneo situazioni diverse.

La memoria di un computer

  • La memoria serve a immagazzinare (cioè a preservare nel tempo) dati e programmi all’interno del computer.
  • È suddivisa in celle o locazioni di memoria, ognuna delle quali è identificata univocamente da un indirizzo. Ogni cella contiene un numero predefinito di bit, solitamente uguale a 32 o 64.

Un Bit è un dato elementare, l’unità fondamentale di informazione che può assumere due valori, convenzionalmente chiamati zero e uno. Un insieme di 8 bit è chiamato Byte ed è l’unità di misura della memoria (ovviamente se ne usano anche i multipli, ad esempio 512 MByte).

L’unità centrale di elaborazione (CPU)

La CPU (Central Processing Unit) è costituita da tre parti principali:

  • L’unità logico-aritmetica (ALU, arithmetic logic unit), che “fa i calcoli”.
  • L’unità di controllo (CU, control unit) che governa il funzionamento della CPU stessa.
  • Un insieme di registri, che sono celle ad accesso molto veloce per la memorizzazione temporanea dei dati (in pratica, un’altra piccola memoria interna alla CPU).

Il funzionamento della CPU è ciclico e il periodo di tale ciclo viene scandito dall’orologio di sistema (clock), la cui frequenza costituisce una delle caratteristiche tecniche più importanti della CPU (es. 1 GHz, un miliardo di cicli al secondo, cioè periodo di 1 ns).

Ciclo di funzionamento della CPU

Ogni ciclo di funzionamento è costituito da tre fasi:

  • Accesso: lettura dell’istruzione da eseguire e sua memorizzazione nel registro istruzione.
  • Decodifica: decodifica dell’istruzione da eseguire.
  • Esecuzione: esecuzione dell’istruzione.

Si parla di ciclo Fetch-Decode-Execute.

La posizione (o indirizzo) dell’istruzione a cui si accede durante la fase di fetch è contenuta nel contatore di programma (program counter, PC).

Viene automaticamente incrementato di un’unità ad ogni ciclo, in modo da eseguire istruzioni in sequenza, cioè istruzioni memorizzate in celle di memoria aventi indirizzi consecutivi.

L’unità centrale di elaborazione

L’unità centrale di elaborazione:

  • Individua ed esegue le istruzioni del programma.
  • Effettua elaborazioni aritmetiche e logiche con la sua unità logico-aritmetica (ALU).
  • Reperisce i dati dalla memoria esterna e da altri dispositivi periferici e ve li rispedisce dopo averli elaborati.
  • È costituita da uno o più chip (microprocessori).

Il chip della CPU

Un chip, o circuito integrato, è un componente elettronico con connettori metallici esterni (pin) e collegamenti interni (wire), costituito principalmente di silicio e alloggiato in un contenitore plastico o ceramico (package).

I collegamenti interni di un chip sono molto complicati e tipicamente in un chip sono presenti alcuni miliardi di transistori tra loro interconnessi.

Il bus nel modello di von Neumann

Il bus è in realtà costituito da tre bus distinti:

  • Bus dei dati.
  • Bus degli indirizzi.
  • Bus dei segnali di controllo.

Il bus è bidirezionale e viaggiano dati da e verso la CPU mentre sugli altri bus viaggiano indirizzi e segnali di controllo che provengono soltanto dalla CPU.

La memoria primaria

La memoria primaria è veloce ma costosa (5€/GByte). Cioè, è più veloce e più costosa della memoria secondaria. È costituita da chip di memoria realizzati con la stessa tecnologia (al silicio) utilizzata per la CPU ed è suddivisa in due parti, con funzionalità distinte:

  • Memoria di sola lettura (ROM, Read-Only Memory).
  • Memoria ad accesso casuale (RAM, Random Access Memory). Accesso casuale significa che il tempo per accedere non dipende dalla sua posizione nella memoria.

Dovrebbe chiamarsi memoria di lettura e scrittura, perché in realtà anche la ROM è ad accesso casuale, mentre ciò che le distingue è la possibilità di scrivervi.

La memoria RAM ad accesso casuale → memoria

  • Consente la lettura e la scrittura dei dati e dei programmi in essa contenuti.
  • Contiene dati in fase di modifica e programmi in fase di esecuzione.
  • Perde il proprio contenuto quando si spegne il computer (si dice infatti “supporto di memorizzazione volatile”).

La memoria ROM memoria di sola lettura →

  • Conserva i dati e i programmi in essa memorizzati anche quando il computer viene spento, infatti è una memoria “non volatile” o “permanente”.
  • Contiene i programmi necessari all’avvio del computer, programmi che devono essere sempre disponibili (tali programmi sono chiamati BIOS, ossia Basic Input/Output System).

Una memoria ROM può essere scritta una sola volta, al momento della sua fabbricazione anche se in realtà il BIOS è aggiornabile perché risiede in una EPROM (o tecnologia similare), memoria riscrivibile (lentamente e “poche” volte, decine di migliaia), comunque molto diversa da una RAM.

La memoria secondaria

La memoria secondaria (o di massa) è di solito un disco rigido (o disco fisso, hard disk) ed è un supporto non volatile e meno costoso della memoria primaria (circa 100 volte, come prezzo per byte) ma decisamente più lento (tempo di accesso dell’ordine di qualche ms anziché qualche ns).

  • Circa 50€/TByte = 0.05€/GByte il disco, 5€/GByte la RAM.

Programmi e dati risiedono sul disco rigido e vengono caricati nella RAM quando necessario, per poi tornarvi aggiornati se e quando necessario.

Un disco rigido è formato da piatti rotanti rivestiti di materiale magnetico, con testine di lettura/scrittura.

Negli anni si sono diffusi anche altri tipi di memoria secondaria a tecnologia ottica:

  • CD-ROM: viene letto da un dispositivo laser, esattamente come un CD audio; ha una elevata capacità ed è molto economico e affidabile; è un supporto di sola lettura, utilizzato per distribuire programmi e informazioni (1979).
  • CD-R: utilizza una tecnologia simile al CD-ROM ma può essere scritto dall’utente (una sola volta; più volte se CD-RW) (1990).
  • DVD: ha rappresentato la nuova frontiera per questa tecnologia, con elevatissima capacità (1997).

Blue-ray (2002), capacità ancora più elevata, ma troppo costoso.

Altri tipi di memoria secondaria a tecnologia magnetica meno usati sono:

  • Floppy Disk: capacità limitata ma con il vantaggio di essere agevolmente rimosso dal sistema e trasferito ad un altro sistema (dispositivo di memoria esterno).
  • Tape (nastri per dati): capacità elevatissima, molto economici ma molto lenti, perché l’accesso ai dati è sequenziale anziché casuale (bisogna avvolgere o svolgere un nastro invece che spostare la testina di lettura sulla superficie di un disco). Sono perfetti per l’attività di backup di grandi quantità di dati.

Sono molto diffusi anche altri tipi di memoria secondaria a tecnologia microelettronica: le chiavette USB.

  • Usano una tecnologia molto simile a quella (EPROM) usata per il BIOS dei PC.
  • Hanno sostituito i floppy disk per la portabilità.
  • Più lente dei dischi rigidi, più veloci dei CD.
  • Costo 0.15€/GByte, intermedio tra RAM e disco rigido, ma non volatile e soprattutto portatile.

Dispositivi periferici di interazione

L’interazione fra l’utente umano ed il computer avviene mediante i cosiddetti dispositivi periferici di Input/Output (dispositivi di I/O).

  • Tipici dispositivi di input sono la tastiera, il mouse (dispositivo di puntamento), il microfono (per impartire comandi vocali), il joystick (per i giochi), lo scanner (per la scansione digitale di documenti e immagini).
  • Tipici dispositivi di output sono lo schermo (monitor), le stampanti, gli altoparlanti.

Importanti dispositivi di input/output (bidirezionali) sono la connessione di rete e il touchscreen.

La scheda madre di un PC

La CPU, la memoria primaria (RAM e ROM) e i circuiti elettronici che controllano il disco rigido e altri dispositivi periferici sono interconnessi mediante un insieme di linee elettriche che formano un bus.

I dati transitano lungo il bus, dalla memoria e dai dispositivi periferici verso la CPU, e viceversa.

All’interno del PC si trova la scheda madre (mother-board), che contiene la CPU, la memoria primaria, il bus e gli alloggiamenti (slot) di espansione per il controllo delle periferiche.

Cos’è un programma?

Ogni programma svolge una diversa funzione, anche complessa. Es. impaginare testi o giocare a scacchi.

Un computer è quindi una macchina che:

  • Memorizza dati (numeri, parole, immagini, suoni...).
  • Interagisce con dispositivi (schermo, tastiera, mouse...).
  • Esegue programmi. I programmi sono sequenze di istruzioni che il computer esegue e di decisioni che il computer prende (sulla base dei dati) per svolgere una certa attività.

Nonostante i programmi siano molto sofisticati e svolgano funzioni molto complesse, le istruzioni di cui sono composti sono molto elementari, ad esempio:

  • Istruzioni imperative come leggere un numero da una posizione della memoria, sommare due numeri, accendere un punto rosso in una data posizione dello schermo (sul quale esistono, ad esempio, 1024x768=786432 diverse posizioni…).
  • Istruzioni condizionali (che prendono decisioni): se un dato è negativo, proseguire il programma con l’istruzione presente a un determinato indirizzo anziché con la successiva (si dice che l’esecuzione “fa un salto”).

La programmazione è quindi l’attività di progettare e realizzare un programma.

Cos’è un algoritmo?

Si dice algoritmo la descrizione di un metodo di soluzione di un problema che:

  • Sia eseguibile.
  • Sia priva di ambiguità.
  • Arrivi a conclusione in un tempo finito.

Un computer può risolvere soltanto quei problemi per i quali sia noto un algoritmo. Sono un sottoinsieme dei “problemi computazionali”, definiti con maggiore precisione dall’informatica teorica.

  • Nota: esistono molte diverse definizioni di “algoritmo”, ma tutte si equivalgono nella sostanza.

Come si descrive un algoritmo?

  • In un linguaggio naturale (a volte si dice “a parole”…).
  • In linguaggio matematico.
  • In un linguaggio di programmazione (vedremo!).
  • In un linguaggio specifico del contesto applicativo • Es. una costruzione grafica.
  • In “pseudocodice”, un linguaggio artificiale simile a molti linguaggi di programmazione.
  • In una forma mista di tutte le precedenti.

A cosa servono gli algoritmi?

Dopo aver individuato un algoritmo, per renderlo eseguibile mediante un calcolatore bisogna scriverlo in un programma, cioè tradurlo in un linguaggio di programmazione che sia comprensibile al calcolatore.

Prima di scrivere un programma, è necessario individuare un algoritmo! Iniziare a scrivere un programma senza aver individuato un algoritmo è come partire senza sapere che direzione prendere… sarà molto probabilmente una perdita di tempo!

Il nostro primo programma Python

Un programma Python è costituito da istruzioni o enunciati, che verranno tradotti in linguaggio macchina dall’interprete Python (il programma python o python3), per poi essere eseguiti dalla CPU (dallo stesso interprete).

Immaginiamoli come comandi dati al computer.

(Per il momento) ogni riga è un’istruzione, tranne le righe che iniziano con il carattere #, che sono commenti, cioè informazioni per un lettore umano, ignorate dall’interprete Python.

Non essendo destinate all’interprete, possono essere in italiano (mentre le istruzioni Python sono in inglese).

La seconda riga contiene un “vero” enunciato, l’unico di questo nostro primo programma.

Ha il compito di visualizzare (o stampare, in inglese print) una riga di testo, in questo caso contenente Hello, World! (senza virgolette, quelle servono a “delimitare” il testo da stampare).

È un tipo di enunciato chiamato invocazione di funzione (o chiamata di funzione), perché print è una funzione di Python a cui trasferiamo (o “passiamo”) informazioni perché le elabori in qualche modo.

L’elaborazione svolta dalla funzione print è la visualizzazione delle informazioni ricevute.

Funzioni in Python

Una funzione, come print, è un insieme di istruzioni che servono a portare a termine un compito specifico (di solito tale compito è descritto dal “nome” della funzione, come print). In questo caso la funzione è stata progettata da altri.

È una funzione predefinita (built-in function) del linguaggio Python, il quale mette a disposizione una collezione di funzioni utili che impareremo a usare; altre volte la progetteremo noi: impareremo a progettare funzioni.

Di una funzione già progettata interessa sapere soltanto:

  • Il nome (per invocarla).
  • Quali informazioni si aspetta di ricevere (a volte niente) → sono i cosiddetti argomenti o parametri della funzione, scritti all’interno delle parentesi tonde che seguono il nome della funzione.
  • Cosa fa.

Non dobbiamo preoccuparci di “come” lo fa, cioè di come sia stato realizzato il suo progetto: è il classico e fondamentale modello ingegneristico “a scatola nera” (black box).

Stringhe in Python

In informatica, una sequenza di caratteri racchiusa tra virgolette, come “Hello, World!”, viene chiamata stringa (string).

Per il momento useremo stringhe soltanto come argomenti di funzioni, ma presto ne vedremo molti altri utilizzi. In Python, una stringa può, in alternativa, essere delimitata da “virgolette singole” o apici/apostrofo: 'Hello, World!'

È indifferente, ma è meglio essere coerenti all’interno di un singolo programma per evitare dubbi da parte di un lettore umano.

Nota: seguendo le lezioni, sorgono spontanee molte domande relative alla sintassi del linguaggio.

La cosa migliore è provare per vedere cosa succede.

Es. cosa succede se inizio una stringa con apice singolo e la termino con virgolette doppie?

Facciamoci del male…

Stampare molte righe

Un programma può essere costituito da più enunciati, che vengono eseguiti in sequenza, dall’alto in basso, seguendo l’ordine con cui sono stati scritti dal programmatore nel file.

Il file in cui scriviamo il programma è detto file sorgente, in inglese source file, perché è la sorgente di informazioni per il processo di esecuzione del programma.

Per il momento conosciamo un unico enunciato, l’invocazione della funzione print.

Ogni invocazione di print stampa una riga. L’invocazione print(), senza stringa da stampare, stampa una riga vuota [non è un errore! può servire per impaginare…]

Gli spazi contenuti all’interno delle stringhe sono significativi, fanno parte del messaggio visualizzato e vengono riportati fedelmente sullo schermo dalla funzione print.

L’impaginazione delle informazioni visualizzate da un programma è un aspetto molto rilevante.

Si pensi a una tabella di numeri… gli spazi possono essere decisivi per visualizzare una “bella” tabella, dove le informazioni siano chiare.

L’impaginazione dei dati visualizzati

Enunciati incolonnati!!

In un programma Python, tutti gli enunciati devono essere “incolonnati a sinistra”, cioè devono tutti iniziare nella prima colonna, all’inizio della riga del testo nel file sorgente.

Se ci sbagliamo, cosa succede? IndentationError!

Stampare più stringhe in una riga

Se scriviamo più stringhe come argomento di print, una dopo l’altra, separate da una virgola (posta FUORI dalle virgolette), viene stampata un’unica riga che contiene le stringhe, nello stesso ordine, separate tra loro da uno spazio aggiunto automaticamente dalla funzione print durante l’esecuzione.

Bisogna tenerne conto per ottenere l’impaginazione desiderata.

Questi due programmi sono equivalenti: risolvono lo stesso problema (visualizzano lo stesso messaggio).

Scrivere un’unica stringa al posto di più stringhe è sempre possibile, quindi il fatto che print possa ricevere più argomenti (separati da virgole) sembra una cosa inutile. In realtà è utile, soprattutto quando (tra poco) impareremo che gli argomenti di print possono essere informazioni diverse dalle stringhe!

Stampare risultati di operazioni

La funzione print non è limitata alla visualizzazione di stringhe, può anche visualizzare il risultato di operazioni aritmetiche!

Ovviamente avrei potuto scrivere un unico argomento:

Ma nel primo programma non devo fare calcoli!!

Gli argomenti di print possono essere espressioni aritmetiche, delle quali viene visualizzato il risultato. Dobbiamo imparare a scrivere espressioni aritmetiche!

Operazione aritmetica o stringa?

Attenzione, cosa stampa questo programma?

Il contenuto di una stringa (cioè i caratteri racchiusi tra virgolette)

Anteprima
Vedrai una selezione di 10 pagine su 202
Appunti di Elementi di informatica e programmazione Pag. 1 Appunti di Elementi di informatica e programmazione Pag. 2
Anteprima di 10 pagg. su 202.
Scarica il documento per vederlo tutto.
Appunti di Elementi di informatica e programmazione Pag. 6
Anteprima di 10 pagg. su 202.
Scarica il documento per vederlo tutto.
Appunti di Elementi di informatica e programmazione Pag. 11
Anteprima di 10 pagg. su 202.
Scarica il documento per vederlo tutto.
Appunti di Elementi di informatica e programmazione Pag. 16
Anteprima di 10 pagg. su 202.
Scarica il documento per vederlo tutto.
Appunti di Elementi di informatica e programmazione Pag. 21
Anteprima di 10 pagg. su 202.
Scarica il documento per vederlo tutto.
Appunti di Elementi di informatica e programmazione Pag. 26
Anteprima di 10 pagg. su 202.
Scarica il documento per vederlo tutto.
Appunti di Elementi di informatica e programmazione Pag. 31
Anteprima di 10 pagg. su 202.
Scarica il documento per vederlo tutto.
Appunti di Elementi di informatica e programmazione Pag. 36
Anteprima di 10 pagg. su 202.
Scarica il documento per vederlo tutto.
Appunti di Elementi di informatica e programmazione Pag. 41
1 su 202
D/illustrazione/soddisfatti o rimborsati
Acquista con carta o PayPal
Scarica i documenti tutte le volte che vuoi
Dettagli
SSD
Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher maddalena071213 di informazioni apprese con la frequenza delle lezioni di Elementi di informatica e programmazione e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli Studi di Padova o del prof Dalpasso Marcello.
Appunti correlati Invia appunti e guadagna

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community