Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.04.2021, 23:27   #1
shkolnik45
Пользователь
 
Регистрация: 16.04.2021
Сообщений: 19
По умолчанию ошибка missing operator or semicolon

Подскажите пожалуйста в чем ошибка.(подчеркнута строка в процедуре для кнопки, на которую указывает делфи и выдает ошибку "missing operator or semicolon")

Код:
procedure push (var stack:Tstack; var size:integer; x:mn);
begin
  size:=size+1;
  Stack[size]:=x;
end;

function top(var stack:Tstack; var size:integer):mn;
begin
  top:=stack[size];
end;

procedure pop;
begin
size:=size-1;
end;

procedure TForm1.Button1Click(Sender: TObject);
var    //w,h,m,r1,r2,d,
x,y,j:integer;
i: integer;
s:string;
begin
//Перерисовка белым
image1.Canvas.Brush.Color:=clwhite;
Image1.Canvas.FloodFill(231,139,clblack,fsborder);
Image1.Canvas.FloodFill(268,121,clblack,fsborder);
Image1.Canvas.FloodFill(268,164,clblack,fsborder);
Image1.Canvas.FloodFill(325,134,clblack,fsborder);
Image1.Canvas.FloodFill(266,222,clblack,fsborder);
Image1.Canvas.FloodFill(301,180,clblack,fsborder);
Image1.Canvas.FloodFill(238,180,clblack,fsborder);

St:=ListBox1.Items[ListBox1.ItemIndex];
with ListBox1 do
begin
st:=Items[ItemIndex];
end;

A:=[1,2,5,6];
B:=[2,3,5,4];
C:=[4,5,6,7];
size:=0;
res1:=[];
res2:=[];
res3:=[];
res:=[];
for i := 1 to length(st) do
begin
  case st[i] of
     '|': begin
          if size>1
             then begin
             res1:= top(stack,size); // ошибка появляется здесь
             pop;
             res2:=top(stack,size);
             pop;
             res:=res1+res2; end
                 else begin res3:= top(stack,size); res:=res+res3; end; end;
     '&': begin
          if size>1
             then begin
             res1:= top(stack,size);
             pop(size);
             res2:=top (stack,size);
             pop(size);
             res:=res1*res2; end
                 else begin res3:= top(stack,size); res:=res*res3; end; end;
     'A': push(stack,size,A);
     'B': push(stack,size,B);
     'C': push(stack,size,C);

end;
end;

Последний раз редактировалось BDA; 19.04.2021 в 21:32.
shkolnik45 вне форума Ответить с цитированием
Старый 17.04.2021, 08:15   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

что такое mn?(приведите объявление)
Цитата:
Код:
unction top(var stack:Tstack; var size:integer):mn;
что такое res1 ?(аналогично)
Цитата:
Код:
res1:=[];
Цитата:
Код:
res1:= top(stack,size);
и код на сайте офомляется с [ CODE ]
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 19.04.2021, 19:40   #3
shkolnik45
Пользователь
 
Регистрация: 16.04.2021
Сообщений: 19
По умолчанию

evg_m,


Код:
type
mn=set of 1..7;
Tstack = array [1..100] of mn;

var
  Form1: TForm1;
  Stack: Tstack;
  size: integer;
  A,B,C,res,res1,res2,res3:mn;
  st:string;
p.s. в паскале код работал, а в делфи вот ошибка появилась
shkolnik45 вне форума Ответить с цитированием
Старый 19.04.2021, 21:22   #4
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,536
По умолчанию

Код:
Image1.Canvas.FloodFill(231,139,clblack,fsborder);
Пробел туда враги втиснули .
Ну а за отсутствие форматирования я бы сек розгами по #опе, пока не пройдёт лень и не возникнет желание писать читаемые исходники.
Ну и чисто по стилю. Затевать
Код:
with ListBox1 do
begin
st:=Items[ItemIndex];
end;
ради одного оператора вместо
Код:
st:=ListBox1.Items[ItemIndex];

Последний раз редактировалось digitalis; 19.04.2021 в 21:33.
digitalis вне форума Ответить с цитированием
Старый 19.04.2021, 21:28   #5
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
Пробел туда враги втиснули
Ну не враги, а движок форума Если это обычный текст (например, как тут, когда код не обрамлен тегами), то "слова" не могут быть длиннее 35 символов. Добавил CODE тег, но, к сожалению, не весь код изначально был отформатирован.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 19.04.2021 в 21:33.
BDA вне форума Ответить с цитированием
Старый 19.04.2021, 21:34   #6
shkolnik45
Пользователь
 
