Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
3-1140686213
ganda
2006-02-23 12:16
2006.04.23
MyODBC+ADO


8-1128977517
Alko
2005-10-11 00:51
2006.04.23
Обратный отсчте времени


2-1144670546
std
2006-04-10 16:02
2006.04.23
AdoDataSet


2-1144653501
Volodya_
2006-04-10 11:18
2006.04.23
Выключение питания


3-1141203381
Alex_d
2006-03-01 11:56
2006.04.23
IAppServer





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский