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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.04.2011, 01:40   #1
Gausse
Пользователь
 
Регистрация: 23.01.2011
Сообщений: 14
По умолчанию SetLength для массива при компиляции выдаёт ошибку

Код:
program Kurs_work;

{$APPTYPE CONSOLE}

uses
  SysUtils;

type
  Row=record
    lex:array of string;
    num:integer;
  end;

var
  SourceFile:textfile;
  temp:string;
  Flag:boolean;
  i:integer;
  Massive_Rows:array of string;
  Massive_Lexem:array of row;
  Num_Rows:integer;

procedure Lexem(m_r:array of string; var m_l:array of row);
  var
    j,i:integer;
    temp:string;
  begin
    for i := 1 to length(m_r) do
      begin
      temp:=m_r[i];
      setlength(m_l,i);
      m_l[i].num:=1;
      setlength(m_l[i].lex,m_l[i].num);

      while j<>length(temp) do
        begin
          if temp[j] in ['A'..'z','А'..'я'] then begin
                                                    m_l[i].lex[m_l[i].num]:=m_l[i].lex[m_l[i].num]+temp[j];
                                                    inc(j);
                                                 end
          else
              begin
                while not(temp[j] in ['A'..'z','А'..'я']) do
                  inc(j);
                inc(m_l[i].num);
                setlength(m_l[i].lex,m_l[i].num);
              end;
        end;
      end;
  end;
begin
//-----------------------------------------
  Num_Rows:=1;
  Flag:=false;
  write('Type the name of input file: ');
  readln(temp);

  for i := 1 to length(temp) do
    if temp[i]='.' then Flag:=true;

  if Flag=false then temp:=temp+'.asm';
//-----------------------------------------
  assign(SourceFile,temp);
  reset(SourceFile);

  while not eof(SourceFile) do
    begin
      readln(SourceFile,temp);
      setlength(Massive_Rows,Num_Rows);
      Massive_Rows[Num_Rows]:=temp;
      inc(Num_Rows);
    end;

  Lexem(Massive_Rows,Massive_Lexem);
  close(SourceFile);
  readln;
end.
Доброго времени суток! Такая ситуация. В 31 строчке функция перераспределения памяти массива структур выбивает ошибку. И у меня нету никаких идей. Буду благодарен за помощь.


______________
Исправил название Вашей темы
убедительная просьба - на будущее.
Называйте тему более информативно, пожалуйста.
Тема должна адекватно отражать суть решаемой задачи/проблемы.


Модератор.

Последний раз редактировалось Serge_Bliznykov; 20.04.2011 в 10:00.
Gausse вне форума Ответить с цитированием
Старый 20.04.2011, 10:01   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

потому что Вы путаете открытые массивы (как в вашем случае)
и динамические массивы.
Вынесите описание массива в отдельный тип и передавайте структуру этого типа!

примерно так:
Код:
type
  Row=record
    lex:array of string;
    num:integer;
  end;
  ar_string = array of string;
  ar_row = array of row;

var
  SourceFile:textfile;
  temp:string;
  Flag:boolean;
  i:integer;
  Massive_Rows:ar_string;
  Massive_Lexem:ar_row;
  Num_Rows:integer;

procedure Lexem(var m_r: ar_string; var m_l:ar_row);

Последний раз редактировалось Serge_Bliznykov; 20.04.2011 в 10:15.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.04.2011, 10:49   #3
Gausse
Пользователь
 
Регистрация: 23.01.2011
Сообщений: 14
По умолчанию

Премного благодарен за помощь!
Gausse вне форума Ответить с цитированием
Старый 20.04.2011, 15:35   #4
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

http://www.transl-gunsmoker.ru/2009/09/of-const.html
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
При компиляции программы на си не выдаёт ошибок и предупреждений,но тем не менее программа не работает. AmoSirin Общие вопросы C/C++ 7 12.10.2010 00:11
SetLength никогда не стирает старые элементы массива? TwiX Общие вопросы Delphi 6 20.03.2010 02:35
Выдаёт ошибку: acos DOMAIN error,полсе нажатия окей,ещё одну ошибку pow OWERFLAW ERROR prikolist Общие вопросы C/C++ 4 10.04.2009 20:27
Выдаёт ошибку DM_bite Помощь студентам 2 08.08.2008 10:33