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


Architettura dei Computer: ALU, FPU, Registri e Memoria, Appunti di Fondamenti di informatica

Panoramica degli argomenti trattati: - Introduzione - Programmare con numeri e stringhe - Decisioni - Cicli - Funzioni - Liste - Eccezioni e file - Insiemi e dizionari

Tipologia: Appunti

2022/2023

In vendita dal 15/02/2024

sofia-potenza-1
sofia-potenza-1 🇮🇹

1 documento

1 / 51

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
INFORMATICA POLITECNICO
___________________________________________________
CONOSCENZE TEORICHE RICHIESTE PER L’ESAME
STRUTTURA FISICA COMPUTER
Il computer è una macchina che immagazzina dati, interagisce con dispositivi ed
esegue programmi. I programmi descrivono a un computer in estremo dettaglio la
sequenza di passi che devono essere eseguiti.
In un computer distinguiamo i componenti hardware (parte fisica di un calcolatore
e i suoi dispositivi periferici):
Le unità di input e output che hanno lo scopo di convertire l’analogico in digitale e
viceversa. L’unità di elaborazione detta microprocessore che esegue le istruzioni.
La memoria.
Dai componenti software (i programmi che vengono eseguiti nel hardware)
Durante l’esecuzione di un programma, i dati e i programmi che si trovano nella
memoria secondaria, vengono caricati nella memoria principale, qui la CPU esegue
il programma e aggiorna i dati nella memoria principale, dopodichè li archivia, così
modificati, nella secondaria. Successivamente in base ai dati ricevuti come input la
CPU interagirà con dispositivi di uscita, dando così l’output.
Un linguaggio si dierenzia in basso ed alto livello in base al grado di astrazione fra
il linguaggio considerato (java, python etc) ed il linguaggio macchina (sequenza di
0 e 1).
-alto livello linguaggio di programmazione caratterizzato da una
significativa astrazione dai dettagli del funzionamento di un calcolatore e
dalle caratteristiche del linguaggio macchina. Un linguaggio che può essere
memorizzato e compreso più facilmente dall'uomo che dalla macchina; è per
questo che c’è bisogno dell’intervento del compilatore. Il compilatore legge
il file contenente il codice sorgente e traduce le istruzioni in byte code, in
maniera tale che tali istruzioni possano essere comprese da una macchina
virtuale,dopodiché la macchina virtuale esegue il codice
-basso livello/assembler un linguaggio di programmazione che coincide
con il linguaggio macchina o che dierisce poco dal linguaggio macchina,
fornendo poca o nessuna astrazione dai dettagli del funzionamento fisico
del calcolatore.
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

Anteprima parziale del testo

Scarica Architettura dei Computer: ALU, FPU, Registri e Memoria e più Appunti in PDF di Fondamenti di informatica solo su Docsity!

INFORMATICA POLITECNICO

___________________________________________________

CONOSCENZE TEORICHE RICHIESTE PER L’ESAME

STRUTTURA FISICA COMPUTER

Il computer è una macchina che immagazzina dati, interagisce con dispositivi ed esegue programmi. I programmi descrivono a un computer in estremo dettaglio la sequenza di passi che devono essere eseguiti. In un computer distinguiamo i componenti hardware (parte fisica di un calcolatore e i suoi dispositivi periferici): Le unità di input e output che hanno lo scopo di convertire l’analogico in digitale e viceversa. L’unità di elaborazione detta microprocessore che esegue le istruzioni. La memoria. Dai componenti software (i programmi che vengono eseguiti nel hardware) Durante l’esecuzione di un programma, i dati e i programmi che si trovano nella memoria secondaria, vengono caricati nella memoria principale, qui la CPU esegue il programma e aggiorna i dati nella memoria principale, dopodichè li archivia, così modificati, nella secondaria. Successivamente in base ai dati ricevuti come input la CPU interagirà con dispositivi di uscita, dando così l’output. Un linguaggio si dierenzia in basso ed alto livello in base al grado di astrazione fra il linguaggio considerato (java, python etc) ed il linguaggio macchina (sequenza di 0 e 1).

  • alto livello → linguaggio di programmazione caratterizzato da una significativa astrazione dai dettagli del funzionamento di un calcolatore e dalle caratteristiche del linguaggio macchina. Un linguaggio che può essere memorizzato e compreso più facilmente dall'uomo che dalla macchina; è per questo che c’è bisogno dell’intervento del compilatore. Il compilatore legge il file contenente il codice sorgente e traduce le istruzioni in byte code, in maniera tale che tali istruzioni possano essere comprese da una macchina virtuale,dopodiché la macchina virtuale esegue il codice
  • basso livello /assembler → un linguaggio di programmazione che coincide con il linguaggio macchina o che dierisce poco dal linguaggio macchina, fornendo poca o nessuna astrazione dai dettagli del funzionamento fisico del calcolatore.

