Anteprima
Vedrai una selezione di 3 pagine su 9
Domande teoriche compiti precedenti Fondamenti di informatica Pag. 1 Domande teoriche compiti precedenti Fondamenti di informatica Pag. 2
Anteprima di 3 pagg. su 9.
Scarica il documento per vederlo tutto.
Domande teoriche compiti precedenti Fondamenti di informatica Pag. 6
1 su 9
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

La Visibilità di una variabile rappresenta la sezione di codice in cui il nome introdotto per quella variabile

può essere utilizzato per referenziarla.

Si illustrino, anche attraverso degli esempi, le tecniche di legame dei parametri per valore e per riferimento.

Il legame tra i parametri può avvenire per valore e per riferimento.

Nel caso del legame per valore il parametro attuale è un’espressione, al momento della chiamata viene

creata una variabile temporanea che viene inizializzata con il valore restituito dal corrispondente

parametro attuale. La funzione chiamata non ha accesso alla variabile della funzione chiamante perché non

vengono prodotti side effects sulle variabili, quindi si può passare come parametro attuale il valore

dell’indirizzo di una variabile. La funzione chiamata utilizza quindi quell’indirizzo attraverso l’operatore di

de-referenziazione * per modificare la variabile.

Nel caso, invece, del legame per riferimento il parametro attuale è un riferimento a variabile. Ogni

riferimento ad un parametro formale fatto dalla funzione chiamata colpisce direttamente la relativa

variabile identificata dal parametro attuale quindi la funzione chiamante e la funzione chiamata

condividono le variabili specificate come parametri attuali.

Si descriva cosa è una grammatica e si discutano le regole attraverso le quali essa definisce un linguaggio.

La grammatica definisce la sintassi e permette anche di definire in maniera non ambigua la semantica. In

particolare ogni linguaggio è definito da una grammatica solitamente rappresentata da una quadrupla: G =

V, N, S, P dove è il vocabolario, è un insieme i cui elementi sono detti categorie sintattiche, è un

elemento di e è l’insieme delle produzioni. Le regole attraverso cui la grammatica definisce un

: “un

linguaggio sono la derivazione diretta e indiretta e la definizione stessa di linguaggio linguaggio LG

⟨, , , ⟩ ∗

definito dalla grammatica = sul vocabolario è l’insieme degli elementi di che derivano

”.

dal simbolo iniziale attraverso le categorie sintattiche e le produzioni

Si descriva e si discuta il formato di rappresentazione dei numeri interi, con e senza segno, del linguaggio c.

I numeri interi vengono rappresentati mediante un numero di byte dipendenti dall’architettura del

processore, in particolare: unsigned int rappresenta gli interi senza segno e viene rappresentato su N bit di

memoria che variano a seconda dell’architettura del processore (tipicamente, 32 o 64 bit). Per = 32 bit si

−32

2 − 1

possono rappresentare gli interi compresi tra 0 e ; Int rappresenta gli interi con segno e viene

rappresentata su V bit tramite la rappresentazione «Complemento a 2» , in cui però il Most Significant Bit

ha peso negativo.

Si illustri cosa è una lista, si discutano le operazioni che possono essere eseguite su di essa, e se ne descriva

la rappresentazione in forma collegata con puntatori. Non è richiesta l'implementazione delle funzioni

elementari

Una lista è una successione finita di valori di un tipo. L’informazione che questo codifica consiste di due

componenti: il multi-insieme dei valori e la relazione di ordine tra i valori stessi. Una lista è qualificata dalle

operazioni che vi si possono eseguire all’interno: l’inserimento che aggiunge un nuovo valore alla lista, il

valore essere inserito in testa, in coda, o in una posizione intermedia determinata da un qualche criterio di

posizionamento; la cancellazione rimuove un elemento dalla lista; la visita applica un trattamento comune

a tutti gli elementi della lista; la ricerca determina se la lista contiene un elemento qualificato da una

condizione sul valore. Tipicamente restituisce vero/falso, ma può anche restituire l’indirizzo o la posizione

dell’elemento cercato; l’inizializzazione è un metodo che non corrisponde ad alcuna operazione, se non

quella di fare da costruttore che inizializza la particolare rappresentazione concreta della lista.

Una lista può inoltre essere rappresentata in forma sequenziale o quella collegata tramite puntatori. In

particolare di quest’ultima forma esistono due ulteriori varianti che si differenziano a seconda che

l'informazione sul successore sia codificata usando gli indici di un vettore o i puntatori a un insieme di

variabili. La rappresentazione collegata con arrays e indici memorizza i valori su un buffer e virtualizza la

relazione di sequenza dei valori. Nella struttura di lista si possono osservare informazioni sulla dimensione

dell'array, l'indice dell'elemento dell'array che contiene il primo valore della lista, l'indice di un elemento

libero dell'array a partire dal quale sono concatenati tutti gli elementi liberi dell'array.

Si descriva cosa si intende per array nel linguaggio c e si illustri come esso è dichiarato e referenziato.

Un array è un insieme di variabili dello stesso tipo che possono essere dichiarate collettivamente oppure

essere referenziate attraverso un nome collettivo e un indice numerico che le distingue tra loro. V , oltre

ad essere il nome della variabile array, rappresenta anche l'indirizzo di memoria a partire dal quale l'array è

memorizzato.

L’array è dichiarato: < > < > [< >] dichiara un array di un numero < > di entità del

