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


elementi di informatica prima parte, Sbobinature di Elementi di Informatica

Sbobine della prima parte del corso "elementi di informatica". Dalla suddivisone tra software e hardware (in modo molto specifico) alla spiegazione delle istruzioni ripetitive da usare nella programmazione

Tipologia: Sbobinature

2023/2024

In vendita dal 27/01/2024

Nikiii04
Nikiii04 🇮🇹

1 documento

1 / 16

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
Power point 1
informatica = scienza che si occupa di rappresentare, organizzare e gestire in modo automatico informazioni per risolvere i
problemi !
calcolatore = macchina che memorizza, elabora e distribuisce l’informazione ( esegue istruzioni che gli vengono impartite )!
algoritmo= sequenza di istruzioni ( procedura computazionale ) la cui applicazione permette di risolvere un problema !
Istanza = problema per il quale é stato specificato un input !
input = insieme di dati in ingresso per risolvere un problema !
output = insieme di dati in uscita per risolvere un problema !
programma = sequenza di istruzioni che posso essere eseguite da un calcolatore per risolvere un problema (traduzione di un
algoritmo in linguaggio di programmazione molto più semplice)!
!
Power point 2
calcolatore = é un sistema ovvero un insieme di componenti che interagiscono fra loro per ottenere un certo comportamento
( costituito da atomi, transistor, chip e componenti funzionali )
hardware = struttura fisica del calcolatore, costituita da componenti elettroniche, elettriche, magnetiche, meccaniche e ottiche !
software = insieme di programmi che consentono all’ hardware di svolgere compiti utili !
componenti hardware = memoria, CPU ( processore) , interfacce I/O , bus!
(macchina di Von Neumann)!
!
funzionalità componenti:!
!
CPU elaborazione dei dati, controllo e coordinamento - 1 byte = 8 bit 1 KB = 1024 byte !
!
memoria centrale memorizzazione dei dati - 1 MB = 1024 KB 1 GB = 1024 MB!
!
interfacce scambio dati con l’utente - 1 TB = 1024 GB 1 PB = 1024 TB !
!
bus trasferimento dati !
!
memoria centrale = ( RAM ) é volatile, permette di memorizzare in maniera temporanea dati e programmi e la CPU può
accedere in modo diretto. Svolge due tipi di operazioni ( scrittura= memorizzazione dati e progr. e lettura= accesso a dati e
progr. ) È costituita da uno o più chip ciascuno dei quali possiede un num elevato di bit ( bit = elemento base della memoria,
può rappresentare 2 valori 0 e 1 , è fisicamente realizzato da un dispositivo a due stati e sono raggruppati in celle ) !
!
cella = corrisponde ad una parola di memoria ( porzione di memoria utilizzata interamente ), ha una dimensione fissa ( 32 o 64
bit ), ha un valore ( sequenza di bit memorizzata ) e ha un indirizzo che permette al processore di riferirsi ad essa ( per
effettuare lettura o scrittura) !
!
in lettura -> il CPU invia sul bus indirizzi l’indirizzo della cella da leggere e la memoria restituisce sul bus dati il valore della
cella richiesta ( ciascuna operazione realizzata in tempo indipendente della cella ) !
in scrittura -> il CPU invia sul bus indirizzi l’indirizzo della cella su cui scrivere e sul bus dati il valore da scrivere. La memoria
effettua tale scrittura ( ciascuna operazione realizzata in tempo indipendente della cella ) !
!
bus = componente del calcolatore che si occupa del trasferimento di dati ( bus dati ) , indirizzi ( bus indirizzi ) e info di controllo
( bus di controllo ). Tutti i componenti sono collegati al bus ( in maniera modulare ed espandibile ) !
!
processore = responsabile dell’elaborazione dati e e del coordinamento tra i componenti del calcolatore. É composta da 2
parti ovvero : unità aritmetico logica ( responsabile dell’esecuzione delle istruzioni ) e unità di controllo ( responsabile del
coordinamento tra i componenti ) . Nei computer attuali il processore è costituito da diversi core ( ciascuni dei quali può
svolgere tutte le funzioni e può contenere diverse ALU ). Fisicamente é un singolo circuito integrato ( o chip ) consistente di
transistor, diodi , condensatori e resistori legati tra loro dalla tecnologia VLSI e collocati su un semiconduttore ( silicio ).
All’interno della CPU si trovano i registri ovvero piccole aree di memoria ( es. MAR , MDR , PC , IR , PSW… ). L’elaborazione
dei dati avviene attraverso l’esecuzione di istruzioni corrispondenti a operazioni elementari sui dati ( ad es. operazioni
aritmetiche, relazionali e logiche ). !
!
esecuzione di istruzioni = il proc. esegue le istruzioni di un programma ( memorizzato in memoria centrale ) attraverso
l’esecuzione ordinata e ripetuta delle tre fasi : FETCH , DECODE E EXECUTE . !
!
fetch = ( prelievo ) viene letta la prossima istruzione da eseguire.!
1) La CU ( unità di controllo ) legge dal registro PC ( che memorizza l’indirizzo di memoria della prossima istruzione da
eseguire) l’indirizzo della prossima istruzione da eseguire. !
2) il contenuto di PC viene copiato nel registro MAR (che memorizza un indirizzo di memoria al quale accedere), é collegato al
bus indirizzi !
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff

