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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.06.2019, 12:08   #1
Анпри
Новичок
Джуниор
 
Регистрация: 07.06.2019
Сообщений: 5
По умолчанию проблема с константами

Добрый день! Помогите пожалуйста разобраться, ругается на константу Tab, пишет что ожидался константный инициализатор массива. Перепробовала разные вариант, ничего не принимает. В чем дело? Может что-то упустила и не обратила внимания? Заранее благодарю за помощь!

ниже привожу проблемный кусок кода

Код:
program StegoChange;
type
StringType = string [$FF];
Index = (Rus, Lat);
SetOfChar = set of char;
const
TempName = '$$$$$$$$.$$$';
Max = 13;
Key1 = $1234;
Key2 = $4567;
Пожалуйста, оформляйте Ваш код согласно правилам.
Tab : array [Index, 1..22] of char = ('ВЕКМНРСТХаеосАОикпрту'#32,
'BEKMHPCTXaeocAOuknpmy'#00);

Последний раз редактировалось Вадим Мошев; 07.06.2019 в 12:41.
Анпри вне форума Ответить с цитированием
Старый 07.06.2019, 12:15   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Index - сколько это по вашему?
p51x вне форума Ответить с цитированием
Старый 07.06.2019, 12:16   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Анпри Посмотреть сообщение
В чем дело? Может что-то упустила
Упустили, что не все компиляторы паскаля (видимо) поддерживают такой синтаксис.

FreePascal взял ваш код без проблем:
fp1.png
Serge_Bliznykov вне форума Ответить с цитированием
Старый 07.06.2019, 12:17   #4
Анпри
Новичок
Джуниор
 
Регистрация: 07.06.2019
Сообщений: 5
По умолчанию

то есть?
Анпри вне форума Ответить с цитированием
Старый 07.06.2019, 12:21   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

И делфи берет. Так еще можно, вставь свои 22
Код:
Tab: array [Index, 1..3] of char = (('Б','Е', #32), ('B', 'E' ,#00));
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 07.06.2019, 13:16   #6
Анпри
Новичок
Джуниор
 
Регистрация: 07.06.2019
Сообщений: 5
По умолчанию

Вот полный код программы, но она не компилируется. завтра уже сдавать курсовую......(((

Код:
program StegoChange;
type
      StringType = string [$FF];
      Index      = (Rus, Lat);
      SetOfChar  = set of char;
const
      TempName = '$$$$$$$$.$$$';
      Max      = 13;
      Key1     = $1234;
      Key2     = $4567;
      Tab : array [Index, 1..22] of char = ('ВЕКМНРСТХаеосАОикпрту'#32,
                                            'BEKMHPCTXaeocAOuknpmy'#00);
var
      F, G, H   : text;
      X         : StringType;
      I, J      : integer;
      K, L      : byte;
      C, CC     : char;
      LatSet    : SetOfChar;
      CharSet   : SetOfChar;
      LargeLat  : SetOfChar;
      LargeChar : SetOfChar;
      Count     : real;
begin
      LowVideo;
      if not (ParamCount in [1..3])
      then
           begin
                 WriteLn ('Ожидается от  1 до 3  параметров:');
                 WriteLn ('1 - вывод стеганограммы на экран;');
                 WriteLn ('2 - вывод стеганограммы  в  файл;');
                 WriteLn ('3 - запись стеганограммы в  файл.');
                 Exit
           end;
      Assign (F, ParamStr (1));
      Reset (F);
      Count := 0;
      MemW [Dseg : $01FE] := Key1;
      MemW [Dseg : $01FC] := Key2;
      L       := 0;
      LatSet  := [];
      CharSet := [];
      for I := 1 to Max
      do
         begin
               LatSet  := LatSet  + [Tab [Lat, I]];
               CharSet := CharSet + [Tab [Rus, I]] + [Tab [Lat, I]]
         end;
      LargeLat  := LatSet;
      LargeChar := CharSet;
      for I := Succ (Max) to 21
      do
         begin
               LargeLat  := LargeLat  + [Tab [Lat, I]];
               LargeChar := LargeChar + [Tab [Lat, I]] + [Tab [Rus, I]]
         end;
(*---------------------ВЫВОД СТЕГАНОГРАММЫ НА ЭКРАН--------------------*)
      if ParamCount = 1
      then
           begin
                 while not Eof (F)
                 do
                    begin
                          ReadLn (F, X);
                          for I := 1 to Length (X)
                          do
                             begin
                                   J := 1;
                                   C := X [I];
                                   if C in LargeChar
                                   then
                                        begin
                                              K := K shl 1;
                                              if C in LargeLat
                                              then K := K or 1;
                                              L := Succ (L) mod 8;
                                              if L = 0
                                              then Write (Chr (K))
                                        end;
                             end
                    end;
                 Close (F);
                 if WhereX <> 1
                 then WriteLn;
                 WriteLn ('Ok!');
                 Exit
           end;
Анпри вне форума Ответить с цитированием
Старый 07.06.2019, 13:43   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Анпри Посмотреть сообщение
Вот полный код программы, но она не компилируется. завтра уже сдавать курсовую......(((
Вы не читаете, что Вам пишут?!

Чем не компилируется? Какой у Вас компилятор Паскаля?
Вы какой средой Паскаля пользуетесь?

Цитата:
Сообщение от Анпри Посмотреть сообщение
LowVideo;
а это ещё для чего?!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 07.06.2019, 14:07   #8
Анпри
Новичок
Джуниор
 
Регистрация: 07.06.2019
Сообщений: 5
По умолчанию

компилирую паскаль abc
Анпри вне форума Ответить с цитированием
Старый 07.06.2019, 14:49   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Анпри Посмотреть сообщение
компилирую паскаль abc
Алилуя. Наконец-то.

Теперь следующие вопросы.

1) Вы просто взяли чужой код и теперь не знаете, что с ним делать?
Для чего Вам
LowVideo;
что по вашему означает и как Вы собираетесь использовать параметры командной строки?
я про этот код:

Цитата:
Сообщение от Анпри Посмотреть сообщение
if not (ParamCount in [1..3])
then
begin
WriteLn ('Ожидается от 1 до 3 параметров:');
......
Exit
end;
Assign (F, ParamStr (1));
а дальше - больше!

объясните, для чего Вам это:
Цитата:
Код:
      MemW [Dseg : $01FE] := Key1;
      MemW [Dseg : $01FC] := Key2;
????!!!


2) почему просто не взять другой компилятор? Free Pascal, например, откомпилирует "ваш" код (если Вы разберетесь, для чего этот код и что он делает, конечно - см. п.1)

3) Вы в курсе, что приведённая Вами программа - не имеет окончания? Это просто начало кода.


формально на ваш вопрос ответить не сложно.
Цитата:
Сообщение от Анпри Посмотреть сообщение
Помогите пожалуйста разобраться, ругается на константу Tab, пишет что ожидался константный инициализатор массива.
а в PascalABC можно так объявить массив

Код:
program StegoChange;
type
      StringType = string [$FF];
      Index      = (Rus, Lat);
      SetOfChar  = set of char;
const
      TempName = '$$$$$$$$.$$$';
      Max      = 13;
      Key1     = $1234;
      Key2     = $4567;
      Tab : array [Index, 1..22] of char =
      (('В','Е','К','М','Н','Р','С','Т','Х','а','е','о','с','А','О','и','к','п','р','т','у',#32),
      ('B','E','K','M','H','P','C','T','X','a','e','o','c','A','O','u','k','n','p','m','y',#00));
var
      F, G, H   : text;
      X         : StringType;
      I, J      : integer;
      K, L      : byte;
      C, CC     : char;
      LatSet    : SetOfChar;
      CharSet   : SetOfChar;
      LargeLat  : SetOfChar;
      LargeChar : SetOfChar;
      Count     : real;
begin
      LatSet  := [];
      CharSet := [];
      for I := 1 to Max
      do
         begin
               LatSet  := LatSet  + [Tab [Lat, I]];
               CharSet := CharSet + [Tab [Rus, I]] + [Tab [Lat, I]]
         end;
      WriteLn('Done');
end.
впрочем, не думаю, что это Вам поможет.

Последний раз редактировалось Serge_Bliznykov; 07.06.2019 в 14:59.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 07.06.2019, 14:59   #10
Анпри
Новичок
Джуниор
 
Регистрация: 07.06.2019
Сообщений: 5
По умолчанию

Это действительно не мной созданный код, я пыталась откомпилировать его и на free pascal. Я пытаюсь разобраться в работе этой программы, поэтому и прошу помощи.
Полный код находится по этой ссылке (листинг4) http://xn----7sbab5ahcba1bkm0aw8azb1...steganografiya

Последний раз редактировалось Анпри; 07.06.2019 в 15:09.
Анпри вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ActionScript В чем проблема? while(if(i), Flash проблема со скобками. artscorp Общие вопросы Web 4 09.04.2013 23:41
Неблокирующий сокет Си проблема с закрытием, проблема с закрытием сокетов в цикле mnx_vol C/C++ Сетевое программирование 0 06.11.2012 13:57
Инциализация run-time пакетов и модулей. Проблема с константами ArkaNN Общие вопросы Delphi 7 26.11.2011 18:37
Заполнить двумерный массив константами Lacoste Общие вопросы Delphi 4 15.02.2009 14:37
Проблема с рамами/Проблема с ЖД DRAGGER Компьютерное железо 6 04.01.2009 23:37