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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.01.2017, 14:45   #1
Михаил22042016
Пользователь
 
Регистрация: 21.04.2016
Сообщений: 54
Вопрос delphi проблема с массивом

код переработан
поэтому перенес последний пост суда

что здесь не правильно
Код:
procedure TForm1.btn3Click(Sender: TObject);
var
i,j,k,x : Integer; Vektor: TArrayOfreal;
NewV,SL,LastV: Integer;  // New адрес нового вектора, SL № слоя, LastV № последнего вектора в слое
begin
btn3.Enabled:=False;
mmo1.Clear;
SetLength(SloyVib,4);
SL:=0+ StrToInt(edt1.Text);
SetLength(SloyVib[SL],Length(SloyVib[SL])+1);  // количество векторов в слое выборки
SetLength(SloyVib[SL][Length(SloyVib)+1].X,900);
img2.Canvas.StretchDraw(Rect(0,0,30,30), img1.Picture.Bitmap);
SloyVib[SL][Length(SloyVib)+1].X:= BMtoVektor(img2.Picture.Bitmap);


  for i := 0 to High(SloyVib) do begin     // слои
    mmo1.Lines.Add('i'+IntToStr(i)+' = '+IntToStr(Length(SloyVib[i]))) ;
  end;
  btn3.Enabled:=True;
end;
если
Код:
procedure NeuronCreate;
var n:Integer; i:Integer; SR: TSearchRec;
begin
  NeuronDestr;
  if FindFirst(FileMask, faAnyFile, SR) = 0 then
  begin
    repeat
      SetLength(Neuron,Length(Neuron)+1);
      Neuron[i]:=TNeuron.Create;
      Neuron[i].Name:=SR.Name;
      Neuron[i].M := TBitmap.Create;
      Neuron[i].M.LoadFromFile(ExtractFilePath(Application.ExeName)+'Memo\'+Neuron[i].Name);
      Neuron[i].sM:=SkanBM(Neuron[i].M);
      Neuron[i].stWt:=Neuron[i].M.Height*Neuron[i].M.Width;
//      ShowMessage('Имя файла = '+SR.Name+#13+
//      'Neuron['+IntToStr(i)+'].Name = '+SR.Name+#13+
//      'длин массива'+IntToStr(Length(Neuron)));
      Inc(i);
    until FindNext(SR) <> 0;
    FindClose(SR); //  освободить ресурсы
  end;
//  ShowMessage('Создано '+IntToStr(Length(Neuron))+' неирон(ов)');
end;
здесь таким же образом задается длинна массива и тут все работает как часики

Последний раз редактировалось Михаил22042016; 26.01.2017 в 08:13.
Михаил22042016 вне форума Ответить с цитированием
Старый 25.01.2017, 15:03   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Цитата:
Код:
 LastV:=Length(SloyVib[SL]);
...
 SetLength(SloyVib[SL][LastV].X,900);
а массив-то только от 0 до Length(...) -1
и SloyVib[SL][LastV] НЕСУЩЕСТВУЮЩИЙ элемент.

как проверить работу с массивом
программа — запись алгоритма на языке понятном транслятору
evg_m на форуме Ответить с цитированием
Старый 25.01.2017, 15:10   #3
Михаил22042016
Пользователь
 
Регистрация: 21.04.2016
Сообщений: 54
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
SloyVib[SL][LastV] НЕСУЩЕСТВУЮЩИЙ элемент.
мб я как то не правильно понял
но
Цитата:
Сообщение от Михаил22042016 Посмотреть сообщение
SetLength(SloyVib[SL],LastV+1);
добавляет этот елемент

Последний раз редактировалось Михаил22042016; 25.01.2017 в 15:27.
Михаил22042016 вне форума Ответить с цитированием
Старый 25.01.2017, 15:22   #4
Михаил22042016
Пользователь
 
Регистрация: 21.04.2016
Сообщений: 54
По умолчанию

Код:
procedure TForm1.btn3Click(Sender: TObject);
var
i,j,k : Integer; Vektor: TArrayOfreal;
New,SL,LastV: Integer;  // New адрес нового вектора, SL № слоя, LastV № последнего вектора в слое
begin
mmo1.Clear;
SetLength(SloyVib,33);
SL:=StrToInt(edt1.Text);
LastV:=Length(SloyVib[SL]);
SetLength(SloyVib[SL],LastV+1);  // количество векторов в слое выборки
LastV:=Length(SloyVib[SL]);
img2.Canvas.StretchDraw(Rect(0,0,30,30), img1.Picture.Bitmap);
Vektor:= BMtoVektor(img2.Picture.Bitmap);
// ShowMessage(IntToStr(SL)+#13#10+
// IntToStr(LastV)+#13#10);
  for i := 0 to High(SloyVib) do begin     // слои
    mmo1.Lines.Add('i'+IntToStr(i)+' = '+IntToStr(Length(SloyVib[i]))) ;
  end;
   SloyVib[SL][LastV] := Vektor;
//ShowMessage(IntToStr(SL)+#13#10+
//IntToStr(LastV)+#13#10);
//Form1.mmo1.Text:=TXT.Text;
//TXT.Clear;
//  mmo1.Lines.Add(IntToStr(Length(SloyVib))+' '+IntToStr(Length(SloyVib[32]))+' '+IntToStr(Length(SloyVib[32][0])));
end;
добился некоторой работы, некоторое время работает.
теперь как то рандомно таже ошибка вылазит
Михаил22042016 вне форума Ответить с цитированием
Старый 25.01.2017, 15:46   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Цитата:
SloyVib[SL][LastV] := Vektor;
См. #2
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 25.01.2017, 15:59   #6
Михаил22042016
Пользователь
 
Регистрация: 21.04.2016
Сообщений: 54
По умолчанию

да, я смотрел, сделал как показано, ну вроде нету там ничего, а почему и как его туда запихать.
Михаил22042016 вне форума Ответить с цитированием
Старый 25.01.2017, 16:07   #7
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Цитата:
добавляет этот елемент
добавляло ДО того момента как было сделано
Цитата:
Код:
LastV:=Length(SloyVib[SL]);
программа — запись алгоритма на языке понятном транслятору
evg_m на форуме Ответить с цитированием
Старый 25.01.2017, 16:53   #8
Михаил22042016
Пользователь
 
Регистрация: 21.04.2016
Сообщений: 54
По умолчанию

я в делфе когда ошибка при компиляции вылазила в окошке с ошибкой галочку нажал, как вернуть то окно?))) так когда брейк в нем нажимаешь показывало структуру массива.
Михаил22042016 вне форума Ответить с цитированием
Старый 25.01.2017, 16:59   #9
Михаил22042016
Пользователь
 