Anteprima parziale del testo

Scarica elementi di informatica prima parte e più Sbobinature in PDF di Elementi di Informatica solo su Docsity!

Power point 1 informatica = scienza che si occupa di rappresentare, organizzare e gestire in modo automatico informazioni per risolvere i problemi calcolatore = macchina che memorizza, elabora e distribuisce l’informazione ( esegue istruzioni che gli vengono impartite ) algoritmo= sequenza di istruzioni ( procedura computazionale ) la cui applicazione permette di risolvere un problema Istanza = problema per il quale é stato specificato un input input = insieme di dati in ingresso per risolvere un problema output = insieme di dati in uscita per risolvere un problema programma = sequenza di istruzioni che posso essere eseguite da un calcolatore per risolvere un problema (traduzione di un algoritmo in linguaggio di programmazione molto più semplice) Power point 2 calcolatore = é un sistema ovvero un insieme di componenti che interagiscono fra loro per ottenere un certo comportamento ( costituito da atomi, transistor, chip e componenti funzionali ) hardware = struttura fisica del calcolatore, costituita da componenti elettroniche, elettriche, magnetiche, meccaniche e ottiche software = insieme di programmi che consentono all’ hardware di svolgere compiti utili componenti hardware = memoria, CPU ( processore) , interfacce I/O , bus (macchina di Von Neumann) funzionalità componenti: CPU elaborazione dei dati, controllo e coordinamento - 1 byte = 8 bit 1 KB = 1024 byte memoria centrale memorizzazione dei dati - 1 MB = 1024 KB 1 GB = 1024 MB interfacce scambio dati con l’utente - 1 TB = 1024 GB 1 PB = 1024 TB bus trasferimento dati memoria centrale = ( RAM ) é volatile, permette di memorizzare in maniera temporanea dati e programmi e la CPU può accedere in modo diretto. Svolge due tipi di operazioni ( scrittura = memorizzazione dati e progr. e lettura = accesso a dati e progr. ) È costituita da uno o più chip ciascuno dei quali possiede un num elevato di bit ( bit = elemento base della memoria, può rappresentare 2 valori 0 e 1 , è fisicamente realizzato da un dispositivo a due stati e sono raggruppati in celle ) cella = corrisponde ad una parola di memoria ( porzione di memoria utilizzata interamente ), ha una dimensione fissa ( 32 o 64 bit ), ha un valore ( sequenza di bit memorizzata ) e ha un indirizzo che permette al processore di riferirsi ad essa ( per effettuare lettura o scrittura) in lettura -> il CPU invia sul bus indirizzi l’indirizzo della cella da leggere e la memoria restituisce sul bus dati il valore della cella richiesta ( ciascuna operazione realizzata in tempo indipendente della cella ) in scrittura -> il CPU invia sul bus indirizzi l’indirizzo della cella su cui scrivere e sul bus dati il valore da scrivere. La memoria effettua tale scrittura ( ciascuna operazione realizzata in tempo indipendente della cella ) bus = componente del calcolatore che si occupa del trasferimento di dati ( bus dati ) , indirizzi ( bus indirizzi ) e info di controllo ( bus di controllo ). Tutti i componenti sono collegati al bus ( in maniera modulare ed espandibile ) processore = responsabile dell’elaborazione dati e e del coordinamento tra i componenti del calcolatore. É composta da 2 parti ovvero : unità aritmetico logica ( responsabile dell’esecuzione delle istruzioni ) e unità di controllo ( responsabile del coordinamento tra i componenti ). Nei computer attuali il processore è costituito da diversi core ( ciascuni dei quali può svolgere tutte le funzioni e può contenere diverse ALU ). Fisicamente é un singolo circuito integrato ( o chip ) consistente di transistor, diodi , condensatori e resistori legati tra loro dalla tecnologia VLSI e collocati su un semiconduttore ( silicio ). All’interno della CPU si trovano i registri ovvero piccole aree di memoria ( es. MAR , MDR , PC , IR , PSW… ). L’elaborazione dei dati avviene attraverso l’esecuzione di istruzioni corrispondenti a operazioni elementari sui dati ( ad es. operazioni aritmetiche, relazionali e logiche ). esecuzione di istruzioni = il proc. esegue le istruzioni di un programma ( memorizzato in memoria centrale ) attraverso l’esecuzione ordinata e ripetuta delle tre fasi : FETCH , DECODE E EXECUTE. fetch = ( prelievo ) viene letta la prossima istruzione da eseguire.

  1. La CU ( unità di controllo ) legge dal registro PC ( che memorizza l’indirizzo di memoria della prossima istruzione da eseguire) l’indirizzo della prossima istruzione da eseguire.
  2. il contenuto di PC viene copiato nel registro MAR (che memorizza un indirizzo di memoria al quale accedere), é collegato al bus indirizzi
  1. la CU invia una richiesta di lettura alla memoria tramite il bus di controllo
  2. la memoria invia l’istruzione tramite il bus dati
  3. l’istruzione viene memorizzata nel registro MDR ( che memorizza il dato che è stato acceduto )
  4. il contenuto MDR viene copiato nel registro IR ( che memorizza l’istruzione che deve essere eseguita )
  5. il contenuto di PC viene incrementato così che possa essere utilizzato nel programma successivamente decode = ( decodifica ) viene determinato il tipo della prossima istruzione da eseguire. La CU decodifica l’istruzione presente nell’ IR cioè ne determina il tipo e quanti operandi ha. La CU poi recupera tali operandi ( inviando una richiesta sul bus di controllo e ricevendo i valori sul bus dati ). I valori degli operandi vengono salvati nei registri ALU ( registro A , B …) execute = ( esecuzione ) svolgimento di tutte le azioni necessarie per l’esecuzione dell’istruzione. La CU coordina i componenti coinvolti nell’operazione : per l’elaborazione di un dato viene coinvolta la ALU; per la lettura o scrittura di un dato in memoria vengono coinvolti la memoria e il bus ; per la lettura o scrittura di un dato verso una periferica ( possono essere input compie tastiera, mouse microfono output come monitor o altoparlanti ) vengono coinvolti l’interfaccia corrispondete e i bus. L’esito dell’istruzione viene scritto nei registri PSW ( che contiene info sull’esito dell’ultima istruzione eseguita ) Clock = le attività del CPU vengono scandite da un clock ovvero un segnale che è usato come un metronomo per coordinare e sincronizzare le operazioni delle varie parti del CPU. Una sua caratteristica é la frequenza che è dell’ordine di qualche gigahertz. memorie di massa = sono componenti hardware rimovibili e sono memorie secondarie. Rispetto alla memoria centrale sono più capienti, permanenti ( conservano le info anche dopo lo spegnimento del computer ), più economiche e più lente. Quando un utente chiede di eseguire un programma questo viene copiato dalla memoria secondaria a quella centrale. Es: hard-disk , cd, dvd e usb hard-disk = ( disco fisso/rigido ) è costituito da un insieme di dischi magnetici che ruotano intorno ad un asse. La superficie di un disco magnetico è divisa in settori ( forma di spicchi ) e in una sequenza di tracce ( cammini circolari lungo i quali vengono memorizzati i bit ). Lettura e scrittura vengono effettuate per mezzo di di testine ( una per ciascun disco magnetico ), che si accorciano e si allungano per arrivare alla traccia giusta mentre i dischi ruotano per far sì che le testine siano posizionate sul settore giusto. interfacce di I/O = controllano il funzionamento delle periferiche di I/O cioè traducono i segnali interni al calcolatore in un formato comprensibile alla periferica e viceversa. Un calcolatore, infatti , è collegato a diverse periferiche di input o output che permettono al calcolatore di comunicare all’utente i risultati del lavoro svolto. divisione software = software di base e software applicativo software di base = insieme di programmi che consentono all’hardware di svolgere compiti utili ( il sistema operativo gestisce le risorse del computer, ne semplifica l’utilizzo e lo virtualizza ). Rende astratte le funzionalità del computer per l’utente che così non deve essere a conoscenza delle modalità di funzionamento dell’hardware software applicativo = è un insieme di programmi applicativi che rende il calcolatore come una macchina virtuale. Si appoggia al software di base e raramente all’hardware sistema operativo = è la componente principale del software di base e ha due scopi fondamentali : gestire le risorse del calcolatore ( CPU , periferiche , memoria centrale e di massa ) e virtualizzare le risorse perchè devono essere rese il più semplice possibile per gli utenti e per i programmi applicativi che non devono conoscere il funzionamento dell’hardware. Ha una struttura gerarchica.
  1. hardware
  2. nucleo
  3. gestore della memoria
  4. gestore delle periferiche
  5. gestore dei file
  6. interprete dei comandi ( l’utente interagisce solo con questo livello )
  7. programmi applicativi es. di virtualizzazione = avvio di un programma il sistema operativo individua le sequenze di istruzioni che costituiscono il programma in memoria secondaria ; assegna risorse al programma ( es. trova spazio in memoria centrale ) ; copia le istruzioni del programma in memoria centrale e infine fa si che la CPU esegua le prime istruzioni del programma ( tutto questo in maniera non visibile all’utente ). programma = è un insieme di istruzioni memorizzate su un supporto di memoria, é statico , può essere disinstallato e ad un programma possono corrispondere diversi processi anche contemporanei

