121

Re: Програма розв'язування задач з фізики! Для учнів 7-го класу.

А, так, вибачте. Змінював назву змінної і не помітив. Тільки можна не від 0, а від 1 - бо 0 вже взятий перед циклом.

Подякували: ProgramBandera1

122

Re: Програма розв'язування задач з фізики! Для учнів 7-го класу.

ProgramBandera написав:

Привіт найкращим програмістам України!

 var
  a, b, MaxRow, MaxColumn, MinRow, MinColumn: Integer;
  Max, Min: Extended;

Таки напевно потрібні мені рядки і стовпці.
Мені ж потрібно це ще якось вивести в поле RichEdit щоб користувач бачив що від чого віднімається

RichEdit1.Lines.Add ('l=h-h1');
    Variables[2,0] :=  Variables[MaxRow,MaxColumn] - Variables[MinRow,MinColumn];
    RichEdit1.Lines.Add (FloatToStr(Variables[MaxRow,MaxColumn]) + ' - ' + FloatToStr(Variables[MinRow,MinColumn]) + ' = ' + FloatToStr(Variables[2,0]));

123

Re: Програма розв'язування задач з фізики! Для учнів 7-го класу.

Variables[MaxRow,MaxColumn] має те ж значення, що й Max
Variables[MinRow,MinColumn] має те ж значення, що й Min
Маємо

    RichEdit1.Lines.Add ('l=h-h1');
    Variables[2,0] :=  Max - Min;
    RichEdit1.Lines.Add (FloatToStr(Max) + ' - ' + FloatToStr(Min) + ' = ' + FloatToStr(Variables[2,0]));
Подякували: ProgramBandera1

124

Re: Програма розв'язування задач з фізики! Для учнів 7-го класу.

koala написав:

Variables[MaxRow,MaxColumn] має те ж значення, що й Max
Variables[MinRow,MinColumn] має те ж значення, що й Min
Маємо

    RichEdit1.Lines.Add ('l=h-h1');
    Variables[2,0] :=  Max - Min;
    RichEdit1.Lines.Add (FloatToStr(Max) + ' - ' + FloatToStr(Min) + ' = ' + FloatToStr(Variables[2,0]));

Так пане koala, але я трохи неправильно написав, мені ось цей рядок коду потрібно вивести в RichEdit

RichEdit1.Lines.Add ('l=h-h1');

тут же може бути l=h-h1, l=h5-h1, l=h4-h, ... Тобто всі можливі варіани, тоді я зможу записати:
а от як його вивести я іще зараз подумаю

125

Re: Програма розв'язування задач з фізики! Для учнів 7-го класу.

Я дуже раджу вам розібратися із функцією Format.

Row := 48;
MaxColumn := 0;
MinColumn := 0;
for Column:=1 to 6 do begin
    if Variables[Row, MaxColumn] < Variables[Row, Column] then 
        MaxColumn:=Column;
    if Variables[Row, MinColumn] > Variables[Row, Column] then 
        MinColumn:=Column;
end;
Variables[2,0] := Variables[Row, MaxColumn] - Variables[Row, MinColumn];
RichEdit1.Lines.Add (Format('l = h%d - h%d',[MaxColumn,MinColumn]));
RichEdit1.Lines.Add (Format('%e - %e = %e',[Variables[Row, MaxColumn], Variables[Row, MinColumn], Variables[2,0]]));
Подякували: ProgramBandera, leofun012

126 Востаннє редагувалося topprogrammer (05.06.2019 18:06:26)

Re: Програма розв'язування задач з фізики! Для учнів 7-го класу.

Вибачте відповів на питання з попередньої сторінки...

Прихований текст

має бути так:

Max := Variables[48,0];
Min := Variables[48,0];
for i:=1 to 6 do begin
    if Max<Variables[48,i] then Max:=Variables[48,i];
    if Min>Variables[48,i] then Min:=Variables[48,i];
end;
... := Max-Min;

Або замість "і" використовуйте свою змінну, а цикл починається з 1 щоб зменшити к-ть ітерацій.
Пан koala зробив невелику помилку і використав не ту змінну.

