1 Востаннє редагувалося ProgramBandera (20.01.2019 15:56:28)

Тема: Що означає ця помилка???

[Error] Unit1.pas(2448): Statement expected but 'PROCEDURE' found
[Error] Unit1.pas(4774): Statement expected but 'PROCEDURE' found
[Error] Unit1.pas(7102): Statement expected but 'PROCEDURE' found
[Error] Unit1.pas(9429): Statement expected but 'PROCEDURE' found
[Fatal Error] FIZIKA2.1.dpr(6): Could not compile used unit 'Unit1.pas'


Ось переклад

Заява очікується, але знайдено "ПРОЦЕДУРА"
Заява очікується, але знайдено "ПРОЦЕДУРА"
Заява очікується, але знайдено "ПРОЦЕДУРА"
Заява очікується, але знайдено "ПРОЦЕДУРА"
Не вдалося скомпілювати використану одиницю "Unit1.pas"

Частина коду

procedure TForm1.FindTheSecondLine;                                          
begin
{Якщо в ComboBox2 користувач вибрав t1 - час}

  if  ComboBox2.ItemIndex = 0 then                                           
   begin
      if ( ComboBox6.ItemIndex = 3) then                                    
        begin
          Beep;                                                             
          ShowMessage ('Час не може вимірюватись в міліметрах!');            
          ComboBox6.ItemIndex := -1;                                         
          RichEdit1.Clear;                                                   
        end
      else                                                           
.................
................
..................

      if (ComboBox6.ItemIndex = 7) then                                     
        begin
          Beep;                                                             
          ShowMessage ('Швидкість не може вимірюватись в кілометрах!');     
          ComboBox6.ItemIndex := -1;                                        
          RichEdit1.Clear;                                                  
        end;
     end;

end;    

2

Re: Що означає ця помилка???

ProgramBandera написав:
Unit1.pas(9429)
ComboBox6

У вас програма з 1 файла на 9429+ рядків, а змінні звуться по типу ComboBox6?
Мої співчуття. Як ви це знущання витримуєте?

Що ж до помилки, то, швидше за все, ви не закрили попередню процедуру, тому компілятор очікує команди чи виразу (statement), а знаходить ключове слово procedure. Перевірте всі begin-end в попередніх процедурах.

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

3 Востаннє редагувалося koala (20.01.2019 16:49:15)

Re: Що означає ця помилка???

Глянув код детальніше. Ви що, всі можливі комбінації двох (чи навіть більше) комбобоксів розбираєте?
Дуже раджу для початку створити щось на кшталт

procedure ReportError(what:String, units: String);
begin
    Beep;                                                             
    ShowMessage(what+' не може вимірюватись в '+units+'!');
    ComboBox6.ItemIndex := -1;                                         
    RichEdit1.Clear;        
end;

А потім можна робити

if ComboBox6.ItemIndex = 7 then
    ReportError('Швидкість','кілометрах');

код уже скоротиться втричі, і beep ніде не пропустите. А якщо ці ж значення прописані в комбобоксах, то всю обробку помилки можна зібрати в

if ... then
    ...//прийнятні дані
else 
    ReportError(cmbParameter.Items[cmbParameter.Index],  cmbUnits.Items[cmbUnits.Index]);
//cmbParameter - це ComboBox2, cmbUnits - ComboBox6 - погодьтеся, так значно легше зрозуміти, про що мова
Подякували: ProgramBandera1

4 Востаннє редагувалося ProgramBandera (20.01.2019 17:30:46)

Re: Що означає ця помилка???

koala написав:

Глянув код детальніше. Ви що, всі можливі комбінації двох (чи навіть більше) комбобоксів розбираєте?
Дуже раджу для початку створити щось на кшталт

procedure ReportError(what:String, units: String);
begin
    Beep;                                                             
    ShowMessage(what+' не може вимірюватись в '+units+'!');
    ComboBox6.ItemIndex := -1;                                         
    RichEdit1.Clear;        
end;

А потім можна робити

if ComboBox6.ItemIndex = 7 then
    ReportError('Швидкість','кілометрах');

код уже скоротиться втричі, і beep ніде не пропустите. А якщо ці ж значення прописані в комбобоксах, то всю обробку помилки можна зібрати в

if ... then
    ...//прийнятні дані
else 
    ReportError(cmbParameter.Items[cmbParameter.Index],  cmbUnits.Items[cmbUnits.Index]);
//cmbParameter - це ComboBox2, cmbUnits - ComboBox6 - погодьтеся, так значно легше зрозуміти, про що мова

Коомбобоксів всього 20. )))

