Dinosauri
Si scriva un programma in linguaggio C che realizzi il gioco
“DINOSAURI”. DINOSAURI è un semplice gioco di carte per due
giocatori. Il mazzo è composto da 30 carte: 10 rosse, 10 verdi e 10
gialle. Sulle rosse è raffigurato un dinosauro enorme, sulle verdi un
dinosauro medio e sulle gialle un dinosauro piccolo.
Unica regola: il dinosauro più grosso mangia il dinosauro più piccolo.
Le carte rosse valgono 5 punti, le carte verdi 3 punti, le carte gialle 1
punto. Inizialmente ogni giocatore ha in mano 15 carte.
In ogni mano ogni giocatore gira una carta e la posa sul tavolo. Se le
carte giocate hanno colori diversi chi ha buttato il dinosauro più
grande vince la mano e prende tutte le carte sul tavolo. Se invece le
carte giocate hanno lo stesso colore si lasciano sul tavolo.
Vince chi, al termine delle 15 mani, totalizza il punteggio più alto. Le
carte NON possono essere scelte. I mazzi sono tenuti coperti e le
carte vanno giocate (girate) nell'ordine in cui compaiono.
© Piero Demichelis
1
Dinosauri
•
•
•
•
•
Il programma deve:
Leggere da un primo file (acquisito come primo parametro sulla riga di
comando) le carte del primo giocatore (15 carte).
Leggere da un secondo file (acquisito come secondo parametro sulla riga di
comando) le carte del secondo giocatore (15 carte).
Giocare la carta girata dal primo giocatore in ogni mano e stamparla a video.
Giocare la carta girata dal secondo giocatore in ogni mano e stamparla a video.
Visualizzare il risultato di ogni mano e il punteggio corrente.
Al termine delle 15 mani, stampare il nome del vincitore e il punteggio totale ottenuto
dal vincitore.
Ad esempio, supponendo di avere un mazzo di 6 carte, se il file “primo_giocatore”
contiene le seguenti carte:
Gialla
Verde
Rossa
e il file “secondo_giocatore” contiene le seguenti carte:
Gialla
Rossa
Verde
© Piero Demichelis
2
Dinosauri
Il programma lanciato con “DINOSAURI primo_giocatore secondo_giocatore” dovrà generare il
seguente output:
Punteggio giocatore 1: 0
Punteggio giocatore 2: 0
Mano n. 1
Carta giocatore 1: Gialla
Carta giocatore 2: Gialla
Risultato: Pareggio
Punteggio giocatore 1: 0
Punteggio giocatore 2: 0
Mano n. 2
Carta giocatore 1: Verde
Carta giocatore 2: Rossa
Risultato: Vince la mano il giocatore 2
Punteggio giocatore 1: 0
Punteggio giocatore 2: 10
Mano n. 3
Carta giocatore 1: Rossa
Carta giocatore 2: Verde
Risultato: Vince la mano il giocatore 1
Punteggio giocatore 1: 8
Punteggio giocatore 2: 10
Vince il giocatore 2 con 10 punti.
© Piero Demichelis
3
Sala da ballo
Si scriva un programma in linguaggio C per gestire una sala di ballo.
Il programma deve leggere da tre file rispettivamente: l'elenco delle
danzatrici; l'elenco dei danzatori; l'elenco delle incompatibilità
(caratteriali, di altezza, ...).
I nomi dei tre file sono specificati nell'ordine sulla linea di comando. I
primi due contengono elenchi di nomi, un nome per riga. I nomi non
contengono spazi. Sono presenti al massimo 20 nomi; la lunghezza
massima di un nome è 15 caratteri. Il terzo elenca le coppie non
valide nel formato <danzatrice> <danzatore>, una informazione per
riga.
Ad esempio:
danzatrici.txt
danzatori.txt
incompatibili.txt
Fiorenza
Maria
Diana
Paolo
Giovanni
Giorgio
Riccardo
Maria Paolo
Diana Riccardo
Maria Riccardo
Fiorenza Paolo
© Piero Demichelis
4
Sala da ballo
Successivamente il programma legge da tastiera una sequenza di
coppie nel formato <danzatrice> <danzatore> di cui controllare la
validità, ovvero: la danzatrice deve comparire nell'elenco; il
danzatore deve comparire nell'elenco; la coppia non deve essere
incompatibile. Il programma termina quando l'utente inserisce la
coppia “x x”.
Ad esempio con i file definiti sopra (l'input dell'utente è
evidenziato):
C:\> DANZA danzatrici.txt danzatori.txt incompatibili.txt
Inserire una coppia: Fiorenza Giorgio
Coppia valida!
Inserire una coppia: Fiorenza Luca
Errore: Luca non e` un danzatore
Inserire una coppia: Fiorenza Paolo
Errore: coppia incompatibile
Inserire una coppia: x x
Programma terminato
© Piero Demichelis
5
Interpolazione lineare
Si desidera realizzare un programma in linguaggio C per realizzare l’interpolazione
lineare di una funzione matematica.
La funzione, la cui specifica è contenuta in un file il cui nome è specificato come
primo parametro sulla linea di comando, è definita per punti, come una serie di
coppie (ascissa, ordinata), una coppia per riga, nel seguente formato:
xi
f(xi)
dove i valori xi e f(xi) sono numeri reali.
I valori contenuti nel file sono in ordine crescente per valori di x (cioè x1 < x2 < ...< xi
< …< xn).
Il numero dei punti xi non è noto a priori.
Il programma legge da tastiera un serie di numeri reali, che rappresentano dei valori di
x, e per ognuno di questi valori xp , deve:
• Verificare che il numero specificato xp sia compreso nell'intervallo [xmin , xmax], dove
xmin=x1 e xmax=xn.; in caso contrario il programma termina.
• Scandire il file e fornire l’interpolazione lineare del valore xp ottenuta come:
f(xp ) = (f(x +) + f(x -))/2
dove x + e x - sono il primo valore maggiore di xp e l'ultimo minore di xp
rispettivamente.
© Piero Demichelis
6
Interpolazione lineare
Note:
Il numero di valori introdotti NON è noto a priori
L’operazione che calcola l’interpolazione DEVE essere realizzata tramite un
sottoprogramma (funzione C).
Tale funzione deve scandire il file, calcolare i valori corretti per x + e x - e
per f(x+) e f(x -) e restituire il valore f(xp ).
Esempio di esecuzione:
Invocando il programma INTLIN mediante il comando
INTLIN F.DAT
e dato il seguente file F.DAT:
1.0 33.2
2.0 43.6
3.0 54.5
3.5 74.6
4.0 65.1
5.0 14.3
5.5 1.1
6.0 –24.3
© Piero Demichelis
7
Interpolazione lineare
Se il valore di xp letto da tastiera è 5.3, il programma
deve fornire a video il seguente output:
Il valore della funzione nel punto 5.3
(Ottenuto come segue: x - = 5.0, x
e’: 7.7.
= 5.5; f(x -) =
14.3, f(x +) = 1.1; f(xp) = (14.3+1.1)/2 = 7.7)
+
Se il valore di xp letto da tastiera è 0.5, il programma
deve fornire a video il seguente output:
Errore: il valore specificato e’ fuori
dall’intervallo.
© Piero Demichelis
8
Alfabeto Morse
Si scriva un programma in linguaggio C per la codifica e decodifica di
un testo con l’alfabeto Morse.
L’alfabeto Morse è un codice che assegna , ad ogni lettera
dell'alfabeto un codice a lunghezza variabile, costituito da punti e
linee.
Il programma riceve sulla linea di comando due argomenti
obbligatori:
• Il primo argomento può essere o –c o –d. Nel primo caso il
programma effettuerà la codifica da testo a Morse, nel secondo caso
la decodifica da Morse a testo.
• Il secondo argomento contiene il nome del file da codificare /
decodificare
La codifica dell’alfabeto Morse è contenuta in un file testo dal nome
morse.txt, nel formato <carattere> <codice>, come mostrato di
seguito:
© Piero Demichelis
9
Alfabeto Morse
A .B -...
C -.-.
D -..
E .
F ..-.
G --.
H ....
I ..
J .--K -.L .-..
M -N -.
O --P .--.
Q --.R .-.
S ...
T U ..V ...W .-X -..Y -.-Z --..
© Piero Demichelis
10
Alfabeto Morse
In base all’opzione specificata come primo argomento, il programma dovrà quindi
produrre sullo schermo la traduzione del file specificato come secondo argomento.
• NOTE:
Il programma, nel caso di codifica, dovrà saltare la codifica di tutti i caratteri
non alfabetici (punteggiatura, caratteri di spaziatura, caratteri di controllo), e non
dovrà distinguere tra caratteri minuscoli e maiuscoli.
Il programma, nel caso di codifica, dovrà separare con uno spazio i simboli Morse
stampati come risultato.
Nel caso di decodifica si assuma che il testo da decodificare consista di simboli
morse separati con uno spazio
Esempio di Esecuzione:
Supponendo che il programma venga invocato come Morse –c testo.txt, e
supponendo che il file testo.txt contenga:
TRE TIGRI CONTRO TRE TIGRI
Il risultato sarà
- .-. . - .. --. .-. .. -.-. --- -. - .-. --Supponendo che il programma venga invocato come Morse –d testo.txt, e
supponendo che il file testo.txt contenga:
.- .. ..- - --- ... --- ...
Il risultato sarà
AIUTOSOS
© Piero Demichelis
11
Classifica
Si scriva un programma C che permetta di gestire la classifica di un
campionato di calcio. La classifica è memorizzata in un file di testo
(per ordine di classifica delle squadre) che ha il seguente formato:
• <squadra> <punti> <partite giocate> <vinte> <pareggiate>
<perse> <gol fatti> <gol subiti>
Ad esempio:
INTER
ROMA
LAZIO
MILAN
FIORENTINA
PALERMO
EMPOLI
ATALANTA
SAMPDORIA
UDINESE
97
75
62
61
58
58
54
50
49
46
38
38
38
38
38
38
38
38
38
38
30
22
18
19
21
16
14
12
13
12
7
9
11
12
10
10
12
14
10
10
1 80 34
7 74 34
9 59 33
7 57 36
7 62 31
12 58 51
12 42 43
12 56 54
15 64 64
16 49 55
© Piero Demichelis
12
Classifica
Il numero massimo di squadre che possono partecipare ad un campionato è
20.
In un secondo file compare l’elenco delle partite per la giornata in corso nel
formato:
<squadra 1> <squadra 2> <goal squadra 1> <goal squadra 2>
Ad esempio:
INTER ROMA 0 1
LAZIO MILAN 3 1
FIORENTINA PALERMO 1 0
EMPOLI ATALANTA 2 0
SAMPDORIA UDINESE 2 2
Si scriva un programma che legga la classifica, le partite, aggiorni la
classifica generale e stampi la classifica aggiornata tenendo conto che:
•
a parità di punti viene prima la squadra che ha la differenza reti
migliore
•
a parità anche di differenza reti, viene prima la squadra che ha
segnato più gol
© Piero Demichelis
13
Classifica
Nell’esempio utilizzato, la classifica aggiornata da visualizzare è:
INTER
ROMA
LAZIO
FIORENTINA
MILAN
PALERMO
EMPOLI
SAMPDORIA
ATALANTA
UDINESE
97
78
65
61
61
58
57
50
50
47
39
39
39
39
39
39
39
39
39
39
30
23
19
22
19
16
15
13
12
12
7
9
11
10
12
10
12
11
14
11
2 80 35
7 75 34
9 62 34
7 63 31
8 58 39
13 58 52
12 44 43
15 66 66
13 56 56
16 51 57
I nomi dei due file sono passati al programma tramite linea di
comando (il primo argomento è il file con la classifica, il secondo
quello con l’elenco delle partite)
© Piero Demichelis
14
Elenco parole
Un file di testo, il cui numero di righe non è noto a priori, contiene un
numero di parole non superiore a 200. Con il termine parola si
intende una sequenza continua di caratteri qualsiasi con la sola
esclusione di quei caratteri considerati come separatori dal linguaggio
C (spazio, tab e newline).
Il nome del file è fornito come primo parametro della riga di
comando immediatamente dopo il nome del programma eseguibile.
L'esercizio consiste nel leggere il file e visualizzare sul monitor le
parole lette, una per ciascuna riga, dopo averle ordinate in maniera
decrescente per numero di caratteri, cioé partendo dalla parola più
lunga e terminando con la parola più corta. Se due o più parole
hanno la stessa lunghezza esse dovranno essere visualizzate in
ordine alfabetico inverso nell'insieme delle parole di una stessa
lunghezza. Inoltre nel caso di parole perfettamente identiche l'allievo
dovrà visualizzare tali parole una sola volta, scartando quindi i
doppioni. Le lettere maiuscole e minuscole dovranno essere
considerate equivalenti, pertanto “Quando”, “quando”, “QUANDO”
devono essere considerate la stessa parola!
© Piero Demichelis
15
Elenco parole
Ad esempio se il programma si chiama LISTA e il file TESTO.DAT contiene la seguente frase:
Questo testo rappresenta un bell'esempio di come rendere incomprensibile
un testo per evitare che possa cadere in mani nemiche
Il comando:
LISTA TESTO.DAT
produce sullo schermo:
incomprensibile
bell'esempio
rappresenta
rendere
nemiche
evitare
cadere
Questo
testo
possa
mani
come
per
che
un
in
di
© Piero Demichelis
16
Scarica

document