FRAMES    NOFRAMES

Test finale del corso di FI-ODL

"per gli studenti di fondamenti di informatica I"

Questo test  serve  per  valutare il livello finale della preparazione raggiunta dai partecipanti al corso, al fine di analizzare se il corso e' stato utile. 

Buon lavoro.

________________________________________________

Compilate il questionario  in tutte le sue parti ed inviate 

Cognome :      

Nome :                

Num. di matricola :                 

E-mail  :           

Corso :           

Leggete attentamente le domande del test e date la/le vostra/e risposta/e .


1)  La fase di fetch di un ciclo istruzione consiste nel:


  Trasferire, il risultato dell'istruzione da eseguire, dalla memoria all'interno dell'unita' centrale

Trasferire, il codice dell'istruzione da eseguire, dall'interno dell'unita' centrale alla memoria

Trasferire, l'istruzione da eseguire, dalla memoria all'interno dell'unita' centrale

Trasferire, l'operando dell'istruzione da eseguire, dall'interno dell'unita' centrale alla memoria
 

2)  Supponiamo di avere un linguaggio macchina formato da 18 istruzioni. Le istruzioni sono al piu' con un solo operando. L'eventuale operando risiede in una delle 125 locazioni di memoria. Definire la dimensione dell'istruzione di tale linguaggio macchina:

   8  bit

 12 bit

 10 bit  

 14 bit  


3)  Quale stringa tra le seguenti e' riconosciuta dalla grammatica <radice>::= <numero><figlio>, <numero>::=1|2|3, <figlio>::=a|b|c:

  2c

  ab

  a1

 1a1b2c

4) Il seguente pseudocodice, supponendo n>0: 

int a, b,n, somma=0;   leggi a,b,n ;  if(a!=b) allora       

somma=(somma+1) * n *(n+1)/2);   write(somma);     

quale problema risolve ?

 stampa  il valore [n*(n+1)/2 +1] * [n*(n+1)/2] soltanto se a e' diverso da b.
 stampa la somma dei numeri naturali  da 1 fino ad n soltanto se a e' diverso da b.
non funziona in quanto nella dichiarazione alla variabile somma abbiamo assegnato il valore zero.
  stampa  il valore [n*(n+1)/2 +1]  soltanto se a e' diverso da b.


5) La rappresentazione degli interi relativi  X , nell' intervallo  

[-(b^n )/2, (b^n)/2  ) , tramite il residuo modulo b^n di X, e' detta:


Rappresentazione in base b degli interi

Rappresentazione Ascii dei numeri in base b

Rappresentazione in complemento alla base b

Rappresentazione in modulo di un un intero in base b


6) Dato un numero decimale ad n cifre, quante cifre binarie occorrono per rappresentarlo in base 2:


Parte intera superiore di  n * log2(10)   

Parte intera superiore di 10 * log2(n)

Parte intera inferiore di   n * log2(10) 

Parte intera inferiore di  10 * log2(n)

 

7) Quale problema risolve il seguente algoritmo , se r e' un numero intero maggiore di 1 ?

1) leggi r;   2) cont <--- 1;   3) cont = r * cont; 4) somma= 1;

5) se (cont <= r)

 { somma <--- somma + cont;  cont <---  cont * 2; }

6) stampa somma;

Stampa della somma di tutti i numeri da 1 fino ad r+1

Stampa del valore r+1

Stampa,  del valore 2r + 1

Stampa,  del valore  2r

8) Avendo il seguente programma in linguaggio C:

#include<stdio.h>
char funzione(int);
int main()
{
int t;
printf("inserire un numero intero\n");
scanf("%f",&t);
funzione(t);
return(0);
}
void funzione(int x)
{
int z;
z=2*x*x-3*x+2;
printf("%d" z);
}

quali istruzioni fra le sotto-elencate inserirebbe, nelle corrispondenti istruzioni, per farlo funzionare in modo corretto:

  scanf("%d",&t);

  int funzione(int x);

  void funzione(int);

  printf("%d",z); 

  nessuna e' gia corretto

  t=2*x*x-3*x+2;


9) La seguente funzione C :  

long int F (int k) {if(k==0) return 1; else return k*F(k-1); }   cosa utilizza  e  per calcolare che cosa ?

usa la ricorsione  per calcolare la somma dei numeri interi da 1 fino a k.

usa la ricerca binaria e  calcola la somma dei numeri interi da 1 fino a k.

usa la ricorsione  per calcolare il fattoriale di k.

usa la ricorsione  per calcolare il fattoriale di k, ma la funzione e' non corretta.

 

10) Come puo' essere usata una stringa in un programma in linguaggio C ?

