Una esercitazione con gli scacchi che utilizza le condizioni con gli operatori logici AND e OR e fornisce una breve introduzione all'utilità degli array monodimensionali.
Gli scacchi sono molti utili nella didattica dell'informatica perchè offrono spunti per creare simpatiche esercitazioni
su tanti e disparati argomenti.
In questa lezione ho anticipato una vera e propria lezione sull'array facendo utilizzare un piccolo
array monodimensionale per contenere l'informazione "posizione" di un determinato pezzo sulla scacchiera.
Il vantaggio di utilizzare un array, per gli scacchi, è una cosa molto utile. Prima abbiamo quattro variabili slegate, e poi, introducento gli array, abbiamo
solo due variabili con una identità ben precisa: la posizione del pezzo sulla scacchiera.
Il sorgente dell'esercitazione mostrata nella slide numero 6.
Gli studenti tenderanno a risolvere il problema con
meno righe di codice, eliminando il controllo sulla regolarità della posizione.
Credo che questa si una buona esercitazione per abituarli a controllare sempre i dati in input, sia interi che caratteri. In que
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | #include <stdio.h> int main(){ char colonnaRe, colonnaTorre; int rigaRe, rigaTorre; printf("Inserire la colonna dove si trova il re bianco:"); scanf(" %c",&colonnaRe); if(colonnaRe>='a' && colonnaRe <='h') { printf("Inserire la riga dove si trova il re bianco:"); scanf("%d",&rigaRe); if(rigaRe>=1 && rigaRe<=8) { printf("Inserire la colonna dove si trova la torre nera:"); scanf(" %c",&colonnaTorre); if(colonnaTorre>='a' && colonnaTorre <='h') { printf("Inserire la riga dove si trova la torre nera:"); scanf("%d",&rigaTorre); if(rigaTorre>=1 && rigaTorre<=8) { //Controlliamo se la torre ha sotto scacco il Re! if(colonnaTorre == colonnaRe || rigaRe == rigaTorre) printf("ATTENZIONE! Il Re è sotto scacco!\n"); else printf("Il Re non è sotto scacco!\n"); } else printf("Riga Torre non corretta!" ); } else printf("Colonna Torre non corretta!" ); } else printf("Riga Re non corretta!" ); } else printf("Colonna Re non corretta!" ); return 0; } |
Il sorgente dell'esercitazione mostrata nella slide numero 9.
Gli studenti tenderanno a risolvere il problema con
meno righe di codice, eliminando il controllo sulla regolarità della posizione.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | #include <stdio.h> int main(){ char posizioneRe[3], posizioneTorre[3]; printf("Inserire la posizione del Re bianco:"); scanf("%s", posizioneRe); if((posizioneRe[0]>='a' && posizioneRe[0] <='h' ) && (posizioneRe[1]>='1' && posizioneRe[1]<='8')) { printf("Inserire la posizione della Torre nera:"); scanf(" %s", posizioneTorre); if(posizioneTorre[0]>='a' && posizioneTorre[0] <='h' && posizioneTorre[1]>='1' && posizioneTorre[1]<='8') { //Controlliamo se la torre ha sotto scacco il Re! if(posizioneRe[0] == posizioneTorre[0] || posizioneRe[1] == posizioneTorre[1]) printf("ATTENZIONE! Il Re è sotto scacco!\n"); else printf("Il Re non è sotto scacco!\n"); } else printf("Posizione Torre non corretta!" ); } else printf("Posizione Re non corretta!" ); return 0; } |