• Non ci sono risultati.

A pena di annullamento immediato della prova: 1) Non è possibile consultare libri o appunti (in qualunque forma) né utilizzare calcolatrici, telefoni cellulari, ecc. 2) Non è consentito comunicare (con qualunque mezzo)

N/A
N/A
Protected

Academic year: 2021

Condividi "A pena di annullamento immediato della prova: 1) Non è possibile consultare libri o appunti (in qualunque forma) né utilizzare calcolatrici, telefoni cellulari, ecc. 2) Non è consentito comunicare (con qualunque mezzo)"

Copied!
2
0
0

Testo completo

(1)

Prova scritta del 22 gennaio 2018 di Fondamenti di Programmazione / Fondamenti di Informatica I Per studenti di Ing. Elettronica e Ing. Gestionale immatricolati negli anni accademici 2016-17 e precedenti DURATA DELLA PROVA: 2 ore

A pena di annullamento immediato della prova:

1) Non è possibile consultare libri o appunti (in qualunque forma) né utilizzare calcolatrici, telefoni cellulari, ecc.

2) Non è consentito comunicare (con qualunque mezzo) 3) Non è consentito uscire dall’aula

Lo studente è tenuto a scrivere, correggere, compilare ed eseguire su computer (a casa o in laboratorio) gli esercizi di programmazione prima della prova orale. Alla prova orale lo studente deve portare una memory pen USB contenente i sorgenti dei programmi corretti e le stampe dei relativi file.

Esercizio 1 (14 punti)

Una rete di distributori automatici comunica periodicamente alla sede del gestore, tramite un collegamento internet, il numero di esemplari ancora disponibili di ciascun prodotto onde pianificare il necessario approvvigionamento. I dati vengono tutti raccolti in un file di testo il cui formato può essere dedotto dal seguente esempio:

RIZZI_02 4: KITKAT 3, OREO 7, OROSAIWA 9, CHIPSCHILI 12.

MANTICA_01 3: OROSAIWA 19, CHIPSTER 0, OREO 5.

KOLBE_01 5: CHIPSCHILI 10, OROSAIWA 9, OREO 0, CHIPSTER 1, KITKAT 4.

Si osservi che:

• i nomi in codice dei distributori e i nomi dei prodotti sono sempre scritti con una sola parola;

• il codice del distributore è seguito dal numero dei prodotti in vendita in quel distributore e poi dal carattere due punti;

• ogni nome di prodotto è seguito dal numero di esemplari ancora disponibili e poi dal carattere virgola o punto.

Un secondo file contiene l’elenco dei prodotti venduti dal gestore e, per ciascuno, il numero di esemplari di cui ogni distributore che abbia in vendita tale prodotto deve essere rifornito (cioè il numero totale di esemplari che devono trovarsi nel distributore quando è appena stato riempito).

Un esempio di tale file è riportato nel riquadro a lato.

Scopo dell’esercizio è calcolare per ogni prodotto il numero di esemplari che devono essere caricati

sul furgone che, facendo il giro di tutti i distributori elencati nel primo file, li rifornisce in base ai dati presenti nel secondo file.

Per esempio, facendo riferimento agli esempi sopra riportati, il furgone dovrà caricare 33 esemplari di KITKAT: 17 per il distributore RIZZI_02 e 16 per il distributore KOLBE_01.

Non è noto il massimo numero di distributori. Il massimo numero di prodotti, invece, è 500. Si assuma che tutti i prodotti dei distributori siano presenti nell’elenco del secondo file.

Si scriva un programma in linguaggio C che riceva sulla riga di comando i nomi di due file come sopra descritto (il primo il file che riporta lo stato attuale dei distributori, il secondo il numero di esemplari richiesto) e stampi sul monitor l’elenco dei prodotti (in un ordine qualsiasi) con il numero totale di esemplari da caricare sul furgone e, per ciascuno, il numero presente nel secondo file come istruzione per l’addetto al rifornimento.

