PROBLEMA 2: SAH
DEADLINE: Miercuri, 10 februarie 1999
PUNCTAJ: 65 Dexteri
TIMP DE IMPLEMENTARE: 2 ore
DOMENII: Gasirea unui algoritm pentru calculator;
Interactiunea cu un modul Onor. Comisii
Pe o tabla de sah se gasesc trei piese: regele alb, dama alba si
regele negru. Albul este la mutare. Pozitia initiala este corecta
(regii nu se afla unul langa altul, iar regele negru nu se afla in
sah). Scrieti un program care da mat regelui negru. Aveti la
dispozitie 30 de mutari.
Regele negru va fi comandat de modulul SAH.H / SAH.TPU, care se
declara astfel in codul sursa:
Pascal: uses Sah;
C: #include "sah.h"
Modulul va pune la dispozitie urmatoarele proceduri si functii:
Pascal: function init:String;
C: char *init(void)
Aceasta functie returneaza un string de 9 caractere indicand
configuratia initiala a tablei prin pozitia respectiv a regelui alb, a
damei albe si a regelui negru. Stringul are forma: "RlcDlcRlc", unde l
este un caracter cuprins intre 'A' si 'H', iar c este un caracter
cuprins intre '1' si '8'. De exemplu, sirul "RA1DE3RD7" inseamna ca
regele alb este asezat la A1, dama alba la E3, iar regele negru la D7.
Pascal: procedure whitemove(S:String);
C: void whitemove(char *S)
Cu aceasta procedura comunicati modulului mutarea pe care doriti sa o
efectuati. Stringul S trebuie sa aiba trei caractere:
- Primul este 'R' sau 'D' dupa cum doriti sa mutati regele sau dama;
- Al doilea este un caracter intre 'A' si 'H'
- Al treilea este un caracter intre '1' si '8'. Ultimele trei
caractere reprezinta coordonatele unde doriti sa mutati piesa. De
exemplu (Pascal) whitemove('RB1'); inseamna ca doriti sa mutati regele
alb la B1.
Pascal: function blackmove:String;
C: char *blackmove(void)
Aveti datoria sa apelati aceasta functiue ori de cate ori este randul
negrului sa mute. Ea va returna un sir de trei caractere cu acelasi
format ca mai sus, cu mentiunea ca primul caracter este intotdeauna
'R', dat fiind ca negrul nu are alte piese. De exemplu, daca blackmove
intoarce 'RC8', inseamna ca negrul doreste sa mute regele la C8.
Calculatorul efectueaza intotdeauna mutari corecte, nu intra in sah
etc.
Observatii:
1. Toate literele care apar in trimiterea de parametri sunt litere mari.
2. Functia init trebuie apelata o singura data, inainte de orice apel
al lui whitemove sau blackmove.
3. Un test se considera picat in oricare din urmatoarele situatii:
- Apelati la un moment nepotrivit o procedura (de exemplu apelati de
doua ori consecutiv whitemove fara un apel intermediar al lui
blackmove) sau ii trimiteti parametri incorecti;
- Incercati sa efectuati o mutare gresita (mutare in L cu regele,
tentativa de a lipi regele de regele advers etc);
- Depasiti limita de 30 de mutari.
- Pierdeti dama sau faceti pat si partida se incheie remiza.
In cazul fericit in care reusiti sa dati mat, de oprirea programului
vostru se va ocupa modulul. Deci nu aveti nevoie sa scrieti nimic pe
ecran.
TIMP DE RULARE: o secunda. Se garanteaza ca apelul functiei init si
cate 30 de apeluri ale functiilor whitemove si blackmove dureaza sub
0.1 secunde.
|
|