Массивы в процедурах, выход за пределы массива - PascalABC.NET
Формулировка задачи:
Процедура ищет в двумерном массиве максимальный и минимальный элемент, затем если в строке есть элемент меньше чем их полусумма то записывает в новый массив 0, если нет то 1. Проблема вот в чем, если задать массив в котором число строк больше чем число столбцов, то программа выдает ошибку: Индекс находится вне границ массива (строчка №13). Если задать квадрат или с числом столбом большим чем число строк, то программа выполняется. Почему она так делает?
Листинг программы
- program kva;
- uses crt;
- var
- A:array [,] of integer;
- P:array of integer;
- i,j,n,k:integer;
- procedure tru(Q:array [,] of integer; var P:array of integer);
- var
- i,j,mn,mx:integer;
- begin
- for i:=0 to high(q) do
- for j:=0 to high(q) do begin
- if q[i,j]<mn then mn:=q[i,j];
- if q[i,j]>mx then mx:=q[i,j];
- end;
- for i:=0 to high(q) do begin
- P[i]:=1;
- for j:=0 to high(q) do begin
- if (q[i,j]<((mx+mn)/2)) then P[i]:=0;
- end;
- end;
- end;
- begin
- writeln('vvedite razmer matrici');
- readln(n,k);
- SetLength(a,n,k);
- SetLength(p,n);
- for i:=0 to (n-1) do begin
- for j:=0 to (k-1) do begin
- a[i,j]:=random(100);
- write(a[i,j],' ');
- end;
- writeln;
- end;
- tru(a,p);
- for i:=0 to (n-1) do
- write(p[i],' ');
- readln;
- end.
Решение задачи: «Массивы в процедурах, выход за пределы массива»
textual
Листинг программы
- for i:=0 to Pred(Length(q, 0)) do
- for j:=0 to Pred(Length(q, 1)) do begin
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д