










































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
fondamenti di informatica domande aperte
Tipologia: Prove d'esame
1 / 50
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!











































Scrivere la definizione di Algoritmo Un algoritmo è un procedimento che è in grado di risolvere un problema attraverso una sequenza finita di passi elementari. Tali passi, detti anche istruzioni, devono essere semplici, chiari e non ambigui. Il concetto di algoritmo è fondamentale nella teoria dell’informazione, in quanto un problema si dice calcolabile se e solo esiste un algoritmo che lo risolve. Descrivere le proprietà che devono essere verificate per un algoritmo
Una volta completata l’operazione, il processo torna alla fase di fetch per riprendere nuovamente il ciclo fino a quando non si incontra un’istruzione che interrompe il ciclo. LEZIONE 5 Descrivere il funzionamento di una Pila, le sue funzioni e un esempio. La Pila è una zona di memoria speciale in cui il calcolatore immette e preleva dati secondo delle regole stabilite. Una Pila è una struttura lineare di celle contigue in cui i dati vengono impilati uno sopra l’altro e vengono prelevati dalla cima. Quindi, l’ultimo ad entrare è il primo ad uscire, secondo la politica LIFO (Last In First Out). Push(Inserimento) è la funzione per aggiungere un nuovo elemento in cima alla pila. Pop(Rimozione) è la funzione utilizzata per rimuovere l’elemento superiore che è stato inserito per ultimo. Un esempio dell’utilizzo della pila potrebbe essere la gestione della storia dei comandi in un’applicazione, dove ogni nuovo comando inserito rappresenta un’operazione di push e l’annullamento delle operazioni avviene attraverso l’operazione pop. Descrivere a cosa servono e come si utilizzano le memorie gerarchiche. Servono a migliorare le prestazioni del sistema memorizzando dati in diverse strutture di memoria con diverse caratteristiche di accesso e velocità. I livelli più alti sono più veloci ,a più costosi, mentre i livelli inferiori hanno una capacità maggiore e un costo inferiore. Registro: sono i livelli più veloci, situati direttamente all’interno del processore. Sono accessibili dalla CPU e sono estremamente veloci ma hanno una capacità limitata e sono costosi. Cache: posizionate tra registri e memoria principale sono anch’esse veloci e di dimensioni moderate. Vengono memorizzati dati utilizzati frequentemente dalla CPU. Memoria principale (RAM): è una memoria più grande e più lenta rispetto alla cache, ma con capacità aumentata. La CPU accede alla RAM se i dati che cerca non sono presenti nella cache. Memorie di massa: qui troviamo hard disk (HDD), o Hard disk allo stato solido (SSD), le memorie più lente ma di capacità decisamente maggiore. Viene utilizzata per memorizzare dati permanenti. Nell’utilizzo pratico, il sistema operativo o la CPU gestiscono i livelli per ottimizzare le prestazioni del sistema. Descrivere le differenze tra una Pila e una Coda. Sono entrambe delle strutture lineari di celle contigue per organizzare e gestire dati, però, mentre nella Pila (Stack) si rispetta la politica LIFO (Last In First Out), cioè l’ultimo dato ad entrare è il primo ad uscire, nella Coda (queue) si rispetta la politica FIFO (First In First Out), il primo dato ad entrare è il primo ad uscire. LEZIONE 8 Descrivere in quali casi non è possibile eseguire due istruzioni in parallelo in presenza di architetture superscalari Le architetture superscalari sono progettate per eseguire più istruzioni contemporaneamente Tuttavia, ci sono situazioni in cui ciò non è possibile., ossia, quando il risultato di una istruzione deve essere usato dall’istruzione seguente (esempio, il risultato di una somma deve essere utilizzato per calcoli successivi), oppure se le due istruzioni richiedono l’accesso contemporaneamente alla stessa risorsa computazionale (esempio, stessa cache di memoria). Considerando un sistema Superscalare a due core, a cui arrivano da eseguire le due istruzioni seguenti: Mov ax, 0(salva il valore zero nel registro ax) Sub ax,1 (sottrai 1 dal valore registro ax e salvalo in ax) Descrivere tutti gli scenari che si possono verificare nel caso di esecuzione parallela e, per ognuno, il valore finale del registro ax In un sistema superscalare a due core, i due core possono eseguire le istruzioni in parallelo. Analizziamo i possibili scenari. 1: Se l’istruzione sub ax, 1 viene eseguita prima di mov ax, 0, il valore finale di ax sarà - 2: Se invece mov ax, 0 viene eseguita prima di sub ax,1, il valore finale di ax sarà 0. LEZIONE 9
il numero binario 100011, lo si deve considerare 0100011, il suo inverso sarà 1011100 a cui si sommerà 1. Il risultato finale della somma sarà: 1011101. Il primo bit ci dice che stiamo rappresentando un numero negativo. Si calcoli la somma fra i numeri binari 11001+0011 discutendo i passaggi. Si converta poi il risultato in base 10 Si mettono in colonna i numeri 11001+0011, come una normale addizione. Si applica poi queste proprietà: 0+0=0, 1+0=1, 0+1=1, 1+1=0 con riporto di 1. La somma così ottenuta è 11100. Per convertire in base 10 si procede cosi: si assegna ad ogni posizione un peso crescente da destra a sinistra, si moltiplica ciascuna cifra binaria per il suo peso corrispondente e alla fine sommare tutti i prodotti ottenuti.. (02^0)+(02^1)+(1+2^2)+(12^3)+(12^4)= 0+0+4+8+16= Dato il numero 35, rappresentato in base 10, illustrare i passaggi per la conversione in base 2. Una volta convertito nella sua rappresentazione binaria, trasformalo nella sua controparte negativa (ovvero –35) usando la rappresentazione in complemento a due. Bisogna dividere il numero decimale per due e registrare il resto della divisione. Si continua a dividere i quoziente fino a ottenere quoziente uguale a zero. Leggere i resti della divisione in ordine inverso per ottenere la rappresentazione binaria. 35:2=17 resto 1, 17:2=8 resto 1, 8:2=4 resto 0, 4:2=2 resto 0, 2:2=1 resto 0, 1:2=0 resto 1 Risultato 100011 Per portarlo in negativo, ossia –35, si invertono tutti i bit (quelli che sono 1 diventano 0 e viceversa) e poi si somma 1 al risultato. Si ricordi di rappresentare il numero binario con almeno un bit in più ossia 35 sarà: 0100011. Cosi facendo si avra che l’inverso è 1011100 a cui sommando 1 si avrà: 1011101. Il primo bit ci dice che stiamo rappresentando un numero negativo. Calcolare, illustrando tutti i passaggi, quanto vale in base 10 il numero binario 10110011. Per convertire in base 10 si procede cosi: si assegna ad ogni posizione un peso crescente da destra a sinistra, si moltiplica ciascuna cifra binaria per il suo peso corrispondente e alla fine sommare tutti i prodotti ottenuti.. (12^0)+(12^1)+(0+2^2)+(02^3)+(12^4)+(12^5)+(02^6)+(1*2^7)=1+2+0+0+16+32+0+128= LEZIONE 13 Descrivere il processo di compilazione di un programma Java Scritto un programma e salvato con estensione .java, il compilatore java converte questo file in bytecode java, che è un codice intermedio eseguibile dalla JVM (java virtual machine). Quindi la procedura completa è: scrittura del codice sorgente java utilizzando un di testo o un IDE.(file da salvare .java), utilizzare un compilatore per tradurlo in bytecode , il quale verifica anche la correttezza sintattica che genererà un file .class. e infine esecuzione del codice sulla JVM. Date le regole di produzione: A->B|topolino B->CB|pippo C->pluto Mostrare almeno tre esempi di frasi ben formate. Pippo pippo pluto Topolino Pippopluto LEZIONE 14 Descrivere i motivi per i quali è necessario dichiarare le variabili
In java le variabili vanno dichiarate per informare il compilatore il tipo di variabile che elabora, al fine anche di riservare un area di memoria sufficiente a memorizzare i valori del tipo scelto. Cosi facendo si minimizzano i possibili errori di programmazione Elencare i tipi primitivi di Java e il loro dominio byte Numeri interi a 8 bit, con segno da -128 a 127 short Numeri interi a 16 bit con segno da -32.768 a 32. int Numeri interi a 32 bit con segno da -2.147.483.648 a 2.147.483. long Numeri interi da 64 bit con segno da -9.223.372.036.854.775.808 a 9.223.372.036.854.775. float Numeri a virgola mobile a 32 bit con segno. La parte decimale può arrivare fino a 7 cifre double 8 bytes double Numeri a virgola mobile a 64-bit. La parte decimale può arrivare fino a 15 cifre boolean Memorizza valori vero (true) o falso (false) char Memorizza un singolo carattere Mettere in relazione fra di loro i domini dei tipi base interi di java dominio(long)(64 bit) > dominio(int)(32 bit) > dominio(short)(16 bit) > dominio(byte)(8 bit) LEZIONE 21 Descrivere le principali differenze tra le istruzioni if-else e switch-case ed illustrarle con degli esempi Sebbene siano dei costrutti sintattaci alternativi, if-else è usato in situazioni con poche condizioni da tenere conto, mentre è preferibile usare switch-case quando il numero dei casi da controllare diventa molto grande.
maggiore di (>) minore di (<) maggiore o uguale di (>=) minore o uguale di (<=) uguale a (==)
Gli operatori booleani sono: NOT: l’operatore NOT è unario e ha la precedenza più alta, ha la funzione di invertire un valore. Sex è true, diventa false e viceversa AND: l’operatore AND (&) ha precedenza successiva a NOT. Restituisce true se entrambe le espressioni booleane sono true, altrimenti sara false. OR: l’operatore OR(|), ha la stessa precedenza successiva a AND. Restituisce true se almeno una delle espressioni booleane è true, altrimenti sara false. LEZIONE 23 Descrivere l’operazione di assegnamento di una variabile L’operazione di assegnamento di una variabile consiste nel memorizzare un valore all’interno di una variabile, Per esempio, se abbiamo la variabile x e vogliamo assegnarle il valore 5, scriveremmo x=5.D’ora in poi, per richiamare il valore 5 basta digitar x Oppure in java, int numero = 10;, il valore 10 viene assegnato alla variabile sulla sinistra “numero”. È importante notare che l’assegnamento può essere eseguito tra variabili dello stesso tipo, altrimenti si verificheranni errori tipo. Descrivere l’operazione di inizializzazione di una variabile L’inizializzazione di una variabile è il processo di assegnare un valore iniziale alla variabile quando viene dichiarata. Questo valore puo essere specificato o puo essere il valore di default per il tipo di variabile. Ad esempio la variabile int di default è zero. Esemp: int intero = 10; stiamo dichiarando una variabile di tipo int chiamata “numero” e inizializzandola con il valore 10. LEZIONE 24 Descrivere che cosa sono e come funzionano gli operatori con associatività a sinistra e fare almeno 3 esempi di espressione che li utilizzano. Gli operatori +,-,,/ e % sono associativi a sinistra (left associative), per cui quando essi appaiono in un’espressione, essi vengono raggruppati nell’ordine in cui appaiono, da sinistra a destra. X=2+3-4=1 associazione a sinistra con operatori stessa classe X=(34)+5=17 associazione a sinistra con precedenza alle parentesi X=45-6+36=32 associazione a sinistra con precedenza alle moltiplicazioni Scrivere almeno tre esempi di espressioni logiche e descrivere come possono essere utilizzate nei programmi Java
x == yPublic class DoubleNumbers { Public static void main (String[] args) { For (int i=1; i<=100; i*){ System.out.print(i2+””); } } } LEZIONE 33 Scrivere il codice java del prodotto di una matrice per uno scalare. public class ProdottoMatriceScalare { public static void main(String[] args) { double[][] a = {{3,-2}, {5,1}}; double[][] m = new double[2][2]; double scalare = 2.7; for (int i=0; i<a.length; i++) { for (int j=0; j<a[0].length; j++) { m[i][j] = a[i][j] * scalare; } } // stampa a System.out.println("A=");