Записи, помогите сократить задачу |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Записи, помогите сократить задачу |
БелАчкА |
Сообщение
#1
|
Новичок Группа: Пользователи Сообщений: 11 Пол: Женский Репутация: 0 |
Сама задача простая: бьет ли карта 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 |
<<и коряво...>>
а взять в теги не пробывала -------------------- Спасибо!
Удачи! |
БелАчкА |
Сообщение
#3
|
Новичок Группа: Пользователи Сообщений: 11 Пол: Женский Репутация: 0 |
Не судите строго... я здесь в первый раз...еще не со всем разобралась...
Исправляюсь... program zapis; |
Caranthir |
Сообщение
#4
|
Новичок Группа: Пользователи Сообщений: 48 Пол: Мужской Репутация: 0 |
попробуй использовать опетаор Case
Case <выражение> of <список мток 1>:<оператор 1>; <список мток 2>:<оператор 2>; .... <список мток N>:<оператор N>; else <оператор> end; |
TarasBer |
Сообщение
#5
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
Ну например:
Можно заменить на
И так в каждом пункте. Идея, в общем, такая. Caranthir, case на строки действует? Сообщение отредактировано: TarasBer - -------------------- |
Алена |
Сообщение
#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 Пол: Женский Репутация: 0 |
Алена, TarasBer, большое спасибо за помощь!!!
правда, вложенные константы и функции мы еще не проходили... |
Алена |
Сообщение
#8
|
Гость |
Цитата правда, вложенные константы и функции мы еще не проходили... В чем проблема? Cделай глобальные... Смотри, что получилось:program zapis;(если убрать директивы {$b+} и {$b-}, то программа будет выдавать только первую совершённую при наборе ошибку, если не убирать - то будут показаны все ошибки) |
TarasBer |
Сообщение
#9
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
Алёна, а ваша программа случайно не воспримет 'червы)(черви' как правильную масть?
-------------------- |
Алена |
Сообщение
#10
|
Гость |
...(Чисто теоретически, не тестировала) Во второй функции - аналогично. Спасибо за замечание... |
Текстовая версия | 10.10.2024 19:25 |