Il microprocessore è il circuito che fisicamente esegue tutte le istruzioni. Ha limitate capacità di memorizzare dati e/o istruzioni, lo stretto necessario per eseguire le operazioni in maniera eciente. Il microprocessore al suo interno presenta la CPU ( ossia quella parte che eettivamente esegue le elaborazioni), la memoria e le interfacce. La CPU ancora a sua volta presenta: ❖ unità di controllo → in base alle istruzioni contenute nel programma ed allo stato di tutte le unità, decide le operazioni da eseguire ed emette ordini. E’ composta da: ➢ PC → registro che indica l’indirizzo della cella di memoria che contiene la prossima istruzione da eseguire

  1. FETCH : Legge l’istruzione da seguire nella cella di memoria nella posizione indicata da PC, e il codice dell istruzione viene salvato nel registro IR: IR ← M[PC]. Dopodichè si incrementa il valore di PC per la prossima operazione: PC ← PC+ ➢ IR → registro che memorizza temporaneamente l’operazione corrente da eseguire
  2. DECODE : Sulla base del contenuto dell IR, Interpreta l’istruzione e definisce i comandi che l’unità di controllo invierà all’unità operativa ➢ Logica di controllo → interpreta il codice macchina in IR per decidere ed emette gli ordini che le varie unità devono eseguire
  3. EXECUTE : Esegue i comandi, attivando i blocchi interessati, emette gli ordini ❖ unità operativa → esegue gli ordini, composta da: ➢ Circuiti: ■ ALU → contiene i circuiti che si occupano delle operazioni aritmetiche e logiche riguardanti i numeri interi (complemento a 2 o binario puro) ■ FPU → contiene i circuiti che si occupano delle operazioni aritmetiche e matematiche riguardanti i numeri reali → un'operazione FPU è tipicamente più lenta di un'operazione ALU ➢ Registri → celle di memoria collegate alle unità aritmetiche → elementi di memoria locale usati per conservare temporaneamente dei dati → ogni trasferimento da processore a memoria e viceversa avviene tra registri e memoria. Tra i registri ce n'è uno particolare: ■ registro dei flag: registro (insieme di bit) in cui i bit rappresentano uno stato dell’unità di calcolo, rappresentano le informazioni sul risultato dell’ultima operazione eseguita ad esempio lo zero, il segno o l’overflow

64 bit rappresenta la dimensione dei dati su cui lavora la CPU. Questo numero determina il parallelismo di tutte le componenti interne al processore,. i registri, l’unità di calcolo, la memoria,...64 bit è dunque la dimensione naturale dei dati trattati. Il 64 bit è un compromesso tra la capacità di calcolo (più bit → più potenza) e il costo realizzativo ( più bit → più silicio delle cpu e memorie → più costi) La memoria memorizza i dati e le istruzioni necessarie all’elaboratore per operare. Le caratteristiche sono:

  • indirizzamento → La memoria è organizzata in celle e ad ogni cella di memoria è associato un indirizzo per identificarla univocamente
  • parallelismo → Ogni cella di memoria contiene una quantità fissa di bit, identica per tutte le celle
  • accesso (sequenziale o casuale)
  • struttura gerarchica → vicino al processore le memorie più veloci, costose e meno capienti, più lontane le memorie più lente, economiche e più capienti. ➔ registri → memoria più veloce, si trova dentro il processore, memorizza temporaneamente dati /istruzioni, memoria volatile ➔ cache → memoria veloce e di piccola dimensione tra CPU e memoria principale, il suo scopo è di velocizzare l’esecuzione dei programmi, recupera dati e programma che si prevede debbano essere usati nel breve termine, memoria volatile ➔ memoria principale RAM → memoria volatile, vengono caricati i programmi che la cpu deve eseguire, una volta chiuso il programma se le modifiche non vengono salvate su altre memorie, verranno perse ➔ memoria secondaria / memoria di massa → più lenta, meno costosa ma con capacità di memorizzazione maggiore ed in grado di memorizzare in modo permanente, viene utilizzata per mantenere tutti i programma e tutti i dati che possono essere usati dal computer. Il processore non può utilizzare direttamente la memoria di massa per l’elaborazione di dati, quando si vuole eseguire un programma questo dovrà essere copiato dalla memoria di massa a quella principale

