Salta ai contenuti. | Salta alla navigazione

Strumenti personali

20 dicembre 2017 - pomeriggio

Fondamenti di Informatica - Compito B

Prof. Marco Gavanelli

20 dicembre 2017

1  Esercizio (punti 16)

Il file di testo  scacchiera.txt contiene la posizione dei pezzi degli scacchi in un momento della partita. Nel gioco degli scacchi ci possono essere al più 16 pezzi bianchi e 16 pezzi neri sulla scacchiera. Per ciascun pezzo, il file scacchiera.txt contiene:

  • nome del pezzo: stringa contenente al più 10 caratteri, senza spazi
  • colore: stringa di 7 caratteri, incluso il terminatore, che può essere "bianco" o "nero"
  • x e y: due numeri interi da 1 a 8 che rappresentano le coordinate a cui si trova il pezzo

Viene dato un secondo file di testo  mossa.txt , che rappresenta una mossa, ovvero lo spostamento di un pezzo sulla scacchiera. La mossa viene indicata con il nome ed il colore del pezzo, più la posizione finale raggiunta dal pezzo. Il file mossa.txt contiene esattamente un dato, strutturato come nel file scacchiera.txt (quindi con i campi nome, colore, x e y). Ad esempio, se il file scacchiera.txt contiene

torre nero 1 2
cavallo bianco 1 5
re bianco 5 5
re nero 8 8

e il file mossa.txt contiene

re nero 7 8

significa che il re nero è stato spostato nella posizione (7,8); la situazione sulla scacchiera è quindi modificata come segue:

torre nero 1 2
cavallo bianco 1 5
re bianco 5 5
re nero 7 8

Se il pezzo che viene mosso occupa il posto di un altro pezzo, si dice che il secondo pezzo è stato catturato. Ad esempio, se il file mossa.txt contiene

torre nero 1 5

significa che la torre si è spostata al posto del cavallo: il cavallo è stato catturato.

Si desidera scrivere un programma C che, dati i file scacchiera.txt e mossa.txt

  • se c'è un pezzo che è stato catturato, visualizzi quale
  • qualora non sia stato catturato un pezzo, visualizzi la posizione dei pezzi sulla scacchiera dopo che la mossa nel file mossa.txt è stata effettuata.

Nei due esempi precedenti, il programma dovrà visualizzare, rispettivamente:

torre  nero  1  2 
cavallo  bianco  1  5 
re  bianco  5  5 
re  nero  7  8 

e

il cavallo bianco e` stato preso

Si noti come in questo secondo caso non è richiesto di visualizzare la posizione dei pezzi sulla scacchiera.

Si organizzi il programma come segue

  1. nel main, si invochi una procedura o funzione che legge il file scacchiera.txt e ne porta il contenuto in un opportuno array di strutture (da sviluppare al punto 2), poi si invochi una procedura o funzione che stampa tale array (da realizzare al punto 3), si legga poi il contenuto del file mossa.txt (da sviluppare al punto 4), infine si invochi una procedura o funzione che calcola e visualizza i risultati (punto 5)
  2. La procedura o funzione di lettura deve leggere un file strutturato come descritto sopra e portarne il contenuto in un opportuno array di strutture. Questa procedura o funzione deve avere come parametri il nome del file da leggere e l'array letto (più, eventualmente, altri parametri a scelta).
  3. Nella procedura o funzione di stampa, si stampi a video l'array di strutture letto al punto 2
  4. si legga il file mossa.txt . Suggerimento: per fare questo, si può utilizzare la funzione di lettura scritta al punto 2, leggendo un array che contiene un solo elemento e passando il nome del file mossa.txt alla funzione di lettura.
  5. Si scriva una procedura o funzione che calcola e visualizza i risultati. Questa procedura o funzione riceve come parametri
    • l'array letto al punto 2
    • la mossa letta al punto 4
    più eventualmente altri parametri a scelta. La procedura o funzione dovrà
    • verificare se la posizione raggiunta con la mossa è già occupata da un altro pezzo.
    • se la posizione era occupata da un altro pezzo, dovrà visualizzare quale pezzo è stato catturato;
    • altrimenti, dovrà
      • aggiornare la posizione del pezzo nell'array letto al punto 2;
      • visualizzare poi l'array usando la procedura o funzione del punto 3
    Questa procedura o funzione dovrà invocare almeno altre due procedura o funzione (da realizzare) oltre a quelle già indicate. Ad esempio, si consiglia di effettuare la verifica se la posizione era già occupata e l'aggiornamento della posizione con due opportune funzioni.

È indispensabile organizzare opportunamente il programma in procedure e funzioni; è quindi altamente consigliabile aggiungere altre procedure/funzioni oltre a quelle indicate esplicitamente nel testo.

2  Esercizio (punti 4)

Si estenda ora il programma in modo che, invece di usare il file mossa.txt, che contiene una sola mossa, ne utilizzi uno partita.txt, che contiene una sequenza di mossa (al massimo 100). Il programma dovrà mostrare la posizione dei pezzi dopo che tutte le mosse della sequenza sono state effettuate. Si noti che è necessario prevedere che dei pezzi siano eliminati (quando un pezzo viene catturato, va eliminato dall'array di strutture).



È indispensabile organizzare il programma in opportune procedure e/o funzioni.

Si consegnino i file:

  • un file COGNOME.c (dove COGNOME va sostituito col cognome dello studente) che contiene il main e le funzioni usate solo nell'esercizio 1
  • un file facoltativo.c che contiene il main e le funzioni usate solo nell'esercizio 2
  • un file funzioni.c che contiene le funzioni comuni

più tutti i file header ritenuti necessari.

Nella correzione, il docente creerà due progetti:

  • in uno, inserirà i file COGNOME.c e funzioni.c . L'eseguibile che viene creato dovrà risolvere l'esercizio 1.
  • nell'altro, inserirà i file facoltativo.c e funzioni.c . L'eseguibile che viene creato dovrà risolvere l'esercizio 2.