- Soluzioni Tramite Algoritmi ‘Brute Force’, o per Ricerca Esaustiva
- Iterazioni: Invarianti di Ciclo
Esercizio:
Considerare la seguente funzione Python, dove E,B sono interi in input. Scrivere qual’è lo stato iniziale prima del while, individuare l’invariante del while, e dedurre quindi cosa calcola la funzione f, nell’istruzione return R.
[python]
def f(E,B):
# Siano E e B >= 0
R = 1
while (E > 0):
if (E % 2 == 1):
R = R * B
E = E – 1
else:
B = B * B
E = E / 2
return R
[/python]
Linguaggio C:
- Espressioni: pre e post incremento e decremento.
- if: problema dell’if pendente. espressione condizionale
- costrutto switch ..case.. esempio con getchar()
- for: scope (spazio di visibilità) della variabile di iterazione dichiarata nel for.
[cpp]
// Esempio:
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
int main(void)
{
int d;
int vocale = 0, spaces = 0, others = 0;
int righe = 0;
while ( (d = getchar()) != EOF)
switch (d)
{
case ‘a’: case ‘e’: case ‘i’:
case ‘o’: case ‘u’:
vocale++; break;
case ‘\n’:
righe++; break;
case ‘ ‘: case ‘\t’:
spaces++; break;
default:
others++;
}
printf("Il tuo file contiene "
"%d righe, %d vocali, %d spazi e %d consonanti\n",
righe, vocale, spaces, others);
return 0;
}
[/cpp]
Esercizio: Scrivere un programma C, che legge come nel programma sopra un programma Python e:
- Usando la funzione putchar(x), lo stampa sull’output. Provare quindi ad usare tale programma per copiare un file Python eseguendo:
>copia.exe < input.py >nuovo.py
- Scrivere una seconda versione che conta il numero di assegnamenti, il numero di righe, e nel ricopiare il file elimina tutti i commenti. (attenzione, cosa succede se il carattere # è dentro una stringa)