le istruzioni non vengono scritte direttamente in linguaggio macchina perché è poco potente ( servono tante frasi in un linguaggio macchina per eseguire una singola istruzione in un linguaggio di programmazione) , è difficile per noi, sono diversi ( in base al sistema operativo o processore del calcolatore) e infine sono di basso livello ( perché dipendono dalle caratteristiche fisiche del calcolatore). Linguaggio C = è matematico ( e spesso utilizza parole tipiche del linguaggio naturale ) quindi è più semplice ( scrivere un programma in linguaggio C è più semplice che scriverlo in linguaggio macchina ), portabile ( lo stesso programma C può essere eseguito su qualsiasi calcolatore indipendentemente dalle sue caratteristiche fisiche) e astratto ( un programmatore non deve conoscere le caratteristiche fisiche del calcolatore e non deve gestire la memoria ). Fase 2: compilazione : operazione che traduce un programma scritto in un linguaggio di programmazione ad alto livello ( C ) in un linguaggio di macchina. Consiste in 4 fasi :

  1. preprocessamento = esegue i comandi ( detti direttive e indicati nel codice con # ) che sono stati impartiti al preprocessore Es. #include è una direttiva che serve ad includere funzioni predefinite nel nostro programma
  2. Compilazione = traduce il codice sorgente ( linguaggio di programmazione) in un linguaggio intermedio, tra un linguaggio di programmazione e un linguaggio di macchina, detto linguaggio assembly
  3. assemblaggio = il codice assembly viene tradotto in un file oggetto non eseguibile grazie ad un programma chiamato assembler ( tale file ha un’estensione .o oppure .obj )
  4. Collegamento = un software chiamato linker ha il compito di collegare tra loro i file oggetto creando un singolo file eseguibile la separazione tra compilazione e linking ( 2 e 4 fase ) ha molti vantaggi perché è più semplice da realizzare e permette di non riscrivere l’intero programma ( formato da più file ) quando viene modificato un file. riassunto:
  • Il programmatore scrive un programma in un linguaggio di programmazione e lo salva in un file ( codice sorgente )
  • Un’ applicazione chiamata compilatore traduce il codice in un programma in linguaggio di macchina ( codice eseguibile )
  • Il calcolatore esegue le istruzioni del codice eseguibile. Power point 4 : programmatore = colui che progetta il programma utente = colui che utilizza il programma i programmi commerciali vengono utilizzati attraverso un’interfaccia utente che fornisce all’utente una maniera intuitiva per utilizzare le funzionalità messe a disposizione dal programma. sintassi = si occupa delle regole grammaticali che permettono di scrivere in maniera corretta delle frasi del linguaggio C semantica = si occupa del significato delle frasi ben formate, ovvero dell’interpretazione del linguaggio PRINTF = è un’istruzione di stampa la cui semantica è che viene stampato "qualcosa" sullo schermo dell’utente mentre la sintassi è printf ( "stringa " ). Per poter utilizzare printf bisogna avvertire il pre-compilatore C di includere nel nostro programma i riferimenti alla libreria standard di input o output, perciò all’inizio del programma si scrive #include <stdio.h> La funzione di printf permette anche di stampare dei valori ( ad es. di variabili ) nel seguente modo:
  • la stringa deve indicare per ciascun valore il formato di stampa di quel valore preceduto da %
  • i valori da stampare devono essere all’interno delle parentesi tonde ma fuori dalle virgolette libreria = è una raccolta di programmi che hanno uno scopo simile per andare a capo si utilizza il carattere newline \n variabile = è una porzione di memoria destinata a contenere dei valori che potranno essere acceduti o modificati durante il programma ( in sintesi è un contenitore di valori ). All’interno della variabile si memorizza un valore ( accesso in scrittura ) e si accede al valore della variabile ( accesso in lettura ). Se un programma scrive all’interno di una variabile che già conteneva un valore , il valore precedente viene perso e la variabile conterrà il nuovo valore. Se un programma legge il valore contenuto nella variabile, quello stesso valore è ancora memorizzato dentro la variabile dopo la lettura. Le variabili hanno un nome che deve essere :
  1. diverso ed esplicativo dello scopo della variabile
  2. è una sequenza di caratteri alfanumerici dove il primo deve essere alfabetico e in minuscolo ( oppure un underscore _ ) mentre che costituisce il nome dopo la seconda deve iniziare con una maiuscola

Le variabili hanno un tipo che rappresenta l’insieme dei valori che la variabile può assumere e l’insieme di operazioni permesse su quei valori ( durante l’esecuzione di un programma la variabile può assumere valori diversi ma sempre dello stesso tipo ) Es. int ( numeri interi ) ; char ( insieme di caratteri ) e float ( insieme di reali in virgola mobile ) Dichiarazione = per poter essere utilizzate le variabili vanno dichiarate ( cioè dire " utilizzerò una variabile nome di tipo tipo") e solitamente si trovano all’inizio del corpo del programma. sintassi = tipo e nome ( es. int x ) semantica = serve a dire al calcolatore "utilizzerò una variabile nome di tipo tipo quindi prepara un contenitore ( area di memoria ) per valori nome di tipo tipo " ) La dichiarazione di una variabile comporta un’allocazione in memoria centrale di uno spazio , il tipo di variabile determina quanto spazio viene allocato in memoria per la variabile stessa. Assegnazione = dopo aver dichiarato una variabile si può memorizzare un valore al suo interno, infatti l’assegnazione di un valore alla variabile ha come effetto quello di memorizzarlo Es. sintassi -> nome = espressione X = 5 inizializzazione = prima assegnazione di un valore ad una variabile dichiarazione con inizializzazione = dichiara e inizializza un valore nella stessa operazione Es. sintassi -> tipo nome = espressione int x = 5 accesso = operazione che permette di accedere al valore memorizzato nella variabile. Se il nome della variabile compare a sinistra dell’uguale ( operatore di assegnazione ) la variabile viene utilizzata per memorizzare il contenuto, se invece comprare a destra la variabile viene usata per accedere al valore che memorizza SCANF = permette di leggere i valori immessi dall’utente, analogamente ad un’istruzione di assegnazione una lettura ha come effetto quello di memorizzare un valore in una variabile sintassi : scanf ( %formato , &variabile) %d = num interi %formato = indica il formato dei valori da leggere &variabile = indica l’indirizzo di memoria al quale si trova la variabile semantica = il programma è in attesa che un utente inserisca un valore nel formato indicato. Quando l’utente lo introduce, tale valore viene memorizzato nella variabile il cui indirizzo è &variabile Power point 5 tipo = è costituito da un insieme di valori detto dominio e un insieme di operazioni che possono essere applicate ad elementi di tale dominio. Es. tipo: int il suo dominio è l’insieme dei numeri interi dell’intervallo [ -2^31 , 2^31 -1 ] nell’intervallo ci sono 2^32 num distinti Regola : quanti num posso rappresentare con 1 bit? (2) e con 3 bit? (8) In generale con x bit posso rappresentare 2^x numeri interi e distinti operatori = le operazioni sono denotate da simboli detti operatori. + è l’operatore che rappresenta la somma tra elementi di tipo int ***** è l’operatore " " il prodotto " " letterali = elementi del linguaggio C che rappresentano specifici valori espressione = è una combinazione di letterali , variabili , operatori che fornisce un valore di un certo tipo ( è una porzione contigua di codice caratterizzata da un tipo ). Es. int x = 3*y oppure y,3 ; x ; 3*y sono espressioni

  • ad una espressione è associato un tipo che viene determinato in fase di compilazione e può essere ricavato guardando il codice
  • ad una espressione è associato un valore che viene determinato in fase di esecuzione es. di espressione il cui valore non può essere determinato guardando il codice : una variabile il cui valore viene letto da tastiera

