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


Appunti di informatica (PYTHON), Appunti di Elementi di Informatica

Al suo interno: sistema operativo e interfaccia utente, programmazione in python (funzioni, strutte dati, istruzioni)

Tipologia: Appunti

2020/2021

In vendita dal 22/12/2023

lorenzo-ferrari-31
lorenzo-ferrari-31 🇮🇹

9 documenti

1 / 15

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
INTRODUZIONE, SISTEMA OPERATIVO E INTERFACCIA UTENTE
Cos’è un computer?
elaboratore elettronico digitale
macchina che immagazzina e trasforma dati
è composto da componenti elettronici
sfrutta segnali digitali {0, 1}
Segnale analogico:
continuo
precisione infinita
interferenze
Segnale digitale:
discreto
precisione finita
Idea di fondo:
usare presenza/assenza di carica elettrica
usare passaggio/non passaggio di corrente/luce
usare una rappresentazione binaria (a due valori) dell’informazione
L’unità minimale di rappresentazione è il BIT (binary digit, cifra digitale): 0 o 1
Con 1 bit rappresentiamo solo 2 diverse informazioni (si/no, on/off, 0/1), mettendo insieme più bit
possiamo rappresentare più informazioni: 00, 01, 10, 11. Quindi informazioni complesse si memorizzano
come sequenze di bit. In generale, con N bit, ognuno dei quali può assumere 2 valori, possiamo
rappresentare 2N informazioni diverse.
Come rappresentare i numeri:
normalmente usiamo il sistema numerico arabico (posizionale e decimale), il calcolatore sfrutta la
rappresentazione binaria: posizionale e binario (in base 2 e cifre 0 e 1).
Come rappresentare le immagini:
Un’immagine è un insieme continuo di informazioni, a differenza delle cifre e dei caratteri alfanumerici non
esiste un’unità minima di riferimento. Il problema è rendere digitale una informazione analogica.
Ci sono due tecniche:
raster: l’immagine viene decomposta in una griglia e a ciascun pixel viene associato un valo
vettoriale: l’immagine viene descritta tramite un insieme di elementi predefiniti di cui si specificano
i parametri
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff

Anteprima parziale del testo

Scarica Appunti di informatica (PYTHON) e più Appunti in PDF di Elementi di Informatica solo su Docsity!

INTRODUZIONE, SISTEMA OPERATIVO E INTERFACCIA UTENTE

Cos’è un computer?

  • elaboratore elettronico digitale
  • macchina che immagazzina e trasforma dati
  • è composto da componenti elettronici
  • sfrutta segnali digitali {0, 1} Segnale analogico:
  • continuo
  • precisione infinita
  • interferenze Segnale digitale:
  • discreto
  • precisione finita Idea di fondo:
  • usare presenza/assenza di carica elettrica
  • usare passaggio/non passaggio di corrente/luce
  • usare una rappresentazione binaria (a due valori) dell’informazione L’unità minimale di rappresentazione è il BIT ( bi nary digi t , cifra digitale): 0 o 1 Con 1 bit rappresentiamo solo 2 diverse informazioni (si/no, on/off, 0/1), mettendo insieme più bit possiamo rappresentare più informazioni: 00, 01, 10, 11. Quindi informazioni complesse si memorizzano come sequenze di bit. In generale, con N bit, ognuno dei quali può assumere 2 valori, possiamo rappresentare 2N^ informazioni diverse. Come rappresentare i numeri: normalmente usiamo il sistema numerico arabico (posizionale e decimale), il calcolatore sfrutta la rappresentazione binaria: posizionale e binario (in base 2 e cifre 0 e 1). Come rappresentare le immagini: Un’immagine è un insieme continuo di informazioni, a differenza delle cifre e dei caratteri alfanumerici non esiste un’unità minima di riferimento. Il problema è rendere digitale una informazione analogica. Ci sono due tecniche:
  • raster: l’immagine viene decomposta in una griglia e a ciascun pixel viene associato un valo
  • vettoriale: l’immagine viene descritta tramite un insieme di elementi predefiniti di cui si specificano i parametri