Регистрация: 21.04.2016
Сообщений: 54
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
добавляло ДО того момента как было сделано
ну как бы до того как оно было сделано, я LastV:= не использовал
гм... чото я совсем совсем не понимаю
помогите помогииииите

Последний раз редактировалось Михаил22042016; 25.01.2017 в 17:48.
Михаил22042016 вне форума Ответить с цитированием
Старый 25.01.2017, 17:48   #10
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Цитата:
я LastV:= не использовал
а это откуда? всего ТРИ последовательные строки кода.
Цитата:
Сообщение от Михаил22042016 Посмотреть сообщение
Код:
LastV:=Length(SloyVib[SL]);
SetLength(SloyVib[SL],LastV+1);  // количество векторов в слое выборки
LastV:=Length(SloyVib[SL]);
программа — запись алгоритма на языке понятном транслятору
evg_m на форуме Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с массивом logo23 Паскаль, Turbo Pascal, PascalABC.NET 8 03.05.2012 21:42
Проблема с массивом... СтуденткаПитер Помощь студентам 3 09.06.2011 00:11
Проблема с квадратным массивом в Delphi. v0v41k Помощь студентам 2 19.12.2010 20:40
проблема с массивом kommunist Паскаль, Turbo Pascal, PascalABC.NET 7 27.05.2010 19:00
проблема с массивом kommunist Помощь студентам 6 14.11.2007 18:36