Misyura_Viktoriya1683
?>

Язык программирования паскаль abc! в матрице имеется столбец, в котором разность между максимальным элементом и средним арифметическим больше первого элемента. найти этот столбец, и заменить его элементы на единицу.

Информатика

Ответы

Евгеньевна_Хусинов
Const
  nm = 50;
  nn = 50;

type
  Mas=array[1..nm,1..nn] of integer;

procedure MatrixInit(var a:Mas;m,n,p,q:integer);
{ Заполнение массива размером m*n
  целыми случайными числами из интервала [p;q] }
var
  i,j,k:integer;
begin
  k:=q-p+1;
  for i:=1 to m do
    for j:=1 to n do a[i,j]:=Random(k)-p
end;

procedure MatrixOutput(var a:Mas;m,n,k:integer);
{ вывод элементов матрицы размера m*n в k позициях }
var
  i,j:integer;
begin
  for i:=1 to m do
  begin for j:=1 to n do Write(a[i,j]:k); Writeln end
end;

function IsFits(var a:Mas;m,col:integer):boolean;
{ функция возвращает true, если колонка col явдяется "подходящей" }
var
  i,max:integer;
  mv:real;
begin
  max:=a[1,col]; mv:=max;
  for i:=2 to m do
  begin
    mv:=mv+a[i,col];
    if max<a[i,col] then max:=a[i,col]
  end;
  mv:=mv/m;
  IsFits:=(max-mv>a[1,col])
end;

procedure ColumnReplace(var a:Mas;m,col:integer);
{ Замена элементов столбца col единицами }
var
  i:integer;
begin
  for i:=1 to m do a[i,col]:=1
end;

var
  P: Mas;
  a,b,m,n,j,k:integer;
  flag:boolean;
begin
  Randomize;
  Write('Введите количество строк и столбцов матрицы: ');
  Read(m,n);
  Write('Укажите минимальное и максимальной значение элементов: ');
  Read(a,b);
  Write('Укажите количество позиций для вывода значения элемента: ');
  Read(k);
  MatrixInit(P,m,n,a,b);
  Writeln('Исходный массив');
  MatrixOutput(P,m,n,k);
  j:=1;
  repeat
    flag:=IsFits(P,m,j);
    if flag then
    begin
      ColumnReplace(P,m,j);
      Writeln('Результирующий массив');
      MatrixOutput(P,m,n,k)
    end
    else Inc(j)
  until flag or (j>n);
  if not flag then
    Writeln('')
end.

Тестовое решение:
Введите количество строк и столбцов матрицы: 5 8
Укажите минимальное и максимальной значение элементов: 0 20
Укажите количество позиций для вывода значения элемента: 3
Исходный массив
 19  7  2 15  2 11  2 15
 12 16  8 14  6  8  1 17
 12 14 10  8  7 19  7  1
  0  9  0  7 18 10  2  5
 18  8  4  9 16 10 14 10
Результирующий массив
 19  7  1 15  2 11  2 15
 12 16  1 14  6  8  1 17
 12 14  1  8  7 19  7  1
  0  9  1  7 18 10  2  5
 18  8  1  9 16 10 14 10
hadzievamareta44

На первый взгляд кажется, что задача простая. Поскольку последовательность состоит из целых чисел, то среди них могут быть и отрицательные, а значит, минимальное произведение получится, если умножить максимальное положительное число на минимальное отрицательное. Однако, это не так, если в последовательность входят только положительные или только отрицательные числа, поэтому такие случаи требуют особого рассмотрения.

Если все элементы последовательности положительные, то очевидно, что минимальное произведение – это произведение двух минимальных элементов последовательности. Если же все элементы последовательности отрицательные, то как ни странно, минимальное произведение дадут два максимальных элемента последовательности (так как они по модулю ближе всех к нулю, а минус на минус даёт плюс).

Таким образом, получается, что нам необходимо найти в последовательности два максимальных и два минимальных элемента, а потом выбрать минимальное произведение из трёх. Для одновременного поиска двух максимальных элементов можно использовать стратегию «турнирной таблицы». После считывания каждого элемента нужно будет сравнивать его с текущими значениями первого и второго максимума, и разбирать случаи. Их будет три. Первый случай – очередной элемент последовательности больше текущего значения первого максимума. Тогда нужно первый максимум опустить на вторую позицию, а на первую позицию записать новый элемент. Второй случай – элемент не больше первого максимума (возможно, что равен ему), но больше второго. Тогда первый максимум не изменяется, а на вторую позицию записывается считанный элемент. Третий случай – элемент не больше второго максимума (возможно, что равен ему). В этом случае нам не нужно предпринимать никаких действий. Минимумы ищутся аналогично.

Остаётся последний вопрос  – какие начальные значения задать максимумам и минимумам.  По аналогии с задачей № 2 в максимумы нужно записывать числа, которые гарантированно меньше любого элемента последовательности, а в минимумы – числа, которые гарантированно больше любого элемента последовательности.  

var a,max1,max2,min1,min2,p:integer;

begin

max1 := -10001;

 max2 := -10001;

 min1 := 10001;

 min2 := 10001;

 read(a);

while a <> 0 do begin

   if a > max1

then begin

max2 := max1;

     max1 := a

end

   else if a > max2 then max2 := a;

if a < min1

then begin

min2 := min1;

      min1 := a

end

    else if a < min2 then min2:=a;

    read(a)

end;

 p := max1 * min1;

if max1 * max2 < p then p := max1 * max2;

if min1 * min2 < p then p := min1 * min2;

writeln(p)

end.

Аверьянова

хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз

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

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

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

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

Rufilya-Belov
Stanislavovna1237
olimov9
Катерина Телюкин925
lyubavalev8
Darialaza
kotofei147516
hadzievamareta44
Николаевич-Анатольевич599
Varagyant
Azarenkoff
olegmgu1
mihailpolehin8
sttig
mail66