Per la tecnica raster le immagini in bianco e nero hanno delle sfumature grigie, per codificare le immagini con sfumature si fissa un insieme di livelli di grigio al cui si assegna una rappresentazione binaria, per ogni pixel si stabilisce il livello del grigio e si memorizza la codifica. La tecnica vettoriale si usa quando le immagini hanno caratteristiche geometriche ben definite, il disegno può facilmente essere scomposto in elementi base. La memorizzazione dell’immagine intera avviene tramite la codifica di ogni singola parte. Calcolatore Il calcolatore ha i componenti distinguibili in due:

  • hardware: componenti fisici del calcolatore e dei sistemi informatici (case, tastiera, monitor, processore, etc.)
  • software: componenti astratte del calcolatore necessarie a trasformare l’informazione (programmi, sistema operativo, videogioco, etc.) L’hardware ha dispositivi di input (tastiera, mouse, scanner, videocamera, etc.) e di output (monitor, stampante, altoparlanti, etc.) Il processore (HW) si occupa della trasformazione dell’informazione ed è composto da: o ALU: preposta alle operazioni logico aritmetiche  unità di controllo:  gestione input/output o trasferimento dati da/verso la memoria o memoria cache: immagazzinamento istruzioni/dati La memoria (HW) serve per l’immagazzinato dell’informazione (unità di misura: BIT e i suoi multipli). La memoria si divide in: veloce, che ha come caratteristiche la velocità, che è “piccola” ed è costosa; e permanente che ha come caratteristiche la lentezza, la grandezza ed è economica. Un calcolatore è un sistema (ente costituito da componenti indipendenti che interagiscono in maniera integrata). La sua architettura è:
  • insieme dei singoli elementi del sistema
  • principi generali di funzionamento di ciascun elemento
  • comprensione delle interazioni tra i singoli elementi Le componenti sono possibili da distinguere, come detto in precedenza, in Hardware (componenti fisici: elettronici ed elettromeccanici) e software (insieme dei programmi che gestiscono il comportamento della componente hardware, si divide in: software di base (sistema operativo) e software applicativo (programmi). Un modo efficace di combinare i componenti è quello di sfruttare una gerarchia o “stratificazione” (ogni strato sfrutta i servizi offerti da quello inferiore). L’architettura di un calcolatore: Von Neumann È l’astrazione di un calcolatore che è la base dei calcolatori moderni. La macchina di Von Neumann ha quattro tipologie di componenti:
  • CPU: esegue le istruzioni per l’elaborazione dei dati e svolge funzione di controllo
  • memoria centrale: memorizza e fornisce l’accesso ai dati e ai programmi
  • interfaccia di ingresso e uscita: componenti di collegamento alle periferiche del calcolatore
  • bus: si occupa del trasferimento dei dati e dei segnali di controllo tra le componenti del calcolatore Ha portato delle innovazioni, come il fatto che il codice del programma viene immagazzinato nella stessa memoria dei dati ed è la CPU che interpreta l’informazione e stabilisce se sia un dato o un’istruzione.

Esecuzione delle istruzioni: Ciclo Fetch-Decode-Execute:

  • fetch: prendi l’istruzione dalla memoria e mettila nel registro dell’istruzioni IR
  • incrementa il contatore del programma (PC) copiando l’indirizzo dell’istruzione successiva
  • decode: decodifica l’istruzione corrente
  • se l’istruzione usa una parola in memoria o caricane l’indirizzo o copiala nel registro della CPU
  • execute: esegui l’istruzione La frequenza del processore è legata alla frequenza dell’orologio interno dedicato (clock). Ad ogni impulso del clock, la CPU attua un ciclo d’esecuzione. I processori attuali hanno frequenze dell’ordine del GHz. Memoria principale:
  • Random Access Memory (RAM), perché ogni cella è indirizzabile direttamente
  • le celle sono numerate in sequenza: il numero di ogni cella costituisce il suo indirizzo
  • specificando l’indirizzo di una cella, la CPU è in grado di leggere e/o modificare il valore del byte memorizzato in quella cella Sistema operativo Il software, come vediamo anche in figura si divide in:
  • applicativo: insieme di programmi dedicati a compiti specifici (fogli di calcolo, database, CAD, videogiochi)
  • di sistema: insieme di programmi dedicati a svolgere compiti comuni a tutti i sistemi di elaborazione (interazione con le periferiche, accesso ai dati, comunicazione) o di utilità: insieme dei programmi di sistema dedicati all’esecuzione delle attività fondamentali di gestione dell’elaboratore (formattazione supporti, copia dei file, stampa di file, sincronizzazione orologio) o sistema operativo: insieme di programmi necessari alle attività base dell’elaboratore Il sistema operativo è il programma che controlla l’esecuzione di programmi applicativi e agisce come interfaccia tra le applicazioni e l’hardware del calcolatore. I suoi obiettivi sono: indipendenza dall’hardware, uso efficiente delle risorse del calcolatore, semplificazione dell’uso dell’hardware di un calcolatore. Le componenti del sistema operativo sono:
  • interfaccia utente: parte del sistema operativo dedicata all’interazione con l’utente, elemento necessario perché l’utente possa richiedere lo svolgimento di specifiche attività
  • kernel: nocciolo del sistema operativo, insieme di programmi preposti a svolgere le operazioni base per il funzionamento dell’elaboratore Interfaccia utente ha due paradigmi:
  • GUI (interazione basata su finestre)
  • CLI (interazione basata su comandi) La comunicazione utente-kernel avviene per mezzo di messaggi testuali sia in input che in output, sfruttando tastiera, mouse e monitor (shell) oppure tramite icone (GUI)

Kernel si divide in:

  • memory manager: ha il compito di gestire e coordinare l’impiego della memoria principale del computer
  • process manager: ha il compito di coordinare l’esecuzione dei processi
  • file manager: ha il compito di coordinare l’uso e le funzionalità delle memorie di massa
  • driver periferiche: programmi preposti all’interazione con i dispositivi collegati all’elaboratore Il compito della memory manager è tenere traccia delle parti di memoria assegnate ai processi, decidere quali processi caricare quando la memoria è disponibile, allocare e deallocare lo spazio di memoria quando necessario. Il compito del process manager è la creazione e terminazione dei processi, sospensione e riattivazione dei processi, gestione dei deadlock, sincronizzazione tra processi. Il compito delle driver periferiche è la definizione interfaccia comune lato kernel, definizione interfaccia hardware dipendente lato periferica, gestione accesso periferiche, gestione buffer per caching informazioni, gestione memoria condivisa scambio contenuti tra periferiche. Il compito del file manager è la creazione e cancellazione di file, creazione e cancellazione di directory, manipolazione di file e directory, codifica del file system sulla memoria secondaria. File system Il file system per l’utente è composto da:
  • file: unità logiche di memorizzazione
  • directory: insieme di informazioni per organizzare e fornire informazioni sui file L’insieme dei file e directory è organizzato ad albero:

PROGRAMMAZIONE IN PYTHON

Programmare vuol dire far eseguire all’elaboratore compiti tediosi, velocizzare operazioni ripetitive, ridurre errore umano. L’algoritmo è un procedimento che a partire da uno stato iniziale consente di ottenere in un tempo finito un risultato atteso eseguendo un insieme di operazioni descritte in maniera completa e non ambigua (sequenza di passi che portano alla soluzione del problema), può essere eseguito da un elaboratore poiché è una descrizione completa e non ambigua di un procedimento e produce un risultato in un tempo finito. L’algoritmo ha due caratteristiche principali:

  • correttezza (capacità di risolvere il problema senza difettare di alcun passaggio fondamentale e capacità di risolvere il problema per ogni caso possibile)
  • efficienza (capacità di risolvere il problema utilizzando il minimo necessario di risorse, spazio e tempo) Come si arriva a far eseguire un algoritmo ad un calcolatore? Bisogna rappresentare/descrivere un algoritmo (un linguaggio di programmazione è un linguaggio artificiale che usato per descrivere algoritmi, un programma è una sequenza di che codifica un algoritmo) e far eseguire la “descrizione di un algoritmo” (un programma) ad un calcolatore.

Dal prompt al file sorgente

Esistono tre forme di interazione con l’interprete:

  • da linea di comando: utile per testare porzioni di codice o come calcolatrice avanzata o avvio dell’interprete dei comandi python o introduzione dell’istruzione o output o introduzione dell’istruzione o output
  • con codice sorgente: utile per programmi strutturati o scrittura del file sorgente: creazione, con un editor di testo, del file sorgente.py che contiene le istruzioni nel linguaggio di programmazione python o esecuzione del programma: il calcolatore interpreta ed esegue la sequenza di istruzioni codificate all’interno del programma
  • da notebook: utile per analisi esplorative dei dati o prototipizzazione Un file sorgente si suddivide in:
  • importazione di librerie
  • funzioni
  • sequenza di istruzioni Gli elementi del file sorgente sono invece i commenti (servono a rendere più leggibile il codice per un suo riutilizzo), le istruzioni python (sono i “comandi” veri e propri), indentazioni (servono a creare blocchi di istruzioni per il controllo del flusso dell’informazione).

Le variabili

Le variabili permettono la risoluzione del problema astratto e non di una sua particolare istanza. Una volta trovato l’algoritmo lo si può applicare a tutte le istanze. Le variabili hanno un nome, che permette di rappresentare in maniera astratta un valore immagazzinato nella memoria del computer, e il valore associato ad una variabile, che è il contenuto della variabile stessa ed è l’informazione. Per dare il nome bisogna seguire varie regole:

  • nomi auto esplicativi
  • possono essere di lunghezza arbitraria
  • possono contenere sia numeri che lettere
  • non possono iniziare con un numero
  • non possono contenere caratteri speciali (@, $, è, ù, etc.)
  • case sensitive (questonome, QuestoNome, QuEsToNoMe sono diversi)
  • non ammesse parole riservate del linguaggio La dichiarazione di una variabile è contestuale alla sua assegnazione: x = 10 x identificatore della variabile = operatore di assegnamento 10 valore associato Le variabili si possono usare per immagazzinare un valore specifico, un valore inserito dall’utente, un risultato parziale di un calcolo.

In python quindi le variabili sono il risultato dell’associazione di un nome (riferimento astratto al contenuto della variabile) ad un oggetto (contenitore che isola il lato “tecnico” e lo nasconde al programmatore). Gli oggetti associati alle variabili, in python, sono composti da identità (identificativo univoco dell’oggetto), tipo (descrive come viene immagazzinata l’informazione) e valore (informazione stessa). Il tipo di una variabile è associato alla codifica del contenuto nella memoria del calcolatore, ne determina l’interpretazione del contenuto, è associato in maniera automatica al contenuto della variabile al momento della sua dichiarazione ed è possibile forzare il tipo associato. È possibile richiamare lo spazio dei nomi tramite dir( ), l’identità di una variabile tramite id( ), il tipo di una variabile tramite type( ) e il contenuto tramite print( ). Una variabile può avere contenuti diversi (anche per tipo) nel tempo:

Espressioni e precedenze

Le espressioni permettono di combinare operatori e variabili. Le parentesi servono per capire quale calcolo ha la precedenza, si sfrutta così la precedenza tra operatori, dove l’operatore con precedenza maggiore viene eseguito prima.

Strutture di controllo

Bisogna sempre controllare ordine delle istruzioni e strutture di controllo.

  • sequenza: preserva l’ordine delle istruzioni
  • selezione: sceglie il blocco di istruzioni in base ad una condizione (if, elif, else)
  • iterazione: ripete un blocco di istruzioni (while, for) Python usa l’indentazione per decidere a quale ramificazione appartiene un’istruzione. Condizioni annidate: struttura condizionale può essere inserita nel corpo di un’altra struttura condizionale. In qualche occasione può essere utile avere un blocco vuoto. In questo caso può essere usata l’istruzione pass, che è solo un segnaposto. Può anche essere utile durante lo sviluppo, in attesa che il codice mancante venga scritto. La trace table è una tabella che viene costruita per tenere traccia della dinamica delle variabili del programma. While Cose da sapere sul ciclo while
  • ciclo infinito: nel ciclo while è fondamentale che la variabile coinvolta nella condizione di verifica venga aggiornata durante l’iterazione altrimenti il ciclo non termina
  • contatori: possibile utilizzare una variabile per contare il numero di iterazioni svolte, sono utili in questo caso gli operatori di incremento
  • valore sentinella: sono valori dello stesso tipo dell’input richiesto all’utente ma sicuramente non parte dell’input atteso che vengono usati per interrompere il ciclo

Strutture dati

Una struttura dati è un modo per memorizzare, organizzare i dati e semplificarne l’accesso e la modifica. Strutture dati possono essere classificate per:

  • l’aggregazione dell’informazione: o semplici: atomiche ed indivisibili o complesse: aggregazione di elementi semplici in:  insieme: elementi disordinati  sequenza: elementi ordinati  mappa: elementi con riferimento fisso
  • la plasticità dell’informazione nel tempo: o statiche: organizzazione interna e dimensioni fisse (immutabili) o dinamiche: organizzazione interna e dimensioni variabili (mutabili)
  • l’omogeneità dell’informazione: o omogenee: composte da elementi atomici aventi stesso tipo primitivo o eterogenee: composte da elementi atomici aventi diverso tipo primitivo Proprietà: Metodi Alcuni tipi di variabile hanno delle funzioni predefinite chiamate metodi che possono essere applicate a loro istanze. oggetto.metodo(parametri)
  • oggetto la variabile a cui applicare il metodo
  • .metodo( ) nome della funzione da applicare all’oggetto
  • parametri eventuale lista dei parametri da passare al metodo Tipo primitivo Serve a determinare il tipo di contenuto della variabile. Numeriche:
  • int: identifica un numero intero ∈ Z
  • long: identifica un numero intero di lunghezza illimitata ∈ Z
  • float: identifica un numero reale ∈ R
  • complex: identifica un numero complesso ∈ C Logica:
  • bool: identifica una variabile di tipo booleano ∈ {True, False} Strutture dati complesse:
  • stringa: struttura dati complessa di tipo sequenza, statica ed omogenea
  • tupla: struttura dati complessa di tipo sequenza, statica ed eterogenea
  • lista: struttura dati complessa di tipo sequenza, dinamica ed eterogenea
  • dizionari: struttura dati complessa di tipo mappa, dinamica ed eterogenea i cui elementi vengono identificati tramite una chiave La tupla permette di raggruppare informazioni eterogenee e gestirle unitariamente, utile per definire degli insiemi di costanti e permette di memorizzare i dati e accedervi più velocemente delle liste.
  • lista_parametri: serve all’interprete per definire i parametri che verranno passati alla funzione nella chiamata
  • parte successiva: segue le stesse regole di quella della parte principale del programma Nella chiamata della funzione posso passare argomenti in maniera:
  • puramente posizionale
  • con denominazione (keyword)
  • lista argomenti di cardinalità variabile Moduli Servono per:
  • l’archiviazione permanente di funzioni
  • importare funzioni (funzionalità) nel main attuale o in altri moduli
  • facilitare il riutilizzo del codice
  • semplificare la scrittura di programmi complessi Terminologia: moduli, package e funzioni
  • modulo: un file che contiene una raccolta di funzioni pronte per l’uso
  • package: per svolgere compiti complessi può essere necessario sviluppare più moduli che lavorano in sinergia
  • Il programma di installazione di python, oltre ad installare l’interprete, installa anche la libreria standard di python, un insieme di package e moduli (pronti per essere utilizzati), ognuno dedicato ad un compito specifico
  • La libreria standard di Python è molto estesa (operazioni matematiche, gestione di oggetti grafici, operazioni sul file system)
  • Se avete bisogno di un modulo non presente nella libreria standard, dovrete recuperarlo e importarlo nel vostro computer Per poter utilizzare le funzioni di un modulo dobbiamo dire all’interprete di caricare il modulo in memoria, si chiama importaione (import). Approfondimento parametri:
  • il valore di default per un parametro lo rende opzionale
  • tutti i parametri senza default devono precedere quelli con default
  • tutti i parametri senza default devono essere specificati in fase di chiamata
  • un argomento non può essere specificato più di una volta
  • la specifica degli argomenti tramite keyword è indipendente dalla posizione
  • è possibile la specifica degli argomenti mista: posizionale e tramite keywords (prima i posizionali)

Si possono comporre più funzioni, in questo modo: il passaggio dei parametri avviene dall’esterno all’interno, mentre la valutazione della composizione dall’interno all’esterno.

File

Immagazzinamento dati nell’hardware:

  • memoria centrale (RAM): o caratteristiche:  accesso ai dati veloce  capienza limitata  memoria principale di lavoro  volatile (spegnendo il computer, si perdono tutte le informazioni)
  • memoria di massa (disco rigido): o caratteristiche:  accesso ai dati lento  capienza ampia  memoria secondaria di lavoro  non volatile (spegnendo il computer, non si perdono le informazioni) Caratteristiche dei file:
  • persistenza: salvo i dati nella memoria di massa
  • efficienza: memorizzo i dati nella memoria di massa e carico in memoria centrale ed elaboro un sottoinsieme di dati per volta Per leggere un file, è necessario aprire il flusso verso di esso con la funzione open( ), ma ha varie modalità di apertura:
  • ’r’ (read) - sola lettura: significa che vogliamo aprire un file solo per leggerne il contenuto (scrittura non possibile). Alcuni sistemi operativi permettono di aprire in lettura un file a più utenti contemporaneamente. Se si tenta di scrivere su un file aperto in sola lettura, viene sollevato un errore
  • ’w’ (write) - scrittura: si desidera aprire un nuovo file per potervi scrivere dati, se il file non esiste l’apertura in scrittura creerà un nuovo file vuoto, se il file esiste, il contenuto preesistente sarà eliminato
  • ’a’ (append) - aggiunta: si desidera aprire un file per aggiungere in coda dati, se il file non esiste l’apertura in aggiunta creerà un nuovo file vuoto, se il file esiste, i nuovi dati saranno accodati ai dati già esistenti Poi dopo è necessario chiuderlo con la funzione close( ). Una volta ottenuto il flusso verso il file, è possibile elaborarlo. Le operazioni coinvolte nell’elaborazione sono:
  • il posizionamento
  • la lettura
  • la scrittura La modalità di accesso al file ne determina anche l’elaborazione.