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


Introduzione all'informatica: Algoritmi, Architettura di Von Neumann e Sistemi Operativi -, Prove d'esame di Fondamenti di informatica

fondamenti di informatica domande aperte

Tipologia: Prove d'esame

2022/2023

Caricato il 23/05/2024

giuseppe-hhf
giuseppe-hhf 🇮🇹

3 documenti

1 / 50

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
LEZIONE 2
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
• atomicità – i passi che lo costituiscono devono essere elementari;
• non ambiguità – i passi devono essere univoci;
• finitezza – il numero di passi deve essere finito;
• terminazione – l’esecuzione deve terminare in tempo finito;
• univocità del risultato – dagli stessi dati in ingresso si devono ottenere gli stessi risultati
LEZIONE 3
Descrivere cosa contiene il grafico tipico della legge di Moore
E un grafico in cui sull’asse delle x ci sono gli anni e sull’asse delle y, che però e su scala logaritmica, ci sono il numero dei
transistor integrati nel processore. Su questo grafico Moore osservo che il numero dei transistor, raddoppia ogni anno. Negli
ultimi anni, poichè arrivati ai limiti fisici di integrazione dei componenti, tale legge non è piu rispettata.
Si descriva la legge di Moore e le sue implicazioni
La legge di Moore dice che il numero dei transistor, raddoppia ogni anno. Si puo disegnare un grafico n cui sull’asse delle x ci
sono gli anni e sull’asse delle y, che però e su scala logaritmica, ci sono il numero dei transistor integrati nel processore. Negli
ultimi anni, poichè arrivati ai limiti fisici di integrazione dei componenti, tale legge non è piu rispettata.
LEZIONE 4
Scrivere la definizione dell’architettura di Von Neumann
Il modello di macchina di Von Neumann è un modello semplificato dei calcolatori moderni.
I componenti principali dell’architettura di Von Neumann sono:
• la CPU
• la Memoria
• il Bus di sistema
• le Interfacce alle varie periferiche di I/O (Input/Output)
Descrivere il funzionamento della ALU
La ALU (Arithmetic Logic Unit) è un sottocomponente della CPU, che esegue le operazioni di calcolo numerico (come
addizione, sottrazione, moltiplicazione, divisione) e operazioni logiche (AND;OR;NOT) su dati binari. Una volta fatta
l’operazione il risultato verrà poi e salvato nel registro di uscita
Descrivere le fasi del ciclo fetch-decode-execute
Nell’eseguire i programmi, la cpu si avvale nel ripetere il ciclo fetch-decode-execute.
Fetch(Recupero): il processore legge dalla memoria la prossima istruzione da eseguire. Il program Counter (PC) contiene
l’indirizzo della prossima istruzione da eseguire. L’istruzione viene caricata nell’Instructor Register (IR) che è un registro
interno della CPU che memorizza temporaneamente l’istruzione.
Decode (Decodifica):a questo punto il processore decodifica l’istruzione e determina quale operazione deve essere eseguita.
Execute (Esecuzione): infine processore passa alla fase di esecuzione ed esegue l’istruzione
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32

Anteprima parziale del testo

Scarica Introduzione all'informatica: Algoritmi, Architettura di Von Neumann e Sistemi Operativi - e più Prove d'esame in PDF di Fondamenti di informatica solo su Docsity!

LEZIONE 2

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

  • atomicità – i passi che lo costituiscono devono essere elementari;
  • non ambiguità – i passi devono essere univoci;
  • finitezza – il numero di passi deve essere finito;
  • terminazione – l’esecuzione deve terminare in tempo finito;
  • univocità del risultato – dagli stessi dati in ingresso si devono ottenere gli stessi risultati LEZIONE 3 Descrivere cosa contiene il grafico tipico della legge di Moore E un grafico in cui sull’asse delle x ci sono gli anni e sull’asse delle y, che però e su scala logaritmica, ci sono il numero dei transistor integrati nel processore. Su questo grafico Moore osservo che il numero dei transistor, raddoppia ogni anno. Negli ultimi anni, poichè arrivati ai limiti fisici di integrazione dei componenti, tale legge non è piu rispettata. Si descriva la legge di Moore e le sue implicazioni La legge di Moore dice che il numero dei transistor, raddoppia ogni anno. Si puo disegnare un grafico n cui sull’asse delle x ci sono gli anni e sull’asse delle y, che però e su scala logaritmica, ci sono il numero dei transistor integrati nel processore. Negli ultimi anni, poichè arrivati ai limiti fisici di integrazione dei componenti, tale legge non è piu rispettata. LEZIONE 4 Scrivere la definizione dell’architettura di Von Neumann Il modello di macchina di Von Neumann è un modello semplificato dei calcolatori moderni. I componenti principali dell’architettura di Von Neumann sono:
    • la CPU
    • la Memoria
    • il Bus di sistema
  • le Interfacce alle varie periferiche di I/O (Input/Output) Descrivere il funzionamento della ALU La ALU (Arithmetic Logic Unit) è un sottocomponente della CPU, che esegue le operazioni di calcolo numerico (come addizione, sottrazione, moltiplicazione, divisione) e operazioni logiche (AND;OR;NOT) su dati binari. Una volta fatta l’operazione il risultato verrà poi e salvato nel registro di uscita Descrivere le fasi del ciclo fetch-decode-execute Nell’eseguire i programmi, la cpu si avvale nel ripetere il ciclo fetch-decode-execute. Fetch(Recupero): il processore legge dalla memoria la prossima istruzione da eseguire. Il program Counter (PC) contiene l’indirizzo della prossima istruzione da eseguire. L’istruzione viene caricata nell’Instructor Register (IR) che è un registro interno della CPU che memorizza temporaneamente l’istruzione. Decode (Decodifica):a questo punto il processore decodifica l’istruzione e determina quale operazione deve essere eseguita. Execute (Esecuzione): infine processore passa alla fase di esecuzione ed esegue l’istruzione

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

