• Non ci sono risultati.

Esempio Analisi e Specifica

N/A
N/A
Protected

Academic year: 2021

Condividi "Esempio Analisi e Specifica"

Copied!
6
0
0

Testo completo

(1)

1 Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 1

Esempio

Analisi e Specifica

Definizione del problema: Si vuole giocare a Morra Cinese contro il PC.

I tipici simboli del gioco sono simulati con numeri interi:

1 = carta - 2 = forbici - 3 = sasso.

Il giocatore immette il numero corrispondente al simbolo che vuole giocare da tastiera,

il numero (ovvero il simbolo) che gioca il PC viene generato in maniera casuale usando la funzione rand() del linguaggio C.

Si confrontano i due simboli giocati e si dichiara il vincitore, in base alle tipiche regole del gioco:

• carta vs forbici => vince forbici

• carta vs sasso => vince carta

• forbici vs sasso => vince sasso

• se i due simboli sono uguali non vince nessuno

Esempio

Definizione dei dati del problema:

I: Simbolo del giocatore, simbolo del PC

Pi: il simbolo deve essere uno dei tre ammissibili: carta, forbici, sasso – ovvero un numero intero compreso tra 1 e 3 (estremi inclusi) U: Vincitore;

Pu: il vincitore non può essere diverso dal giocatore o dal PC

(2)

3 Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio

Esempio

Tabella delle variabili di ingresso

Tabella delle variabili di uscita

Nome Variabile Descrizione Tipo

segnoMio numero intero indicante uno dei tre simboli della Morra Cinese scelto dal giocatore

INT

segnoPC numero intero indicante uno dei tre simboli della Morra Cinese scelto dal PC

INT

Nome Variabile Descrizione Tipo

vincitore numero intero indicante il vincitore della sfida: il valore 1 (uno) indica il giocatore, il valore 0 (zero) indica il PC

INT

Tabella delle variabili di algoritmo

Nome Variabile Descrizione Tipo

x Indica se il giocatore vuole giocare: 1 = SI , < > 1 =NO INT

Si vuole visualizzare un messaggio di benvenuto al gioco

************************************

* Morra Cinese *

* Vuoi giocare? (1 - SI, <>1 NO) *

************************************

che segno scegli (1=Carta – 2=Forbici – 3=Sasso) ?

(3)

5 Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio

... Associare sottoprogrammi alle parti in rosso

Progettazione

Descrizione del metodo di elaborazione:

Si visualizza un messaggio di benvenuto al gioco e si chiede al giocatore se vuole giocare, Se il giocatore immette il valore 1 si gioca altrimenti il programma termina.

Viene chiesto al giocatore di immettere il numero corrispondente al simbolo che vuole giocare, viene letto il valore immesso ed assegnato a segnoMio.

Se il numero immesso non è uno dei tre validi, viene richiesta la re-immissione del valore fin quando questo non è valido,

altrimenti si va avanti nel gioco ed in tal caso è generato in modo casuale il numero corrispondente al simbolo giocato dal PC ed assegnato a segnoPC.

Si confrontano i valori di segnoMio e segnoPC :

Se sono uguali si visualizza un messaggio indicante la parità del gioco ed il programma termina,

Altrimenti

Si assegna alla variabile vincitore il valore 1 se segnoMio batte segnoPC (in base alle regole della Morra Cinese), altrimenti si assegna alla variabile vincitore il valore 0.

In base al valore di vincitore si visualizza chi ha vinto e i valori delle due variabili segnoMio e segnoPC

Si visualizza un messaggio di arrivederci.

/* Morra Cinese */

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

// visualizza benvenuto int welcome();

// verifica quale giocatore vince

void verifica_vincitore(int segno1, int segno2, int *vince);

// visualizza segni giocati void stampa_segno(int segno);

Morra Cinese - il programma in C con sottoprogrammi

(4)

7 Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio

int main() // Morra Cinese {

int x, segnoMio, segnoPC, vincitore;

x = welcome();

if (x==1)

// il giocatore sceglie il suo segno {do

{printf("che segno scegli? 1=Carta – 2=Forbici – 3=Sasso\n");

scanf("%d", &segnoMio);

if ((segnoMio!=1)&&(segnoMio!=2)&&(segnoMio!=3)) printf("ERRORE: IMMESSO VALORE NON VALIDO!\n");

}

while((segnoMio!=1)&&(segnoMio!=2)&&(segnoMio!=3));

//si genera in modo casuale il segno giocato dal PC

srand(time(0));

segnoPC= 1 + rand()%3;

// è chiamata la procedure che verifica chi ha vinto

verifica_vincitore(segnoMio, segnoPC, &vincitore);

if (vincitore == 1)

printf("Vince SegnoMio:\n ");

else

if (vincitore == -1)

printf("Vince PC: \n ");

else (printf("PARI\n");

(5)

9 Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio

// si visualizzano i segni giocati printf(" SegnoMio = ");

stampa_segno(segnoMio);

printf(" SegnoPC = ");

stampa_segno(segnoPC);

} // fine if (x==1)

printf("\n\n Arrivederci - Ti aspettiamo ancora per giocare alla Morra Cinese\n\n\n");

system("Pause");

} // fine programma principale

int welcome() {int x;

printf("\t***********************************\n");

printf("\t* Morra Cinese *\n");

printf("\t* Vuoi giocare? (1 - SI, <>1 NO)*\n");

printf("\t***********************************\n");

scanf("%d", &x);

return x;

}

(6)

11 Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio

void verifica_vincitore(int segno1,int segno2,

int *vince) { if (segno1 == segno2)

vince = 0; // PARI else

{if (((segno1 == 1) && (segno2 == 3)) ||

// vince carta vs sasso

((segno1 == 2) && (segno2 == 1)) ||

// vince forbici vs carta ((segno1 == 3) && (segno2 == 2))

// vince sasso vs forbici )

*vince = 1; // vince segnoMIO else

*vince = -1; // vince segnoPC }

}

void stampa_segno(int segno) { switch(segno)

{case 1: {printf("Carta\n"); break;}

case 2: {printf("Forbici\n"); break;}

case 3: {printf("Sasso\n"); break;}

} }

Riferimenti

Documenti correlati

[r]

[r]

Alla pressione del pulsante “=” di fianco (dove ora è visualizzato 0) deve comparire il risultato della somma dei due valori inseriti se è selezionato il pulsante radio

Per questo un ringraziamento particolare va a chi ha collaborato al presente numero della rivista e cioè gli autori degli articoli e la Pacini Editore il cui sforzo produttivo

n b n converge, quindi per il criterio del confronto asintotico converge anche la serie

Essi sono essenzialmente funzione dell area A, del perimetro P e della lunghezza dell asta principale L..

[r]

Se A ammette come estremo superiore un numero reale, allora ammette anche massimo.. 2. e’ vera 3) sono entrambe vere 4) sono