flashdisco rigido → supporti di plastica o vinile su cui è depositato del materiale magnetizzabile, nel corso delle operazioni i dischi vengono mantenuti in rotazione a velocità costante e le informazioni vengono lette e scritte da testine Tutte queste componenti sono connesse tra loro tramite i bus , linee di comunicazione condivise. Le varie unità di un calcolatore non sono collegate direttamente tra loro, ma sono tutte collegate ad un gruppo unico di fili, detto bus. Trasporto di un solo dato per volta. Frequenza: num di dati trasportati al secondo// Ampiezza: num di it di cui è costituito un dato Un singolo bus è suddiviso in tre sotto bus: bus degli indirizzi (Address BUS) → indica gli indirizzi di memoria o periferici da cui leggere o scrivere un dato, l'indirizzo è impostato dall’unità di controllo → determina il max numero di celle di memoria indirizzabili bus dei dati (Data BUS) → contiene il dato letto dalla memoria/o da periferiche input, può essere impostato dall’unità operativa o dalla RAM → dimensione di una cella di memoria detto anche parallelismo di memoria bus di controllo (Control BUS) → contiene una serie di comandi dall’unità di controllo (l’operazione da eseguire, la tempistica e lo stato dell’operazione eseguita) Un bus seriale è fatto da un solo filo, un bus parallelo invece è un bus composto da più fili in parallelo max memoria = 2^|Abus| * |Dbus| bit RICORDA: 1 Byte = 8 bit, M = 2^20, K = 2^10, B= 2^

Pseudocodice , descrizione informale di una sequenza di passi che portano alla soluzione di un problema, non è destinato alla lettura da parte di programmi bensì di persone. Algoritmo è una descrizione passo-passo di come risolvere un problema. L’esistenza di un algoritmo è prerequisito essenziale per la programmazione. Una sequenza di istruzioni il cui ordine è importante. Tale sequenza deve essere:

  • Non ambigua → Non vi possono essere delle «assunzioni» sulla conoscenza necessaria per eseguire l’algoritmo. Istruzioni precise comprensibili da tutti.
  • Eseguibile → L’algoritmo può essere svolto, in pratica
  • Termina → L’algoritmo, prima o poi, dovrà necessariamente terminare e fermarsi (anche se ci sono delle eccezioni) Istruzioni → Operazioni supportate dal linguaggio di programmazione, che saranno eseguite traducendole in codice macchina Pseudo-istruzioni → Direttive per l’interprete del linguaggio, non corrispondono ad eettivo codice eseguibile Istruzioni elementari (o primitive) → Operazioni che corrispondono direttamente ad operazioni hardware Istruzioni di controllo del flusso → Permettono l’esecuzione di operazioni complesse, controllando l’esecuzione di sequenze di istruzioni elementari Per verificare la correttezza di un programma, occorre testare (collaudare). test → insieme di input che viene usato per verificare se il programma genera l’output corretto, in quel caso specifico. Nessun test sarà mai completo al 100%, ma dovrebbe coprire tutti i possibili comportamenti del programma.