Подякували: ProgramBandera1

127

Re: Програма розв'язування задач з фізики! Для учнів 7-го класу.

koala написав:

Я дуже раджу вам розібратися із функцією Format.

Пане koala я не можу зрозуміти цю функцію. Напевно що через те що в мене є:
h, h1, h2, h3, h4, h5, h6 а не h0, h1, h2, h3, h4, h5, h6
на місце вашого коду

RichEdit1.Lines.Add (Format('l = h%d - h%d',[MaxColumn,MinColumn]));

Я підставив такий рядок

RichEdit1.Lines.Add ('l=h' + FloatToStr(MaxColumn) + '-' + 'h' + FloatToStr(MinColumn));

і всерівно вона виводить h0 а не h. Але вже хоч так

Але в загальному мені ваша порада дуже допомогла! Дякую!

if (CheckBox2.Checked) or (CheckBox3.Checked) or (CheckBox4.Checked) or (CheckBox5.Checked) or (CheckBox6.Checked) or (CheckBox7.Checked) then
    begin
     MaxColumn := 0;
     MinColumn := 0;
     for Column :=0 to 6 do
     begin
      if Variables[48,MaxColumn] < Variables[48,Column] then
       MaxColumn:=Column;
      if Variables[48,MinColumn] > Variables[48,Column] then
       MinColumn:=Column;
     end;
     Variables[2,0] := Variables[48,MaxColumn] - Variables[48,MinColumn];
     RichEdit1.Lines.Add ('l=h' + FloatToStr(MaxColumn) + '-' + 'h' + FloatToStr(MinColumn));
     RichEdit1.Lines.Add (FloatToStr(Variables[48,MaxColumn]) + ' - ' + FloatToStr(Variables[48,MinColumn]) + ' = ' + FloatToStr(Variables[2,0]));
    end

   else

    begin
     RichEdit1.Lines.Add ('l=h+h1+h2+h3+h4+h5+h6');
     Variables[2,0] :=  Variables[48,0] + Variables[48,1] + Variables[48,2] + Variables[48,3] + Variables[48,4] + Variables[48,5] + Variables[48,6];
     RichEdit1.Lines.Add (FloatToStr(Variables[48,0]) + ' + ' + FloatToStr(Variables[48,1]) + ' + ' + FloatToStr(Variables[48,2]) + ' + ' +  FloatToStr(Variables[48,3]) + ' + ' +  FloatToStr(Variables[48,4]) + ' + ' +  FloatToStr(Variables[48,5]) + ' + ' +  FloatToStr(Variables[48,6]) + ' = ' + FloatToStr(Variables[2,0]));
    end;

128

Re: Програма розв'язування задач з фізики! Для учнів 7-го класу.

Скажіть, а я правильно зрозумів, що вам воно не лише для 48-го рядка потрібно, а ще такий самий код зі зміною пари цифр та символів (наприклад, 'l','h', Variables[2,0]) доведеться повторювати?
Ну і якась така функція вам дуже в нагоді стане:

function VarName(letter:String, number: Integer) : String;
begin
    if number = 0 then
        Result := letter
    else
        Result := letter + IntToStr(number);
end;
...
RichEdit1.Lines.Add('l=' + VarName('h',MaxColumn) + '-' + VarName('h',MinColumn));
{чи навіть}
RichEdit1.Lines.Add(Format('l = %s - %s',[VarName('h',MaxColumn), VarName('h',MinColumn)]));

Ну і звісно ж

RichEdit1.Lines.Add (Format('%f + %f + %f + %f + %f + %f = %f', [Variables[48,0], Variables[48,1], Variables[48,2], Variables[48,3], Variables[48,4], Variables[48,5], Variables[48,6], Variables[2,0]]));

Стрічка форматування функції Format - це дуже просто: все, крім %, виводиться як є, а % із чимось бере значення з другого параметра (масива). %d - десяткове ціле, %f - рухома кома, %s - стрічка. Якщо потрібен символ %, треба написати %%. І головне - ви одразу бачите, як виглядає стрічка в цілому, а не продираєтеся крізь ланцюжки плюсів і лапок.