i caratteri numerici, alfabetici minuscoli e maiuscoli hanno codici in ordine crescente. L’aritmetica dei caratteri ha le stesse operazioni dell’aritmetica sui numeri interi. Power point 6 : tipo : float rappresentazione approssimata dei numeri reali ( a differenza degli interi, non è possibile rappresentare tutti i reali in un intervallo essendo alcuni troppo piccoli ). rappresentazione in virgola mobile = questa rappresentazione deriva dalla rappresentazione scientifica in cui un num è espresso come M = mantissa

  • La parte intera deve avere una sola cifra maggiore di 0
  • La parte intera può essere 0 ma la cifra più significato a della parte decimale deve essere maggiore di 0 Es. il num 123.45 può essere rappresentato come 1.2345 x 10^ Per un valore di tipo float in memoria :
  • S rappresenta il segno e vale 0 o 1 in base al num se negativo o positivo
  • M rappresenta la mantissa espressa in base 2
  • E l’esponente espresso in base 2 a cui viene sottratto 127 per non cambiare il segno è possibile scrivere solo segno e mantissa ( -3.5 ) oppure si può scrivere segno, mantissa, E ed esponente ( -357E2 = -357*10^2 ) formati :
  • f% rappresenta il num in formato decimale
  • e% rappresenta il num in notazione scientifica
  • g% rappresenta il num con la rappresentazione più breve tra f ed e gli operatori sono analoghi a quelli del tipo int con due differenze:
  1. 7.0/2.0 vale 3.5 e non 3 come 7/
  2. Se un operando è di tipo float e l’altro di tipo int l’operatore è per float
  3. Vale la divisione per zero
  4. Le operazioni possono portare ad una perdita di precisione Conversione = conversione del tipo in un valore e può essere implicita o esplicita Conversioni implicite = sono trasformazioni del tipo di un valore effettuate automaticamente dal compilatore. Funzionano così le conversioni da un tipo "meno capiente" ad uno "più compiente" ( es. char-> int int-> double ) Conversione implicita per operazione :
  • è un’ assegnazione e viene considerato prima il lato destro
  • Somma e numero sono due variabili di tipo int quindi / rappresenta " divisione tra due interi "
  • Il risultato della divisione è di tipo int, tale risultato però deve essere memorizzato dentro ad una variabile di tipo float perciò viene effettuata una conversione implicita Conversioni esplicite = sono trasformazioni del tipo di un valore che vengono richieste esplicitamente nel programma. ( si chiamano anche operazioni di cast ). Funzionano così le conversioni da un tipo "più capiente" ad uno "meno capiente" e

