Scarica appunti di informatica e più Appunti in PDF di Fondamenti di informatica solo su Docsity!
informatica appunti modulo 1
- ingegneria informatica - progettazione e realizzazione di impianti o di sistemi informatici - si compone di hardware (sensori e attuatori) + software (programmazione controllore logico programmabile che riceve segnali input e invia output) + rete (rete industriale che collega dispositivi per consentire comunicazione e coordinamento) - costruzione di calcoli - programmazione di base dei calcolatori - sviluppo di codice o software che interagisce direttamente con hardware - permette ai calcolatori di eseguire operazioni di base > gestione memoria + controllo dei dispositivi input/output + gestione processi - elaboratore elettronico (computer) - macchina automatica o dispositivo in grado di elaborare dati secondo un insieme di istruzioni - architettura di elaborazione - come è costruito fisicamente e logicamente un calcolatore > insieme dei componenti hardware e delle regole con cui interagiscono - comprende : CPU + memoria principale e secondaria + bus di comunicazione + periferiche I/O + instruction set architecture - sistema operativo - software di sistema che si interpone tra hardware e utente > compito di gestire le risorse hardware e software della macchina - reti - sistemi che collegano dispositivi per permettere comunicazione e condivisione di risorse tra di loro > vari tipi : LAN (copre area geografica limitata), WAN (copre area vasta) e PAN (copre un corto raggio)
- Hard disk > orientazioni magnetiche
- memoria SSD o chiavette USB > cariche elettriche nei transistor
- CD/DVD > usa zone riflettenti e non sulla superficie del disco per rappresentare 0 e 1 - alfabeto binario
- insieme di più byte = WORD - rappresentazione dei numeri nei calcolatori
- ogni cifra (bit) rappresenta una potenza di 2
- 1011 = 1 × 2 3
- 0 × 2 2
- 1 × 2 1
- 1 × 2 0 = 8 + 0 + 2 + 1 = 11
- Il bit più a sinistra ha l’esponente più alto perché rappresenta la parte più grande del numero
- Man mano che ci spostiamo a destra, l’esponente diminuisce e i valori diventano più piccoli
- Il numero 5 in binario è 101 per convertirlo in numero binario bisogna usare il metodo della divisione
- 5 ÷^2 =^2 con^ resto^ di^1 =^ primo^ bit^ partendo^ da^ destra
- 2 ÷^2 =^1 con^ resto^ di^0 =^ secondo^ bit
- 1 ÷ 2 = 0 con resto 1 = terzo bit
- numeri binari puri > senza segno > positivi
- formula > 2 n^ −^1 dove n = 8
- esempio > 10010101 1 ⋅ 2 7
- 0 ⋅ 2 6
- 0 ⋅ 2 5
- 1 ⋅ 2 4
- 0 ⋅ 2 3
- 1 ⋅ 2 2
- 0 ⋅ 2 1
- 1 ⋅ 2 0 1 ⋅ 128 + 0 ⋅ 64 + 0 ⋅ 32 + 1 ⋅ 16 + 0 ⋅ 8 + 1 ⋅ 4 + 0 ⋅ 2 + 1 ⋅ 1 128 + 0 + 0 + 16 + 0 + 4 + 4 + 0 + 1 = 149
- numero negativo > tre metodi
- modulo e segno
- primo bit rappresenta segno > 0 = positivo
- restanti 7 il valore assoluto
- complemento a 1
- numeri positivi rappresentati dal modulo e hanno il primo bit di segno uguale a 0
- numeri negativi si ottengono complementando il numero positivo corrispondente > si scambiano gli 1 con gli 0 e viceversa
- complemento a 2
- metodo 1 aritmetico > formula > X = 2 n^ – X
- metodo 2 bitwise
- − 5 = 11010 > complemento a 1
- − 5 = 11011 > complemento a 2 > aggiungo 1 - concetto peso
- Più bit usi, più "pesa" la rappresentazione in termini di memoria
- architettura del computer > i computer lavorano con gruppi di 8, 16, 32, 64 bit perché è più efficiente leggere e scrivere dati in blocchi fissi
- uniformità dei dati > se hai una lista di numeri e alcuni sono a 3 bit, altri a 5, altri a 7, sarebbe un disastro gestirli > renderli della stessa lunghezza
- numeri con segno > se vuoi rappresentare anche i numeri negativi potresti aver bisogno di più bit - Come si calcola quanti numeri posso rappresentare con N bit?
- formula > numeri rappresentabili = 2 numero^ di^ bit - numeri interi con notazione in eccesso
- metodo alternativo per rappresentare i numeri interi con segno
- si sceglie numero K (bias) per rappresentare lo zero
- i numeri restanti sono definiti in modo incrementale e decrementale N+K - numeri in virgola fissa
- posizione virgola è stabilita in anticipo e rimane invariata per tutti i numeri
- xxxx , yyyy (x parte intera , y parte frazionaria)
- esempio > 0000, 1110
- parte intera > 0000 > 0 2 n − 1 = 2 3 0 ⋅ 2 3
- la parte decimale in binario è ,
- numero completo > 13,25 =1101,
- conversione in notazione scientifica binaria
- per avere una sola cifra a sinistra della virgola spostiamo la virgola di 3 posizioni
- 1101,01 > 1,10101 ⋅ 211
- Problema: una CPU a 8 bit può rappresentare e calcolare numeri oltre 255?
- una CPU a 8 bit può calcolare numeri maggiori di 225 ma non in un’unica operazione hardware
- Con 8 bit (1 byte) si hanno 2 8 = 256 combinazioni, quindi si possono rappresentare numeri da 0 a 255 > CPU può combinare byte per rappresentare numeri grandi - D i f f e r e n za tra CPU, software e interfaccia
- hardware > gestisce l’ampiezza dei registri (quanti bit elabora in una singola operazione) + gestisce l’ampiezza del bus dati (quanti bit trasferisce tra memoria e CPU) + esegue operazioni elementari sui bit (somme, spostamenti, confronti, ecc.)
- software > coordina più operazioni a 8 bit per ottenere risultati più ampi + definisce formati di Calcolo Parte intera Parte decimale successiva 0,25 × 2 = 0,5 0 0, 0,5 × 2 = 1,0 1 0, Numero di byte Bit totali Combinazioni possibili Valori rappresentabili 1 byte 8 bit (^) 2⁸ = 256 0 → 255 2 byte 16 bit (^) 2¹⁶ = 65.536 0 → 65. 3 byte 24 bit (^) 2²⁴ = 16.777.216 0 → 16.777. 4 byte 32 bit 2³² ≈ 4 miliardi (^) 0 → 4.294.967.
rappresentazione (come i numeri vengono interpretati) + estende le capacità dell’hardware, permettendo di lavorare con numeri “più lunghi”
- output > rappresentazione visiva dei dati - operazioni aritmetiche tra numeri binari
- somma binaria operazione risultato prestito 0 + 0 0 0 1 + 0 1 0 1 + 1 0 1 0 + 1 1 0
- somma in complemento a 1
- se c’è un riporto finale, bisogna sommare quel riporto al risultato
- somma in complemento a 2
- se c’è un riporto finale (carry out), lo si scarta
- sottrazione binaria operazione risultato prestito 0 - 0 0 0 1 - 0 1 0 1 - 1 0 0 0 - 1 1 1 > in prestito da cifra a sinistra
- moltiplicazione binaria > somme + shift operazione risultato 0 x 0 0 1 x 0 0 1 x 1 1 0 x 1 0
- divisione binaria > si divide più volte il dividendo finchè non si ottiene il resto 0 > obiettivo trovare quoziente e resto - overflow in complemento a 2
- risultato supera intervallo presentabile
- regola : overflow = carryin ⊕ carryout carry in carry out overflow 0 0 NO 1 1 NO 0 1 SI 1 0 SI - operazioni di scorrimento > shift
- sinistro << moltiplica per 2
- legge duale > A. B = B. A
- associativa
- legge booleana > (A + B) + C = A + (B + C)
- legge duale > A. (B. C) = (A. B). C
- distributiva
- legge booleana > A. (B + C) = A. B + A. C
- legge duale > A + (B. C) = (A + B). (A +C)
- assorbimento
- legge booleana > A. (A + B) = A
- legge duale > A + (A. B) = A
- elemento neutro
- legge booleana > 0 + A = A, 1. A
- legge duale > 1. A = A , 0 + A = A
- complementare
- legge booleana > A. A’ = 0 , A + A’ = 1
- legge duale > A. A’ = 0 , A + A’ = 1
- leggi di De Morgan
- trasformare espressione logica con una negazione di AND o OR
- trasformazione di OR negato
- ¬(A+B)=¬A⋅¬B
- trasformazione di AND negato
- ¬(A⋅B)=¬A+¬B
- strutture dati
- metodi di organizzazione e gestione delle informazioni in memoria > permettono al computer di conservare, accedere e modificare i dati in modo efficiente
- classificazione
- tipi fondamentali (o primitivi) > tipi base con cui vengono rappresentate le informazioni elementari > si distinguono sulla base della quantità di memoria occupata + tipo codifica utilizzato
- boolean > valori logici
- char > caratteri singoli
- Integer > numeri interi
- float > numeri con virgola mobile
- tipi derivati o strutturati > tipi composti costruiti a partire dai tipi fondamentali > organizzare le informazioni in memoria secondo dei criteri logici - array > collezione di elementi dello stesso tipo - vettore > elementi dell’array occupano posizioni contigue in memoria + ogni elemento è individuato tramite un indice + dimensione non modificabile + elemento i-esimo si indica N(i)/N[i] - array bidimensionale > matrice > tabella di valori organizzata > collezione ordinata di elementi + ogni elemento identificato da indice riga e indice colonna + notazione M[i,j] - struct (o record) > insieme di campi di tipo diverso - dato derivato che rappresenta un insieme ordinato di elementi di tipo diverso correlati fra loro - stack (pila) > struttura LIFO (“Last In, First Out”) > l’ultimo elemento inserito è il primo a uscire - contenitore di elementi omogenei + essere riempita o svuotata solo da un lato, chiamato “cima” (top) + operazioni PUSH X inserisce elemento e POP () rimuove ultimo elemento inserito - queue (coda) > struttura FIFO (“First In, First Out”) > il primo elemento inserito è il primo a uscire
- symbol table
- struttura dati fondamentale nei linguaggi di programmazione > memorizzare il rapporto tra identificatori e memoria
- identificatori > nomi simbolici usati in un programma per dare identità a vari elementi
- dichiarare una variabile perché il computer deve sapere in anticipo byte da riservare + tipo dati + come interpretarli - UML
- linguaggio consente di modellare diversi aspetti dei sistemi o processi analizzati
- utile per scopo analisi + progetto software
- usa il diagramma
- diagramma delle classi
- descrivere classi + attributi delle classi + relazioni fra classi
- classe > definisce un concetto generale > attributi + metodi
- oggetto > istanza concreta di una classe > valori specifici
- diagramma delle attività
- definire sequenza temporale delle operazioni svolte in parallelo > fork : indica che da un'attività si passa a più attività parallele > Join : unisce le attività parallele in un unico flusso > per attività alternative si usa il simbolo del rombo
- diagramma degli stati
- descrive comportamento delle classi in termini di macchina a stati (descrive comportamento del sistema)
- diagramma dei casi d’uso
- descrive il sistema nelle modalità in cui esso è percepito e utilizzato dagli utenti che interagiscono con lo stesso > requisiti funzionali di un sistema - linguaggi di programmazione
- codice macchina
- direttamente comprensibile ed eseguibile dal processore
- ogni istruzione rappresentata da una sequenza di bit
- codici operativi op-code indicano quale operazione deve essere eseguita
- operandi specificano i dati su cui operare
- codice assembler
- utilizza mnemonici per rappresentare le istruzioni del linguaggio macchina rendendo la programmazione leggibile
- ogni istruzione corrisponde direttamente a un’istruzione in linguaggio macchina
- codici mnemonici sostituiscono numeri binari
- lavorare direttamente con i registri
- tradotto in linguaggio macchina da assembler
- metacodice
- no eseguibile o comprensibile
- sequenza di byte e rappresenta istruzioni e operandi
- indipendente da piattaforma hardware
- necessita interprete per tradurre codice in linguaggio macchina
- Codice intermedio tra linguaggio alto livello (java, Python, c#)
- linguaggi evoluti
- costrutti sintattici che facilitano scrittura del codice e definizione dei dati
- possiedono strutture di controllo di alto livello
- necessitano compilatori o interpreti
- compilatori
- programmi che agiscono su un programma sorgente e producono il corrispondente codice macchina
- passi che convertono il programma sorgente in altre fasi intermedie
- linker > unisce file oggetto generati da compilatore a librerie esterne e produce il file eseguibile
- loader > caricare eseguibile in memoria ed eseguirlo
- linguaggio Python
- funziona diversamente da linguaggio C / C++
- non usa assembly e non utilizza linker separato
- Insieme immutabile (frozenset) > frozenset({1, 2, 3}) > Come un set, ma immutabile
- Numero complesso (complex) > 2 + 3j > Numeri con parte reale e immaginaria
- Byte (bytes) > b"ciao" > Sequenza di byte immutabile
- Bytearray bytearray(b"ciao") Sequenza di byte modificabile
- Memoryview > memoryview(b"ciao") > Accesso efficiente ai dati binari - linguaggio C
- dichiarare variabili
- #include int main() { int x = 5; // dichiarazione esplicita: int float y = 3.14; // float char c = 'A'; // carattere printf("%d\n", x); return 0; }