Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.01.2010, 20:42   #1
Iamloli
Пользователь
 
Аватар для Iamloli
 
Регистрация: 22.12.2009
Сообщений: 15
Вопрос Вставка изменяющегося <условия>

Здравствуйте. Есть проблема. Мне надо, что бы в зависимости от переменных x и a вставлялось условие в if then. Вот вырезка:
Код:
var b,s:boolean; x,a,n,k:integer;
begin
 if x>a then
  begin b:=(x>a); k:=k*1 end
  else
  begin b:=(x<a); k:=k*(-1) end;
  while (b) do
ну и там пошло поехало.. а программа читает наверняка b:=true или false что и вставляет, а мне надо именно x>a или x<a. Что делать?
Iamloli вне форума Ответить с цитированием
Старый 16.01.2010, 20:54   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Использовать неизвестный вам оператор case ... of
mihali4 вне форума Ответить с цитированием
Старый 16.01.2010, 21:09   #3
Iamloli
Пользователь
 
Аватар для Iamloli
 
Регистрация: 22.12.2009
Сообщений: 15
По умолчанию

Что-то не вижу связи...
Так, наверно для лучшей наглядности, скину процедуру.
Код:
procedure tree3(p,x,a,y,c,m,l,k,n:integer);
var b,s:boolean;
begin
        with form1.canvas do
        begin
                sleep(p);
                if x>a then
                begin b:=x>a; k:=k*1 end
                else
                begin b:=x<a; k:=k*(-1) end;
                if y>c then
                begin s:=(y>c); n:=n*1 end
                else
                begin s:=(y<c); n:=n*(-1) end;
                while (b)or(s) do
                begin
                        Pen.Color:=clMaroon;
                        Pen.width:=l;
                        MoveTo(x,y);
                        if x-k=a then a:=a-1;
                        if y+n=c then c:=c-1;
                        if b then
                        begin
                                if s then x:=x-k else Break;
                        end
                        else
                                x:=x;
                        if s then
                        begin
                        if b then y:=y-n else Break;
                        end
                        else
                                y:=y;
                        LineTo(x,y);
                sleep(m);
                end;
        end;

end;
Как вы поняли, она создает примитивную анимацию растущей линии.. Понимаю, что критиковать можно код жестко, но я только начал учится. Так что если вы можете привести пример, как было бы более правильно это сделать, я буду благодарен. Но попрошу паралельно исправить мой код)

Последний раз редактировалось Iamloli; 16.01.2010 в 21:44.
Iamloli вне форума Ответить с цитированием
Старый 16.01.2010, 21:52   #4
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

"Хвост" - "не играет значения" (так любил выражаться один мой приятель...)
А по поводу... Я бы предложил (в лоб):
Код:
b:=x>a;
if not b then
k:=-k;
s:=(y>c);
if not s then
n:=-n;
Вроде покороче, чем
Код:
                if x>a then
                begin b:=x>a; k:=k*1 end
                else
                begin b:=x<a; k:=k*(-1) end;
                if y>c then
                begin s:=(y>c); n:=n*1 end
                else
                begin s:=(y<c); n:=n*(-1) end;

Последний раз редактировалось mihali4; 16.01.2010 в 21:55.
mihali4 вне форума Ответить с цитированием
Старый 16.01.2010, 22:05   #5
Iamloli
Пользователь
 
Аватар для Iamloli
 
Регистрация: 22.12.2009
Сообщений: 15
По умолчанию

Хмм.. а что делать тогда с циклом? b также будет читаться как true или false, и программа просто зациклится.. А мне надо подставить именно неравенство в условие. Я конечно могу сделать четыре почти одинаковых процедуры.. но это ка-то, по ламерски

Последний раз редактировалось Iamloli; 16.01.2010 в 22:07.
Iamloli вне форума Ответить с цитированием
Старый 16.01.2010, 22:32   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

для цикла while нет разницы переменая типа boolean или выражение условия.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 16.01.2010, 23:25   #7
Iamloli
Пользователь
 
Аватар для Iamloli
 
Регистрация: 22.12.2009
Сообщений: 15
По умолчанию

А для переменной есть;

Нету, но здесь надо учитывать вводящиеся в программу значения x и a, y и c. Когда я приравниваю b:=x>a, программа правую сторону уравнения читает как true или false.
Это все попадает в цикл, под таким значением и остановится не может, вот мне и надо именно вставить место b x>a или x<a, аналогично с y и c.
Вот и вопрос, какой тип можно поставить вместо boolean, может тогда уберется этот каприз, или же может есть какай то функция.. или свежие соображения на этот счет.

Вы когда книжки читаете (если читаете) - там тоже вот так - все в "кашу", без знаков препинания и разделения на абзацы ?
Подправил. Старайтесь (на будущее) сделать ваш пост читабельным...

Последний раз редактировалось mihali4; 16.01.2010 в 23:36.
Iamloli вне форума Ответить с цитированием
Старый 16.01.2010, 23:32   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

так вам же цикл надо с каким то условием?
b присваивайте ваше условие(в зависимости от другого условия)
в цикле обновляйте значение по тому же принципу.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 16.01.2010, 23:48   #9
Iamloli
Пользователь
 
Аватар для Iamloli
 
Регистрация: 22.12.2009
Сообщений: 15
По умолчанию

а просто вставить b, с этим условием, не как нельзя?
Iamloli вне форума Ответить с цитированием
Старый 16.01.2010, 23:51   #10
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

while b do
это вы имели в виду?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
условия glupayastudentka Помощь студентам 7 25.06.2009 09:43
условия combobox Mihailhome Общие вопросы Delphi 3 12.06.2009 20:09
Для аргумента Х, изменяющегося от -0.6 с шагом 0.05, вычислить 20 значений функции J@ck Помощь студентам 2 13.05.2009 14:14
Вычислить значение функции Y=F(x) для аргумента x, изменяющегося от xн до xк с шагом изменения Hx. dr.Chas Общие вопросы по программированию, компьютерный форум 1 12.12.2008 13:58