Le nostre soluzioni alle Olimpiadi di Informatica 2017 – Parte 2

Aleandro Prudenzano/ novembre 23, 2017/ +/ 0 comments

Eccoci qui alla seconda parte delle nostre soluzioni per le selezioni scolastiche delle olimpiadi di informatica 2017-2018.
Nella precedente parte ci siamo occupati degli esercizi a carattere logico/matematico, in questa daremo una soluzione ai quesiti di programmazione, buona lettura!

Esercizi di programmazione

Questi esercizi possono essere verificati molto facilmente utilizzando una tabella di traccia in cui scrivere i valori della variabili ad ogni loro aggiornamento ed il risultato delle espressioni condizionali.

Tuttavia per essere sicuri di dare la soluzione più vicina a quella vera possibile abbiamo testato i codici in esame. Cercheremo comunque di spiegare che ragionamento si sarebbe potuto fare per risolverli senza la necessità di usare un computer.

Esercizio 6

Questo codice rappresenta una funzione che si trova a stampare condizione 1 se il risultato dell’operazione modulo(2) dell’intero passato come parametro è 0, quindi se è pari.
Stampa condizione 2 se il numero passato è 7 e stampa condizione 3 se p NON è 7 (else if) ma p-5 risulta essere pari (qualsiasi numero dispari eccetto 7).

Tenendo a mente queste tre stampe a video riflettiamo sul quesito ed andiamo per esclusione.

Risposta: b


Esercizio 7

In questo esercizio il trabocchetto si trova nei vari cast impliciti tra i calcoli ed i tipi delle variabili in cui sono allocati.

Inizia dichiarando 4 variabili intere e due float, alle prime due assegna valori interi, alla terza intera assegna il prodotto tra due interi, che è esso stesso un int ed all’ultima viene assegnato ancora una volta una somma di prodotti di numeri interi, int anch’esso.

Ad una variabile di tipo float viene assegnato il risultato di un prodotto tra un intero ed una costante intera.
Tuttavia in questo caso si sta dividendo la variabile per un suo divisore rendendo il risultato intero che però verrà immagazzinato come fosse un float, quindi con 7 zeri dopo la virgola e con le caratteristiche di un float!

Il punto cruciale risulta essere nel calcolo del valore che poi verrà stampato: in un float si sta assegnando un prodotto tra una funzione ed un numero in virgola mobile.
La funzione tuttavia restituisce un valore in virgola quindi sostanzialmente è un prodotto tra valori dello stesso tipo immagazzinate in un contenitore dello stesso tipo anche lui, con il risultato di avere un valore senza nessun troncamento o arrotondamento.

Ora si va a stampare il risultato di quest’ultimo calcolo e se avete seguito le operazioni passo passo avrete capito che si tratta di un valore che ha con se varie cifre dopo la virgola, quindi escludiamo a e b, bastano pochi calcoli semplici semplici e si ottiene come risposta 21,numeri.

Risposta: c


Esercizio 8

Queste due funzioni così come stanno ci restituiscono il massimo comune divisore.
Ma il quesito ci richiede quale delle modifiche suggerite ci porterebbe ad ottenere il minimo comune multiplo, quindi ragioniamo per esclusione.

La a non può essere perché sostanzialmente non porterebbe nessun cambiamento alla funzione in se.
La c non può essere perché come per la a non porterebbe nessun cambiamento, anzi ci porterebbe ad avere un errore nel casi in cui a sia minore di b.
Stesso ragionamento al contrario per la d, quindi ci rimane solo la bma perché?

Se si va ad analizzare per bene il funzionamento della funzione myster si ha che essa ci restituisce il massimo comune divisori dei numeri che noi passiamo.
Quindi matematicamente parlando, se dividiamo il prodotto dei due numeri che ci interessano per il loro MCD, otteniamo il loro mcm!

Risposta: b


Esercizio 9

Per questo quesito basta farci una piccola tabella di traccia con tutte le variabili e si ottiene molto facilmente la soluzione, nessuna spiegazione lunga con cui tediarvi.

Risposta: a


Esercizio 10

Anche in questo caso si poteva andare di tabella di traccia ma vorrei farvi soffermare sulle condizioni composte.

La condizione composta all’interno del secondo for diventerebbe falsa (con la conseguente uscita dal ciclo) anche con un singolo caso che fa scattare l’assegnamento di 1divide e quindi ci esclude già la risposta b.

La risposta la si esclude alla prima lettura del codice e poi basta ragionare sul ciclo esterno per ottenere la risposta giusta.

Risposta: a


Esercizio 11

Ennesimo esercizio risolvibile con una piccola tabella di traccia, tuttavia bisognava fare attenzione all’utilizzo dell’indice i che nel caso del riempimento della matrice è usato come primo indice, nel caso della stampa a video, invece, come secondo!

Risposta: -3 -2 -1 0 1 2 3


Esercizio 12

Ennesima tabella di traccia anche per questo esercizio che si poteva risolvere anche a naso leggendo 16052014 come una data nel formato europeo gg/mm/aaaa.

Risposta: D = 16, M = 5, Y = 2014

Conclusioni

Ed anche questa seconda parte dedicata agli esercizi a carattere di programmazione è giunto al termine.
Continuate a seguirci per la terza parte in uscita a breve. Inoltre continuate a seguirci sulla pagina Facebook e non esitate a fare domande qualora non vi sia molto chiaro quanto scritto!

About Aleandro Prudenzano

17 anni passati tra scienza, computer, elettronica e serie tv. Ora provo a raccontare a voi un po' delle cose che ho imparato negli anni nell'attesa di impararne altre. Enjoy the culture!

Facci sapere cosa ne pensi con un commento!