Написать программу, в которой в ручную заполняется матрица (элементы, количество строк и столбцов, все в ручную), в этой матрице в каждом столбце найти первый отрицательный элемент и сформировать вектор (из найденных элементов), вывести этот вектор на экран. Далее нужно умножить на индекс минимального элемента вектора всю матрицу и вывести преобразованную матрицу на экран, и с помощью процедуры поменять в полученной матрице элементы столбцов (номера вводятся в ручную). Вывести полученную матрицу.
спросил 18 Дек, 18 от cevka в категории школьный раздел


решение вопроса

+7
const
  imax = 9;
 
type
  vector = array[1..imax] of real;
  matrix = array[1..imax] of vector;
 
procedure inp_size(s: string; var x: integer; k: integer);
begin
  repeat
    write(s + ' [1..', k, ']: ');
    readln(x)
  until x in [1..k]
end;
 
procedure out_mat(s: string; const x: matrix; m, n: integer);
var i, j: integer;
begin
  writeln(s);
  for i := 1 to m do
    begin
      for j := 1 to n do write(' ', x[i, j]:9);
      writeln
    end;
  write('Нажмите <Enter>');
  readln
end;
 
procedure swap_col(var x: matrix; f, s, n: integer);
var i: integer;
    t: real;
begin
  for i := 1 to n do
    begin
      t := x[i, f];
      x[i, f] := x[i, s];
      x[i, s] := t
    end
end;
 
var
  mat: matrix;
  vec: vector;
  m, n, i, j, k, t, p, min: integer;
 
begin
  inp_size('Количество строк', m, imax);
  inp_size('Количество столбцов', n, imax);
  writeln('Введите элементы мтрицы:');
  for i := 1 to m do
    for j := 1 to n do
      begin
        write('mat[', i, ', ', j, '] = ');
        readln(mat[i, j])
      end;
  out_mat('Исходная матрица:', mat, m, n);
  k := 0;
  for j := 1 to n do
    for i := 1 to m do
      if mat[i, j] < 0
        then begin
          inc(k);
          vec[k] := mat[i, j];
          break
        end;
  if k > 0
    then begin
      min := 1;
      writeln('Вектор:');
      for i := 1 to k do
        begin
          write(' ', vec[i]:9);
          if vec[i] < vec[min] then min := i
        end;
      writeln;
      writeln('Индекс минимального элемента вектора: ', min)
      for i := 1 to m do
        for j := 1 to n do
          mat[i, j] := mat[i, j] * min;
      out_mat('Преобразованная матрица:', mat, m, n)
    end
    else writeln('Матрица не содержит отрицательных элементов.');
  writeln('Введите номера столбцов, которые нужно обменять:');
  inp_size('Первый столбец', t, m);
  inp_size('Второй столбец', p, m);
  swap_col(mat, t, p, n);
  out_mat('Преобразованная матрица:', mat, m, n)
end.
ответил 18 Дек, 18 от Olenka

Связанных вопросов не найдено

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

Популярное на сайте:

Как быстро выучить стихотворение наизусть? Запоминание стихов является стандартным заданием во многих школах. 

Как научится читать по диагонали? Скорость чтения зависит от скорости восприятия каждого отдельного слова в тексте. 

Как быстро и эффективно исправить почерк?  Люди часто предполагают, что каллиграфия и почерк являются синонимами, но это не так.

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