Monthly Archives: ottobre 2014

Lo struzzo Simone

Lo struzzo Simone si sposta solo nelle direzioni dei quattro assi cardinali (Nord, Sud, Est, Ovest).
Ogni suo passo misura 1 metro.
Dovete scrivere un programma che, data una sequenza di spostamenti di Simone, misuri quant’è la distanza fra il punto di partenza e il punto di arrivo.

Dati in input

Il file input.txt contiene la sequenza degli spostamenti.
Tale file è costituito da un’unica riga di testo, contenente una sequenza di S, N, E, O (che indicano gli spostamenti nelle direzioni Sud, Nord, Est, Ovest rispettivamente).
La sequenza è terminata da un *.
Ad esempio, il file di input NNESO* dice che Simone si sposta di due metri a Nord, poi di un metro verso Est, poi di un metro verso Sud, e quindi di un metro a Ovest.

Dati in output

Il programma, dopo aver letto il file di input, deve calcolare la distanza in metri fra il punto di partenza e il punto di arrivo, e scriverla su un file di nome output.txt.
Più precisamente, il file output.txt deve contenere un’unica riga.
Su questa riga dovrà comparire il numero intero corrispondente al quadrato della distanza.

Assunzioni

  1. Il file di input non contiene altri caratteri oltre a quelli precisati.
  2. Il numero complessivo di spostamenti contenuti nel file di input è minore o uguale a 100000.
  3. Importante! Il programma non deve scrivere nulla sul video, e non deve interagire con l’utente. Deve solo leggere il file di input e scrivere il file di output.
  4. L’esecuzione del programma deve terminare entro 5 secondi.

Esempi

input.txt output.txt
1 NNSEEESNOENNS* 13
2 NNESOS* 0
3 OSOS* 8

Numeri

Scrivete un programma che, dato un numero intero compreso tra 1 e 99 inclusi, scriva la parola italiana corrispondente.

Dati in input

Il file input.txt contiene un numero compreso tra 1 e 99 inclusi.
Il file è costituito da un’unica riga di testo, contenente una o due cifre da 0 a 9.

Dati in output

Il programma, dopo aver letto il file di input, deve fornire la parola corrispondente in italiano, e scriverla su un file di nome output.txt.
Più precisamente, il file output.txt deve contenere un’unica riga.
Su questa riga dovrà comparire la parola italiana corrispondente al numero.

