Как объявить границы массива некоторым множеством

eipii0

Пытаюсь так выдает ошибку:
const 
  AlphabetMinus = ['z','a','b','c','d','e','f','g','h','i','j'] ;
type
  ElementaryAction =
    record
        q    : integer;  
        a    : char;     
        step : -1..1;     
    end; 
var
  MachineMinus : array [1..7,AlphabetMinus] of ElementaryAction;
4 ответа

eipii0

Так нельзя. Массив не может индексироваться множеством. Может диапазоном, или перечислимым типом, но не множеством.


eipii0

Неужели никак нельзя, нужно не просто array [1.7,'a'..'j'] , но еще и в этот интервал 'a'..'j вставить как-то # или любой другой символ. Задача такова написать машину Тьюринга и мне очень бы хотелось чтобы в программе не было структуры типо: case of .... case of ... А массив "работал сам с собой в зависимости от того в какой ячейке"Мб так будет понятнееот того что у меня в ElementaryAction.q зависит где я сейчас и что сделаю с текущим символом где стоит головка машины и я хочу "проехать по массиву в нужное место" перейти к новому состоянию P.S Очень хорошо объяснил


eipii0

Могу вот такой вариант предложить:
type
  AlphabetMinus = (_z,_a,_b,_c,_d,_e,_f,_g,_h,_i,_j);
const
  Symbols : array[AlphabetMinus] of char =
  ('z','a','b','c','d','e','f','g','h','i','j');
 
type
  ElementaryAction =
    record
        q    : integer;
        a    : char;
        step : -1..1;
    end;
var
  MachineMinus : array [1..7,AlphabetMinus] of ElementaryAction;
, это всё, что можно...


eipii0

Запустил вот этот код во Free P. :
type
  AlphabetMinus = (z,a,b,c,d,e,f,g,h,i,j);
  ElementaryAction =
    record
        q    : integer;
        a    : char;
        step : -1..1;
    end;
var
  MachineMinus : array [1..7,AlphabetMinus] of ElementaryAction;
 
begin
  MachineMinus[1,d].q:=5;
  MachineMinus[1,d].a:='2';
  MachineMinus[1,d].step:=-1;
  writeln(MachineMinus[1,d].q,' ',MachineMinus[1,d].a,' ',MachineMinus[1,d].step);
end.
И он работает , ладно напишу в нем тогда, тему можно закрывать.