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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.02.2008, 20:43   #1
fudzy79
Пользователь
 
Регистрация: 01.02.2008
Сообщений: 15
По умолчанию Двухмерные массивы - ошибка

Приветствую, у меня небольшая проблемка, не могу понять в чем ошибка в коде, аж Делфи выносит
Код:
{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
  i, j: integer;
begin
  // Заполнение названий колонок и столбцов
  for i:= 1 to 5 do SG1.Cells[0, i]:= 'Филиал № ' + IntToStr(i);
  for j:= 1 to 12 do SG1.Cells[j, 0]:= 'Месяц - ' + IntToStr(j);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  i, j: integer;
  mas: array of array of integer;
begin
    // создание массива
  Randomize;
  for i:= 1 to 5 do
    for j:= 1 to 12 do
      mas[i, j]:= Random(1000);
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  i, j: integer;
  mas: array of array of integer;
begin
  //заполнение сетки
  for i:= 1 to 5 do
    for j:= 1 to 12 do
      SG1.Cells[j, i]:= IntToStr(mas[i, j]);
end;

end.
и еще вопросик, как можно автоматически (через цикл) обозвать столбцы названиями месяцев года

Делфи вылетает на 22 строке и выдает вот это:

Последний раз редактировалось fudzy79; 04.02.2008 в 20:51.
fudzy79 вне форума Ответить с цитированием
Старый 04.02.2008, 20:49   #2
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Небольшая проблемка? Так вообще ничего работать не должно. Размерность массивов нигде не определяется, массивы объявлены как локальные переменные - после выхода из функции они перестают существовать.
B_N вне форума Ответить с цитированием
Старый 04.02.2008, 21:08   #3
fudzy79
Пользователь
 
Регистрация: 01.02.2008
Сообщений: 15
По умолчанию

подправил, сделал так:
Код:
type
  TMassive = array of array of integer;
  TForm1 = class(TForm)
  .......
  end;

var
  Form1: TForm1;
  i, j: integer;
  mas: TMassive;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  // Заполнение названий колонок и столбцов
  for i:= 1 to 5 do SG1.Cells[0, i]:= 'Филиал № ' + IntToStr(i);
  for j:= 1 to 12 do SG1.Cells[j, 0]:= 'Месяц - ' + IntToStr(j);

end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Randomize;
  for i:= 1 to 5 do
    for j:= 1 to 12 do
      mas[i, j]:= Random(10);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  for i:= 1 to 5 do
    for j:= 1 to 12 do
      SG1.Cells[j, i]:= IntToStr(mas[i, j]);
end;

end.
не помогает

Последний раз редактировалось fudzy79; 04.02.2008 в 21:16.
fudzy79 вне форума Ответить с цитированием
Старый 04.02.2008, 21:18   #4
zetrix
Delphi/C++/C#
Участник клуба
 
Аватар для zetrix
 
Регистрация: 29.10.2006
Сообщений: 1,972
По умолчанию

Цитата:
...array of array of integer
вы объявили динамический массив. Необходимо установить его длину при первом использовании: Setlength(SG1,12,5);
Учтите, что размерность массива после этого будет 0..11,0..4. Обратите на это внимание!

Цитата:
SG1.Cells[0, i]:= 'Филиал № ' + IntToStr(i);
Это бред! тут вам не PHP. Элементы массива могут быть только одного типа! Нельзя объявить его как integer, а потом пытаться запихнуть туда строку!

Последний раз редактировалось zetrix; 04.02.2008 в 21:20.
zetrix вне форума Ответить с цитированием
Старый 04.02.2008, 21:21   #5
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Ну а размер массива mas надо же указать. Или явно, или через SetLength, а то так и будет access violation давать.

Последний раз редактировалось B_N; 04.02.2008 в 22:18.
B_N вне форума Ответить с цитированием
Старый 04.02.2008, 21:32   #6
fudzy79
Пользователь
 
Регистрация: 01.02.2008
Сообщений: 15
По умолчанию

Цитата:
Цитата:SG1.Cells[0, i]:= 'Филиал № ' + IntToStr(i);

Это бред! тут вам не PHP. Элементы массива могут быть только одного типа! Нельзя объявить его как integer, а потом пытаться запихнуть туда строку!
Почему бред? Всё без проблем запихивается
Изображения
Тип файла: jpg skin.JPG (13.5 Кб, 134 просмотров)

Последний раз редактировалось fudzy79; 04.02.2008 в 21:39.
fudzy79 вне форума Ответить с цитированием
Старый 04.02.2008, 21:47   #7
Карась
Участник клуба
 
Аватар для Карась
 
Регистрация: 26.10.2007
Сообщений: 1,244
По умолчанию

Цитата:
Сообщение от zetrix Посмотреть сообщение
Это бред! тут вам не PHP. Элементы массива могут быть только одного типа! Нельзя объявить его как integer, а потом пытаться запихнуть туда строку!
SG1.Cells - это не массив.
Умом Россию не понять, пока не выпито ноль пять,
А если выпито ноль пять всё делом кажется не хитрым,
Попытка глубже понимать уже попахивает литром...
Карась вне форума Ответить с цитированием
Старый 04.02.2008, 21:49   #8
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Напиши так и не мучайся, заодно посмотри свои ошибки.
Код:
procedure TForm1.FormCreate(Sender: TObject);
var
  i, j: integer;
begin
  for i:= 1 to 5 do SG1.Cells[0, i]:= 'Филиал № ' + IntToStr(i);
  for j:= 1 to 12 do SG1.Cells[j, 0]:= 'Месяц - ' + IntToStr(j);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  i, j: integer;
  mas: array[1..5,1..12] of integer;
begin
  Randomize;
  for i:= 1 to 5 do
    for j:= 1 to 12 do
      mas[i, j]:= Random(1000);
   for i:= 1 to 5 do
    for j:= 1 to 12 do  
      SG1.Cells[j, i]:= IntToStr(mas[i, j]);
end;   
end.
puporev вне форума Ответить с цитированием
Старый 04.02.2008, 21:54   #9
zetrix
Delphi/C++/C#
Участник клуба
 
Аватар для zetrix
 
Регистрация: 29.10.2006
Сообщений: 1,972
По умолчанию

упс... Я напутал. Извиняюсь.
Кароче размер массива надо указать и всё. =)
zetrix вне форума Ответить с цитированием
Старый 04.02.2008, 22:01   #10
fudzy79
Пользователь
 
Регистрация: 01.02.2008
Сообщений: 15
По умолчанию

Спасибо, уже поправил и усё заработало!!!
fudzy79 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Массивы в С\С++ Zahar11 Помощь студентам 4 31.05.2008 00:35
Массивы Snord Общие вопросы Delphi 2 12.04.2008 13:45
Ошибка в программе. Массивы RECREATOR Общие вопросы Delphi 5 21.12.2007 12:13