Регистрация: 16.04.2021
Сообщений: 19
По умолчанию

digitalis,
Да, там нет пробела, просто код не знал как правильно тут оформлять и вставил как текст обычный.
shkolnik45 вне форума Ответить с цитированием
Старый 19.04.2021, 21:38   #7
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,536
По умолчанию

Ну вот, теперь можно прочитать, не матерясь.
digitalis вне форума Ответить с цитированием
Старый 19.04.2021, 21:39   #8
shkolnik45
Пользователь
 
Регистрация: 16.04.2021
Сообщений: 19
По умолчанию

Код:
type
mn=set of 1..7;
Tstack = array [1..100] of mn;
  TForm1 = class(TForm)
    ListBox1: TListBox;
    Image1: TImage;
    Label1: TLabel;
    Button1: TButton;


    procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Button1Click(Sender: TObject);

    procedure FormCreate(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  Stack: Tstack;
  size: integer;
  A,B,C,res,res1,res2,res3:mn;
  st:string;



implementation

{$R *.dfm}


procedure push (var stack:Tstack; var size:integer; x:mn);
begin
  size:=size+1;
  Stack[size]:=x;
end;

function top(var stack:Tstack; var size:integer):mn;
begin
  top:=stack[size];
end;

procedure pop;
begin
size:=size-1;
end;

procedure TForm1.Button1Click(Sender: TObject);
var  
x,y,j:integer;
i: integer;
s:string;
begin
//Перерисовка белым
image1.Canvas.Brush.Color:=clwhite;
Image1.Canvas.FloodFill(231,139,clblack,fsborder);
Image1.Canvas.FloodFill(268,121,clblack,fsborder);
Image1.Canvas.FloodFill(268,164,clblack,fsborder);
Image1.Canvas.FloodFill(325,134,clblack,fsborder);
Image1.Canvas.FloodFill(266,222,clblack,fsborder);
Image1.Canvas.FloodFill(301,180,clblack,fsborder);
Image1.Canvas.FloodFill(238,180,clblack,fsborder);

St:=ListBox1.Items[ListBox1.ItemIndex];
with ListBox1 do
begin
st:=Items[ItemIndex];
end;

A:=[1,2,5,6];
B:=[2,3,5,4];
C:=[4,5,6,7];
size:=0;
res1:=[];
res2:=[];
res3:=[];
res:=[];
for i := 1 to length(st) do
begin
  case st[i] of
     '|': begin
          if size>1
             then begin
             res1:=top(stack,size);
             pop;
             res2:=top(stack,size);
             pop;
             res:=res1+res2; end
                 else begin res3:= top(stack,size); res:=res+res3;
                      end;
            end;
     '&': begin
          if size>1
             then begin
             res1:= top(stack,size);
             pop(size);
             res2:=top (stack,size);
             pop(size);
             res:=res1*res2; end
                 else begin res3:= top(stack,size); res:=res*res3;
                      end;
          end;
     'A': push(stack,size,A);
     'B': push(stack,size,B);
     'C': push(stack,size,C);

      end;
end;
вот так думаю будет лучше.
shkolnik45 вне форума Ответить с цитированием
Старый 19.04.2021, 21:47   #9
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

Переименуйте свою функцию top, а то дельфи думает, что вы не её вызываете, а свойство top у формы.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 19.04.2021, 21:49   #10
shkolnik45
Пользователь
 
Регистрация: 16.04.2021
Сообщений: 19
По умолчанию

BDA,
И правда. Спасибо большое, мне даже в голову такое не пришло.
shkolnik45 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Missing operator or semicolon MiaKotova Общие вопросы Delphi 2 09.07.2015 08:41
Ошибка в делфи Missing operator or semicolon Аlex124rus Помощь студентам 2 20.05.2015 20:54
Missing operator or semicolon ошибка в алгоритме Начинающий_Дэльфер Помощь студентам 7 07.12.2012 18:01
Missing operator or semicolon impulsgraw Общие вопросы Delphi 7 04.12.2011 02:59
возникает ошибка Missing operator or semicolon (классы) fate Общие вопросы Delphi 16 22.02.2011 19:12