Что необходимо сделать что бы можно было перейти из case of к процедурам?

type
  Shoes = record
    Art: string[15];
    Name: string[20];
    Kol: integer;
    Price: real;
  end;
procedure vvod_obuvi;
var q:integer; F: 
  file of Shoes;  
  Boty: Shoes;
begin
  assign(F,'Lev');
  reset(F);
    while q <> 0 do
    begin
      Seek(F,FileSize(F));
      writeln('Введите артикул');
      readln(Boty.Art);
      
      writeln('Введите название обуви');
      readln(Boty.Name);
      
      writeln('Введите количество пар');
      readln(Boty.Kol);
      
      writeln('Введите цену за пару');
      readln(Boty.Price);
      write(F,Boty);
      writeln('Добавить новую обувь? Если да, введите 1,если нет - введите 0');
      readln(q);
    end;
    close(F);
end;

procedure poisk_ar;
var q:integer; 
Art1: string; 
F: file of Shoes;  
Boty: Shoes;

begin 
  assign(F,'lev');
  Reset(F);
  while q<>0 do
    writeln('Введите нужный вам артикул');
    readln(Art1);
    writeln('Введенный вами артикул: ',Art1);
    while Eof(F) <> True do
    begin
      read(F, Boty);
      if Art1 = Boty.Art then 
        writeln('Наименование: ',Boty.Name,' Количество пар: ',Boty.Kol,' Цена: ',Boty.Price); 
    end;
    writeln('Хотите ли найти ещё один артикул? Если да, введите 1,если нет - введите 0');
    readln(q);
    Close(F);
  end;
  
  procedure poisk_gen;
  var F: file of Shoes; 
  q: integer;  
  Boty: Shoes;
  begin 
  assign(F,'lev');
  reset(F);
  while q <>0 do
    while Eof(F) <> True do
    begin
      read(F,Boty);
      if ('Ж' = Boty.Art[1]) or ('ж' = Boty.Art[1]) then begin
        writeln('Наименование: ',Boty.Name, ' Количество пар ', Boty.Kol);
      end;  
   end;
    writeln('Желаете продолжить? Если да, введите 1,если нет - введите 0');
    readln(q);
    Close(F);
  end;
  procedure smotr;
  var F: file of Shoes;  
  Boty: Shoes;
  begin 
  assign(F,'lev');
  reset(F);
    while Eof(F) <> True do begin
      read(F,Boty); 
      writeln('Артикул: ',Boty.Art,'; Наименование: ',Boty.Name,'; Количество пар: ',Boty.Kol,'; Цена: ',Boty.Price);
      end;
    readln;
  end;
  
 var
 Boty: Shoes;
 F: file of Shoes;
 n,s: integer;
begin 
writeln('Введите название файла:');readln(n); 
Assign(f,n+'.dat'); 
Rewrite(f); 
writeln('Файл ',n+'.dat',' успешно создан.'); 
close(f);
    writeln('1 - ввод обуви');
    writeln('2 - поиск по артикулам');
    writeln('3 - поиск среди женской обуви');
    writeln('4 - просмотр ассортимента');
    readln(s);

case s of
1:vvod_obuvi;
2:poisk_ar;
3:poisk_gen;
4:smotr;
end;
end.

Непонятный вопрос :thinking:
В чем именно проблема?

Вызывайте процедуры через указатель, а не тупо по имени.
Вот пример: Вызов процедур

Зачем? :thinking:

Автор же видимо просто хочет вызвать определенную процедуру в зависимости от выбранного пункта меню.

Проблема в том, что при запуске программы и выборе первого пункта, программа завершает работу.

Да, вы правы.

А что выводит?

Какой Паскаль?

Паскаль ABC
Сначала выполняется то что до case, потом я ввожу значение оно выводить и программа завершает свою работу.

Наверное case зациклить нужно, и добавить в него выбор функции завершения работы.

И тут q не инициализировано.

Большое спасибо!