1. Vipipaw05.05.2025 в 01:08от
Загрузка...

Создать размер массива(Delphi)

Тема в разделе "С/С++/Pascal/Delphi", создана пользователем qwiz, 10.06.2014.

  1. qwiz

    qwiz

    Статус:
    Оффлайн
    Регистрация:
    05.07.11
    Сообщения:
    598
    Репутация:
    184 +/-
    Всем доброго времени суток.

    Как создать размер массива, если есть счетчик который щелкает n-ое кол-во раз. Вот так объявить массив не получается:

    massB: array [0..n,0..n] of integer; где n - счетчик.
     
  2. qwiz

    qwiz

    Статус:
    Оффлайн
    Регистрация:
    05.07.11
    Сообщения:
    598
    Репутация:
    184 +/-
    up
     
  3. Xenozite

    Xenozite

    Статус:
    Оффлайн
    Регистрация:
    02.07.12
    Сообщения:
    335
    Репутация:
    149 +/-
    Можно и без начального задания размера. Функция SetLength. Постепенно увеличивать в цикле его размер.
     
  4. Nimo

    Nimo

    Статус:
    Оффлайн
    Регистрация:
    06.01.13
    Сообщения:
    48
    Репутация:
    7 +/-
    Потому что в этом случае нужен либо просто заранее большой массив, либо динамический, либо по указателям пройтись.
     
  5. themoren

    themoren

    Статус:
    Оффлайн
    Регистрация:
    17.06.14
    Сообщения:
    3
    Репутация:
    1 +/-
    Могу предложить такой способ..
    Правда не практично и скорей всего можно решить проблему иначе.. ну работает вполне быстро !

    Сначала нужно создать динамичный массив : Array of String

    var
    Form1: TForm1;
    accountArray: Array of String;

    Сам код:
    procedure TForm1.Button1Click(Sender: TObject);
    var
    accountFile: TextFile;
    str: String;
    count: Integer;
    t: TStringList;
    begin
    lengthAccountFile:= 0;
    AssignFile(accountFile, 'account.txt');
    Reset(accountFile);
    while not Eof(accountFile) do begin // Сначала получаем количество строк в файле
    ReadLn(accountFile, str);
    inc(lengthAccountFile);
    end;
    CloseFile(accountFile);
    SetLength(accountArray, lengthAccountFile); // Задаем размер массива
    count:=0;
    t:=TStringList.Create;
    AssignFile(accountFile, 'account.txt');
    Reset(accountFile);
    while not Eof(accountFile) do begin // Читаем строки в массив
    ReadLn(accountFile, str);
    accountArray[count] := str;
    inc(count);
    end;
    CloseFile(accountFile);
    t.Free;
    end;
     
  6. qwiz

    qwiz

    Статус:
    Оффлайн
    Регистрация:
    05.07.11
    Сообщения:
    598
    Репутация:
    184 +/-
    вот я просто и сделал большой массив
     
  7. themoren

    themoren

    Статус:
    Оффлайн
    Регистрация:
    17.06.14
    Сообщения:
    3
    Репутация:
    1 +/-
    Вот ещё пример создания динамичного массива:

    Сначала создать глобальные переменные..
    var
    lengthAccountFile: Integer;
    loginArray: Array of String;


    Код:
    function TForm1.accountGet(): string;
    var
    accountFile: TextFile;
    str: String;
    count: Integer;
    begin
    lengthAccountFile:= 0;
    count:= 0;
    AssignFile(accountFile, 'account.txt');
    Reset(accountFile);
    while not Eof(accountFile) do begin
    ReadLn(accountFile, str);
    inc(lengthAccountFile);
    SetLength(loginArray, lengthAccountFile);
    loginArray[count]:=str;
    inc(count);
    end;
    CloseFile(accountFile);
    end;
     
    Последнее редактирование: 21.10.2014
  8. Mohman

    Mohman

    Статус:
    Оффлайн
    Регистрация:
    25.08.13
    Сообщения:
    85
    Репутация:
    14 +/-
    Берёшь какой-то массив
    s : array of string; (без указания размеров)
    Потом задаёшь его длину setlength(s,n);
    Или же можешь сделать цикл
    while not eof(input) do
    begin
    inc(i);
    readln(s);
    end;
     
  9. Nimo

    Nimo

    Статус:
    Оффлайн
    Регистрация:
    06.01.13
    Сообщения:
    48
    Репутация:
    7 +/-
    На самом деле вам нужен уже не массив, а связный список. Делов то.
     
  10. LoiceMe

    LoiceMe

    Статус:
    Оффлайн
    Регистрация:
    23.06.14
    Сообщения:
    1
    Репутация:
    0 +/-
    Вот и получишь однажды AV. Единственный простой способ - динамическое изменение длины массива через SetLength. Либо использование списков, но у тебя простые данные и использовать для этого списки - не логично и противоестественно.