possono comportare una perdita di precisione. ( es. float -> int ) conversione esplicita per operazione :

  • è un’ assegnazione e viene considerato prima il lato destro
  • Somma è una variabile di tipo int perciò viene fatta una conversione esplicita al tipo float
  • L’operatore / ha un valore di tipo float e uno di tipo int perciò viene eseguita la divisione tra reali effettuando una conversione implicita del secondo valore
  • Il risultato della divisione tra reali è di tipo float Power point 7 : algebra di boole = è un tipo astratto di algebra formalizzato da Boole dominio : { true , false } operatori logici / booleani : -! operatore NOT di negazione -> se A vale false allora !A vale true; se A vale true allora !A vale false [ !(!false) = false ]
  • && operatore AND di congiunzione -> A && B vale true se entrambi sono true sono vale false [ true && !false = true ]
  • || operatore OR di disgiunzione -> A || B vale true se almeno uno dei due vale true altrimenti vale false [ false || !false = true ] nel linguaggio C l’algebra di boole viene utilizzata nelle istruzioni di controllo in questo modo :
  • FALSE viene rappresentato dallo 0
  • TRUE viene rappresentato da 1 ( o qualsiasi numero diverso da 0 )
  • gli operatori! , && , || sono definiti nel linguaggio operatori relazionali / binari = si applicano ad una coppia di valori dello stesso tipo per verificare l’esistenza di una certa relazione e poi forniscono il risultato con un valore boleano ( 0 e 1 ) Espressioni booleane = sono espressioni che hanno un valore vero o falso ( in C 1 o 0 ) quando vengono valutate e sono ( predicati o condizioni ) composte da :
  • 1 e 0 e variabili boleane
  • Operatori boleani (! , && e || )
  • Funzioni boleane che restituiscono un valore booleano ( es operatori relazionali ) Precedenze :
  • NOT!
  • relazioni di confronto ( < , > <= … )
  • relazioni di uguaglianza ( == , != )

