Programmazione I
 
Compitino del 29 ottobre 1999
 
Svolgere l'esercizio numero 1 e, a scelta, alcuni tra gli altri esercizi.


1. Utilizzando esclusivamente variabili di tipo semplice, scrivere un programma che legga da input una sequenza di numeri interi positivi e negativi e scriva in output: a. quanti multipli di 5 contiene la sequenza; b. la differenza tra il piú grande e il piú piccolo numero pari presente nella sequenza.
Si supponga che l'inserimento di 0 indichi la fine della sequenza (0 non deve essere considerato come elemento della sequenza). Nel caso le quantità richieste non possano essere calcolate, il programma dovrà fornire un messaggio d'errore.


2. Siano x e y due variabili di tipo integer. Si esprimano in linguaggio Pascal, senza ricorrere all'operatore NOT, le seguenti condizioni:


3. Nei seguenti frammenti di programma vengono utilizzati dei cicli FOR. Si individuino i frammenti in cui il ciclo è utilizzato in maniera impropria, indicando il motivo. Si riscrivano invece i frammenti corretti sostituendo al posto del ciclo FOR un ciclo WHILE equivalente (le variabili y, i, x, n sono di tipo integer):


4. Si consideri il seguente frammento di programma, in cui i e x sono due variabili di tipo integer, mentre c è una variabile di tipo char:

FOR i := x DOWNTO -x DO
   FOR c := '0' TO '9' DO
      writeln(i,c)
a  Nell'ipotesi che il valore contenuto inizialmente in x non sia negativo, indicare, in funzione del contenuto di x, quante volte verrà eseguita l'istruzione writeln(i,c).
b  Riscrivere il frammento di codice sostituendo i due cicli FOR con cicli WHILE.


5. Si considerino i seguenti programmi. Per ciascuno di essi indicare se ci saranno errori in fase di compilazione (in tal caso indicare il motivo), se ci saranno errori in fase d'esecuzione (in tal caso indicare dei valori di ingresso che causino errore), se il programma può entrare in un ciclo infinito (in tal caso indicare dei valori d'ingresso per cui ciò avviene). Non si tenga conto degli errori d'esecuzione che si potrebbero avere durante la lettura dei dati.


6. Si considerino i seguenti frammenti di codice. Per ognuno di essi scrivere delle dichiarazioni di variabile, in modo che le istruzioni risultino corrette dal punto di vista della compatibilità dei tipi. Se ciò non fosse possibile spiegare il motivo.


7. Riscrivere il seguente frammento di programma utilizzando esclusivamente sequenza, selezione e cicli REPEAT.

WHILE (b <= a) OR (b <= 1000) DO
BEGIN
   a := a DIV 2;
   b := b * b
END



Giovanni Pighizzini
1999-11-02