![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Выполняется только половина.....
Nick_serov © (2006-04-06 00:21:00)У меня тут еще одна проблемка возникла.
begin
try
if (d < strtofloat(edit4.Text)) and (d > strtofloat(edit3.Text)) then // d - значение в Edit
a1 := strtofloat(edit5.Text);
a22 := d / 100 * a1 + d;
edit6.Text := floattostr(a22);
except
end;
end;
begin
try
if (d < strtofloat(edit11.Text)) and (d > strtofloat(edit7.Text)) then
a2 := strtofloat(edit15.Text);
a33 := d / 100 * a2 + d;
edit6.Text := floattostr(a33);
except
end;
end;
почему-то выполняет только вторую часть кода, а первую толи пропускает, толи она затирается... что делать???
SergP (2006-04-08 05:37:00) [1]
> и программка получилась симпатишная =)))
:-)
Симпатишнее некуда...
Кстати: А если бы у тебя была сотня диапазонов, ты бы 100 раз воспользовался копипастом, или додумался бы применить цикл?
Nick_serov (2006-04-07 21:35:00) [2]
> Плохиш © (07.04.06 11:00) [27]
> PS. Не раскрыта тема, что будет/должно быть, если число
> попадает в два диапазона
Раскрываю: такого просто не может быть, потому-что - это диапазоны цен, и пользователь устанавливает значение сам (ну например: от 1500 до 3200, дальше идет ну никак не от 3100 до 5000, а от 3200до 5000)
Плохиш (2006-04-07 11:00:00) [3]
> Nick_serov (07.04.06 08:21) [23]
begin/end в своих условиях можешь выкинуть.
PS. Не раскрыта тема, что будет/должно быть, если число попадает в два диапазона
PPS. Но главное, что разобрался какой участок кода надо заключать в операторные скобки (begin..end) при использовании условий :-) Молодец!
Nick_serov (2006-04-07 08:33:00) [4]
> Как-то много всего...
главное - работает, доводкой кода займусь во втором релизе. )
Бугага (2006-04-07 08:29:00) [5]
> edit6.Text := floattostr(a88);
> l := strtofloat(edit6.Text);
> l :=RoundTo(l,1);
> edit6.Text := floattostr(l);
Как-то много всего...
Nick_serov (2006-04-07 08:22:00) [6]ТЕМА ЗАКРЫТА!!!
Nick_serov (2006-04-07 08:21:00) [7]Всем назло у меня все получилось!!!! Работает для 8-ми диапазонов!
и программка получилась симпатишная =)))
Выкладываю для "начинающих":
procedure TForm1.Grid1Click(Sender: TObject);
var
d, f ,h, a11, a22, a33, a44, a55, a66, a77, a88, l : real;
begin
try
edit2.Text := grid1.SelectedText;
d := strtofloat(edit2.Text);
f := strtofloat(edit2.Text);
except
end;
if (d > strtofloat(edit3.Text)) and (d < strtofloat(edit4.Text)) then
begin
try
a11 := d / 100 * strtofloat(edit5.Text) + d;
edit6.Text := floattostr(a11);
l := strtofloat(edit6.Text);
l :=RoundTo(l,1);
edit6.Text := floattostr(l);
except
end;
end;
if (d > strtofloat(edit7.Text)) and (d < strtofloat(edit11.Text)) then
begin
try
a22 := d / 100 * strtofloat(edit15.Text) + d;
edit6.Text := floattostr(a22);
l := strtofloat(edit6.Text);
l :=RoundTo(l,1);
edit6.Text := floattostr(l);
except
end;
end;
if (d > strtofloat(edit8.Text)) and (d < strtofloat(edit12.Text)) then
begin
try
a33 := d / 100 * strtofloat(edit16.Text) + d;
edit6.Text := floattostr(a33);
l := strtofloat(edit6.Text);
l :=RoundTo(l,1);
edit6.Text := floattostr(l);
except
end;
end;
if (d > strtofloat(edit9.Text)) and (d < strtofloat(edit13.Text)) then
begin
try
a44 := d / 100 * strtofloat(edit17.Text) + d;
edit6.Text := floattostr(a44);
l := strtofloat(edit6.Text);
l :=RoundTo(l,1);
edit6.Text := floattostr(l);
except
end;
end;
if (d > strtofloat(edit10.Text)) and (d < strtofloat(edit14.Text)) then
begin
try
a55 := d / 100 * strtofloat(edit18.Text) + d;
edit6.Text := floattostr(a55);
l := strtofloat(edit6.Text);
l :=RoundTo(l,1);
edit6.Text := floattostr(l);
except
end;
end;
if (d > strtofloat(edit19.Text)) and (d < strtofloat(edit24.Text)) then
begin
try
a66 := d / 100 * strtofloat(edit25.Text) + d;
edit6.Text := floattostr(a66);
l := strtofloat(edit6.Text);
l :=RoundTo(l,1);
edit6.Text := floattostr(l);
except
end;
end;
if (d > strtofloat(edit20.Text)) and (d < strtofloat(edit23.Text)) then
begin
try
a77 := d / 100 * strtofloat(edit26.Text) + d;
edit6.Text := floattostr(a77);
l := strtofloat(edit6.Text);
l :=RoundTo(l,1);
edit6.Text := floattostr(l);
except
end;
end;
if (d > strtofloat(edit21.Text)) and (d < strtofloat(edit22.Text)) then
begin
try
a88 := d / 100 * strtofloat(edit27.Text) + d;
edit6.Text := floattostr(a88);
l := strtofloat(edit6.Text);
l :=RoundTo(l,1);
edit6.Text := floattostr(l);
except
end;
end;
end;
ЮЮ (2006-04-07 03:18:00) [8]>Плохиш © (06.04.06 11:51) [21]
P.S. Тем более из заголовка топика следует, что автор хочет, чтобы выполнялись обе части кода, а самого удовлетворило решение, когда выполняется лишь одна из двух. Из этой посылки я и исходил.
Плохиш (2006-04-06 11:51:00) [9]
> Nick_serov (06.04.06 11:13) [19]
Перед тем как плакать, скажи в каком месте этого топика указано, что если число входит в оба указанных диапазона, то выполняться должна только проверка для первого?
Nick_serov (2006-04-06 11:14:00) [10]
> Сергей М. © (06.04.06 11:07) [18]
Спасибо!!!
Nick_serov (2006-04-06 11:13:00) [11]
> ЮЮ © (06.04.06 11:03) [16]
> Плохиш © (06.04.06 11:04) [17]
Спасибо, обосрали с ног до головы. это моя первая программа, до этого времени за Delphi сидел мало... я конечно понимаю, что до вашего уровня интеллекта мне как до Киева, но вы не делаете ни какой скидки на то, что топик я создал специально в разделе "Начинающим"...
Сергей М. (2006-04-06 11:07:00) [12]
> Nick_serov (06.04.06 10:41) [13]
if Условие1 and Условие2 then
... действие ..
elseif Условие3 and Условие4 then
... другое действие ..
Плохиш (2006-04-06 11:04:00) [13]
> Nick_serov (06.04.06 10:49) [15]
У тебя где-то проблемы с логикой и если тебе встроенный отладчик не помогает, то, наверное, стоит подумать о смене работы/специальности.
PS.
> у меня, то, что стоит первым выполняется нормально, а когда
> встаю на ячейку, где число второго диапазона, то оно просто
> пишет его Edit6 без изменений (без надбавки процента)
Это какой же здесь телепатор надо использовать?
ЮЮ (2006-04-06 11:03:00) [14]Ты действительно такой или только притворяешься?
begin
try
if (d < strtofloat(edit11.Text)) and (d > strtofloat(edit7.Text)) then
a2 := strtofloat(edit15.Text);
a33 := d / 100 * a2 + d;
edit6.Text := floattostr(a33);
except
end;
end;
Где в этом коде используется хоть что-то из того, что якобы упорно вычислялось в первой части?
d здесь именно такое какое и было до 1-й части кода. И чтобы там не делал, оно реально изменится только во второй.
Nick_serov (2006-04-06 10:49:00) [15]
> ЮЮ © (06.04.06 10:43) [14]
> И где это ТО ОНО?
это оно, это переменная d. d - это значение выделенной в данный момент ячейки
edit2.Text := grid1.SelectedText;
d := strtofloat(edit2.Text);
ЮЮ (2006-04-06 10:43:00) [16]
> то оно увеличивается на процент (Edit5), записывается в
> Edit6.
не ОНО, а некое a22, которе нигде дальше не используется. d rfrbv ,skj? nfrbv b jcnftncz/
> и если число входит в этот диапазон, то оно увеличивается
> на процент (edit15) и записывается в Edit6
И где это ТО ОНО? Во второй части никак не затрагиваются то что считалось в первой. Т.е. что бы там не посчиталось - оно никому не нужно, если будет работать вторая часть.
Nick_serov (2006-04-06 10:41:00) [17]
> Сергей М. © (06.04.06 10:26) [10]
procedure TForm1.Grid1Click(Sender: TObject);
var
d, h, a1, a2, a3, a4, a5, a22, a33, l : real;
begin
try
edit2.Text := grid1.SelectedText;
d := strtofloat(edit2.Text);
except
end;
try
if (d < strtofloat(edit4.Text)) then
if (d > strtofloat(edit3.Text)) then
a1 := strtofloat(edit5.Text);
a22 := d / 100 * a1 + d;
edit6.Text := floattostr(a22);
except
end;
try
if (d < strtofloat(edit11.Text)) then
if (d > strtofloat(edit7.Text)) then
a2 := strtofloat(edit15.Text);
a33 := d / 100 * a2 + d;
edit6.Text := floattostr(a33);
l := strtofloat(edit6.Text);
l :=RoundTo(l,1);
edit6.Text := floattostr(l);
except
end;
end;
точно такая же ситуация, если число попадает во второй диапазон, то оно увеличивается на процент, окгругляется и записывается в Edit6,
Если число входит в первый диапазон, то оно просто округляется (хотя в первой части округления не писал!!!) и записывается без увеличения на процент!
Nick_serov (2006-04-06 10:33:00) [18]
> Сергей М. © (06.04.06 10:26) [10]
>
>
> > Nick_serov (06.04.06 10:12) [7]
>
>
> Измени конструкцию
>
> if Условие1 and Условие2 then
> ... действие ..
>
> на
>
> if Условие1 then
> if Условие2 then
> ... действие ..
>
> тогда ситуация прояснится
Ща попробую......
Nick_serov (2006-04-06 10:33:00) [19]
> Заведи для a33 Edit7,
нельзя другую Edit.... У меня есть диапазон значений
1 Диапазон: От (Edit3) до (edit4) и если число входит в этот диапазон, то оно увеличивается на процент (Edit5), записывается в Edit6.
2 Диапазон: От (Edit7) до (edit11) и если число входит в этот диапазон, то оно увеличивается на процент (edit15) и записывается в Edit6
Edit6 - это конечная цена!!! у меня этих диапазонов планируется еще 6 штук.
Все Begin ы и End ы проверил, программа компилируется, но муть такая выходит ((((((((((((((((((((((((((((((((((9
у меня, то, что стоит первым выполняется нормально, а когда встаю на ячейку, где число второго диапазона, то оно просто пишет его Edit6 без изменений (без надбавки процента)
Сергей М. (2006-04-06 10:26:00) [20]
> Nick_serov (06.04.06 10:12) [7]
Измени конструкцию
if Условие1 and Условие2 then
... действие ..
на
if Условие1 then
if Условие2 then
... действие ..
тогда ситуация прояснится