Подякували: ProgramBandera, Torbins2

129

Re: Програма розв'язування задач з фізики! Для учнів 7-го класу.

Доброї ночі! Пане koala підкажіть функція Format взагалі виводить дійсні числа?
І якщо так то як мені переробити ось цей рядок

RichEdit1.Lines.Add('(' + FloatToStr(Variables[2,0]) + 'м. + ' + FloatToStr(Variables[2,1]) + 'м. + ' + FloatToStr(Variables[2,2]) + 'м.) ' + '/' + ' (' + FloatToStr(Variables[1,0]) + 'с. + ' + FloatToStr(Variables[1,1]) + 'с. + ' + FloatToStr(Variables[1,2]) + 'с.)');

130

Re: Програма розв'язування задач з фізики! Для учнів 7-го класу.

Загальний формат специфікаторів:

%["-"][ширина][.точність]тип

[] позначають необов'язковість поля
- - вирівняти ліворуч (без нього - праворуч)
ширина - мінімальна кількість символів, решта доповнюються пробілами.
точність - кількість знаків після десяткової крапки
тип: d - ціле десяткове
u - беззнакове десяткове (невід'ємне)
e - експоненційна форма дійсного числа (1.2345e3)
f - дійсне число з фіксованою крапкою (1234.5)
g - автоматичний вибір з e та f, що коротше (як на мене, іноді дає трохи нелогічні результати)
s - стрічка
x - шістнадцяткове ціле
Таким чином

Format('%8d %.3g %.3f %.3f',[5,0.0001,0.0001,0.0001]) -> "       5 0.0001 0.000 1.00E-004"

(якщо вірити FPC)

Подякували: leofun01, ProgramBandera2

131

Re: Програма розв'язування задач з фізики! Для учнів 7-го класу.

Усім добрий вечір! Я десь читав що в Delphi в налаштуваннях компілятора можна налаштувати деякі опції. Наразі мене цікавить щоб компілятор точно розрізняв мої ітеми в комбобоксах. Бо наразі він плутає  l - Шлях та l - Довжина він вибирає перший ітем l - Шлях а до останнього не доходить l - Довжина. Тому я вимушений записувати в коді номера ітемів, а хотілося б для наочності записувати їхній текст.

if ((ComboBox9.Text = 't - Час') or (ComboBox10.Text = 't - Час') or
     (ComboBox11.Text = 't - Час') or (ComboBox12.Text = 't - Час') or
     (ComboBox13.Text = 't - Час') or (ComboBox14.Text = 't - Час')) and
     ((ComboBox9.Text = 't1 - Час') or (ComboBox10.Text = 't1 - Час') or
     (ComboBox11.Text = 't1 - Час') or (ComboBox12.Text = 't1 - Час') or
     (ComboBox13.Text = 't1 - Час') or (ComboBox14.Text = 't1 - Час')) and
     ((ComboBox9.Text = 't2 - Час') or (ComboBox10.Text = 't2 - Час') or
     (ComboBox11.Text = 't2 - Час') or (ComboBox12.Text = 't2 - Час') or
     (ComboBox13.Text = 't2 - Час') or (ComboBox14.Text = 't2 - Час')) and
     ((ComboBox9.Text = 'l - Шлях') or (ComboBox10.Text = 'l - Шлях') or
     (ComboBox11.Text = 'l - Шлях') or (ComboBox12.Text = 'l - Шлях') or
     (ComboBox13.Text = 'l - Шлях') or (ComboBox14.Text = 'l - Шлях')) and
     ((ComboBox9.Text = 'l1 - Шлях') or (ComboBox10.Text = 'l1 - Шлях') or
     (ComboBox11.Text = 'l1 - Шлях') or (ComboBox12.Text = 'l1 - Шлях') or
     (ComboBox13.Text = 'l1 - Шлях') or (ComboBox14.Text = 'l1 - Шлях')) and
     ((ComboBox9.Text = 'l2 - Шлях') or (ComboBox10.Text = 'l2 - Шлях') or
     (ComboBox11.Text = 'l2 - Шлях') or (ComboBox12.Text = 'l2 - Шлях') or
     (ComboBox13.Text = 'l2 - Шлях') or (ComboBox14.Text = 'l2 - Шлях')) then

Буду дуже вдячний тому хто підкаже шлях до тієї галочки яку треба увімкнути в Delphi 10.3

132

Re: Програма розв'язування задач з фізики! Для учнів 7-го класу.

ProgramBandera написав:

Бо наразі він плутає  l - Шлях та l - Довжина він вибирає перший ітем l - Шлях а до останнього не доходить l - Довжина.

Можете це розшифрувати? Що значить "плутає"? Якби він плутав, то взагалі програма була б недетерміністична. Що саме ви робите, що він видає одне значення замість іншого?
Загалом правильно саме з номерами працювати, просто треба їх не прямо писати в коді (це зветься "магічними числами" і вважається поганим стилем), а проголошувати константи.

Подякували: ProgramBandera1

133 Востаннє редагувалося ProgramBandera (19.06.2019 23:06:36)

Re: Програма розв'язування задач з фізики! Для учнів 7-го класу.

Прописую код (ComboBox9.Text = 'l - Довжина') or (ComboBox10.Text = 'l - Довжина') а в RichEdit виводить l - Шлях
Тобто він находить текст який першим починається на (Ел) l і виводить його а далі не читає Шлях це чи Довжина. Так само і s - Переміщення та S - Площа і так далі.  s - Переміщення стоїть першим ітемом за площу і він присвоює не S - Площа значення бо цей ітем один з останніх а s - Переміщення. і от я мушу писати наприклад не

(ComboBox9.Text = 'l - Довжина') or (ComboBox10.Text = 'l - Довжина')

а

(ComboBox9.ItemIndex = 56) or (ComboBox10.ItemIndex = 56)

а це для наочності в коді не є добре, хотілосяб записувати не
ComboBox9.ItemIndex = 56
а
ComboBox9.Text = 'l - Довжина'

134

Re: Програма розв'язування задач з фізики! Для учнів 7-го класу.

Вибачте, але ми тут не телепати. Код

(ComboBox9.Text = 'l - Довжина') or (ComboBox10.Text = 'l - Довжина')

ніяк не може вивести в RichEdit "l - Шлях". Наведіть повний фрагмент коду.

Подякували: ProgramBandera1

135 Востаннє редагувалося ProgramBandera (19.06.2019 23:53:12)

Re: Програма розв'язування задач з фізики! Для учнів 7-го класу.

koala написав:

Вибачте, але ми тут не телепати. Код

(ComboBox9.Text = 'l - Довжина') or (ComboBox10.Text = 'l - Довжина')

ніяк не може вивести в RichEdit "l - Шлях". Наведіть повний фрагмент коду.

Я вже  наразі не згадаю де саме в коді я знайшов цю помилку но я зараз записую ось так

if ((ComboBox9.ItemIndex = 7) or (ComboBox10.ItemIndex = 7) or                // l - Шлях
     (ComboBox11.ItemIndex = 7) or (ComboBox12.ItemIndex = 7) or
     (ComboBox13.ItemIndex = 7) or (ComboBox14.ItemIndex = 7)) and
     ((ComboBox9.ItemIndex = 21) or (ComboBox10.ItemIndex = 21) or              // v - Швидкість
     (ComboBox11.ItemIndex = 21) or (ComboBox12.ItemIndex = 21) or
     (ComboBox13.ItemIndex = 21) or (ComboBox14.ItemIndex = 21)) then
  begin
   Definition := CHAS;
   RichEdit1.Lines.Add(Definition);
   Definition := EmptyLine;
   RichEdit1.Lines.Add(Definition);
   RichEdit1.Lines.Add ('Визначаємо час прямолінійного рівномірного руху.');
   Pict := TPicture.Create;
   try
    Pict.LoadFromFile('Формули\Час прямолінійного рівномірного руху tlv.jpg');
    Clipboard.Assign(Pict);
    RichEdit1.PasteFromClipboard;
   finally
    Pict.Free;
   end;
   RichEdit1.Lines.Add(Definition);
   Variables[1,0] :=  Variables[2,0] / Variables[4,0];
   RichEdit1.Lines.Add (FloatToStr(Variables[2,0]) + 'м. / ' + FloatToStr(Variables[4,0]) + 'м.с. = ' + FloatToStr(Variables[1,0]) + 'c.');
   undo := False;
   Output_Value := True;
  end

  else

  if ((ComboBox9.ItemIndex = 14) or (ComboBox10.ItemIndex = 14) or              // s - Переміщення
     (ComboBox11.ItemIndex = 14) or (ComboBox12.ItemIndex = 14) or
     (ComboBox13.ItemIndex = 14) or (ComboBox14.ItemIndex = 14)) and
     ((ComboBox9.ItemIndex = 21) or (ComboBox10.ItemIndex = 21) or              // v - Швидкість
     (ComboBox11.ItemIndex = 21) or (ComboBox12.ItemIndex = 21) or
     (ComboBox13.ItemIndex = 21) or (ComboBox14.ItemIndex = 21)) then
  begin
   Definition := CHAS;
   RichEdit1.Lines.Add(Definition);
   Definition := EmptyLine;
   RichEdit1.Lines.Add(Definition);
   RichEdit1.Lines.Add ('Визначаємо час прямолінійного рівномірного руху.');
   Pict := TPicture.Create;
   try
    Pict.LoadFromFile('Формули\Час прямолінійного рівномірного руху tsv.jpg');
    Clipboard.Assign(Pict);
    RichEdit1.PasteFromClipboard;
   finally
    Pict.Free;
   end;
   RichEdit1.Lines.Add(Definition);
   Variables[1,0] := Variables[3,0] / Variables[4,0];
   RichEdit1.Lines.Add (FloatToStr(Variables[3,0]) + 'м. / ' + FloatToStr(Variables[4,0]) + 'м.с. = ' + FloatToStr(Variables[1,0]) + 'с.');
   undo := False;
   Output_Value := True;
  end

  else

а не

if ((ComboBox9.Text = 'l - Шлях') or (ComboBox10.Text = 'l - Шлях') or
     (ComboBox11.Text = 'l - Шлях') or (ComboBox12.Text = 'l - Шлях') or
     (ComboBox13.Text = 'l - Шлях') or (ComboBox14.Text = 'l - Шлях')) and
     ((ComboBox9.Text = 'v - Швидкість') or (ComboBox10.Text = 'v - Швидкість') or
     (ComboBox11.Text = 'v - Швидкість') or (ComboBox12.Text = 'v - Швидкість') or
     (ComboBox13.Text = 'v - Швидкість') or (ComboBox14.Text = 'v - Швидкість')) then
  begin
   Definition := CHAS;
   RichEdit1.Lines.Add(Definition);
   Definition := EmptyLine;
   RichEdit1.Lines.Add(Definition);
   RichEdit1.Lines.Add ('Визначаємо час прямолінійного рівномірного руху.');
   Pict := TPicture.Create;
   try
    Pict.LoadFromFile('Формули\Час прямолінійного рівномірного руху tlv.jpg');
    Clipboard.Assign(Pict);
    RichEdit1.PasteFromClipboard;
   finally
    Pict.Free;
   end;
   RichEdit1.Lines.Add(Definition);
   Variables[1,0] :=  Variables[2,0] / Variables[4,0];
   RichEdit1.Lines.Add (FloatToStr(Variables[2,0]) + 'м. / ' + FloatToStr(Variables[4,0]) + 'м.с. = ' + FloatToStr(Variables[1,0]) + 'c.');
   undo := False;
   Output_Value := True;
  end

  else

  if ((ComboBox9.Text = 's - Переміщення') or (ComboBox10.Text = 's - Переміщення') or
     (ComboBox11.Text = 's - Переміщення') or (ComboBox12.Text = 's - Переміщення') or
     (ComboBox13.Text = 's - Переміщення') or (ComboBox14.Text = 's - Переміщення')) and
     ((ComboBox9.Text = 'v - Швидкість') or (ComboBox10.Text = 'v - Швидкість') or
     (ComboBox11.Text = 'v - Швидкість') or (ComboBox12.Text = 'v - Швидкість') or
     (ComboBox13.Text = 'v - Швидкість') or (ComboBox14.Text = 'v - Швидкість')) then
  begin
   Definition := CHAS;
   RichEdit1.Lines.Add(Definition);
   Definition := EmptyLine;
   RichEdit1.Lines.Add(Definition);
   RichEdit1.Lines.Add ('Визначаємо час прямолінійного рівномірного руху.');
   Pict := TPicture.Create;
   try
    Pict.LoadFromFile('Формули\Час прямолінійного рівномірного руху tsv.jpg');
    Clipboard.Assign(Pict);
    RichEdit1.PasteFromClipboard;
   finally
    Pict.Free;
   end;
   RichEdit1.Lines.Add(Definition);
   Variables[1,0] := Variables[3,0] / Variables[4,0];
   RichEdit1.Lines.Add (FloatToStr(Variables[3,0]) + 'м. / ' + FloatToStr(Variables[4,0]) + 'м.с. = ' + FloatToStr(Variables[1,0]) + 'с.');
   undo := False;
   Output_Value := True;
  end

  else

Компілятор якби знаходить перше входження (строки) в (подстроку) а що там далі він не дивиться, якось так, наскільки я вам можу пояснити.
Чи він не враховує усі or and
я вже не пам'ятаю от тыльки не зручно писати

if ((ComboBox9.ItemIndex = 7) or (ComboBox10.ItemIndex = 7) or                // l - Шлях
     (ComboBox11.ItemIndex = 7) or (ComboBox12.ItemIndex = 7) or
     (ComboBox13.ItemIndex = 7) or (ComboBox14.ItemIndex = 7)) and
     ((ComboBox9.ItemIndex = 21) or (ComboBox10.ItemIndex = 21) or              // v - Швидкість
     (ComboBox11.ItemIndex = 21) or (ComboBox12.ItemIndex = 21) or
     (ComboBox13.ItemIndex = 21) or (ComboBox14.ItemIndex = 21)) then

136

Re: Програма розв'язування задач з фізики! Для учнів 7-го класу.

Так код, який ви наводили вище, не еквівалентний цьому. Ви скоротили варіанти?
Ну і покажу один фокус, як можна це спростити. Є такий тип в Delphi - set, множина. Множини бувають лише злічених типів, тому перехід на стрічки тут не підійде.

var ComboboxIndexes: set of integer;
....
ComboboxIndexes = [ComboBox9.ItemIndex, ComboBox10.ItemIndex, ComboBox11.ItemIndex, 
                   ComboBox12.ItemIndex, ComboBox13.ItemIndex, ComboBox14.ItemIndex];
if (7 in ComboboxIndexes) and (21 in ComboboxIndexes) then //l - Шлях та v - Швидкість
...
else if (14 in ComboboxIndexes) and (21 in ComboboxIndexes) then //s - Переміщення та v - Швидкість

Також можна (і треба) вводити імена для магічних чисел, наприклад, константи:

const WAY:integer = 7;
      DISPLACEMENT:integer = 14;
      SPEED:integer = 21;
...
if WAY in ComboboxIndexes then ... //а це практично людською мовою написано

Але, як я розумію, вам треба перевіряти комбобокси не на одне значення, а на одне з групи - l, l1, l2 і т.д. Ну ок:

var WayValues, DisplacementValues, SpeedValues, ComboboxIndexes : set of integer;
...
    WayValues = [7..13]; //скорочення для [7,8,9,10,11,12,13]
    DisplacementValues = [14..20];
    SpeedValues = [21..27];
    ComboboxIndexes = [ComboBox9.ItemIndex, ComboBox10.ItemIndex, ComboBox11.ItemIndex, 
                       ComboBox12.ItemIndex, ComboBox13.ItemIndex, ComboBox14.ItemIndex];
    if WayValues * ComboboxIndexes <> [] and SpeedValues * ComboboxIndexes  <> [] then //* - перетин множин
Подякували: ProgramBandera, Torbins2

137 Востаннє редагувалося ProgramBandera (20.06.2019 20:33:54)

Re: Програма розв'язування задач з фізики! Для учнів 7-го класу.

koala написав:

Так код, який ви наводили вище, не еквівалентний цьому. Ви скоротили варіанти?
Ну і покажу один фокус, як можна це спростити. Є такий тип в Delphi - set, множина. Множини бувають лише злічених типів, тому перехід на стрічки тут не підійде.

var ComboboxIndexes: set of integer;
....
ComboboxIndexes = [ComboBox9.ItemIndex, ComboBox10.ItemIndex, ComboBox11.ItemIndex, 
                   ComboBox12.ItemIndex, ComboBox13.ItemIndex, ComboBox14.ItemIndex];
if (7 in ComboboxIndexes) and (21 in ComboboxIndexes) then //l - Шлях та v - Швидкість
...
else if (14 in ComboboxIndexes) and (21 in ComboboxIndexes) then //s - Переміщення та v - Швидкість

Оце класна порада пане koala, дякую! Вже буду пробувати прописувати її в коді щоб скоротити ось це неподобство

if ((ComboBox9.ItemIndex = 7) or (ComboBox10.ItemIndex = 7) or                // l - Шлях
     (ComboBox11.ItemIndex = 7) or (ComboBox12.ItemIndex = 7) or
     (ComboBox13.ItemIndex = 7) or (ComboBox14.ItemIndex = 7)) and
     ((ComboBox9.ItemIndex = 21) or (ComboBox10.ItemIndex = 21) or              // v - Швидкість
     (ComboBox11.ItemIndex = 21) or (ComboBox12.ItemIndex = 21) or
     (ComboBox13.ItemIndex = 21) or (ComboBox14.ItemIndex = 21)) then

ну а імена для магічних чисел я не бачу сенсу вводити, для чого? За умови якщо я вас правильно зрозумів!!!
В фізиці s, s1, s2, s3, s4, s5, s6 хоч і одне фізичне явище, але це зовсім різні змінні!!! Тому групувати їх ні в якому разі не можна вони в одній процедурі майже ніколи не пересікаються за виключенням того що в їх можуть бути тільки однакові цифрові значення.
Наприклад s = 30 метрів s1 = 30 метрів
Но!!!!
s - це  переміщення автомобіля, а
s1 - це переміщення людини.
s шукається за допомогою змінних t*v, а
s1 за допомогою змінних t1*v1
Тому я в процедурі для переміщення s не можу використати змінні t1 та v3 і так далі.
t, t1, t2.... це змінні для розв'язування задач по діям.
В першій дії визначаємо перший час t для першого тіла
В другій дії визначаємо другий час для другого тіла
....... і ак далі.
Але іще раз підкреслюю це за умови якщо я вас правильно зрозумів.
PS: хоча я можливо таки і не зрозумів правильно значення ось цього рядка коду

if WayValues * ComboboxIndexes <> [] and SpeedValues * ComboboxIndexes  <> [] then //* - перетин множин

138

Re: Програма розв'язування задач з фізики! Для учнів 7-го класу.

От халепа!!!!! І це мені не підійшло

ComboboxIndexes: set of integer;

Видало помилку

Набори можуть мати не більше 256 елементів

а в мене їх 378  *DONT_KNOW*

139

Re: Програма розв'язування задач з фізики! Для учнів 7-го класу.

"ми зрозуміли, що настав час рефакторити код, коли отримали повідомлення компілятора "більше 256 вкладених if не підтримується".

Подякували: ProgramBandera1

140 Востаннє редагувалося ProgramBandera (20.06.2019 22:52:09)

Re: Програма розв'язування задач з фізики! Для учнів 7-го класу.

koala написав:

"ми зрозуміли, що настав час рефакторити код, коли отримали повідомлення компілятора "більше 256 вкладених if не підтримується".

Напевно що if тут не причому, я переніс

var ComboboxIndexes: set of integer;

в локальну процедуру Time в який 7 чи 8 вкладених if результат той самий видало ту ж помилку.
Я думаю що це ItemIndex перевищує 256 значень. А от їх в мене поки що 378, але буде іще більше.
Тут потрібно set якось замінити щоб визначало множину більшу ніж 255 різних значень.