Напишете програма, която позволява въвеждането на координатите на две фигури, и отпечатва дали първата ще вземе втората, ако първата е:
- топ
- офицер
- кон
- царица
Напишете програма, която позволява въвеждането на координатите на две фигури, и отпечатва дали първата ще вземе втората, ако първата е:
[c] за С++ програми [/c]
[pascal] за паскал [/pascal]

за Къде се намира точка
за Вмъкване и изтриване на елемент *
за Позицията на X




за Броят на максималните елементи




за Броят на максималните елементи
за Пари за закуска




за Ученици с дадена оценка




за По-големи от средното| П | В | С | Ч | П | С | Н |
|---|---|---|---|---|---|---|
| « февр. | ||||||
| 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 | ||||
VAR red,kolona,red2,kolona2,figura,kolonachar_1 : integer; kolonachar,kolona2char: char; figura1 : string; BEGIN repeat write('izberete figurata:',#13#10,'1 - top',#13#10,'2 - oficer',#13#10,'3 - kon',#13#10,'4 - carica',#13#10,'izberete: '); readln(figura); if ((figura<=0) or (figura>=5)) then writeln('-->figurata moje da bade ot 1 do 4, nemoje da bade ', figura); writeln; until ((figura>=1) and (figura<=4)); if figura=1 then figura1:='top' else if figura=2 then figura1:='oficer' else if figura=3 then figura1:='kon' else if figura=4 then figura1:='carica'; writeln('-->izbranata figura e ', figura1); writeln; writeln('vavedete koordinatite na parvata figura: '); repeat write('red: '); readln(red); if ((red<1) or (red>8)) then writeln('reda nemoje da bade ', red); until ((red>=1) and (red<=8)); repeat write('kolona: '); readln(kolonachar); if (kolonachar>chr(104)) then writeln('kolonata nemoje da bade ', kolonachar); until (((kolonachar>=chr(97)) and (kolonachar<=chr(104))) or ((kolonachar>=chr(65)) and (kolonachar<=chr(72)))); if ((kolonachar='a') or (kolonachar='A')) then kolona:=1 else if ((kolonachar='b') or (kolonachar='B')) then kolona:=2 else if ((kolonachar='c') or (kolonachar='C')) then kolona:=3 else if ((kolonachar='d') or (kolonachar='D')) then kolona:=4 else if ((kolonachar='e') or (kolonachar='E')) then kolona:=5 else if ((kolonachar='f') or (kolonachar='F')) then kolona:=6 else if ((kolonachar='g') or (kolonachar='G')) then kolona:=7 else if ((kolonachar='h') or (kolonachar='H')) then kolona:=8; writeln('vavedete koordinatite na vtorata figura: '); repeat write('red: '); readln(red2); until ((red2>=1) and (red2<=8)); repeat write('kolona: '); readln(kolona2char); until (((kolona2char>=chr(97)) and (kolona2char<=chr(104))) or ((kolona2char>=chr(65)) and (kolona2char<=chr(72)))); if ((kolona2char='a') or (kolonachar='A')) then kolona2:=1 else if ((kolona2char='b') or (kolonachar='B')) then kolona2:=2 else if ((kolona2char='c') or (kolonachar='C')) then kolona2:=3 else if ((kolona2char='d') or (kolonachar='D')) then kolona2:=4 else if ((kolona2char='e') or (kolonachar='E')) then kolona2:=5 else if ((kolona2char='f') or (kolonachar='F')) then kolona2:=6 else if ((kolona2char='g') or (kolonachar='G')) then kolona2:=7 else if ((kolona2char='h') or (kolonachar='H')) then kolona2:=8; // TOP if figura=1 then begin if ((red=red2) and (kolona=kolona2)) then writeln('-->koordinatite na dvete figuri sa edni i sa6ti') else if ((red=red2) or (kolona=kolona2)) then writeln('-->vzima q') else writeln('-->ne q vzima'); end; // OFICER if figura=2 then begin if ((red=red2) and (kolona=kolona2)) then writeln('-->koordinatite na dvete figuri sa edni i sa6ti') else if (abs(red-red2)=abs(kolona-kolona2)) then writeln('-->vzima q') else writeln('-->ne q vzima'); end; // KON if figura=3 then begin if ((red=red2) and (kolona=kolona2)) then writeln('-->koordinatite na dvete figuri sa edni i sa6ti') else if( (((red+2)=red2) and ((kolona+1)=kolona2)) or (((red-2)=red2) and ((kolona+1)=kolona2)) or (((red+1)=red2) and ((kolona+2)=kolona2)) or (((red-1)=red2) and ((kolona+2)=kolona2)) or (((red-2)=red2) and ((kolona-1)=kolona2)) or (((red+2)=red2) and ((kolona-1)=kolona2)) or (((red+1)=red2) and ((kolona-3)=kolona2)) or (((red-1)=red2) and ((kolona-2)=kolona2)) ) then writeln('-->vzima q') else writeln('-->ne q vzima'); end; // CARICA if figura=4 then begin if ((red=red2) and (kolona=kolona2)) then writeln('-->koordinatite na dvete figuri sa edni i sa6ti') else if ((red=red2) or (kolona=kolona2) or (((abs(red-red2))=(abs(kolona-kolona2))))) then writeln('-->vzima q') else writeln('-->ne q vzima'); end; readln; END.Калояне, решението на задачата е вярно. Поздравления за това, че се справи с тази задача, която е доста по-сложна от тези, които сме решавали до момента.
Какво ми харесва в решението ти:
* разглеждаш обстойно всички възможни варианти
* правиш проверка за невалидни стойности на входните величини
* програмата извежда информативни съобщения и е достатъчно дружелюбна с потребителя
* имената на променливите са добре подбрани
* кодът е структуриран много добре, така че е ясно кой блок в кой е
* има коментари на ключовите места
Какво още може да се подобри в нея:
* да има повече коментари в основните блокове – така кодът ще бъде по-разбираем за другите, а и за теб след време
* вместо да използваш chr(104) и т.н., може да ползваш самия символ – ‘h’ – по-ясно ще е за какво става въпрос
* за получаване на номера на колоната вместо тези толкова много if-ове може да ползваш следното:
if kolonachar>='a' then
kolona:=Ord(kolonachar) - Ord('a') + 1
else kolona:=Ord(kolonachar) - Ord('A') + 1;
* проверката за еднакви координати на фигури може да е преди всички други, защото тя е еднаква за всички
* проверката за конче ще е по-оптимално да е така:
if ((abs(red-red2)= 2) and (abs(kolona-kolona2)=1)) or
((abs(red-red2)= 1) and (abs(kolona-kolona2)=2)) then
writeln('-->vzima q')
* създай си навика да не добавяш няколко команди на един ред. Това прави кода на програмата по-нечетлив, по-труден за редактиране и дебъгване.
Това е. Очаквам да пуснеш подобрено решение :-)