паскаль !!!

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by rubik-nerubik, 10 Jan 2008.

  1. rubik-nerubik

    rubik-nerubik Elder - Старейшина

    Joined:
    4 May 2007
    Messages:
    248
    Likes Received:
    9
    Reputations:
    -2
    дюди выручайте оооч срочно
    есть задание
    Дана матрица n x m найти минимальный и максимальный элементы в строке и заменить первый и последний элементы строк соотстветственно... помогите!!!
    Code:
    program number2;
    var a:array[1..3,1..4] of longint;
    max,min,buf,k,n,i,j,maxj,minj:longint;
    begin
    assign(input,'input.txt');
    reset(input);
    assign(output,'output.txt');
    rewrite(output);
    readln(n);
    readln(k);
     for i:=1 to k do
        for j:=1 to n do read(a[i,j]);
     for i:=1 to k do begin
     max:=a[i,1];
     min:=a[i,1];
     maxj:=1;
     minj:=1;
        for j:=1 to n do begin
        if a[i,j]>max then maxj:=j
                      else if a[i,j]<min then minj:=j;
        end;
     if (maxj=n)and(minj=1) then
                                begin
                                buf:=a[i,1];
                                a[i,1]:=a[i,n];
                                a[i,n]:=buf;
                                end;
     buf:=a[i,1];
     a[i,1]:=a[i,maxj];
     a[i,maxj]:=buf;
     buf:=a[i,n];
     a[i,n]:=a[i,minj];
     a[i,minj]:=buf;
     end;
     for i:=1 to k do begin
        for j:=1 to n do write(a[i,j],' ');
        writeln;
     end;
    end.
    
    
    
    

    вот задача только как-то неправильно рабтает, достаточно отредить , помогитеееее
     
  2. diehard

    diehard Elder - Старейшина

    Joined:
    30 Sep 2007
    Messages:
    442
    Likes Received:
    266
    Reputations:
    15
    Автор, в четкой формулировке задачи уже половина её решения.
     
  3. diehard

    diehard Elder - Старейшина

    Joined:
    30 Sep 2007
    Messages:
    442
    Likes Received:
    266
    Reputations:
    15
    Если я правильно понял задание, то надо для каждой строки минимальный элемент переставить местами с первым, а максимальный с последним. Тогда это выглядит так:

    Code:
    type index=word;
    
    var i, j, j_max, j_min : index;
        A1, AM, Amax, Amin : integer;
    
    BEGIN
    
    for i:=1 to N do
     begin
       j_max := 1;
       j_min := 1;
       for j:=1 to M do
        begin
          if A[i,j] > A[i,j_max] then j_max := j;
          if A[i,j] < A[i,j_min] then j_min := j;
        end;
       A1 := A[i,1];
       Amin := A[i,j_min]
       AM := A[i,M];
       Amax := A[i,j_max];
       A[i,1] := Amin;
       A[i,j_min] := A1;
       A[i,M] := Amax;
       A[i,j_max] := AM;
     end;
    
    END.
    
    Всю фигню с вводом-выводом и константами допиши сам.
     
    #3 diehard, 10 Jan 2008
    Last edited: 22 Jun 2009
    1 person likes this.
  4. krypt3r

    krypt3r Elder - Старейшина

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    Вроде бы в задании не сказано "обменять", написано "заменить", а про старое значение элемента массива ничего не упоминается, если я правильно понял. Можно и вот так
    Code:
    program laba1;
    
    const
      maxrow = 3;
      maxcol = 4;
    
    type
      TMass = array  [1..maxrow, 1..maxcol] of integer;
    
    function FillArray : TMass;
    var
      i, j : integer;
      a : TMass;
    begin
      Randomize;
      for i := 1 to maxrow do
        for j := 1 to maxcol do
          a[i][j] := Random (1000) - 500;
      FillArray := a
    end;
    
    procedure PrintArray (a : TMass);
    var
      i, j : integer;
    begin
      for i := 1 to maxrow do
        for j := 1 to maxcol do
          writeln (a[i][j]);
      writeln ('=====');
    end;
    
    procedure FindMinMax (a : TMass; row : integer; var min : integer; var max : integer);
    var
      j : integer;
    begin
      for j := 1 to maxcol do begin
        if j = 1 then begin
          min := a [row][j];
          max := min;
        end
        else begin
          if min > a [row][j] then
            min := a [row][j];
          if max < a [row][j] then
            max := a [row][j];
        end;
      end;
    end;
    
    procedure ReplaceArr (var a : TMass; row, min, max : integer);
    begin
      a[row][1] := min;
      a[row][maxcol] := max;
    end;
    
    var
      a : TMass;
      max, min, i : integer;
    
    begin
      a := FillArray;
      PrintArray (a);
      for i := 1 to maxrow do begin
        ///max := FindMax (a, 3);
        ///writeln (max);
        FindMinMax (a, i, min, max);
        writeln (min);
        writeln (max);
        writeln ('=====');
        ReplaceArr (a, i, min, max);
      end;
      PrintArray (a);
    end.
    
     
  5. diehard

    diehard Elder - Старейшина

    Joined:
    30 Sep 2007
    Messages:
    442
    Likes Received:
    266
    Reputations:
    15
    Вот потому и пишу, что надо чётко формулировать задание. А то в задании сказано "заменить соответственно", а в коде делает "обменять несоответственно":
    buf:=a[i,1];
    a[i,1]:=a[i,maxj];
    a[i,maxj]:=buf;
    buf:=a[i,n];
    a[i,n]:=a[i,minj];
    a[i,minj]:=buf;