Змушений розбирати кожний комбобокс тому що, коли в перому вибирають наприклад час  ItemIndex0...2, то в тому що поруч я не можу зробити ItemIndex3.... ItemIndex250 якось приховані. Так як программа з фізики для вирішення задач сьомого класу, то дітям треба конкретно вказати де вони помилились вводячи параметри.
Для цього і виводжу повідомлення
Час не може вимірюватись в метрах за секунду
........................
......................
Шлях не може вимірюватись в кілометрах за секунду
Шлях не може вимірюватись секундах
....................
.........................
...................
Швидкість не може вимірюватись в метрах
Швидкість не може вимірюватись в секундах
..............
..........
............
І так по темі до кінця підручника з фізики. (((((((

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

5

Re: Що означає ця помилка???

Програмування краще вдається лінивим :)
Підійдіть з іншого боку - вам не ХОВАТИ треба, а ПОКАЗУВАТИ.

const UNITS: Array[1..5] of String = ('кілометри на годину','метри на секунду','милі на годину','міліметри на секунду','метри на хвилину');
const SPEEDS_LOCAL: Array[1..5] of String = ('кілометрах на годину','метрах на секунду','милях на годину','міліметрах на секунду','метрах на хвилину');

procedure cmbParameter.OnChange(Self:TControl); //чи як там воно проголошується - все одно автоматом робиться
var i:integer;
begin
    cmpUnits.Items.Clear;
    //"сховали" (тобто видалили) все
    ...
    if cmbParameter.Index = 6:
        for i in Low(SPEEDS) to High(SPEEDS) do
            cmpUnits.Items.Add(SPEEDS[i]);
    ...
    //все, показали лише потрібні значення
end;
...
ReportError(cmbParameter.Items[cmbParameter.Index],  {тут трохи складніше}SPEEDS_LOCAL[cmbUnits.Index]);

У принципі, за деякої фантазії можна навіть позбирати всі ці стрічки у двовимірні масиви (я так розумію, вони у вас будуть зубчасті, тому це буде Array of TStringList). Це трохи некрасиво в Паскалі, але точно краще, ніж у вас зараз.

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

6

Re: Що означає ця помилка???

koala написав:

Програмування краще вдається лінивим :)
Підійдіть з іншого боку - вам не ХОВАТИ треба, а ПОКАЗУВАТИ.

const UNITS: Array[1..5] of String = ('кілометри на годину','метри на секунду','милі на годину','міліметри на секунду','метри на хвилину');
const SPEEDS_LOCAL: Array[1..5] of String = ('кілометрах на годину','метрах на секунду','милях на годину','міліметрах на секунду','метрах на хвилину');

procedure cmbParameter.OnChange(Self:TControl); //чи як там воно проголошується - все одно автоматом робиться
var i:integer;
begin
    cmpUnits.Items.Clear;
    //"сховали" (тобто видалили) все
    ...
    if cmbParameter.Index = 6:
        for i in Low(SPEEDS) to High(SPEEDS) do
            cmpUnits.Items.Add(SPEEDS[i]);
    ...
    //все, показали лише потрібні значення
end;
...
ReportError(cmbParameter.Items[cmbParameter.Index],  {тут трохи складніше}SPEEDS_LOCAL[cmbUnits.Index]);

У принципі, за деякої фантазії можна навіть позбирати всі ці стрічки у двовимірні масиви (я так розумію, вони у вас будуть зубчасті, тому це буде Array of TStringList). Це трохи некрасиво в Паскалі, але точно краще, ніж у вас зараз.


Величезне вам дякую!

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

В мене ще питань по коду буде багато в цій програмі. Так як знайомих професійних програмістів немає, кому можна на пошту скинути проєкт щоб переглянули і щось підказали, чи зробили шаблон, то помалу буду шукати в книгах, інтернеті чи запитувати тут на форумі.

7

Re: Що означає ця помилка???

Якщо проект не секретний, то можна на github.com викласти. Тоді усі бажаючі зможуть легко подивитися, що ви там творите.
І оце іще можете почитати: http://www.delphikingdom.com/asp/viewit … alogid=342 Для початківців дуже корисна стаття, хоч і написана російською.

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

8

Re: Що означає ця помилка???

Torbins написав:

Якщо проект не секретний, то можна на github.com викласти. Тоді усі бажаючі зможуть легко подивитися, що ви там творите.
І оце іще можете почитати: http://www.delphikingdom.com/asp/viewit … alogid=342 Для початківців дуже корисна стаття, хоч і написана російською.


Ще поки не ма що виложувати. Написав код який виводить в поле RichEdit1

20.01.2019 20:15:51
------------
Який шлях проїде автомобіль рухаючись зі видкістю 90 км/год за 15 хвилин?

------------
Знайти
s1 - Шлях  км. - Кілометр
 
 
 
------------
Дано
v1 - Швидкість  90  км/год. - Кілометрів за годину
t1 - час  15  хв. - Хвилин
   
   
   
   
------------
CI
v1 := v1*1000/3600
v1 - Швидкість  =  25  Метрів за секунду
t1 := t1*60
t1 - час  =  900  Секунд
------------
Розв'язання

Звичайно не все так як хотілося б. Не можу намалювити вертикальну лінію якаб розділяла ДАНО та СІ

Далі треба думати як з чотирьох ComboBox які знаходяться в ЗНАЙТИ і шести ComboBox які знаходяться ДАНО написати код щоб він брав тільки заповнені поля і підставляв їх в потрібні формули. Ще треба або процедурами або константами типу string мыж цими прорахунками виводити визначення фызичних явищ. Одним словом роботи ще багато!!!