Una variabile è una zona di memoria dotata di un nome, in cui si possono archiviare informazioni. Una costante è una variabile il cui valore deve essere modificato dopo che le è stato assegnato il valore iniziale Una libreria è una raccolta di codice scritto e compilato da terzi, che è pronto all’uso in un programma Finchè la condizione è vera, gli enunciati presenti all’interno del while vengono ripetutamente eseguiti e costituiscono il cosiddetto corpo. A volte un ciclo di questo tipo viene detto controllato da contatore, in altri casi invece si dice controllato da un evento Il ciclo for … in serve a iterare su tutti i valori di un qualsiasi contenitore, in questo caso il contenitore range. Un contenitore è un oggetto (come una stringa) che può memorizzare un insieme di elementi. Python ha diversi tipi di contenitori: Una stringa è un contenitore di caratteri Una lista è un contenitore di valori arbitrari (numerici stringhe, liste, …) Un file è un contenitore di linee di testo Esiste il contenitore ‘range’, si tratta di un contenitore speciale di una sequenza di numeri consecutivi. Si genera con la funzione range(N) e crea una sequenza di interi da 0 a N-1. La visibilità di una variabile è definita come l’insieme delle righe del programma in cui è possibile usare il valore di una variabile sopra definita: Variabile locale => definita all’interno di una funzione o più in generale all’interno di un blocco di codice, e dunque è visibile fino alla fine della funzione o blocco di codice Variabile globale => definita al di fuori di tutte le funzioni, dunque è visibile in tutto il file lista ⇒ struttura dati versatile e dinamica, che contiene un numero variabile di elementi, di qualunque tipo, a cui si può avere accesso tramite la loro posizione (indice, es: list[i]). Gli indici partono da zero. Liste e stringe sono molto simili ma dieriscono sotto due aspetti: le liste possono memorizzare qualsiasi tipo di dato, le stringhe invece solo i caratteri le liste sono mutabili (es: lista[5]=8 l’elemento della lista in posizione 5 diventa 8) , le stringhe no Il metodo sort() ordina una lista di numeri o stringhe, dal valore minore al maggiore, viene modificata la lista stessa. Ordina sia i numeri che le stringhe

Si definisce alias una variabile associata al valore di un altra variabile. Lo stesso dato/valore può essere modificato attraverso entrambe le variabili. La except viene eseguita quando una delle condizioni nel blocco try genera un'eccezione del tipo specificato nella except

CONVERSIONE

Dal sistema binario al sistema decimale: base → 2 cifre → {0, 1} 101 (2) = 1 x 2^0 + 0 x 2^1 + 1x 2^2 = 1 + 0 + 4 = 5 (10) 1101 (2) = 1x2^0 + 0 x 2^1 + 1 x 2^2 + 1 x2^3 = 1 + 0 + 4 + 8 = 13(10) Dal sistema decimale al sistema binario: 21 (10) = 10101(2) 21/2 = 10 con resto 1 (ultima cifra, meno significativa LSB) → 10/2 = 5 con resto 0 → 5/2=2 con resto 1 → 2/2=1 con resto di 0 → 1/2 = 1 con resto 1 (prima cifra, più significativa MSB) 37(10) = 100101(2) 37/2=18 con resto di 1 (ultima cifra meno significativa LSB) → 18/2= 9 con resto di 0 → 9/2 = 4 con resto di 1→ 4/2=2 con resto di 0→ 2/2= 1 con resto di 0 → 1/2 =1 con resto di 1 (prima cifra, più significativa MSB) se è pari il numero binario finisce con zero, se è dispari invece con 1. Stiamo parlando della cifra meno significativa. con n bit, le combinazioni distinte sono 2^n in base 10 → 0 < x < 2^n - in base 2 → 0 < x < 2^ (n-1) 1 byte = 8 bit Somma in binario: 0+0 = 0 0+1=1 1+0=1 1+1=0 riporto di 1 1+1+1=1 riporto 1 Sottrazione in binario: 0-0=0 0-1=1 rubo 1 1-0=1 1-1= Alcune operazioni su un numero fisso di bit, non sono corrette a causa del verificarsi dell’overflow. Il risultato esce dai bit fissati. Ad esempio su 4 bit posso

