missmorozova2
?>

Напишите программу, которая выводит на экран строку матрицы, сумма значений элементов которой наибольшая (pascal)

Информатика

Ответы

gurman171
Const
   N = 3;
   M = 4;
Var
   A:array[1..N,1..M] of integer;
   i,j,iMax:integer;
   S,Max:real;
Begin
Randomize;
WriteLn('Исходная матрица:');
For i:= 1 to N do
    Begin
    For j:= 1 to M do
        Begin
        A[i,j]:=random(21)-10;
        Write(A[i,j]:3,' ');
        End;
    WriteLn
    End;
Max:=0;
iMax:=1;
For j:= 1 to M do
    Max:=Max+A[1,j];
For i:= 2 to N do
    Begin
    For j:= 1 to M do
        S:=S+A[i,j];
    if S>Max then
       Begin
       Max:=S;
       iMax:=i;
       End;
    End;
Write('Искомая строка:');
For j:= 1 to M do
    Write(' ',A[iMax,j])
End.

Пример работы программы:

Исходная матрица:
  8   0  -7  -1
 -2 -10  -4 -10
  5  -1  10  -6
Искомая строка: 8 0 -7 -1
yuliyastatsenko3894
1. Современное решение

// PascalABC.NET 3.2, сборка 1417 от 28.03.2017
// Внимание! Если программа не работает, обновите версию!

begin
  var n:=ReadInteger('Количество строк в матрице:');
  var m:=ReadInteger('Количество столбцов в матрице:');
  Writeln('*** Исходная матрица [',n,',',m,'] ***');
  var a:=MatrRandom(n,m,-99,99);
  a.Println(4); Writeln(4*a.ColCount*'-');
  Writeln('Строка с наибольшей суммой:');
  a.Row(a.Rows.Select(r->r.Sum).ToArray.IndexMax).Println
end.

Пример
Количество строк в матрице: 6
Количество столбцов в матрице: 9
*** Исходная матрица [6,9] ***
  54 -83  45 -44 -52  57 -90 -71 -70
   8  99 -27  72  46  28 -18  36  48
 -85  24 -57 -67  63 -69  52  44 -99
 -34 -44  -1  45  48  63  68  48  98
  27  84  15  70  37 -70   1  24 -60
 -82 -63   6 -59  91 -64  84  65  66

Строка с наибольшей суммой:
8 99 -27 72 46 28 -18 36 48

2. Школьное решение в стиле языка ТурбоПаскаль 1983г

const
  nn=20;
var
  i,j,n,m,k,s,max:integer;
  a:array[1..nn,1..nn] of integer;
begin
  Write('Количество строк в матрице: '); Read(n);
  Write('Количество столбцов в матрице :'); Read(m);
  Writeln('*** Исходная матрица [',n,',',m,'] ***');
  Randomize;
  max:=-100;
  for i:=1 to n do begin
    s:=0;
    for j:=1 to m do begin
      a[i,j]:=Random(199)-99;
      Write(a[i,j]:4);
      s:=s+a[i,j]
      end;
    Writeln;
    if s>max then begin
      max:=s; k:=i
      end
    end;
  for i:=1 to 4*n do Write('-');
  Writeln;
  Writeln('Строка с наибольшей суммой:');
  for j:=1 to m do Write(a[k,j],' ');
  Writeln
end.
Gennadevna-Darya1216
1. Современное короткое, но скорее всего, мало понятное школьнику решение

// PascalABC.NET 3.1, сборка 1213 от 04.04.2016
function LineLen(a,b:(real,real)):=
  Sqrt(Sqr(b.Item1-a.Item1)+Sqr(b.Item2-a.Item2));

begin
  var a:array[1..3] of (real,real);
  var x,y:real;
  Writeln('Введите три пары координат x,y');
  for var i:=1 to 3 do begin Read(x,y); a[i]:=(x,y) end;
  Writeln('Периметр треугольника равен ',LineLen(a[1],a[2])+
    LineLen(a[1],a[3])+LineLen(a[2],a[3]))
end.

Тестовое решение:
Введите три пары координат x,y
3 -3.5 -6 8 4 5.2
Периметр треугольника равен 33.7449685386805

2. Традиционное, но возможно тоже не очень понятное школьнику решение

// PascalABC.NET 3.1, сборка 1213 от 04.04.2016
type
  Point=record
    x,y:real
    end;

function LineLen(a,b:Point):real;
begin
  Result:=Sqrt(Sqr(b.x-a.x)+Sqr(b.y-a.y));
end;
 
var
  a:array[1..3] of Point;
 
begin
  Writeln('Введите три пары координат x,y');
  for var i:=1 to 3 do Read(a[i].x,a[i].y);
  Writeln('Периметр треугольника равен ',LineLen(a[1],a[2])+
    LineLen(a[1],a[3])+LineLen(a[2],a[3]))
end.
Svetlaru70
1. Программа, создающая тестовый файл.

// PascalABC.NET 3.1, сборка 1213 от 04.04.2016
begin
  var f: file of integer;
  var t:integer;
  Assign(f,'input.dat'); Rewrite(f);
  for var j:=1 to 5 do begin
    for var i:=1 to 10 do begin t:=Random(10,99); Write(f,t) end;
    for var i:=1 to 10 do begin t:=-Random(10,99); Write(f,t) end
    end;
  f.Close;
end.

2. Программа, которую требовалось написать

// PascalABC.NET 3.1, сборка 1213 от 04.04.2016
begin
  var f,g: file of integer;
  var a:=new integer[20];
  var t:integer;
  Assign(f,'input.dat'); Reset(f);
  Assign(g,'output.dat'); Rewrite(g);
  while not f.Eof do begin
    for var i:=0 to 19 do Read(f,a[i]);
    a:=a[10:15]+a[0:5]+a[15:20]+a[5:10];
    for var i:=0 to 19 do Write(g,a[i])
    end;
  f.Close;
  g.Seek(0);
  while not g.Eof do begin Read(g,t); Print(t) end;
  g.Close
end.

Ответить на вопрос

Поделитесь своими знаниями, ответьте на вопрос:

Напишите программу, которая выводит на экран строку матрицы, сумма значений элементов которой наибольшая (pascal)
Ваше имя (никнейм)*
Email*
Комментарий*

Популярные вопросы в разделе

samuilik-v
vladimirkirv
ekvld708
владимировнаКлютко
akuznecov8989
sve34166163
klepa-79
bike-garage8
Александровна1685
inaine73
srvsm
jamaltreid
mrvasilev2012
ver2bit
YekaterinaAbinskov