






















Studia grazie alle numerose risorse presenti su Docsity
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Prepara i tuoi esami
Studia grazie alle numerose risorse presenti su Docsity
Prepara i tuoi esami con i documenti condivisi da studenti come te su Docsity
Trova i documenti specifici per gli esami della tua università
Preparati con lezioni e prove svolte basate sui programmi universitari!
Rispondi a reali domande d’esame e scopri la tua preparazione
Riassumi i tuoi documenti, fagli domande, convertili in quiz e mappe concettuali
Studia con prove svolte, tesine e consigli utili
Togliti ogni dubbio leggendo le risposte alle domande fatte da altri studenti come te
Esplora i documenti più scaricati per gli argomenti di studio più popolari
Ottieni i punti per scaricare
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Appunti di informatica con programmazione python
Tipologia: Appunti
1 / 30
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!























ESAME: prova scritta su carta con programmazione più una domanda teorica. 24 punti per la parte del linguaggio e 6 per la parte teorica. Chi non supera ma è >12 si possono fare le successive prove (l’appello dopo). Poi c’è l’orale, breve, per le competenze. Python è molto rigido e se sbaglio anche solo una maiuscola o una punteggiatura errata e sbaglio lettera un punto in meno e anche se non metto la punteggiatura.
INFORMATICA: in inglese era computer science ed era la combinazione di informazione e automatica. Da qui si è passato alla information technology: con tutto ciò che sta attorno all’informazione, non solo come calcolo ma anche conservazione. Poi information and comunication technology: dall’elaborazione alla conformazione e alla comunicazione. Questi sono i tre aspetti che ci aspettiamo da un calcolatore. Il calcolatore trasmette info in tempo reale. L’elaboratore è una macchina per risolvere problemi generici, e ha tre funzioni principali: Elaborazione: da input a output. Trattamento di dati; Archiviazione: rappresentazione dei dati Trasmissione: invio di segnali. Con le macchine serve un LINGUAGGIO: usa dei simboli al posto di oggetti e concetti: il linguaggio naturale: alfabeto (italiano e greco), ha difetti però allora si usano dei linguaggi formali, sono convenzioni che hanno il pregio di non avere ambiguità (come il linguaggio matematico, o Morse, o le luci del semaforo…). L’elaboratore usa la NUMERAZIONE BINARIA, vengono riconosciuti solo due stadi:0,1. È in evoluzione un modo di organizzazione diversa e più organizzata negli elaboratori quantistici, sono solo prototipi. La più piccola unità di formazione o elaborabile da un calcolatore è il bit, corrisponde a uno dei due stati di un dispositivo fisico. Vengono usati anche i Byte, un ottetto di Bit.
Un calcolatore è molto complesso e si può dividere tra:
(componenti aggiuntive per altre funzionalità, come la comunicazione) e il bus (strumento di connessione in tutti questi dispositivi). Possono essere meccaniche o elettroniche;
system;
CLASSIFICAZIONE DEI CALCOLATORI MICROCOMPUTER; WORKSTATION: per collegarsi in rete con altre postazioni (ha spinto allo sviluppo di internet; MINI COMPUTER: calcolatori con una decina di calcolatori attaccati (ora inesistenti) MAINFRAME: grosse capacità di calcolo e collega molti terminali; ELABORATORI PER IL CALCOO PARALLELO: per poter elaborare su processori distinti le parti e poi raccogliere tutto in un’unica soluzione. L’architettura in un calcolatore è stata studiata da Von Neumann e tutto è ancora usato ora. Lui aveva distinto delle componenti del calcolatore:
che compongono i programmi ed esegue le istruzioni dei programmi: coordina la macchina. Tutte le istruzioni provengono dalla MEMORIA CENTRALE (RAM). La CPU è composta da tante parti: o ALU: elaborazione dei dati, effettua le operazioni aritmetiche e logiche. o CU: interpreta le singole istruzioni e coordina tutta la CPU; o Tutto questo è trasmesso dal BUS INTERNO, che mette in collegamento le componenti della CPU; o CLOCK: mi da la frequenza con cui posso trasmettere una parte di informazione, e permette di usare tutti gli altri registri evidenziati dopo; o I REGISTRI sono elementi di memoria, sempre in binario, ad altissima velocità (molto più della RAM):
STAMPANTE, FOTO/VIDEOCAMERA. Invece le periferiche di remoto sono il RJ45, Wi-Fi, bluetooth.
Il collegamento tra tutto viene effettuato dal BUS DI SISTEMA, non possono comunicare contemporaneamente ma in modo ordinato nel bus. I bus sono: o Bus dati, trasmette dati da e a CPU o Bus indirizzi: trasmissione indirizzi a RAM; o Bus controlli: trasmissione ordini da CPU a periferiche. La memoria di massa è fatta da dichi magnetici, ottici ecc…. alte USB drive o altri più obsoleti. La memoria, spenta la corrente, non si perde. È più lenta rispetto alla RAM ma è più capiente. IL SOFTWARE È un insieme di programmi che servono per svolgere una funzione. Ci serve un:
operazioni di base per utilizzare le risorse del sistema di elaborazione. L’utente si interfaccia al sistema operativo in due modi: o UI, USE INTERFACE: quella dove scrivo i comandi. Poi si è passati alla GUI, si interagisce col sistema operativo guardando i file come li vediamo ora nelle finestre. Dal sistema operativo si usano anche i software applicativi che esplicano la funzione del calcolatore. Il software applicativo va sopra al sistema operativo, non lo sostituisce.
o API: interfaccia programmabile del sistema, per interfacciare i file, cioè per farmi scegliere che programma aprire. Tutto ciò che riguarda l’informatica si interfaccia con la MODULARITA’, definita dalle componenti distinte, posso cambiare le componenti con altre simili e sistemare un solo apparecchio. Posso quindi migliorare un intero sistema senza cambiare il totale, ma solo un modulo. Nei sistemi operativi si possono distinguere 5 strati per distinguere le diverse funzionalità, così che se non funziona una parte non devo modificare tutto. Il nucleo (kernel) deve interfacciarsi con l’hardware. Sopra ho moduli specifici per l’hardware, il gestore della memoria (nessuno deve disturbare l’altro), il gestore delle periferiche (ogni programma gestisce cose diverse, periferiche diverse), file system (si occupa dell’archiviazione dei dati, è molto variabile. Aveva 8 caratteri e massimo 3 estensioni (.odt, .ddt, .pdf…. ), anche se ora sono molte di più. Poi c’è l’interprete dei comandi, arrivano ordini e l’hardware deve interpretarli e si può darli con interfaccia utente o grafica (GUI) o con un programma che da ordini (API).
specializzato. Si parla di PROGRAMMA/CODICE/APPLICAZIONE/APP/SOFTWARE APPLICATIVO come sinonimi. Ma il programma può far riferimento ad un
non sono alfabeto, ma bit. Noi non sappiamo scrivere in quel modo. LICENZE Limiti legali per usare i software. La licenza all’uso è vendibili con l’acquisto, divieto di copia o rivendita. Esistono i freeware che possono essere provati gratuitamente, settimane o mesi, o a vita con funzionalità limitate. Esistono poi gli open-source (sorgente), che ci permettono di utilizzarlo liberamente. Questi hanno tanti tipi di licenze, e si può rivendere o modificare. Poi c’è il codice proprio, fatto da noi. LINGUAGGIO DI ALTO LIVELLO È artificiale, usato per programmazione degli elaboratori, solitamente nato dalla formalizzazione e semplificazione del linguaggio naturale. Diversamente dal linguaggio macchina necessita di una traduzione nel linguaggio compreso dall’elaboratore. La traduzione non la facciamo noi, ma verrà fatta da un altro software. Esistono 2 modi di tradurre:
Si parte dal sistema decimale, composto da 10 cifre e la loro combinazione ci da delle parole. Es: 387.52, il punto si chiama separatore digitale nel sistema anglosassone (noi usiamo la virgola). Questo numero lo possiamo scomporre nelle sue parti, nelle sue posizioni e vediamo che le unità sono in posizione 0, le decine in posizione 1 e cosi via. Se do un peso, le unità sono 10^0 , e così via con gli esponenti. Prendo le cifre, le moltiplico per il loro peso e sommo, ottengo il numero di partenza scomposto. Si possono definire altri sistemi, a noi interessa il sistema binario, composto solo da 0 e da 1, un numero possibile è 110.11 e qui si parla di posizione 2, 1, 0… Ora le cifre sono due quindi come peso avrò potenze di 2 non più di 10. Quello che mi esce mi da 6,75 in base dieci, ed era 110.11 in base 2. Ecco come si trasforma un numero binario in decimale. Suppongo di partire da 0. Passa da 0000 a 0001, ma ora ho terminato le cifre del sistema quindi devo modificare qualcosa. Come nel decimale che dopo il nove aumenta di una decina e si aggiunge una cifra in più e il 9 torna a zero. Cosi anche da 19 a 20 incrementa di una unità la decina. Passa aumentando le cifre, ma che finisce sempre col crescere con 0, 1, 10, 11. Per convertire da binario a decimale, trovo le posizioni e moltiplico la base per la posizione e sommo. Es: (0110’0111) 2 = 26 +2^5 +2^2 +2^1 +2^0 = (103) 10 (DOMANDA D’ESAME)
Nelle macchine non ho infiniti numeri, c’è un massimo numero rappresentabile. Con quattro bit avrò:
quattro bit sarà il massimo numero rappresentabile, quindi da 0 a 15 sono 16 le possibili rappresentazioni. Il 16 non è rappresentabile, basta prendere il successivo e togliere 1: 1111 = 24 -1. Con tre bit invece vado da ooo a massimo 111 e quindi il massimo numero è 1000 (il successivo) -1 che è 23 -1. Con 1 byte, quindi otto bit, il massimo è 11111111 , ma prendo il successivo 100000000 = 2^8 e avrò l’ultimo numero= 28 -1.
Ora passo dal decimale al binario: si prende il numero decimale e lo si divide per due, e avrò un eventuale resto. A sua volta divido per due e così via, divido finché non ottengo 1:2 e risultato zero. I resti presi alla rovescia, dall’ultimo al primo, mi danno il sistema binario. ESERCIZI
SISTEMA ESADECIMALE Se ho numeri lunghi è difficile quindi hanno in ventato un nuovo sistema di numerazione: Sistema ottale;
È proprio come prima ma tutto con base 16. A è nella posizione 10, tutti i pesi li moltiplico per la posizione, parto da 0 quindi la F ha posizione 15. È un numero approssimato se si passa da un sistema all’altro, e così si passa da esadecimale a decimale. Dopo F si tornerà a zero, e quindi dovrò avere il riporto. E da FF si passa a 100 e così via. Il passaggio a decimale è molto facile, per passare a binario guardo le singole lettere cosa rappresentano e poi metto tutti vicini tra di loro in sequenza (vedo slides). Converto ogni cifra separatamente nel suo quartetto binario e metto dentro alle tonde in base due essendo in binario. Es: 7FD2= (0111’1111’1101’0010) 2. Per andare al decimale faccio la conversione dei singoli numeri e poi sommo tutto. Al contrario, dal binario all’esadecimale, prendo i quartetti e vedo nella tabella di conversione cosa rappresenta.
ESERCIZI
RAPPRESENTAZIONE INTERNA DEI DATI Tutto ciò che è calcolato dagli elaboratori è sotto forma di bit. Nel calcolatore distinguiamo diverse rappresentazioni di dati. Per esempio con un semaforo bastano 4 bit. Combinare più bir si passa da 2 stati, a 4, a 8 e così via… si sono identificati diversi modi di rappresentare i nostri dati: shortint: 8 bit integer: 16 bit. Rappresentiamo fino a 65000 stati possibili longint: 32 bit byte: 8 bit word: 16 bit non c’è un limite per la lunghezza dei numeri interi a parte la grandezza del calcolatore che si sta usando.
Il 7 è il massimo numero rappresentabile e il -8 è il primo, ho quindi 16 numeri possibili. Per somma di numeri vedo slides. Per cambiare di segno da – a + segno il positivo, faccio il binario, lo nego e poi faccio più 1: (-238) 10 = (238) 2 = (011101110) 2 = not(011101110) = (100010001) 2 +1= (100010010) 2 (-112) 10 = (1110000) 2 = not (0111000) 2 = 10001111 + 1 = -112 = (10010000)2C
Per i numeri reali invece, vediamo 1234567,8. Bisogna trovare un equilibrio tra le cifre intere e decimali rappresentate. A= xxxx.dddd la virgola fissa esclude molte possibilità di rappresentazione.
Un numero reale a in base b può essere scritto come (immagine): ed ho E = base 10 e B = base 2 la parte intera è >=1 e <9 con 1 cifra e se la base è 2 deve essere >=1 e <1 cioè 1. Nel sistema binario si vedono mantissa ed esponente nella formula che c’è nelle slides. Nello STANDARD IEEE 754 (su 32 bit) ho un minimo = 1x2-128^ e un massimo = 1x2^127. Ho infiniti numeri rappresentabili perché tra un valore e l’altro ho infiniti valori sulla retta (MACCHINA DISCRETA). Nella formula delle slides ho: S = bit di segno M= 1.m mantissa in binario, 1 è il bit implicito (più significativo)
n= numero di bit per esponente (8) Gli esempi di rappresentazione dei reali in virgola mobile più usati sono il SINGLE 1.5 E-45..3.4 E+38 (32 bit) e il DOUBLE 5.0 E-324..1.7 E+308 (64 bit).
È la rappresentazione interna dei caratteri. Convenzione definita con dei protocolli decodifica A a : - + / * B b , ; 0 1 2 3 4 5 6 7 8 9 rappresentati in modo diverso (0= nullo) ASCII da 0 a 127 con 128 stati + 8 bit di controllo. Il bit di controllo bisogna verificare se la lettera digitata A dalla tastiera arriva correttamente nei registri della CPU. Oggi giorno ha perso di significato. Dopo la cauta del muro di Berlino c’è stata la necessità di implementare anche i caratteri russi, cinesi, giapponesi, arabi e greci 16 bit: UNICODE. I primi 7 bit rappresentano la vecchia decodifica ASCII.
I commenti sono testo non interpretato, non eseguito dall’interprete e sono fatti con # oppure metto””” scrivo tutto e alla fine ancora”””. Si possono mettere anche degli operatori aritmetici, e per tutti i calcoli metto sempre e solo parentesi tonde per l’ordine di priorità del calcolo. In Python, le variabili non hanno bisogno di dichiarazione. Vengono create attraverso l’assegnazione di un valore (variabile = assegnazione, tipo a=5=. È un’assegnazione, non un’uguaglianza, significa che devo mettere il valore 5 nella variabile a. scriverei a=13 # copiamo il valore 13 in una nuova variabile di nome a. Se poi metto print, salvo e eseguo, la a non si vede perché non gli ho detto di mostrarmi il contenuto se lo voglio metto print (a) e poi salvo ed eseguo e ora si vede. Se cambiassi il contenuto, nell’esecuzione successiva il suo valore sarà cambiato. Il linguaggio è case-sensitive quindi dato diverso da Dato e diverso da DATO. L’assegnazione prende il risultato di destra e lo copia nella variabile di sinistra. Quindi una variabile è una scatola contenente un’informazione (dato/valore). Se metto gli apici ad a non è più una variabile, ma scrive il testo/ lettera a.
Per esempio se ho x=x+1 è vero perché è solo un’assegnazione non una espressione matematica, e questo valore si chiama incremento, incremento di 1 il contenuto di x. Ovviamente alla fine dell’assegnazione la x conterà il valore nuovo. Spesso si va ad indicare il tipo di dato che la variabile deve rappresentare, di tipo intero, di tipo reale o una stringa di caratteri. Questa cosa in Python è automatica, in base al risultato dell’espressione. Per i numeri immaginari si usa la j come parte immaginaria e per estrarre le parti reali e immaginarie faccio: x.real, x.imag, a.real, a.imag, s.real e s.imag è un testo, non esiste l’attributo per gli oggetti di tipo stringa. CREARE UN PROGRAMMA IN PYTHON Devo trovare l’algoritmo per trasformare gli input in output. Per fare questo devo fare l’analisi: prima individuare gli input e gli output, anche senza sapere l’ordine capire come trasformare gli input in output una volta eseguita l’analisi passo all’implementazione che prevede la trasformazione dell’algoritmo in linguaggio di alto livello, Python quindi. Per esempio, creare un programma in Python che calcola la somma di due numeri:
Se devo modificare il calcolo parto dal codice iniziale in input. Chi riesce a modificarlo? Solo chi sa dove andare a toccare e poi eseguire. Ma non è sempre così semplice.
Un modo professionale è quello di richiederli all’utente, non inserirli a mano. La funzione x=y= input (“inserire il valore di x” e di y) mi dà come risultato una stringa di caratteri e poi mi va a scegliere il dato da inserire. Così se eseguo mi chiede i dati che voglio inserire durante l’esecuzione. Si legge sempre una stringa di caratteri. Nel senso che si può usare anche per le parole, che concatena le stringe: “salve” + “mondo” mi scrive salve mondo. Un errore di semantica è un errore non di esecuzione, ma non fa quello che non era previsto. Cioè quando io eseguo la somma come prima tra 33 e 17 per esempio e mi esegue una striga di 3317 unito. Quinid devo usare il casting converti un tipo in un altro tipo. Se è un intero uso int () se invece deve contenere cifre e punti decimali uso float (). Allora prima di input metto float () o int(). In alcune situazioni se i dati non sono corretti si ha un errore ValueError è il tipo di errore scatenato. Allora posso usare il gestore delle eccezioni, il comando try che controlla il buon esito di un blocco di istruzioni e di conseguenza se non funziona devo fare ancora altro.
Calcolare la radice quadrata: INPUT x=float(input(“immettere il numeri:”)) ELABORAZIONE y=sqrt(x) OUTPUT print(y) Per importare una libreria: from math import sqrt allora lo scrivo prima dell’input, mi chiede il numero e fa la radice quadrata. Se dimentico la libreria cosa succede? Il nome sqrt non è definito. se invece scrivo from math import * le importo tutte. Per aggiungere delle librerie si usa pip install matplotlib
Sommare 5 numeri immessi da tastiera scrivo tutti i float per a,b,c,d,e… nell’elaborazione metto somma= a+b+c+d+e e nell’output ho print(somma) come variabile. Ma se avessi molti più numeri da sommare? Faccio un esempio con 10 (uguale che con 50,100) posso dire dammi un dato molto generico, lo chiamo x e lo aggiungo alla mia somma x. Quindi sto aumentando la somma, ora avrà somma=somma+x. E print (somma) ma all’inizio devo dare il valore della somma allinizio e quindi scrio somma 0.0 all’inizio di tutto. Ma per 10 dati copio tutto per 10 volte e rispetto a prima sto usando una sola variabile, mi chiede tutti i dati ma sto utilizzando solo una variabile di input quindi avrò: float(input(dammi un dato) somma=somma+x copio tutto per 10 volte e alla fine metto il print. print(somma)
CICLO WHILE: controlla se le istruzioni sono ancora vere dopo aver eseguito e si ripete tutto ancora. Si esce dal ciclo while solo se la condizione è falsa. Questo implica che il ciclo while continua fino a che la componente non è modificata, quindi se non cambiata continua all’infinito. Ci sono dei programmi residenti che aiutano il sistema operativo a tener sotto controllo un dispositivo. Questi programmi residenti si chiamano demons, e in windows si chiamano servizi. Se non posso sistemare le condizioni, ho un loop infinito e per interromperlo faccio ctrl+C. La probabilità di creare loop infiniti è alta e non si riesce più ad interrompere. Anche qui posso usare for k in range (1,10): e ripete per 10 volte. Esempio: leggere da tastiera un elenco di nomi ed età. Comunicare il nominativo con età maggiore. L’elenco termina con l’asterisco. Non si sa a priori quanti dati saranno immessi: nome=input(“nome:”) eta=int(input(“eta:”)) etaM=eta while (nome! =”*”) nome=input(“nome:”) eta=int(input(“eta:”)) if(eta>etaM): etaM=eta nomeM=nome print(nomeM) quello che viene chiesto alla fine però non è l’età, ma il nome M e all’inizio non lo abbiamo definito. Va definito quando do un nuovo valore ad M. In generale: For= se il programmatore o l’utente conoscono il numero di iterazioni While= se a priori non si conosce il numero di volte in cui il ciclo va ripetuto
STRINGHE Ho stringhe costanti e concatenate. Si inizia a contare da zero, da sinistra a destra. Per ripetere una stringa metto “-“ *4 vuol dire che la stringa viene ripetuta 4 volte. Nella decodifica ASCII abbiamo anche dei caratteri speciali. Questa tabella per esempio il 65 è la lettera A, il 48 è lo zero e coì via. Tra questi il CR, caraige return e LF, ALIMENTAZIONE DI UNA RIGA sono importanti. Sono utili nelle situazioni strane. Sono stati scelti da coloro che hanno creato il sistema operativo DOS e servono per andare a capo. Alcuni usano solo LF (line feed) ma gli effetti sono un po' deleteri perché troviamo un’intera riga non impaginata ma tutto attaccato. Per ovviare a questo usare wordpad che ci permette di reggere quei file in modo corretto. In pYthon è stato semplificato usando /n nelle macchine linus e il programma andrà a capo in windows. /n è composto da 2 caratteri, ne esistono altri che sono: /b che torna indietro di 1; \ serve per separare una sotto cartella. Per esempio salva in C:\ e il nome della cartella; \ backslash è il carattere di fuga, da usare per specificare caratteri che non abbiamo modo di rappresentare a tastiera ma combinando due caratteri uno di fuga e un altro mi fa rappresentare caratteri specili. Per esempio l’unicode per evitare errori con apostrofi metto per esempio l’università scritta così: “l’\università” capisce che è un carattere unico, se non metto il backslash mi da errore e non scrive la parola. \u per i caratteri unicode. Combinando tutti i caratteri ottengo i simboli speciali