fare dal num 0 al num 15. Tale condizione può verificarsi sia nel caso di somme che nel caso di dierenze. Errore che si verifica in un sistema di calcolo automatico quando il risultato di un’operazione non è rappresentabile con la medesima codifica e numero di bit degli operandi. L’overflow è una condizione dinamica e esiste solo come risultato di un’operazione. Per rappresentare numeri con segno positivo o negativi esistono varie soluzioni:

  • modulo e segno
  • complemento a due Codifica modulo e segno: il primo bit del numero lo dedico al segno. Segno (1 bit) + valore assoluto/modulo (N-1 bit) Per il segno positivo (+) = 0, per il segno negativo (-) = 1 In questo tipo di rappresentazione su n bit: -(2^(n-1) - 1) < x < 2^(n-1) - es: 1010 → 1 = - // 010 = 2 → - Codifica complemento a due: il bit più significativo indica il segno 1001 (CA2) = 1x 2^0 + 0 x 2^1 + 0 x 2^2 + (-1 x 2^3) = 1-8 = - 0101 (CA2) = 1x 2^0 + 0 x 2^1 +1x 2^2 + (-0 x 2^1 ) = 1+0+4 -0 = 5 In questo tipo di rappresentazione su N bit → - (2^(N-1)) < x < + (2^(N-1) -1) somma e sottrazione si eettuano direttamente senza badare ai segni, come se si trattasse di numeri normali L’overflow nella somma CA2 non dipende dal riporto ma dipende dai casi:
  • operandi con segno discorde non presentano mai overflow
  • operandi con segno concorde presentano overflow quando il risultato ha segno discorde l’overflow nella dierenza è al contrario
  • operandi con segno concorde non presentano mai overflow
  • operandi con segno discorde presentano overflow quando (‘+’ - ‘-’ = ‘-’ o ‘-’ - ‘+’ = ‘+’) da decimale a complemento a 2:
  • se positivo si eettua la solita conversione: su 6 bit: 19 → 0 (perchè è positivo )xxxxx → 19/2 = 9 con resto di 1 → 9/2= 4 con resto di 1 → 4/2 = 2 con resto di 0 → 2/2 = 1 con resto 0 → 1/2 = 1 con resto 1 su 6 bit 19 = 010011
  • se negativa si converte il modulo in binario, si complementa ogni bit (0→ 1, 1→ 0), si somma 1 alla fine su 6 bit: -19 → +19 = 010011 → inverto i bit(complemento a 1) → 101100 → 101100 + 000001 = 101101

Una funzione è un insieme di istruzioni che eseguono un compito specifico, essa viene invocata specificando il nome e gli argomenti, i quali vanno racchiusi tra () e separati tra loro da una “,”. Una stringa è una sequenza di caratteri racchiusa da una coppia di virgolette, singole o doppie. Le stringhe sono immutabili: non possono essere modificate dopo la loro creazione. print(“The answer is”, 7+2) La funzione print nello specifico va a capo, motivo per cui se la si lascia vuota () essa realizza una riga vuota. In python tutti gli enunciati devono iniziare nella stessa colonna, in caso contrario è errore. Pseudocodice , descrizione informale di una sequenza di passi che portano alla soluzione di un problema, non è destinato alla lettura da parte di programmi bensì di persone. Algoritmo è una descrizione passo-passo di come risolvere un problema. L’esistenza di un algoritmo è prerequisito essenziale per la programmazione. Una sequenza di istruzioni il cui ordine è importante. Tale sequenza deve essere: ● Non ambigua → Non vi possono essere delle «assunzioni» sulla conoscenza necessaria per eseguire l’algoritmo. Istruzioni precise comprensibili da tutti. ● Eseguibile → L’algoritmo può essere svolto, in pratica ● Termina → L’algoritmo, prima o poi, dovrà necessariamente terminare e fermarsi (anche se ci sono delle eccezioni) ISTRUZIONI => Operazioni supportate dal linguaggio di programmazione, che saranno eseguite traducendole in codice macchina ● Pseudo-istruzioni → Direttive per l’interprete del linguaggio, non corrispondono ad eettivo codice eseguibile ● Istruzioni elementari (o primitive) → Operazioni che corrispondono direttamente ad operazioni hardware ● Istruzioni di controllo del flusso → Permettono l’esecuzione di operazioni complesse, controllando l’esecuzione di sequenze di istruzioni elementari Per verificare la correttezza di un programma, occorre testare (collaudare). TEST => insieme di input che viene usato per verificare se il programma genera l’output corretto, in quel caso specifico. Nessun test sarà mai completo al 100%, ma dovrebbe coprire tutti i possibili comportamenti del programma.

CAPITOLO 2