Relativamente agli esempi sopra riportati, il programma dovrà stampare:

KITKAT 33 (riempire il distributore fino a 20) OREO 33 (riempire il distributore fino a 15) OROSAIWA 38 (riempire il distributore fino a 25) CHIPSCHILI 8 (riempire il distributore fino a 15) CHIPSTER 63 (riempire il distributore fino a 32)

KITKAT 20 OREO 15 OROSAIWA 25 CHIPSCHILI 15 CHIPSTER 32

(2)

Esercizio 2 (16 punti) State lavorando con un drone il cui volo può

essere programmato mediante i comandi testuali riportati nel riquadro (nei quali M ed A rappresentano valori reali e Z un valore intero). I valori M ed A sono sempre positivi, mentre Z può assumere valori positivi (il drone aumenta la quota di volo) o negativi (il drone scende verso terra). Poiché il drone dispone di una bussola interna, l’angolo con cui deve orientarsi per procedere verso il punto successivo è sempre indicato in radianti e riferito al Nord geografico, in alto nella mappa. Ogni spostamento del drone richiede una terna di comandi, che sono inviati separati dal carattere ';' e terminata da un punto, come nell’esempio riportato più oltre.

Il piano di volo è disegnato in un file che rappresenta la mappa di un’area rettangolare di territorio suddivisa in quadrati di un metro di lato. Nel file la prima riga riporta le dimensioni della mappa (in numero di quadrati orizzontali e verticali, e di conseguenza anche in metri), nel seguito ogni quadrato è rappresentato da un simbolo, che può essere un carattere '*' o da una coppia di numeri interi separati dal carattere '/' (senza spazi). Le coppie di numeri indicano i vertici della traiettoria del drone secondo il piano di volo che si vuole ottenere. In tali vertici il primo valore è il numero d’ordine del punto della traiettoria, contando a partire da 0, il secondo valore è la quota a cui deve trovarsi il drone in quel punto della traiettoria. I quadrati in cui non sono riportati punti della traiettoria sono rappresentati dal carattere '*'.

La figura seguente riporta un esempio di un file siffatto per un’area di 15x20 metri e, a fianco, la traiettoria che esso descrive.

N

Si assuma che la traiettoria non passi mai due volte per lo stesso punto, quindi ogni quadrato della mappa è rappresentato da un asterisco o da una sola coppia di numeri. Si assuma inoltre che siano presenti sempre almeno due vertici della traiettoria e che gli indici siano sempre corretti (numerazione continua partendo da zero).

Si assuma inoltre che la traiettoria del drone sia composta al massimo da 100 vertici. Si sconsiglia vivamente di utilizzare una matrice per risolvere il problema (si veda il suggerimento al termine del testo). Tuttavia, se si desidera procedere così, è lecito assumere che la mappa sia composta al massimo da 50 x 50 quadrati.

Si scriva un programma in linguaggio C che riceva sulla riga di comando il nome di un file come quello sopra descritto e il nome di un secondo file, da utilizzarsi come file di uscita. Il programma deve scrivere nel secondo file la sequenza di comandi per il drone necessari per ottenere la traiettoria indicata.

La distanza relativa al comando PROCEDI_DI_METRI è la distanza euclidea, da calcolarsi con il teorema di Pitagora. Ai fini del calcolo dell’angolo, si ricorda che esso può essere calcolato mediante la funzione arcocoseno (doubleacos(double x)) della libreria standard math.h. Lo pseudo-codice della procedura di calcolo da implementare è riportato a fianco (le figure non servono ai fini della realizzazione del programma, servono solo a illustrare come è stata ottenuta. Nota: se la differenza tra le coordinate y risulta negativa il calcolo risulta corretto perché la funzione arcocoseno restituisce un valore compreso tra /2 e ). Si ricorda che la libreria math.h. definisce il simbolo M_PI per il valore di .

Suggerimento: si legga il file tenendo traccia delle coordinate x e y e si utilizzi il numero d’ordine dei vertici come indice per inserire in un vettore di struct le coordinate e la quota dei vertici della traiettoria.

