![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
БелАчкА |
![]() ![]()
Сообщение
#1
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 11 Пол: Женский Репутация: ![]() ![]() ![]() |
Сама задача простая: бьет ли карта 1 карту 2 с учетом козырной масти. Но! препод помешана на менюшках, требует, чтобы все было максимально удобно для пользователя и всевозможные случаи были учтены...естественно, достоинства карт и масти должны вводится с клавиатуры на русском...если, что не так, то необходимо оповестить пользователя...и тд.
Задачу я написала, вроде работает...но как-то мне не нравится...очень много и коряво... Помогите, пожалуйста, подсократить, исправить ее, сделать более рациональным решение... program zapis; {$APPTYPE CONSOLE} uses SysUtils, windows; type suit=(spades, clubs, diamonds, hearts); size=(six, seven, eight, nine, ten, jack, queen, king, ace); card= record m:suit; d:size end; var u:char; a,b1,b2,c1,c2,yes:boolean; K1,K2:card; KM:suit; m1,m2,d1,d2:string; procedure input_data(var K1,K2:card; var KM:suit; var m1,m2,d1,d2:string; var a,b1,b2,c1,c2:boolean); var kz:string; begin writeln ('Введите козырную масть'); readln(kz); writeln('Введите первую карту'); write('масть: '); readln(m1); write('достоинство: '); readln(d1); writeln('Введите вторую карту'); write('масть: '); readln(m2); write('достоинство: '); readln(d2); a:=true; b1:=true; b2:=true; c1:=true; c2:=true; if (kz='пики') then KM:=spades else if (kz='трефы') then KM:=clubs else if (kz='бубны') then KM:=diamonds else if (kz='червы') or (kz='черви') then KM:=hearts else begin a:=false; writeln('Неправильно введена козырная масть!') end; if (m1='пики') then K1.m:=spades else if (m1='трефы') then K1.m:=clubs else if (m1='бубны') then K1.m:=diamonds else if (m1='червы') or (m1='черви') then K1.m:=hearts else begin b1:=false; writeln('Неправильно введена масть первой карты!') end; if (m2='пики') then K2.m:=spades else if (m2='трефы') then K2.m:=clubs else if (m2='бубны') then K2.m:=diamonds else if (m2='червы') or (m2='черви') then K2.m:=hearts else begin b2:=false; writeln('Неправильно введена масть второй карты!') end; if (d1='шесть')or(d1='шестерка')or(d1='6') then K1.d:=six else if (d1='семь')or(d1='семерка')or(d1='7') then K1.d:=seven else if (d1='восемь')or(d1='восьмерка')or(d1='8') then K1.d:=eight else if (d1='девять')or(d1='девятка')or(d1='9') then K1.d:=nine else if (d1='десять')or(d1='десятка')or(d1='10') then K1.d:=ten else if (d1='валет') then K1.d:=jack else if (d1='дама') then K1.d:=queen else if (d1='король') then K1.d:=king else if (d1='туз') then K1.d:=ace else begin c1:=false; writeln('Неправильно введено достоинство первой карты!') end; if (d2='шесть')or(d2='шестерка')or(d2='6') then K2.d:=six else if (d2='семь')or(d2='семерка')or(d2='7') then K2.d:=seven else if (d2='восемь')or(d2='восьмерка')or(d2='8') then K2.d:=eight else if (d2='девять')or(d2='девятка')or(d2='9') then K2.d:=nine else if (d2='десять')or(d2='десятка')or(d2='10') then K2.d:=ten else if (d2='валет') then K2.d:=jack else if (d2='дама') then K2.d:=queen else if (d2='король') then K2.d:=king else if (d2='туз') then K2.d:=ace else begin c2:=false; writeln('Неправильно введено достоинство второй карты!') end end; function cover(K1,K2:card;KM:suit; var yes:boolean):boolean; begin if K1.m=K2.m then yes:=K1.d>K2.d else yes:=K1.m=KM end; begin setconsolecp(1251); setconsoleoutputcp(1251); repeat input_data(K1,K2,KM,m1,m2,d1,d2,a,b1,b2,c1,c2); if (a=true) and (b1=true) and (b2=true) and (c1=true) and (c2=true) then begin cover (K1,K2,KM,yes); if yes then writeln (d1,' ',m1,' бьет ',d2,' ',m2) else writeln (d1,' ',m1,' не бьет ',d2,' ',m2) end; writeln('Вы хотите выйти?(Д/Н)'); readln(u) until (u='Д') or (u='д') end. |
![]() ![]() |
compiler |
![]()
Сообщение
#2
|
Человек ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 050 Пол: Мужской Реальное имя: Станислав Репутация: ![]() ![]() ![]() |
<<и коряво...>>
а взять в теги не пробывала -------------------- Спасибо!
Удачи! |
БелАчкА |
![]()
Сообщение
#3
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 11 Пол: Женский Репутация: ![]() ![]() ![]() |
Не судите строго...
![]() Исправляюсь... program zapis; |
Caranthir |
![]()
Сообщение
#4
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 48 Пол: Мужской Репутация: ![]() ![]() ![]() |
попробуй использовать опетаор Case
Case <выражение> of <список мток 1>:<оператор 1>; <список мток 2>:<оператор 2>; .... <список мток N>:<оператор N>; else <оператор> end; |
TarasBer |
![]()
Сообщение
#5
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: ![]() ![]() ![]() |
Ну например:
Можно заменить на
И так в каждом пункте. Идея, в общем, такая. Caranthir, case на строки действует? Сообщение отредактировано: TarasBer - 18.03.2007 19:27 -------------------- |
Алена |
![]()
Сообщение
#6
|
Гость ![]() |
БелАчкА, прежде всего - идея такая:
procedure input_data(var K1,K2:card; var KM:suit; var m1,m2,d1,d2:string; var a,b1,b2,c1,c2:boolean);В остальной программе тоже можно пошаманить. |
БелАчкА |
![]()
Сообщение
#7
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 11 Пол: Женский Репутация: ![]() ![]() ![]() |
Алена, TarasBer, большое спасибо за помощь!!!
![]() правда, вложенные константы и функции мы еще не проходили... |
Алена |
![]()
Сообщение
#8
|
Гость ![]() |
Цитата правда, вложенные константы и функции мы еще не проходили... В чем проблема? Cделай глобальные... Смотри, что получилось:program zapis;(если убрать директивы {$b+} и {$b-}, то программа будет выдавать только первую совершённую при наборе ошибку, если не убирать - то будут показаны все ошибки) |
TarasBer |
![]()
Сообщение
#9
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: ![]() ![]() ![]() |
Алёна, а ваша программа случайно не воспримет 'червы)(черви' как правильную масть?
-------------------- |
Алена |
![]()
Сообщение
#10
|
Гость ![]() |
...(Чисто теоретически, не тестировала) Во второй функции - аналогично. Спасибо за замечание... |
![]() ![]() |
![]() |
Текстовая версия | 20.07.2025 2:50 |