Una variabile è una zona di memoria dotata di un nome, in cui si possono archiviare informazioni. Per memorizzare un valore di una variabile si utilizza l’enunciato di assegnazione. Una variabile viene creata nel momento in cui le si assegna un valore per la prima volta, dopodichè assegnando un altro valore a una variabile già esistente, si sostituisce il vecchio valore con uno nuovo. numero = 5 In un programma Python ciascun valore è di uno specifico tipo, tale tipo di dato determina come esso venga rappresentato e memorizzato all’interno del computer. Un tipo di dato che venga messo a disposizione dal linguaggio stesso viene chiamato tipo di dato primitivo. I programmatori però possono definire altri tipi di dato detti tipi di dato definiti dall’utente. Il tipo di dato è associato al valore, non alla variabile. Nel momento in cui una variabile è memorizzata con un valore di un determinato tipo, sarebbe meglio mantenere valori di quel tipo. Numero intero (int) → numero privo di parte frazionaria (possono essere negativi) Numero in virgola mobile (float) → numero con una parte frazionaria (include anche i numeri in notazione esponenziale) Stringa (string) → Sequenza di caratteri Una costante è una variabile il cui valore deve essere modificato dopo che le è stato assegnato il valore iniziale, per tale motivo si tende a nominarle con sole maiuscole. Si usano i commenti (che vengono ignorati dall’interprete) per aggiungere al codice spiegazioni destinate ai lettori umani. #Questo programma calcola il volume in litri Python supporta tutte le operazioni aritmetiche elementari: Addizione ( + ), Sottrazione ( - ), Moltiplicazione ( ***** ), Divisione ( / ), Potenza ( ****** ) I simboli usati per le operazioni aritmetiche si dicono operatori e la combinazione di variabili, letterali, operatori e parentesi costituisce un' espressione. Se non si utilizzano le parentesi basta pensare alla normale notazione algebrica dove moltiplicazione e divisione hanno la precedenza rispetto all addizione e sottrazione. Se invece abbiamo operatori con la stessa precedenza vengono eseguiti i calcoli procedendo da sinistra a destra. Se in un'espressione aritmetica sono presenti valori di tipo intero insieme a valori a virgola mobile, il risultato è un valore in virgola mobile e l’espressione si dice mista. Quando si dividono due numeri interi con l’operatore “ / ”, si ottiene un valore a virgola mobile. Si può però anche eseguire una divisione intera usando l’operatore “ // ” che calcola il quoziente e ignora la parte frazionaria. Se si è interessati al resto della divisione tra interi, va usato l’operatore “ % ” (detto modulo)

Consigli generali: ➔ total += cans =>> total= total+canstotal=2 =>> total=total** ➔ operator overloading ossia operatori che hanno diverse funzioni a seconda dell’utilizzo, come gli operatori + e * ➔ Un'unica riga può essere scritta in due righe diverse o se è all’interno di una coppia di parentesi tonde oppure se l’ultima carattere della prima riga è , in questo modo tale riga viene unita a quella successiva Una stringa è una sequenza di caratteri. Per comprendere il numero di caratteri in una stringa si utilizza la funzione len len() o len(“Hello”) Date due stringhe le si può concatenare per formare una nuova stringa più lunga tramite +. Non si può concatenare a una stringa un valore numerico. firstName= “Sofia” secondName= “Potenza” name= firstName + secondName =>> SofiaPotenza name= firstName + “ ” secondName =>> Sofia Potenza Usando l’operatore * invece si può ripetere una stringa, il fattore moltiplicativo deve essere intero. message = “Echo…”5 =>> Echo…Echo…Echo…Echo…Echo…* Per convertire un valore numerico in una stringa si utilizza la funzione str. numero= str(1000) =>> numero= “1000” Viceversa le funzioni int e float convertono una stringa contenente un numero in tale valore numerico. Le posizioni all'interno delle stringhe si contano a partire dallo zero Il primo carattere ha indice zero (0) e l’ultimo carattere ha indice len(name)-1. L’operatore slice [] ritorna il carattere corrispondente ad un dato indice. stringa= nome[0 : 4]

  • se il primo indice viene omesso, è sottinteso il primo carattere della stringa (indice 0) es: nome[ : 6]
  • se il secondo indice viene omesso, saranno inclusi tutti gli elementi fino all’ultimo es: **nome[6 : ]
  • stringa[ start : stop : step ]**
  • nome[::2] tutti i caratteri di indice pari
  • nome[1::2] tutti i caratteri di indice dispari

