Автор Тема: использование подпрограмм в Паскале. помогите найти ошибку  (Прочитано 4023 раз)

0 Пользователей и 2 Гостей просматривают эту тему.

Оффлайн ANutaStar

  • Новичок
  • *
  • Сообщений: 3
    • Просмотр профиля
Помогите, пожалуйста, разобраться. по-моему много где наошибалась, но никак не пойму где >:(
Задание:Даны массивы А[1:5,1:6] и В[1:5,1:6]. В каждой строке  матрицы В получить сумму элементов  лежащих в диапазоне [–5;5] и из этих сумм сформировать вектор С. Если минимальный  элемент вектора  С меньше 10, то вставить за этим элементом  сумму  предыдущих элементов вектора С, иначе переставить строку с мин. элементом матрицы А со строкой с мин. элементом матрицы В. В подпрограмме   формирования вектора  С использовать п/п нахождения суммы элементов, лежащих в диапазоне.
Вот что получилось у меня:

program kr;
uses wincrt;
Type Massiv=Array [1..5,1..6] Of Integer;
     Vector=Array [1..6] Of Integer;

var  A,B:Massiv;
     C:Vector;
     A_min, A_max,B_min, B_max, minA, minB, minC: Integer;
     i, j, NminAx, NminBx, NminC:Byte;

Procedure Vvod_Massiv(m,n:byte; Min, Max: Integer; Var Mass: Massiv);
Var i, j: byte;
Begin
  Randomize;
  For i:=1 To m Do
    For j:=1 To n Do
      Mass[i,j]:=Random(Max-Min)+Min;
End;

Procedure Vyvod_Massiv(m,n:byte; Var Mass: Massiv);
Var i, j: byte;
Begin
  Randomize;
  For i:=1 To m Do
    begin
      For j:=1 To n Do
        Write(Mass[i,j]:5,' ');
      writeln;
    end;
End;

Function Sum_elementov_massiv_B(m,n: byte; mass: Massiv):Integer;
Var i,j: byte;
    s: Integer;
Begin
  For i:=1 to m do
    begin
      s:=0;
        For j:=1 to n do
          if (mass[i,j]>=-5) and (mass[i,j]<=5)
            then
              begin
                s:=s+mass[i,j];
                Sum_elementov_massiv_B:=s;
              end;
          end;
      end;

Procedure Form_Vector(m:byte; Mass: Massiv; Var Vect: Vector);
Var i: byte;
Begin
  For i:=1 to m do
    vect[i]:=Sum_elementov_massiv_B(5,6,B);
 end;


Procedure Vyvod_Vector(m:byte; Var Vect: Vector);
Var i: byte;
Begin
  For i:=1 To m Do
    Write(Vect[i]:5,' ');
  writeln;
End;

procedure min_element_vector_C (m:byte; Vect: Vector; var NminC:byte;
                                                      var minC:integer);
Var i: byte;
Begin
  minC:=vect[1]; NminC:=1;
      For i:=2 To m Do
        if vect[i]<minC
          then
            begin
              minC:=vect[i];
              NminC:=i;
          end;
      end;

function sum_pred_minC (vect:vector):integer;
var i:byte;
    z:integer;
begin
  z:=0;
    For i:=1 to minC-1 do
      z:=z+vect[i];
      sum_pred_minC:=z;
    end;

procedure vstavka_v_vector_C(m:byte; vect1:vector; var vect:vector);
var i:byte;
begin
  For i:=m+1 downto NminC+1 do
    vect[i]:=vect[i-1];
    vect[NminC+1]:=sum_pred_minC(C);
  end;

procedure min_element_massiv_A (m,n:byte; mass: massiv; var NminAx:byte;
                                                        var minA:integer);
Var i,j,NminAy: byte;
Begin
  minA:=mass[1,1]; NminAx:=1; NminAy:=1;
      For i:=1 To m Do
        For j:=1 to n do
          if mass[i,j]<minA
          then
            begin
              minA:=mass[i,j];
              NminAx:=i;
          end;
      end;

procedure min_element_massiv_B (m,n:byte; mass: massiv; var NminBx:byte;
                                                        var minB:integer);
Var i,j,NminBy: byte;
Begin
  minB:=mass[1,1]; NminBx:=1; NminBy:=1;
      For i:=1 To m Do
        For j:=1 to n do
          if mass[i,j]<minB
          then
            begin
              minB:=mass[i,j];
              NminBx:=i;
          end;
      end;

procedure zamena_strok (var Mass1: Massiv; Mass2: Massiv);
Var i, j: byte;
    temp:integer;
Begin
  temp:=mass1[NminAx,j];
  mass1[NminAx,j]:=mass2[NminBx,j];
  mass2[NminBx,j]:=temp;
end;

begin
  clrscr;

  Write('минимальный элемент=');
  ReadLn(A_Min);
  Write('максимальный элемент=');
  ReadLn(A_Max);

Vvod_Massiv(5,6, A_Min, A_Max, A);
writeln ('исходная матрица A');
Vyvod_Massiv(5,6, A);
writeln;

  Write('минимальный элемент=');
  ReadLn(B_Min);
  Write('максимальный элемент=');
  ReadLn(B_Max);

Vvod_Massiv(5,6, B_Min, B_Max, B);
writeln ('исходная матрица B');
Vyvod_Massiv(5,6, B);
writeln;

Form_Vector(5, B, C);
writeln ('вектор C, сформированный из сумм элементов каждой строки матрицы B, лежащих в диапазоне [-5;5]');
Vyvod_Vector(5, C);
writeln;

min_element_vector_C (5, C, NminC, minC);
writeln ('минимальный элемент вектора C=',minC);
writeln;

if (minC<10)
  then
    begin
      vstavka_v_vector_C(5, C, C);
      writeln ('измененный вектор C');
      Vyvod_Vector(6, C);
    end
  else
    begin
      min_element_massiv_A (5,6, A, NminAx, minA);
      min_element_massiv_B (5,6, B, NminBx, minB);
      zamena_strok (A, B);
      writeln ('измененная матрица A');
      Vyvod_Massiv(5,6, A);
      writeln ('измененная матрица B');
      Vyvod_Massiv(5,6, B);
    end;

readln;
end.

Заранее спасибо!!!!