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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.04.2022, 16:56   #11
Катя93
Пользователь
 
Регистрация: 11.01.2021
Сообщений: 48
По умолчанию

Я это уже учла и пернесла n:=n+1 вниз.Вот так:
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin


SetLength(arr, n);
SetLength(arr[n], 2);


arr[n,0]:= StrToInt(Edit1.Text);
arr[n,1]:= StrToInt(Edit2.Text);

n:=n+1;

end;
Цитата:
Access violation at address 00404C3C in module 'Project1.exe'. Write at address 00000000.
Катя93 вне форума Ответить с цитированием
Старый 25.04.2022, 16:59   #12
ForenLi
Форумчанин
 
Регистрация: 02.06.2021
Сообщений: 515
По умолчанию

И теперь создаете массив размера 0
ForenLi вне форума Ответить с цитированием
Старый 25.04.2022, 17:01   #13
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
begin

n:=n+1; {сначала увеличивайте}

SetLength(arr, n);
SetLength(arr[n], 2);


arr[n-1,0]:= StrToInt(Edit1.Text); {от 0 до n-1}
arr[n-1,1]:= StrToInt(Edit2.Text);

end;

Последний раз редактировалось macomics; 25.04.2022 в 17:10.
macomics вне форума Ответить с цитированием
Старый 25.04.2022, 17:59   #14
Катя93
Пользователь
 
Регистрация: 11.01.2021
Сообщений: 48
По умолчанию

Ничего не пойму, программа все время вылетает когда я пытаюсь записать данные в массив.
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    Button2: TButton;
    Edit1: TEdit;
    Label2: TLabel;
    Edit2: TEdit;
    Memo1: TMemo;
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  arr:array of array of Integer;

  n:Integer = 0;
  min,max:Integer;
implementation

{$R *.dfm}

procedure TForm1.Button2Click(Sender: TObject);
var i:Integer;
begin
Memo1.Clear;

for i:=0 to n do
begin
ShowMessage(IntToStr(arr[i,0]));

Memo1.Lines.Add('min='+IntToStr(arr[i,0]));
end;
end;

procedure TForm1.Button1Click(Sender: TObject);

begin
n:=n+1; 
SetLength(arr,n);
SetLength(arr[n],2);

min:=0;
max:=0;

min:=StrToInt(Edit1.Text);
max:=StrToInt(Edit2.Text);
ShowMessage(IntToStr(max));
arr[n-1,0]:=min;
arr[n-1,1]:=max;

end;

end.
Катя93 вне форума Ответить с цитированием
Старый 25.04.2022, 18:01   #15
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Код:
SetLength(arr[n-1],2);
Теперь уже у меня та же ошибка.

Нашел я заметку про обнуление. Это было сказано в качестве предупреждения при работе с многомерными массивами разной длины.
macomics вне форума Ответить с цитированием
Старый 25.04.2022, 18:54   #16
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Цитата:
Сообщение от Катя93 Посмотреть сообщение
for i:=0 to n do
Тут тоже вылезли за границы массива. Чтобы не думать о границах, можно сделать так:
Код:
for i := Low(arr) to High(arr) do
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 25.04.2022, 21:11   #17
Катя93
Пользователь
 
Регистрация: 11.01.2021
Сообщений: 48
По умолчанию

Столько всего надо учесть при работе с массивами. Теперь все работает, спасибо.
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    Button2: TButton;
    Edit1: TEdit;
    Label2: TLabel;
    Edit2: TEdit;
    Memo1: TMemo;
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  arr:array of array of Integer;

  n:Integer = 0;
  min,max:Integer;
implementation

{$R *.dfm}

procedure TForm1.Button2Click(Sender: TObject);
var i:Integer;
begin
Memo1.Clear;

for i := Low(arr) to High(arr) do
begin


Memo1.Lines.Add('min='+IntToStr(arr[i,0])+', max='+IntToStr(arr[i,1]));
end;
end;

procedure TForm1.Button1Click(Sender: TObject);

begin
n:=n+1; 
SetLength(arr,n);
SetLength(arr[n-1],2);

min:=0;
max:=0;

min:=StrToInt(Edit1.Text);
max:=StrToInt(Edit2.Text);

arr[n-1,0]:=min;
arr[n-1,1]:=max;

end;

end.
Катя93 вне форума Ответить с цитированием
Старый 25.04.2022, 21:18   #18
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

везде вместо n-1 можно написать High(arr)
macomics вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Заполнить динамический массив через while Shouldercannon PHP 2 12.01.2016 15:29
массив Например, R2=10, n=2 + Edit1 + Edit2 beegl Помощь студентам 1 14.01.2013 23:45
Заполнить динамический массив через while Shouldercannon Общие вопросы Delphi 1 06.05.2012 12:38
Как правильно передать через ссылку двумерный динамический массив? amerhant Общие вопросы C/C++ 2 21.04.2010 23:50