anchè invece di spostarmi in avanti ad ogni passo, mi sposto indietro (e quindi prendo gli elementi in ordine inverso), occorre che l’indice start sia maggiore di stop

- nome[9:3:-1]

  • nome[::-1] tutta la stringa, in ordine inverso Python è un linguaggio orientato agli oggetti (object-oriented), in cui tutti i valori sono oggetti. Ogni oggetto può avere metodi , ossia funzioni che possono essere chiamate su quegli oggetti specifici , usando la sintassi object.method() ● Le funzioni sono generali e possono accettare argomenti di diverso tipo, sono chiamate direttamente, con un elenco di parametri func(param) ● Diversi metodi sono specifici per diversi tipi di oggetti e sono chiamati con la notazione del punto object.method() ➔ tramite la funzione ord si restituisce il numero usato per rappresentare un determinato carattere mentre la funzione chr restituisce il carattere associato a un codice ➔ Per scrivere una stringa che contiene sia ‘ che ” si utilizza una barra rovesciata (). Es: “You’re \“Welcome\”” =>> You’re “Welcome” ➔ Si utilizza il carattere \n per andare a capo. Es: print(“\n\n**”) Per utilizzare dei dati forniti in ingresso dall’utente. dati = input (“Inserisci i dati: ”) Tale funzione ricava soltanto una stringa di testo motivo per cui va modificata tramite le funzioni int() e float () nel caso in cui ci aspettassimo un valore numero. Operatore di formato per stringhe

CAPITOLO 3

L’enunciato if consente a un programma di compiere azioni diverse in relazione alla natura dei dati che vengono elaborati. if condizione: enunciato else: enunciato Un ramo if non può essere lasciato vuoto dunque si può utilizzare la funzione pass. Inoltre è possibile inserire due if alla stessa altezza e in tale caso se vere si passa da entrambi. Per verificare che due numeri in virgola mobile (x e y) siano abbastanza simili, si calcola il valore assoluto della loro dierenza e lo si pone inferiore a epsilon (soglia matematica 1E-14) |x-y|<EPSILON Per confrontare l’ordine alfabetico di due stringhe si usa string1 < string

  • Le lettere MAIUSCOLE vengono prima delle minuscole, ‘A’ viene prima di ‘a’, ma anche ‘Z’ viene prima di ‘a’
  • Lo ‘spazio’ viene prima di tutti i caratteri stampabili
  • I numeri (0-9) vengono prima delle lettere
  • L’ordine delle lettere è definito dal codice Basic Latin (ASCII) Subset of Unicode Gli operatori aritmetici hanno la precedenza sugli operatori relazionali. Il calcolo è fatto PRIMA del confronto Spesso è necessario inserire un enunciato if all’interno di un’altro enunciato, in tal caso si dice enunciati annidati. Una variabile Booleana può solo essere Vera o Falsa, tali dati sono di tipo bool. Una variabile booleana è spesso utilizzata come flag (indicatore) proprio perché può essere solo vera o falsa. La condizione di un’istruzione if è un valore Booleano Ci sono tre diversi operatori Booleani principali: ➢ AND ENTRAMBE le condizioni in un and devono essere VERE anché il risultato sia VERO. Es: Python: 0 <= temp and temp <= 100 ⇒ stessa cosa di 0 <= temp <= 100

➢ OR

Se una qualunque delle condizioni è vera, il risultato è Vero ➢ NOT Se c’è bisogno di invertire una variabile booleana o il risultato di un confronto, si deve utilizzare il not Tali variabili valgono di qualche proprietà come: ● Commutativa: ○ A and B = B and A ○ A or B = B or A ● Associativa: ○ A and B and C = (A and B) and C = A and (B and C) ○ A or B or C = (A or B) or C = A or (B or C) ● Distributiva: ○ A and (B or C) = A and B or A and C ○ A or (B and C) = (A or B) and (A or C) La legge di De Morgan spiega come negare una combinazione di and e or:

  • not(A and B) è la stessa cosa di not(A) or not(B)
  • not(A or B) è la stessa cosa di not(A) and not(B) È spesso necessario analizzare una stringa. Esempio: name = "John Wayne" if "Way" in name print “Vero” if filename.endswith(".html") : print("This is an HTML file.")