2010-11 – Fase scolastica – 16

Si considerino i 3 seguenti frammenti di programma, dove le variabili i, k e n sono di tipo Integer, le variabili finito e p sono di tipo Boolean, e n è inizializzata con un valore positivo maggiore di 1:

  1. p:=TRUE;
    finito:=FALSE;
    i:=2;
    k:=n;
    while((Not finito) And (i < k)) Do
        begin
           If(n Mod i = 0) Then
              Begin
                 Write('Il numero ', n, ' non e'' primo');
                 p:=FALSE;
                 finito:=TRUE
              End;
           i:=i+1
        end;
    If(p) Then
       Writeln('Il numero ', n, ' e'' primo');
  2. p:=TRUE;
    finito:=FALSE;
    i:=2;
    k:=n Div 2 + 1;
    While((Not finito) And (i < k)) Do
        Begin
           If(n Mod i = 0) Then
              Begin
                 Writeln('Il numero ', n, ' non e'' primo');
                 p:=FALSE;
                 finito:=TRUE
              End;
           i:=i+1
        End;
    If(p) Then
       Writeln('Il numero ', n, ' e'' primo');
  3. p:=TRUE;
    finito:=FALSE;
    i:=2;
    k:=Round(Sqrt(n))+1;
    While ((not finito) And (i < k)) Do
       Begin
          If(n Mod i = 0) Then
             Begin
                Writeln('Il numero ', n, ' non e'' primo');
                p:=FALSE;
                finito:=TRUE
             End;
          i:=i+1
       End;
    If(p) Then
       Writeln('Il numero ', n, ' e'' primo');

Quale delle seguenti affermazioni è vera?

  1. Se n è un numero primo i tre frammenti di programma lo indicano impiegando lo stesso tempo.
  2. Se n è un numero primo solo i frammenti di programma A) e B) lo indicano, mentre C) può non funzionare correttamente per particolari valori di n.
  3. Se n è un numero primo i tre frammenti di programma lo indicano ma impiegando tempi diversi.
  4. Se n è un numero primo solo il frammento di programma A) lo indica, mentre B) e C) possono non funzionare correttamente per particolari valori di n.