Assunzioni

  1. Il file di input non contiene altri caratteri oltre a quelli precisati.
  2. Qualora lo stesso numero possa essere espresso in più forme, scegliere sempre la più breve (per esempio, “ventuno” e non “ventiuno” o “ventieuno”, “ottantuno” e non “ottantauno” o “ottantaeuno”).
    Nel caso precedente, scrivere “ventieuno” al posto di “ventuno” è considerato un errore.
    Allo stesso modo, uno spazio nella parola è considerato un errore.
  3. I caratteri accentati devono essere inseriti privi di accento (per esempio, “trentatre” e non “trentatrè” o “trentatre'”).
  4. Importante! Il programma non deve scrivere nulla sul video, e non deve interagire con l’utente.
    Deve solo leggere il file di input e scrivere il file di output.
  5. L’esecuzione del programma deve terminare entro 5 secondi.

Esempi

input.txt output.txt
1 12 dodici
2 23 ventitre
3 88 ottantotto

Utilizza le funzioni TP6 per le stringhe: Concat(), Delete()

Il cassiere Camillo

È venerdì, e il cassiere Camillo ha davanti a sé una lunga fila di clienti della sua banca venuti a ritirare contante per il weekend.
Per fare presto, Camillo decide di usare per ogni cliente il numero minimo possibile di banconote.
Sapreste scrivere un programma per evitargli il mal di testa, considerato che ha a disposizione banconote da 100.000, 10.000, 5.000, 2.000 e 1.000 in quantità illimitata e che l’entità di ogni prelievo è un multiplo di 1.000 lire?

Dati in input

Il file input.txt contiene l’importo del prelievo. Il file è costituito da un’unica riga di testo, contenente un numero (senza puntini o virgole che raggruppano le cifre a tre a tre!).

Dati in output

Il programma, dopo aver letto il file di input, deve calcolare il numero di banconote necessario per ognuno dei tagli disponibili, e scriverlo su un file di nome output.txt.
Più precisamente, il file output.txt deve contenere cinque righe, che corrispondono (in ordine, dalla prima all’ultima) alle banconote da

  • 100.000
  • 10.000
  • 5.000
  • 2.000
  • 1.000.

Ogni riga deve contenere un unico numero intero, che rappresenta il numero di banconote di quel taglio necessarie.

Assunzioni

  1. Il file di input non contiene altri caratteri oltre a quelli precisati.
  2. L’entità del prelievo è in ogni caso inferiore a 1 miliardo di lire.
  3. Importante!
    Il programma non deve scrivere nulla sul video, e non deve interagire con l’utente.
    Deve solo leggere il file di input e scrivere il file di output.
  4. L’esecuzione del programma deve terminare entro 5 secondi.

Esempi

input.txt output.txt
1 10000 0
1
0
0
0
2 152000 1
5
0
1
0
3 2001000 20
0
0
0
1

La biblioteca degli smemorati

La vostra biblioteca rionale ha qualche problema nello stabilire da quanto tempo gli utenti tengono i libri.
Dovete aiutarli scrivendo un programma che, prese in input due date del 2001, stabilisca quanti giorni intercorrono tra le due date.

Dati in input

Il file input.txt è formato da una riga che contiene la data iniziale e la data finale del prestito.
Più precisamente, la riga contiene quattro interi: la prima coppia specifica la data iniziale, la seconda la data finale.
Ogni data è formata da due numeri, e cioè il giorno del mese e il numero del mese.

Dati in output

Il programma, dopo aver letto il file di input, deve stabilire quanti giorni intercorrono tra le due date, e scrivere il numero di giorni su un file di nome output.txt.

Più precisamente, il file output.txt deve contenere un’unica riga.
Su questa riga dovrà comparire il numero intero corrispondente ai giorni che intercorrono tra le due date in input.

Assunzioni

  1. Il file di input non contiene altri caratteri oltre a quelli precisati.
  2. Trenta giorni a novembre, con april, giugno e settembre; di ventotto ce n’è uno: tutti gli altri ne han trentuno.
  3. La seconda data non precede mai la prima.
  4. Il numero di giorni considerato non comprende quello iniziale: quindi, ad esempio, tra il 2 gennaio e il 2 gennaio intercorrono 0 giorni, tra il 30 gennaio e il 2 febbraio intercorrono tre giorni, e così via.
  5. Importante! Il programma non deve scrivere nulla sul video, e non deve interagire con l’utente. Deve solo leggere il file di input e scrivere il file di output.
  6. L’esecuzione del programma deve terminare entro 5 secondi.

Esempi

input.txt output.txt
1 2 3 2 3 0
2 30 1 2 2 3
3 1 5 2 7 62

2003/04 – Fase scolastica – 05

Si consideri la seguente funzione:

Dire quale sarà il valore tornato dalle chiamate

  1. A(3, 2)
  2. A(4, 3)
  3. A(5, 4).

Soluzione

Nella versione Pascal c’è un errore di trascrizione del testo proposto: return n*A(n-1, m) invece di m*A(n-1, m).
Pertanto la risposta corretta è 3, 1, 5.

Considerando peraltro che qualcuno avrebbe potuto identificare l’errore (confrontando con la versione C, ad esempio), si possono ritenere valide sia la risposta 8, 81, 1024 che quella 3, 1, 5.

2003/04 – Fase scolastica – 04

Si consideri la seguente funzione conta() che prende in input un vettore di numeri di lunghezza n (assumendo che n sia compreso fra 2 e 100):

Quale delle seguenti affermazioni è vera?

Risposte:

  1. la funzione restituisce il numero di interi presenti nel vettore
  2. la funzione restituisce il massimo valore presente nel vettore
  3. la funzione restituisce la lunghezza della più lunga sottosequenza ordinata (in modo strettamente crescente) all’interno del vettore
  4. nessuna delle precedenti affermazioni è vera.

Soluzione

Soluzioni commentate

Se la sottosequenza più lunga non è l’ultima del vettore, allora la funzione ne restituisce la lunghezza (risposta c); se, invece, questa sottosequenza è l’ultima del vettore, il programma non ne conta correttamente la lunghezza (risposta d).

Si decide, dunque, di ritenere valida sia la risposta c che la d.

2003/04 – Fase scolastica – 03

Si considerino le due seguenti funzioni:

Quale delle seguenti affermazioni è vera?

Risposte:

  1. la funzione A calcola il fattoriale di un numero mentre la funzione B calcola la sommatoria di tutti i numeri compresi fra 1 ed n.
  2. sia la funzione A che la funzione B calcolano la sommatoria di tutti i numeri compresi fra 1 ed n, assumendo n maggiore o uguale a 1.
  3. la funzione A e la funzione B calcolano esattamente la stessa funzione.
  4. nessuna delle precedenti affermazioni è vera.

Soluzione: b.


Soluzione

Si tratta di riconoscere semplici algoritmi e formule di base; nel caso specifico della funzione A l’algoritmo ricorsivo che calcola la somma dei naturali da 1 ad n.
Nel caso della funzione B occorre riconoscere la formula di Gauss per lo stesso calcolo.

2004/05 – Fase scolastica – 03

Si consideri il seguente frammento di programma:

Dire che cosa calcola la funzione A() assumendo che venga invocata passando un intero positivo.


Soluzione: La somma di tutti di tutti i naturali tra 0 ed il parametro.


Soluzione

Si tratta di un esempio di funzioni mutualmente ricorsive.
In modo volutamente contorto viene calcolata la somma distinguendo tra n pari ed n dispari.

Ad esempio

A(3) = B(3) = 3+A(2) = 3+2+B(1) = 3+2+1+A(0) = 3+2+1+0 = 6.

2004/05 – Fase scolastica – 06

Si consideri la seguente funzione:

Essa serve a determinare l’indice in cui si trova un certo valore (rappresentato dal parametro bersaglio) in un vettore (rappresentato dal parametro valori).

La funzione, però, funziona sempre solo se vale un vincolo specifico rispetto ai dati in ingresso, quale?


Soluzione: Che il valore cercato esista effettivamente nel vettore di input.


Soluzione

Tratta da: Materiale didattico 2008

Si consideri che nel caso il valore non esista nel vettore, non essendoci un controllo sulla fine del vettore, avrà luogo una condizione di errore al termine della scansione del vettore stesso.

2005/06 – Fase scolastica – 02

Si consideri la seguente funzione:

Quale valore restituisce la funzione?

Risposte:

  1. 10
  2. 15
  3. 16
  4. Nessuna delle risposte precedenti.

Soluzione: b.


Soluzione

Il ciclo while viene eseguito 5 volte (contatore che va da 0 a 4 compreso).
La variabile contatore viene incrementata all’inizio: quindi nel ciclo stesso il contatore assumerà i valori da 1 a 5.
Nel ciclo si calcola chiaramente la sommatoria di tali valori, che vale 15.
La funzione restituisce quindi il valore 15.