esistono due modi per rappresentare i numeri interi relativi : modulo e segno , complemento a due modulo e segno : la cifra più significativa rappresenta il segno le altre il modulo

  • codifica = la cifra più significativa è pari a 1 se è x è negativo , è pari a 0 se x è positivo
  • decodifica = il segno è + se la cifra significativa è 0 , è - se la cifra significativa è 1 Questa rappresentazione ha degli svantaggi in quanto lo zero ha doppia rappresentazione (000…000 e 100…000) ; possono essere rappresentati solo i numeri nell’intervallo [ -2^n-1 +1 , 2^n-1 -1 ] e non è circolare ( sommando 1 all’intero più grande non ottieni l’intero più piccolo ) complemento a due :
  • codifica = se x è positivo allora la codifica corrisponde a quella dei numeri naturali, se x è negativo allora la codifica coincide con la codifica del numero naturale 2^n + x dove n è il numero dei bit metodo alternativo della codifica dei num negativi :
  1. si rappresenta il modulo
  2. si complementano le cifre ( 1 al posto di 0 e viceversa )
  3. si somma 1
  • decodifica = se la cifra più significativa è 0 allora stessa decodifica dei numeri naturali, se la cifra più significativa è 1 allora stessa decodifica dei numeri naturali e poi si sottrae 2^n metodo alternativo della decodifica dei num negativi :
  1. si complementano i bit
  2. si somma 1
  3. stessa decodifica dei numeri naturali
  4. si cambia segno questa rappresentazione ha dei vantaggi in quanto lo zero viene rappresentato in un unico modo, possono essere rappresentati i numeri nell’intervallo [ -2^n-1 , 2^n-1 -1 ], le somme e le sottrazioni vengono svolte come per i numeri naturali e infine è circolare Power point 9: la rappresentazione floating point ( virgola mobile ) del numero N in base 2 è es. 1. 101 x 2^ 3 mantissa esponente rappresentazione IEEE 754 = i numeri floating point sono rappresentati con sequenze di 32 bit
  • bit più significativo = segno della mantissa ( 0 = + ; 1 = - )
  • 8 bit = esponente ( sommato a 127 e trasformato in numero binario )
  • 23 bit = mantissa ( in caso non dovessero esserci 23 bit aggiungere 0 necessari) Conversione numeri con parte decimale :
  • Per convertire la parte decimale bisogna dividere per 0,5 ( cifra + significativa dall’alto verso il basso )
  • Se un numero ha sia parte intera che decimale allora la parte intera verrà convertita con la codifica e la parte decimale come sopra Alcuni numeri possono essere periodici, in questo caso ci si ferma al numero di bit necessari Power point 10 : esecuzione di un algoritmo = è un’attività che richiede di saper svolgere un certo tipo di operazioni progettazione di un algoritmo = è un’attività più creativa per la quale non c’è una procedura precisa i problemi che possono essere risolti da un algoritmo sono quelli con una formalizzazione matematica ( es. trova il massimo comunque divisore … ) problemi parametrici = sono problemi in cui alcuni parametri sono incogniti. Un algoritmo che risolve un problema lo deve risolvere per qualsiasi valore dei parametri ( cioè per ogni insieme di dati iniziali , per ogni possibile input e per ogni possibile istanza del problema ) pre-condizioni = un algoritmo per risolvere un problema deve funzionare solo se i dati di ingresso soddisfano certe proprietà dette pre-condizioni post-condizioni = un algoritmo deve fornire poi dei dati in uscita ( output ) che rappresentano la soluzione dell’istanza. Un algoritmo, però, per risolvere un problema a cui sono stati forniti dei dati di ingesso che soddisfano le pre-condizioni deve fornire dei dati in uscita che forniscano delle proprietà dette post-condizioni proprietà di un algoritmo :
  • correttezza = per ogni insieme di dati di ingresso che soddisfano le pre-condizioni l‘algoritmo fornirà un insieme di dati di uscita che soddisfano le post-condizioni
  • finitezza = per ogni insieme di dati di ingresso che soddisfano le pre-condizioni l’algoritmo deve eseguire un numero finito di operazioni e terminare
  • non ambiguità = ogni istruzione dell’algoritmo deve poter essere interpretata in modo univoco
  • eseguibilità = ogni istruzione dell’algoritmo deve poter essere eseguita in un tempo finito e con una memoria finita
  • efficienza = un algoritmo diventa più efficiente se sono sempre minori le risorse di calcolo ( tempo e memoria ) di cui necessità per essere eseguito. Per capire l’efficienza temporale di un algoritmo si considerano il numero di operazioni elementari ( operazioni aritmetiche che possono essere svolte in tempo costante ) e la dimensione dei dati ( es. un intero N )
  • tempo = il tempo di esecuzione di un programma dipende dalla velocità del calcolatore, dalla dimensione dei dati di input e dal numero di operazioni che il programma deve eseguire. esistono problemi : - indecidibili -> per i quali non esiste un algoritmo risolutivo
    • intrattabili -> prob. decidibili per i quali ogni alg. risolutivo richiede una quantità di risorse insostenibili flusso di esecuzione di un algoritmo : sequenza di istruzioni ( sequenza di passi ) che vengono eseguite quando un algoritmo viene applicato per risolvere un’ istanza del problema. Uno stesso passo può essere eseguito più volte infatti l’ordine in cui queste istruzioni vengono eseguite può essere controllato istruzioni di controllo = sono istruzioni che permettono di controllare il flusso di esecuzione. Solitamente le istruzioni vengono eseguite una dopo l’altra nell’ordine in cui compaiono un algoritmo viene controllato tramite dei salti condizionati o incondizionati ( es. vai all’istruzione x ), però, è sempre meglio non saltare perché i programmi che utilizzano istruzioni di salto sono contorti e difficili da modificare o correggere se deve essere fatto da un programmatore diverso da quello che ha scritto il programma. Programmazione strutturata = un programma si dice strutturato se utilizza solo le seguenti istruzioni di controllo : blocco, istruzione condizionale e istruzione ripetitiva.
  • blocco = permette di eseguire una sequenza di istruzioni
  • istruzione condizionale = permette di stabilire quale operazione deve essere eseguita in base al soddisfacimento di una condizione ( istruzione di selezione )
  • istruzione ripetitiva = permette di ripetere un’istruzione finché viene soddisfatta una condizione ( istr. di controllo iterativo )