tipo che sarebbe dichiarato da < > < > e associa all’array il nome che sarebbe associato all’entità

dichiarata da < > < >. Le singole variabili dell’array possono essere referenziate combinando il

nome con un indice (un numero intero non negativo), espresso tra parentesi quadre, che numera gli

elementi dell’array a partire da 0.

Si illustrino le istruzioni di iterazione e condizionali del linguaggio c.

Sono le istruzioni che permettono di rieseguire in maniera ripetitiva un corpo di istruzioni fino al verificarsi

di una certa condizione sui valori delle variabili del programma. Sono tre (equivalenti dal punto di vista

semantico):

· Ciclo FOR: esecuzione ripetitiva di un corpo di istruzioni sotto il controllo di una guardia costituita

da 3 espressioni: assegnamento, guardia, incremento. L’assegnamento viene eseguito una sola

volta, ad ogni iterazione viene testata l’espressione di guardia e, se la condizione è verificata, viene

eseguito il corpo, l’espressione incremento e si torna al punto di ingresso dell’iterazione. Se

restituisce falso, l’iterazione termina e si passa all’istruzione successiva.

· Ciclo WHILE: esecuzione ripetitiva di un corpo di istruzioni fintanto che un’espressione di guardia

restituisce un valore VERO. La guardia viene eseguita, poi se il valore è vero viene eseguito il corpo

e l’esecuzione ritorna all’ingresso della guardia; se è falso il controllo passa all’istruzione successiva.

· Ciclo DO – WHILE: esecuzione simile al ciclo WHILE, ma con la condizione di guardia in coda al

corpo delle istruzioni invece che in testa. Prima si esegue il corpo, poi se la guardia restituisce un

vero si torna ad eseguire il corpo, se restituisce un falso si passa all’istruzione successiva.

Istruzioni condizionali: permettono di decidere direzioni diverse nel flusso di esecuzione di un’istruzione

(corpo) del programma in base al valore restituito da un’espressione di controllo (guardia).

Sono: la Clausola IF: condiziona il corpo alla guardia (se il corpo restituisce un vero allora viene eseguita

l’istruzione, in caso contrario si passa all’istruzione successiva); la Clausola IF-ELSE: permette di avere due

corpi alternativi che vengono eseguiti a seconda che la guardia restituisca un vero o un falso.

Si discutano sintassi e semantica delle espressioni in linguaggio c.

Un linguaggio viene definito mediante la sintassi che determina e classifica cosa può apparire in

un’espressione legale del linguaggio e la semantica che definisce il significato di ogni classe di espressioni

legali. Parti della sintassi sono il vocabolario (insieme di simboli terminali che possono apparire in

un’espressione legale),l’universo linguistico di un vocabolario (insieme di tutte le possibili sequenze

) e il ∗ ⊆ ∗

finite di simboli in linguaggio (sottoinsieme di con ). Entrambe vengono definite dalla

grammatica.

Si discutano i componenti della CPU del processore MIPS R4000.

È formato da 5 blocchi funzionali fondamentali la Memoria che contiene una sequenza lineare di locazioni

di 1 byte che possono essere lette o scritte durante la computazione; il Program Counter (PC): registro a 32

bit che contiene l’indirizzo dell’istruzione corrente, il Banco dei registri: Permette la lettura contemporanea

di due registri e la scrittura di un terzo; il Control Unit (CU): riceve in ingresso un segnale di 6 bit che

codifica l’operazione da eseguire e Genera in uscita vari segnali di controllo che pilotano il funzionamento

dei componenti della CPU. L’Arithmetic Logic Unit (ALU): esegue le operazioni aritmetico-logiche. E da

alcuni componenti minori: addr: ingresso di indirizzamento, read_enable e write_enable: sono due segnali

di controllo di 1 bit ciascuno che controllano le operazioni di lettura e scrittura. Sommatore: ALU

semplificata che esegue la sola operazione di somma. Multiplexor: selettore di canale con 2 ingressi dati

(32 bit);1 uscita dati (32 bit);1 segnale di controllo. La porta AND ha due ingressi da 1 bit ciascuno e genera

una uscita di 1 bit che viene asserito se e solo se entrambi gli ingressi hanno il valore 1. Il Decoder associato

alla ALU genera il segnale di controllo che pilota l’operazione aritmetico- logico da eseguire. Il Modulo di

Estensione da 16 a 32 bit: estende la rappresentazione di un campo immediato da 16 a 32 bit, in modo da

renderlo compatibile con l’ingresso della ALU.

Si illustri cosa si intende per overflow in un'operazione di somma fra valori codificati come interi senza

segno (rappresentazione in forma posizionale) e in un'operazione di somma fra valori codificati come interi

con segno (rappresentazione in complemento a due). In entrambi i casi, si discutano le condizioni che lo

determinano e si fornisca un esempio.

La condizione di Overflow si verifica quando il risultato dell'operazione eccede la dinamica dei valori

rappresentabili. Secondo la rappresentazione in forma posizionale nel caso dell’operazione di somma fra

valori codificati come interi senza segno, si verifica overflow se e solo se è presente un bit di riporto nella

somma dei MSB (perché va oltre la cifra massima rappresentabile).

<
Dettagli
Publisher
A.A. 2023-2024
9 pagine
1 download
SSD Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher ade.appunti di informazioni apprese con la frequenza delle lezioni di Fondamenti di informatica e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli Studi di Firenze o del prof Bilotta Stefano.