glamurniy_kluben
@glamurniy_kluben
Начинающий програмист))))

Почему когда нужно найти в векторе первый положительный элемент то пишет что индекс находится за границей массива?

Program LaboratoryWork2;
uses 
  crt;
const 
  nmax=5;
type 
  mas=array[1..nmax] of integer;
  matr=array[1..nmax,1..nmax]of integer;
procedure Task; 
begin
  writeln('Лабораторная работа №2.Вашуркина Вероника,группа 6102,вариант №5.');
  writeln('Получить одномерный массив,состоящий из сумм элементов, не превосходящих по значению заданное пользователем число в соответствующих строках матрицы.');
  writeln('В полученном векторе решить задачу поиска номера первого положительного элемента.');
  writeln('Отсортировать в матрице строки по неубыванию значений элементов в первом столбце.');
end;
  
procedure InputMatr(var a:matr; n,m:integer);    
  var
    i,j:integer;
  begin
    for i:=1 to n do
      for j:=1 to m do begin
        gotoxy (5*j,17+(2*i));
        readln(a[i,j]);
      end;
      writeln ('');
      writeln ('');
      writeln ('');
    end;
Procedure MatrtoMas(var a:matr;n,m,d:integer;var b: mas);
    var
      i,j:integer;
    begin
      for i:=1 to n do
        begin
          b[i]:=0;
          for j:=1 to m do
            if a[i,j]<=d then
              b[i]:=b[i]+a[i,j];
        end;
    end;
Function Alg(var b:mas;n : integer):integer;
    var 
      i: integer;
    begin
      i:=1;
    while (i<=n) and (b[i]<=0) do
      i:=i+1;
    if i<=n then
    writeln(i)
    else
    writeln('Нет таких элементов');
    end;
    
Procedure ShellMathNStr(var a:matr;n,m: integer);
    const 
      t = 5;
      Sh:array[1..t] of integer=(9,5,3,2,1);
    var 
      i,v,j,g,k,NStr: integer;
    begin
      for g:=1 to t do 
        begin
          k:=Sh[g];
          for i:=1 to n-k do 
            if a[i,NStr]>=a[i+k,NStr] then 
              begin
                for j:=1 to m do 
                  begin
                    v:=a[i,j];
                    a[i,j]:=a[i+k,j];
                    a[i+k,j]:=v;
                  end;
             end;  
        end;    
    end;
procedure OutputVector (var b:mas;n,m:integer);                              
  var
    i:integer;
  begin
    for i:=1 to n do
      begin
        gotoxy ((m+13)+(3*m), 17+(i*2));
        writeln (b[i]);
      end;
  end;
procedure OutputMatr (var a:matr;n,m:integer);                                  
  var
    i,j:integer;
  begin
    for i:=1 to n do
      for j:=1 to m do
        begin
          gotoxy ((m+32)+(4*j),17+(i*2));
          writeln (a[i,j]);
        end;
    writeln (); 
    writeln (); 
    writeln (); 
  end;
var                                                                             
  i,d,n,m,k:integer;
  a:matr;
  b:mas;
begin
  Task;
  writeln ('Введите количество строк. Максимальное количество строк: 5');
  writeln ('Введите количество столбцов. Максимальное количество столбцов: 5');
  readln(n);
  readln (m);
  InputMatr (a,n,m);
  writeln ('Введите значение ');
  readln(d);
  MatrtoMas (a,n,m,d,b);                                                         
  OutputVector (b,n,m);                                                         
  ShellMathNStr(a,n,m);                                                              
  OutputMatr (a,n,m);                                                           
  writeln ('Номер первого положительного элемента ',i);                
  writeln (); 
end.
  • Вопрос задан
  • 119 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы