М
Молодежь
К
Компьютеры-и-электроника
Д
Дом-и-сад
С
Стиль-и-уход-за-собой
П
Праздники-и-традиции
Т
Транспорт
П
Путешествия
С
Семейная-жизнь
Ф
Философия-и-религия
Б
Без категории
М
Мир-работы
Х
Хобби-и-рукоделие
И
Искусство-и-развлечения
В
Взаимоотношения
З
Здоровье
К
Кулинария-и-гостеприимство
Ф
Финансы-и-бизнес
П
Питомцы-и-животные
О
Образование
О
Образование-и-коммуникации

Написать программу Python Напишите программу, которая выводит строку матрицы, сумма элементов которой наибольшая, и столбец с наибольшей суммой
Предусмотреть вывод сообщения при отрицательном результате решения.

👇
Открыть все ответы
Ответ:
Марс2014
Марс2014
08.01.2021
Задача, аналогичная той, которую публиковали вчера. Только цикл repeat заменяем на while.

Сначала немного математики.
\displaystyle a_n= \frac{n!}{(2n)!}=\frac{\prod_{i=1}^ni}{\prod_{i=1}^{2n}i}=\frac{\prod_{i=1}^ni}{\prod_{i=1}^{n}i\times\prod_{i=n+1}^{2n}i}=\frac{1}{\prod_{i=n+1}^{2n}i}; \quad n\in\mathbb N
О модуле тут смысла нет говорить, поскольку все an - суть положительные величины на интервале (0;1).

uses Crt;

function ai(n:integer):real;
var
  i:integer;
  p:real;
begin
  p:=1;
  for i:=n+1 to 2*n do p:=p*i;
  ai:=1/p
end;

var
  i:integer;
  eps,s,an:real;
begin
  ClrScr;
  Write('eps='); Read(eps);
  s:=0; i:=1; an:=eps+1;
  while an>=eps do begin
     an:=ai(i);
     if an>=eps then begin s:=s+an; Inc(i) end
  end;
  Writeln('s=',s);
  ReadKey
end.

Тестовые решения:
eps=0.07
s= 5.8333333333E-01

eps=0.000001
s= 5.9229647667E-01

eps=1e-8
s= 5.9229653448E-01

Для контроля результата можно отметить, что сумма первых 1000 членов ряда равна приблизительно 5.922965365Е-01

Если раздражает наличие функции, можно и без нее:
uses Crt;

var
  i,j:integer;
  eps,s,an,p:real;
begin
  ClrScr;
  Write('eps='); Read(eps);
  s:=0; i:=1; an:=eps+1;
  while an>=eps do begin
    p:=1;
    for j:=i+1 to 2*i do p:=p*j;
    an:=1/p;
    if an>=eps then begin s:=s+an; Inc(i) end
  end;
  Writeln('s=',s);
  ReadKey
end.
4,4(84 оценок)
Ответ:
Mashaaakuzzz
Mashaaakuzzz
08.01.2021
// PascalABC.NET 3.3, сборка 1627 от 27.01.2018
// Внимание! Если программа не работает, обновите версию!

begin
  var n:=ReadInteger('Количество строк (столбцов) в матрице:');
  Writeln('*** Исходная матрица ***');
  var a:=MatrRandom(n,n,-99,99);
  a.Println(4); Writeln(4*a.ColCount*'-');
  var (su,sd,sl):=(0,0,0);
  for var i:=0 to n-1 do
    for var j:=0 to n-1 do
      if i<j then su+=a[i,j]
      else
        if i=j then sd+=a[i,j]
        else sl+=a[i,j];
  Writeln('Суммы элементов:');
  Writeln(' - верхней треугольной матрицы ',su);
  Writeln(' - главной диагонали ',sd);
  Writeln(' - нижней треугольной матрицы ',sl)
end.

Пример
Количество строк (столбцов) в матрице: 4
*** Исходная матрица ***
 -73 -89   4  39
  77 -32  23 -45
 -29 -70 -88 -40
 -83   9  21 -46

Суммы элементов:
 - верхней треугольной матрицы -108
 - главной диагонали -239
 - нижней треугольной матрицы -75

"Школьный" вариант

const
  nn=20; { максимальный размер }

var
  a:array[1..nn,1..nn] of integer;
  i,j,n:integer;
  su,sd,sl:longint;
 
begin
  Write('Количество строк (столбцов) в матрице:');
  Readln(n);
  Randomize;
  Writeln('*** Исходная матрица ***');
  su:=0; sd:=0; sl:=0;
  for i:=1 to n do begin
    for j:=1 to n do begin
      a[i,j]:=Random(199)-99;
      Write(a[i,j]:4);
      if i<j then su+=a[i,j]
      else
        if i=j then sd+=a[i,j]
        else sl+=a[i,j]
      end;
      Writeln
    end;
  Writeln('Суммыа элементов:');
  Writeln(' - верхней треугольной матрицы ',su);
  Writeln(' - главной диагонали ',sd);
  Writeln(' - нижней треугольной матрицы ',sl)
end.
4,5(60 оценок)
Это интересно:
Новые ответы от MOGZ: Информатика
logo
Вход Регистрация
Что ты хочешь узнать?
Спроси Mozg
Открыть лучший ответ