Модераторы: volvo877, Snowy, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите разобраться с if... then-ом, почему то не работает 
:(
    Опции темы
kent
  Дата 20.6.2005, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 6.5.2005
Где: Russia

Репутация: нет
Всего: 1



В программе один кусок глючит прописываю вроде правильно но не работает...

Вот код:
Код

Program Begin79;
{В восточном календаре принят 60-летний цикл, состоящий из 12-летних циклов, обозначаемых названиями цвета: зеленый, красный, желтый, белый и черный. В каждом подцикле годы носят названия животных: крысы, коровы, тигра, зайца, дракона, змеи, лошади, овцы, обезьяны, курицы, собаки и свиньи. По номеру года вывести его название, если 1984 год был началом цикла – годом зеленой крысы.} 
 var x,z,y:Integer;
    s1,s2:String;
    stop:Boolean;
begin
     stop:=false;
     repeat
     s2:='';
     s1:='';
     WriteLn;
     Write('Введите номер года:');
     ReadLn(x);
     z:=(x-1984);
     if z>=0 then
     z:=(z mod 60) div 12;
     if z<0 then
     begin
     z:=(z mod 60) div 12;
     if z<>0 then
       z:=z+4;
     end;
     case z of
     0:s1:='зеленой';
     1:s1:='красной';
     2:s1:='желтой';
     3:s1:='белой';
     4:s1:='черной';
     end;
     y:=(x-1984);
     if y<0 then
        y:=(y mod 12)+12;
     if y>0 then
     y:=y mod 12;
     case y of
     0:s2:='крысы';
     1:s2:='коровы';
     2:s2:='тигра';
     3:s2:='зайца';
     4:s2:='дракона';
     5:s2:='змеи';
     6:s2:='лошади';
     7:s2:='овцы';
     8:s2:='обезьяны';
     9:s2:='курицы';
     10:s2:='собаки';
     11:s2:='свиньи';
     end;
     WriteLn('Описание года:','год'+' '+s1+' '+s2+';');
     until stop
end.


Глючит вот этот кусок:
Код

if z<0 then
     begin
     z:=(z mod 60) div 12;
     if z<>0 then
       z:=z+4;
     end;


По идее 1923 год должен быть годом черной свиньи, а он пишет зеленой свиньи и так со всеми годами где 1923-(n*60), помогите разобраться ...

Это сообщение отредактировал(а) kent - 20.6.2005, 18:02
PM MAIL ICQ   Вверх
Fedor
Дата 20.6.2005, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Днепрянин
****


Профиль
Группа: Участник
Сообщений: 2090
Регистрация: 8.2.2003
Где: Великий

Репутация: нет
Всего: 32



Во-первых, ИМХО проще вместо
Код

z:=(z mod 60) div 12;

везде писать
Код

z:=z mod 5;


Во-вторых, насколько я понимаю, чтоб решить проблему, нужно вместо
Код

     if z<>0 then    
       z:=z+4;

писать просто
Код

z:=-z;


Это сообщение отредактировал(а) Fedor - 20.6.2005, 22:17


--------------------
Мы - Днепряне. Мы всех сильней.
PM ICQ   Вверх
kent
Дата 20.6.2005, 23:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 6.5.2005
Где: Russia

Репутация: нет
Всего: 1



Не получается так, когда пишу как ты сказал:

Код

if z<0 then
     begin
     z:=z mod 5;
     if z<>0 then
       z:=-z;
end;


вместо года черной свиньи получается красной, т. е. цвета идут не по порядку, вместо(зеленый, красный, желтый, белый, черный)-12-летних подциклов идет (зеленый, белый, красный, черный, желтый).

Для z>=0

Код

     if z>=0 then
     z:=(z mod 60) div 12;

все работает правильно (это лучше не трогать), но если написать вместо
Код

z:=(z mod 60) div 12;

вот так
Код

 z:=z mod 5;

начинает работать неправильно...

В любом случае надо привязывать все это к:
Код

case z of
     0:s1:='зеленой';
     1:s1:='красной';
     2:s1:='желтой';
     3:s1:='белой';
     4:s1:='черной';
     end;

и чтобы цвет менялся начиная с года крысы и в течение двенадцати лет до года свиньи не менялся, и при этом соблюдать чтобы цвета (зеленый, красный, желтый, белый, черный) шли по порядку циклично..

Это сообщение отредактировал(а) kent - 20.6.2005, 23:46
PM MAIL ICQ   Вверх
markowww
Дата 21.6.2005, 00:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 27.2.2003
Где: В Вологде-где

Репутация: нет
Всего: нет



Код

  if z < 0 then begin
    z:= (z mod 60) mod 5; {Вот не знаю откуда у тебя взялось div 12 :) }
    if z <> 0 then
       z:= z + 5;
  end
  else
    z:= (z mod 60) mod 5;