er informare il compilatore del

tipo di dato che la variabile

conterrà e

er informare il compilatore del

tipo di dato che la variabile

conterrà e

per informare il compilatore

del tipo di dato che la variabile

conterrà

per informare il compilatore

del tipo di dato che la variabile

conterrà

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 (==)

10. Gli operatori booleani sono

utilizzati per effettuare

operazioni logiche su valori

booleani (true o false)

e sono i seguenti:

NOT: l'operatore NOT è unario

e ha la precedenza più alta, ha

la funzione di invertire il valore

di un'

espressione booleana. Ad

esempio, se x è true, !x sarà

false e viceversa.

AND: l'operatore AND ha la

precedenza successiva a NOT

ed è rappresentato dal simbolo

&&. Restituisce

true solo se entrambe le

espressioni booleane valutano

a true. Ad esempio, se x è true

e y è true,

x && y sarà true, altrimenti

sarà false.

OR: l'operatore OR ha la stessa

precedenza di AND ed è

rappresentato dal simbolo ||.

Restituisce true

se almeno una delle due

espressioni booleane valuta a

true. Ad esempio, se x è true o

y è true o entrambi,

x || y sarà true, altrimenti sarà

false.

Le precedenze degli operatori

booleani seguono l'ordine

AND: l'operatore AND ha la

precedenza successiva a NOT

ed è rappresentato dal simbolo

&&. Restituisce

true solo se entrambe le

espressioni booleane valutano

a true. Ad esempio, se x è true

e y è true,

x && y sarà true, altrimenti

sarà false.

OR: l'operatore OR ha la stessa

precedenza di AND ed è

rappresentato dal simbolo ||.

Restituisce true

se almeno una delle due

espressioni booleane valuta a

true. Ad esempio, se x è true o

y è true o entrambi,

x || y sarà true, altrimenti sarà

false.

Le precedenze degli operatori

booleani seguono l'ordine

NOT, AND, OR. Tuttavia, è

sempre consigliabile

utilizzare le parentesi per

specificare l'ordine di

valutazione delle espressioni.

10. Gli operatori booleani sono

utilizzati per effettuare

operazioni logiche su valori

booleani (true o false)

e sono i seguenti:

NOT: l'operatore NOT è unario

e ha la precedenza più alta, ha

la funzione di invertire il valore

di un'

true. Ad esempio, se x è true o

y è true o entrambi,

x || y sarà true, altrimenti sarà

false.

Le precedenze degli operatori

booleani seguono l'ordine

NOT, AND, OR. Tuttavia, è

sempre consigliabile

utilizzare le parentesi per

specificare l'ordine di

valutazione delle espressioni.

qui

10. Gli operatori booleani sono

utilizzati per effettuare

operazioni logiche su valori

booleani (true o false)

e sono i seguenti:

NOT: l'operatore NOT è unario

e ha la precedenza più alta, ha

la funzione di invertire il valore

di un'

espressione booleana. Ad

esempio, se x è true, !x sarà

false e viceversa.

AND: l'operatore AND ha la

precedenza successiva a NOT

ed è rappresentato dal simbolo

&&. Restituisce

true solo se entrambe le

espressioni booleane valutano

a true. Ad esempio, se x è true

e y è true,

x && y sarà true, altrimenti

sarà false.

OR: l'operatore OR ha la stessa

precedenza di AND ed è

rappresentato dal simbolo ||.

Restituisce true

espressione booleana. Ad

esempio, se x è true, !x sarà

false e viceversa.

AND: l'operatore AND ha la

precedenza successiva a NOT

ed è rappresentato dal simbolo

&&. Restituisce

true solo se entrambe le

espressioni booleane valutano

a true. Ad esempio, se x è true

e y è true,

x && y sarà true, altrimenti

sarà false.

OR: l'operatore OR ha la stessa

precedenza di AND ed è

rappresentato dal simbolo ||.

Restituisce true

se almeno una delle due

espressioni booleane valuta a

true. Ad esempio, se x è true o

y è true o entrambi,

x || y sarà true, altrimenti sarà

false.

Le precedenze degli operatori

booleani seguono l'ordine

NOT, AND, OR

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

  1. Espressioni di confronto di uguaglianza:
  • Esempio: x == y
  • Utilizzo in Java: Queste espressioni sono utilizzate per verificare se due valori sono uguali. Possono essere

public class DoubleNumbers {

public static void

main(String[] args) {

for (int i = 1; i <= 100; i+

System.out.print(i * 2

public class DoubleNumbers {

public static void

main(String[] args) {

for (int i = 1; i <= 100; i+

System.out.print(i * 2

public class DoubleNumbers {

public static void

main(String[] args) {

for (int i = 1; i <= 100; i+

System.out.print(i * 2

Public 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=");