Soltanto attraverso un array di caratteri monodimensionale

 Attraverso una matrice il cui tipo e' char

Attraverso un vettore di caratteri e con un puntatore a carattere

Attraverso un vettore di caratteri avente dimensione pari alla lunghezza della stringa.

 

11) Eseguite ognuna delle seguenti attivita':

a) Scrivete l'intestazione di una funzione chiamata  scambia  che  riceva  come parametri due puntatori ai numeri in virgola mobile n ed m e che non restituisca alcun valore.

b) Scrivete il prototipo per la funzione della parte a)

 

12) Determinate quali fra le seguenti affermazioni sono vere e quali sono false: (facoltativamente potete scrivere la motivazione della risposta)

a) Un array mono-dimensionale puo' immagazzinare valori di molti tipi differenti.

   motivazione :

b) La funzione, che usa l'algoritmo di ordinamento selection-sort, per ordinare un array di 5 elementi interi, utilizza nel caso peggiore 10 confronti.

   motivazione : 

c) Supponiamo di avere la seguente: dichiarazione int new_array[15]; e' corretto leggere da input gli elementi del vettore attraverso la seguente istruzione: 

for(i=0;i<15;i++) scanf("%i",&new_array[i]); con i definito di tipo intero.

   motivazione :

d) Avendo la seguente dichiarazione: int *new_array;e' corretto leggere da input gli elementi del vettore attraverso la seguente istruzione:

for(i=0;i<15;i++) scanf("%d",(new_array+i)); con i definito di tipo intero.

   motivazione :

 

13) Cosa fa il programma in linguaggio C seguente:

#include<stdio.h>

void distanza(float *x1,float *x2, float *y1, float *y2);
float x; 
float m; 
int main()
{
char car;
float a,b,c,d;
printf("\n__________________________");
printf("\ninserite il punto x1 : " );
scanf("\n%f",&a);
printf("\ninserite il punto x2 : ");
scanf("\n%f",&b);
printf("\ninserite il punto y1 : " );
scanf("\n%f",&c);
printf("\ninserite il punto y2 : ");
scanf("\n%f",&d);
distanza(&a,&b,&c,&d);
scanf("\n%c",&car);

return(0);
}

void distanza(float *x1, float *x2, float *y1, float *y2)
{
float y;
int cont=0;
char car;
m=(*y2-*y1)/(*x2-*x1);
x=-20;
while(x<=20)
{
 y=m*(x)+(*y1) -(*x1)*m;
 cont++;
 printf("\n%d) y= %.2f per x= %.2f ",cont,y,x);
  if(cont%18==0)
  {
  printf("\nInserite un carattere per la schermata successiva\n");
  scanf("\n%c",&car);
  }
 x=x+0.25;
 }
}

Traccia il grafico per punti, della funzione matematica passante per due punti nel piano cartesiano, utilizzando una funzione in cui i punti sono passati come puntatori a reali,al variare del valore della variabile indipendente x da -20 a +20 con incrementi di 0.25.

 Calcola il valore numerico, della funzione matematica passante per due punti nel piano cartesiano, utilizzando una funzione in cui i punti sono passati come variabili di tipo float, al variare del valore della variabile indipendente x da -20 a +20 con incrementi di 0.25.

Calcola il valore numerico, della funzione matematica passante per due punti nel piano cartesiano, utilizzando una funzione in cui i punti sono passati come puntatori a reali,al variare del valore della variabile indipendente x da -20 a +20 con incrementi di 0.25.

Traccia il grafico per punti, della funzione matematica passante per due punti nel piano cartesiano, utilizzando una funzione in cui i punti sono passati come variabili di tipo  float ,al variare del valore della variabile indipendente x da -20 a +20 con incrementi di 0.25.

 

14) Un vettore elementare di nome vector, di 10 caratteri, come si puo' dichiarare nel linguaggio C?

 

15) la seguente dichiarazione float *elem; cosa rappresenta?

 

16) (11001.1001) corrisponde a in base 10.

 

17) B1E7 esadecimale corrisponde a in base 8.

 

18) Cosa succede ai parametri attuali , di una funzione, dopo la cessata attivazione: nel passaggio per valore ed in quello per  indirizzo?

 

 19) Perche' nel passaggio di un array ad una funzione, quest'ultimo viene sempre passato per indirizzo nel linguaggio C?

 

20) Si assuma di rappresentare numeri in complemento a due. Se la rappresentazione di un numero mediante quattro bit e' 1101, la sua rappresentazione mediante sei bit e':

  001101

011101

101101

111101

 

 

 

                 
 
   Controlli la correttezza dei dati ed invii il modulo

   N.B.  Il modulo va  inviato una sola volta