lo scopo dell’ accumulatore è di memorizzare il valore da calcolare ma tale scopo viene realizzato solo dopo che sono stati usati tutti gli elementi della sequenza. Power point 12 : problemi di conteggio : problemi in cui bisogna contare il numero di elementi in un insieme di valori che soddisfano una determinata proprietà il suo algoritmo :

  1. utilizzo una variabile di conteggio
  2. inizializzo la variabile a 0
  3. vengono utilizzati tutti i valori della sequenza, se il valore soddisfa la proprietà la variabile verrà incrementata di 1 sennò si passa al valore successivo della sequenza finché non finiscono. Il valore finale della variabile di conteggio rappresenterà quanti valori soddisfano la condizione. problemi di verifica esistenziale : problemi in cui bisogna verificare l’esistenza di almeno un valore dell’insieme di valori che soddisfi una determinata proprietà il suo algoritmo :
  4. uso una variabile boleana di esistenza
  5. inizializzo la variabile a false
  6. utilizzo tutti i valori della sequenza finché non sarà finita e finché la variabile di esistenza ha valore false, se un valore dovesse soddisfare la proprietà la variabile assumerà il valore di true problemi di verifica universale: problemi in cui bisogna verificare che ogni elemento dell’insieme dei valori rispetti una determinata proprietà il suo algoritmo:
  7. si usa una variabile boleana di universalità
  8. inizializzo la variabile a true
  9. utilizzo tutti i valori dell’insieme dei valori finché la variabile ha valore true, se dovesse esserci un elemento che non soddisfa la proprietà la variabile assumerà il valore false problemi di massimo/minimo: problemi in cui bisogna trovare l’elemento massimo/minimo in una sequenza di elementi rispetto a qualche relazione d’ordine il suo algoritmo :
  10. utilizzo una variabile per il minimo ( o massimo ) tra la sequenza degli elementi
  11. inizializzo la variabile al primo valore della sequenza
  12. utilizzo tutti gli elementi della sequenza finché non sarà finita, se dovesse esserci un valore più piccolo del minimo ( già memorizzato nella variabile ) la variabile modificherà il proprio valore