Relativamente all’esempio, il programma deve scrivere nel file di uscita la seguente sequenza di comandi:

ORIENTATI_RISPETTO_AL_NORD_DI_RADIANTI 1.570796; CAMBIA_QUOTA_DI_METRI 3; PROCEDI_DI_METRI 3.000000.

ORIENTATI_RISPETTO_AL_NORD_DI_RADIANTI 1.325818; CAMBIA_QUOTA_DI_METRI 2; PROCEDI_DI_METRI 8.246211.

ORIENTATI_RISPETTO_AL_NORD_DI_RADIANTI 2.677945; CAMBIA_QUOTA_DI_METRI 7; PROCEDI_DI_METRI 6.708204.

ORIENTATI_RISPETTO_AL_NORD_DI_RADIANTI 4.390638; CAMBIA_QUOTA_DI_METRI 8; PROCEDI_DI_METRI 6.324555.

ORIENTATI_RISPETTO_AL_NORD_DI_RADIANTI 0.165149; CAMBIA_QUOTA_DI_METRI 5; PROCEDI_DI_METRI 6.082763.

ORIENTATI_RISPETTO_AL_NORD_DI_RADIANTI 3.926991; CAMBIA_QUOTA_DI_METRI -8; PROCEDI_DI_METRI 7.071068.

ORIENTATI_RISPETTO_AL_NORD_DI_RADIANTI 3.463343; CAMBIA_QUOTA_DI_METRI -10; PROCEDI_DI_METRI 6.324555.

ORIENTATI_RISPETTO_AL_NORD_DI_RADIANTI 1.373401; CAMBIA_QUOTA_DI_METRI -7; PROCEDI_DI_METRI 10.198039.

ORIENTATI_RISPETTO_AL_NORD_DI_RADIANTI A; CAMBIA_QUOTA_DI_METRI Z; PROCEDI_DI_METRI M.

d

3 4 5 6 7 8 9 10

9 10 11 12

d

5 6 7 8 9 10 11

9 10 11 12 13 14 15 16

se colonnaarrivo> colonnapartenza

angolo = acos ( (rigapartenza- rigaarrivo) / distanza euclidea )

altrimenti (cioè se colonnaarrivo colonnapartenza)

angolo =  + acos ( (rigaarrivo- rigapartenza) / distanza euclidea )

Riferimenti

Documenti correlati

2a) (vale 3 punti) Dare le definizioni di applicazione lineare fra due spazi vettoriali e di nucleo e rango di un’applicazione lineare.. 2b) (vale 4 punti) Enunciare il teorema

2b) (vale 4 punti) Enunciare il Teorema di struttura delle soluzioni di un sistema lineare.. 2c) (vale 4 punti) (i) Definire la nozione di autovalore e di autovettore di

GEOMETRIA I, c.d.L.. 2) Rispondere (con precisione) alle seguenti domande ciascuna delle quali vale 3 punti 2a) Dare la definizione di base di uno spazio vettoriale

GEOMETRIA I, c.d.L. Dire se il seguente sottoinsieme `e un sottospazio vettoriale.. 2) Rispondere (con precisione) alle seguenti domande:. 2a) VALE 5 PUNTI.. 3) RISPONDERE,

GEOMETRIA I, c.d.L. in Matematica, Prova Scritta 7 settembre 2011, A.A.. 2) Rispondere (con precisione) alle seguenti domande:. 2a) VALE

Nella realtà la Madre del Qualunque è stata una madre fin troppo presente ed apprensiva, dedita al figlio di cui ha soddisfatto i bisogni con una solerzia capace di prevenire

Un secondo file contiene l’elenco dei prodotti venduti dal gestore e, per ciascuno, il numero di esemplari di cui ogni distributore che abbia in vendita tale

Un secondo file contiene l’elenco dei prodotti venduti dal gestore e, per ciascuno, il numero di esemplari di cui ogni distributore che abbia in vendita tale