Вроде так. Вставлять после z:= z - 1984 вместо твоих вветвлений.

Это сообщение отредактировал(а) markowww - 21.6.2005, 00:21
PM MAIL   Вверх
kent
Дата 21.6.2005, 10:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 6.5.2005
Где: Russia

Репутация: нет
Всего: 1



Markowww если написать:
Код

 if z < 0 then begin
    z:= (z mod 60) mod 5; {Вот не знаю откуда у тебя взялось div 12 :) }
    if z <> 0 then
       z:= z + 5;
  end
  else
    z:= (z mod 60) mod 5;

все цвета идут по порядку, но меняются через каждые 5 лет, а надо чтобы в течение 12 лет цвет не менялся отсюда div 12 (цикл то 12-летний) ...

а
Код

z:=(x-1984);

у меня прописано с самого начала

Это сообщение отредактировал(а) kent - 21.6.2005, 10:33
PM MAIL ICQ   Вверх
kent
Дата 21.6.2005, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 6.5.2005
Где: Russia

Репутация: нет
Всего: 1



Все таки нашел решение выбора цвета цикла вот:
Код

z:=(x-1984);
     if z>=0 then
     z:=(z mod 60) div 12;
     case z of
     0:s1:='зеленой';
     1:s1:='красной';
     2:s1:='желтой';
     3:s1:='белой';
     4:s1:='черной';
     end;
     if z<0 then
     begin
     begin
     z:=(z mod 60);
     z:=-z;
     end;
     case z of
     1..12:s1:='черной';
     13..24:s1:='белой';
     25..36:s1:='желтой';
     37..48:s1:='красной';
     49..59,0:s1:='зеленой';
     end;
     end;


Для z>=0 все оставляем как есть:
Код

 if z>=0 then
     z:=(z mod 60) div 12;
     case z of
     0:s1:='зеленой';
     1:s1:='красной';
     2:s1:='желтой';
     3:s1:='белой';
     4:s1:='черной';
     end;


А для z<0 ещё без одного case ... of ... , наверное не обойтись (во всяком случае не знаю как):
Код

if z<0 then
     begin
     begin
     z:=(z mod 60);
     z:=-z;
     end;
     case z of
     1..12:s1:='черной';
     13..24:s1:='белой';
     25..36:s1:='желтой';
     37..48:s1:='красной';
     49..59,0:s1:='зеленой';
     end;
     end;


В любом случае спасибо всем кто хоть что-то советовал smile

Да ещё один вопрос ... Как согласовать цвет цикла с названием года (чтобы получалось например не так: год зеленой тигра, а год зеленого тигра smile

Это сообщение отредактировал(а) kent - 21.6.2005, 12:24
PM MAIL ICQ   Вверх
laimerok
Дата 25.6.2005, 01:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 14.6.2005
Где: Хабаровск

Репутация: нет
Всего: нет



у тебя z отрицателное число так что когда делаешь мод или див бери по абсолютной величине ABS();
PM MAIL WWW   Вверх
kent
Дата 25.6.2005, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 6.5.2005
Где: Russia

Репутация: нет
Всего: 1



Цитата(laimerok @ 25.6.2005, 01:51)
у тебя z отрицателное число так что когда делаешь мод или див бери по абсолютной величине ABS();

Можно и так, лишнюю строку писать не надо...
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема »


 




[ Время генерации скрипта: 0.0589 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.