Power point 13: istruzione condizionale : if-else sintassi —>

  • predicato rappresenta una condizione logica (espr. boleana che in C può valere 0 o 1) detta condizione dell’istruzione if-else
  • istruzione if è un’istruzione detta parte if dell’istruzione if-else
  • istruzione else è un’istruzione detta parte else dell’istruzione if-else semantica —> se predicato vale 1 esegui istruzione if sennò esegui istruzione else annidamento = inserimento di un’istruzione di controllo all’interno di un’altra istruzione, è possibile solo grazie al fatto che le istruzioni abbiano un punto di ingresso e un punto di uscita che rendono le istruzioni come singole istruzioni. Annidare delle istruzioni if-else all’interno della parte else è normale, è più scomodo e porta a vari errori annidare delle istruzioni if-else nella parte if cascata di istruzioni if-else = è una composizione di istruzioni if-else, se non si verifica un predicato si passa al predicato successivo e così via fino a quando si verificherà un determinato predicato e si andrà al punto di uscita regola : una parte else appartiene all’ultimo if ( l’indentazione , cioè lo spazio vuoto nella parte iniziale , non ha effetto sul programma ), è possibile modificare questo comportamento con l’utilizzo delle parentesi graffe che sono necessarie per le istruzioni di blocco regole generali:
  • Nelle istruzioni if-else dopo il predicato if non va messo ; sennò è come se l’istruzione fosse vuota
  • È possibile dichiarare variabili all’interno dei blocchi ma in tal caso possono essere utilizzate solo all’interno dei blocchi stessi
  • I blocchi , le istruzioni condizionali e quelle ripetitive sono delle istruzioni strutturate a differenza di printf che è un’istruzione semplice Power point 14: istruzione ripetitiva: while sintassi —>
  • predicato rappresenta una condizione logica ( espr. boleana che può valere 0 o 1 in C) è detta condizione dell’istr. while
  • istruzione while è un’istruzione detta corpo dell’istruzione while semantica —> consiste nell’eseguire più volte e in ordine i seguenti due passi: verifica se il predicato vale (ad es.) 1 ed esegui l’istruzione while ( se non vale 1 allora l’istruzione while termina) istruzione^ oredico.io else se

un’istruzione do-while può essere espressa per mezzo di un’istruzione while e viceversa gli errori più comuni sono quelli di:

  • progettare un’istruzione ripetitiva in cui la condizione non smette mai di essere verificate ( ciclo infinito )
  • il corpo di un’istruzione ripetitiva viene eseguito una volta in più o una volta in meno rispetto alle intenzioni. Generalmente è dovuto a un errore nell’inizializzazione o nelle condizioni (errori di uno)