Ошибка времени выполнения: Индекс находился вне границ массива - PascalABC.NET (121173)

Узнай цену своей работы

Формулировка задачи:

Решение задачи: «Ошибка времени выполнения: Индекс находился вне границ массива»

textual
Листинг программы
type
  matrix=array [,] of real;
  vector=array[0..4] of real;
  
function MassCenter(klass: matrix): vector;
begin
  for var j := 0 to klass.GetLength(1)-1 do
    result[j]:=klass.Col(j).Average;
end;
 
function Rasseivanie(klass: matrix):real;
begin
  result := 0;
  for var i := 0 to klass.GetLength(0)-1 do
    for var j := 0 to klass.GetLength(1)-1 do
      result+=sqr(MassCenter(klass)[j]-klass[i,j]);
  result:=result/klass.GetLength(0);
end;
 
function Krit_Komp(klass1,klass2:matrix):=(Rasseivanie(klass1)+Rasseivanie(klass2))/2;
 
function Range(index: integer; klass: matrix):real;
begin
  result:=0;
  for var j := 0 to klass.GetLength(1)-1 do
    result+=sqr(klass[index,j]-MassCenter(klass)[j]);
  result:=sqrt(result);
end;
 
function Rebel(klass:matrix):integer;
begin
  var max_int: integer;
  var max_range: real = 0;
  var r:real:=0;
  for var i := 0 to klass.GetLength(0)-1 do
    begin
      for var j := 0 to klass.GetLength(1)-1 do
        r:=r+sqr(MassCenter(klass)[j]-klass[i,j]);
      if (sqrt(r)>max_range) then
        begin
          max_range:=sqrt(r);
          max_int:=i;
        end;
      r:=0;
    end;
  result:=max_int;
end;
 
function Rebel_In_1st_klass(klass1,klass2:matrix):= Range(Rebel(klass1),klass1)>(Range(Rebel(klass2),klass2));
 
procedure vector_move(index:integer; klass1,klass2:matrix);//из klass1 в klass2
begin
  SetLength(klass2,klass2.GetLength(0)+1,klass2.GetLength(1));
  for var j := 0 to klass2.GetLength(1)-1 do
    klass2[klass2.GetLength(0)-1,j]:=klass1[index,j];
  for var i := index to klass1.GetLength(0)-2 do
    for var j := 0 to klass1.GetLength(1)-1 do
      klass1[i,j]:=klass1[i+1,j];
  SetLength(klass1,klass1.GetLength(0)-1,klass1.GetLength(1));
end;
      
begin
  var f : Text;
  Reset(f, 'c:\1.txt');
  var arr: array [0..19, 0..4] of real;
  var file_i := 0;
  while not Eof(f) do begin
    var file_j := 0;
    while not Eoln(f) do begin
      Read(f, arr[file_i, file_j]);
      Inc(file_j);
    end;
    ReadLn(f);
    Inc(file_i);
  end;
  Close(f);
  
  var k1,k2 : matrix;
  SetLength(k1,10,5);
  SetLength(k2,10,5);
  
  for var i := 0 to k1.GetLength(0)-1 do
    for var j := 0 to k1.GetLength(1)-1 do
      k1[i,j]:=arr[i,j];
 
  for var i := 0 to k2.GetLength(0)-1 do
    for var j := 0 to k2.GetLength(1)-1 do
      k2[i,j]:=arr[i+10,j];
 
  var initial_kk:=Krit_Komp(k1,k2);
  WriteLn(initial_kk);
end.

Объяснение кода листинга программы

В данном коде на языке PascalABC.Net реализуется алгоритм для вычисления среднего значения, расстояния между точками, площади и индекса центра масс объекта в двухмерном пространстве. Также в коде присутствуют функции для нахождения максимального значения индекса и для перемещения элементов из одного массива в другой. Список функций и их описания:

  1. MassCenter - вычисляет среднее значение по столбцу матрицы.
  2. Rasseivanie - вычисляет сумму квадратов разностей между средними значениями столбцов и центроидами.
  3. Krit_Komp - вычисляет среднее значение двух матриц.
  4. Range - вычисляет расстояние между двумя точками в двумерном пространстве.
  5. Rebel - находит индекс максимального расстояния от центра масс.
  6. Rebel_In_1st_klass - сравнивает два индекса максимального расстояния от центра масс.
  7. vector_move - перемещает элементы из одного массива в другой. Список действий в коде:
  8. Считывание данных из файла в массив.
  9. Создание двух матриц размером 10x5.
  10. Заполнение первой матрицы данными из массива.
  11. Заполнение второй матрицы данными из массива, сдвинутыми на 10 элементов вправо.
  12. Вычисление начального значения критерия.
  13. Вывод начального значения критерия на экран.

ИИ для рефератов и докладов


  • Экспорт Word по ГОСТу
  • Минимум 80% уникальности текста
  • Поиск релевантных источников в интернете
  • Готовый документ за 2 минуты

Оцени полезность:

13   голосов , оценка 4.154 из 5
Похожие ответы