Форум: "Начинающим";
Текущий архив: 2006.04.23;
Скачать: [xml.tar.bz2];
ВнизВыполняется только половина..... Найти похожие ветки
← →
Nick_serov (2006-04-06 00:21) [0]У меня тут еще одна проблемка возникла.
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;
почему-то выполняет только вторую часть кода, а первую толи пропускает, толи она затирается... что делать???
← →
Yegorchic © (2006-04-06 00:38) [1]
> if (d < strtofloat(edit4.Text)) and (d > strtofloat(edit3.
> Text)) then // d - значение в Edit
Может просто это условие не выполняется?
← →
Anatoly Podgoretsky © (2006-04-06 00:54) [2]А первая смысла не имеет, она полностью дублируется второй, затирает результаты первой.
← →
Бугага © (2006-04-06 05:27) [3]
> почему-то выполняет только вторую часть кода, а первую толи
> пропускает, толи она затирается... что делать???
С чего это ты взял? Со значения Edit6.Text?
← →
TUser © (2006-04-06 05:57) [4]Отключи оптимизацию, Project -> Options
← →
SergP. (2006-04-06 08:24) [5]
> Nick_serov (06.04.06 00:21)
Я не знаю логики твоей программы, но есть подозрение что ты забыл про begin ... end
← →
Anatoly Podgoretsky © (2006-04-06 09:10) [6]Бугага © (06.04.06 05:27) [3]
А тебе этого мало, это единственная видимая
← →
Nick_serov (2006-04-06 10:12) [7]
> Yegorchic © (06.04.06 00:38) [1]
>
>
> > if (d < strtofloat(edit4.Text)) and (d > strtofloat(edit3.
>
> > Text)) then // d - значение в Edit
>
>
> Может просто это условие не выполняется?
условие выполняется.... Одно затирает другое (если поменять местами части, то не выполняется другое)
То, что стоит последним, то и выполняется! Что сделать, чтобы избежать этого???? Приписать вторую часть к другому действиюнельзя
, т.к стоит все это на изменении таблицы!
← →
vovnuke © (2006-04-06 10:19) [8]а что ты хочешь получить?
← →
ЮЮ © (2006-04-06 10:20) [9]Заведи для a33 Edit7, ибо все что делается в первой части никому не нужно.
На кой ты считаешь a22, помещаешь результат в Edit6, если буквально тут же помещаешь туда a33?
> т.к стоит все это на изменении таблицы!
Не вишу где что-то на этом стоит :)
← →
Сергей М. © (2006-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) [11]
> Заведи для a33 Edit7,
нельзя другую Edit.... У меня есть диапазон значений
1 Диапазон: От (Edit3) до (edit4) и если число входит в этот диапазон, то оно увеличивается на процент (Edit5), записывается в Edit6.
2 Диапазон: От (Edit7) до (edit11) и если число входит в этот диапазон, то оно увеличивается на процент (edit15) и записывается в Edit6
Edit6 - это конечная цена!!! у меня этих диапазонов планируется еще 6 штук.
Все Begin ы и End ы проверил, программа компилируется, но муть такая выходит ((((((((((((((((((((((((((((((((((9
у меня, то, что стоит первым выполняется нормально, а когда встаю на ячейку, где число второго диапазона, то оно просто пишет его Edit6 без изменений (без надбавки процента)
← →
Nick_serov (2006-04-06 10:33) [12]
> Сергей М. © (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:41) [13]
> Сергей М. © (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,
Если число входит в первый диапазон, то оно просто округляется (хотя в первой части округления не писал!!!) и записывается без увеличения на процент!
← →
ЮЮ © (2006-04-06 10:43) [14]
> то оно увеличивается на процент (Edit5), записывается в
> Edit6.
не ОНО, а некое a22, которе нигде дальше не используется. d rfrbv ,skj? nfrbv b jcnftncz/
> и если число входит в этот диапазон, то оно увеличивается
> на процент (edit15) и записывается в Edit6
И где это ТО ОНО? Во второй части никак не затрагиваются то что считалось в первой. Т.е. что бы там не посчиталось - оно никому не нужно, если будет работать вторая часть.
← →
Nick_serov (2006-04-06 10:49) [15]
> ЮЮ © (06.04.06 10:43) [14]
> И где это ТО ОНО?
это оно, это переменная d. d - это значение выделенной в данный момент ячейки
edit2.Text := grid1.SelectedText;
d := strtofloat(edit2.Text);
← →
ЮЮ © (2006-04-06 11:03) [16]Ты действительно такой или только притворяешься?
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-й части кода. И чтобы там не делал, оно реально изменится только во второй.
← →
Плохиш © (2006-04-06 11:04) [17]
> Nick_serov (06.04.06 10:49) [15]
У тебя где-то проблемы с логикой и если тебе встроенный отладчик не помогает, то, наверное, стоит подумать о смене работы/специальности.
PS.
> у меня, то, что стоит первым выполняется нормально, а когда
> встаю на ячейку, где число второго диапазона, то оно просто
> пишет его Edit6 без изменений (без надбавки процента)
Это какой же здесь телепатор надо использовать?
← →
Сергей М. © (2006-04-06 11:07) [18]
> Nick_serov (06.04.06 10:41) [13]
if Условие1 and Условие2 then
... действие ..
else if Условие3 and Условие4 then
... другое действие ..
← →
Nick_serov (2006-04-06 11:13) [19]
> ЮЮ © (06.04.06 11:03) [16]
> Плохиш © (06.04.06 11:04) [17]
Спасибо, обосрали с ног до головы. это моя первая программа, до этого времени за Delphi сидел мало... я конечно понимаю, что до вашего уровня интеллекта мне как до Киева, но вы не делаете ни какой скидки на то, что топик я создал специально в разделе "Начинающим"...
← →
Nick_serov (2006-04-06 11:14) [20]
> Сергей М. © (06.04.06 11:07) [18]
Спасибо!!!
← →
Плохиш © (2006-04-06 11:51) [21]
> Nick_serov (06.04.06 11:13) [19]
Перед тем как плакать, скажи в каком месте этого топика указано, что если число входит в оба указанных диапазона, то выполняться должна только проверка для первого?
← →
ЮЮ © (2006-04-07 03:18) [22]>Плохиш © (06.04.06 11:51) [21]
P.S. Тем более из заголовка топика следует, что автор хочет, чтобы выполнялись обе части кода, а самого удовлетворило решение, когда выполняется лишь одна из двух. Из этой посылки я и исходил.
← →
Nick_serov (2006-04-07 08:21) [23]Всем назло у меня все получилось!!!! Работает для 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;
← →
Nick_serov (2006-04-07 08:22) [24]ТЕМА ЗАКРЫТА!!!
← →
Бугага © (2006-04-07 08:29) [25]
> edit6.Text := floattostr(a88);
> l := strtofloat(edit6.Text);
> l :=RoundTo(l,1);
> edit6.Text := floattostr(l);
Как-то много всего...
← →
Nick_serov (2006-04-07 08:33) [26]
> Как-то много всего...
главное - работает, доводкой кода займусь во втором релизе. )
← →
Плохиш © (2006-04-07 11:00) [27]
> Nick_serov (07.04.06 08:21) [23]
begin/end в своих условиях можешь выкинуть.
PS. Не раскрыта тема, что будет/должно быть, если число попадает в два диапазона
PPS. Но главное, что разобрался какой участок кода надо заключать в операторные скобки (begin..end) при использовании условий :-) Молодец!
← →
Nick_serov (2006-04-07 21:35) [28]
> Плохиш © (07.04.06 11:00) [27]
> PS. Не раскрыта тема, что будет/должно быть, если число
> попадает в два диапазона
Раскрываю: такого просто не может быть, потому-что - это диапазоны цен, и пользователь устанавливает значение сам (ну например: от 1500 до 3200, дальше идет ну никак не от 3100 до 5000, а от 3200 до 5000)
← →
SergP © (2006-04-08 05:37) [29]
> и программка получилась симпатишная =)))
:-)
Симпатишнее некуда...
Кстати: А если бы у тебя была сотня диапазонов, ты бы 100 раз воспользовался копипастом, или додумался бы применить цикл?
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.04.23;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.013 c