IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Двумерный массив и процедуры. Преобразования двумерного массива.
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 9
Пол: Мужской
Реальное имя: Максим

Репутация: -  0  +


Дан двумерный массив размером MxN. Преобразовать его по правилу – все элементы каждого столбца матрицы умножить на элемент этого столбца. Из первых четырех строк массива сформировать четыре новых вектора (одномерные массивы). Упорядочить каждый вектор по убыванию.
Исходные данные:
- число строк и столбцов M и N;
- двумерный массив действительных чисел размерностью MхN.
Выходные данные:
- минимальный элемент каждого столбца;
- матрица, полученная делением каждого столбца на минимальный элемент в этом столбце;
- четыре упорядоченных вектора по убыванию, полученные из первых строк матрицы;

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

Program DivMax;
Uses Graph, Crt;
const
  Nmax = 10; {максимальная размерность матрицы}
type
  Matrix = array [1..Nmax, 1..Nmax] of real;
  Vector = array [1..Nmax] of real;
  Vecint = array [1..Nmax] of integer;
var
  G: Matrix;
  q: vecint;
  a, b, c, d, x: Vector;
  MaxX, MaxY, Driver, Regim,
  font, i, j, M, N: integer;
  ch: char;
  s: string;
  sv: boolean;
  f: text;
Procedure POLE; {Вывод фона программы}
begin
  SetFillStyle(1, 15);
  Bar(0, 0, MaxX, MaxY);
  SetFillStyle(1, 1);
  Bar(0, 0, MaxX, 25);
  Bar(0, MaxY - 25, MaxX, MaxY);
  SetLineStyle(0, 0, 1);
  SetTextStyle(font, 0, 5);
  SetTextJustify(0, 0);
  SetColor(15);
  OutTextXY(300, 20, 'Вариант 1');
  SetTextStyle(1, 0, 1);
  SetColor(12);
  OutTextXY(10, MaxY - 7, 'F1');
  OutTextXY(130, MaxY - 7, 'F2');
  OutTextXY(240, MaxY - 7, 'F3');
  OutTextXY(390, MaxY - 7, 'F4');
  OutTextXY(550, MaxY - 7, 'Esc');
  SetColor(15);
  SetTextStyle(font, 0, 5);
  OutTextXY(40, MaxY - 8, 'Клавиатура');
  OutTextXY(160, MaxY - 8, 'Сохранить');
  OutTextXY(270, MaxY - 8, 'Загрузить');
  OutTextXY(420, MaxY - 8, 'Преобразовать');
  OutTextXY(590, MaxY - 8, 'Выход');
end;
Procedure INPUT; {ввод матрицы}
var
  i, j: integer;
begin
  Write('Введите размерность матрицы (M*N, M>3): ');
  ReadLn(M, N);
  WriteLn('Ввод матрицы');
    for i := 1 to M do
      for j := 1 to N do
        begin
          Write('G(', i, ',', j, ')=');
          ReadLn(G[i, j]);
        end;
end;
Function DivAMin(var A: Matrix; M, N: integer): real;
{Вычисление минимального элемента каждого столбца и умножение на
этот элемент текущий столбец}
var
  min: real;
  i, j: integer;
begin
  DivAMin := 0;
  for j:=1 to N do
  begin
  A[1,j]:=min;
    for i:=1 to M do
    if A[i,j]<min
    then min:=A[i,j];
    if min=0
    then Exit;
    x[j]:=min;
    for i:=1 to M do
    A[i,j]:=A[i,j]*min;
    end;
end;
Procedure swap(var x,y: integer);
{Процедура обмена}
var
  t:integer;
begin
  t:=x;
  x:=y;
  y:=t;
end;
procedure Ypor;
{Упорядочивание строк элементов методом вставки}
begin
for j:=1 to N-1 do
for i:=1 to M-1 do
if Q[i] < Q[i+1]
then swap (Q[i],Q[i+1]);
end;
begin
  font := InstallUserFont('smal');
  Driver := VGA; Regim := VGAHi;
  InitGraph(Driver, Regim, '');
  MaxX := GetMaxX;  MaxY := GetMaxY;
  POLE;
  sv := False;
  DirectVideo := False;
  repeat
    ch := ReadKey;
    case ch of
      #59: begin {клавиатура}
             RestoreCRTMode;
             INPUT;
             sv := True;
             SetGraphMode(VGAHi);
             POLE;
             SetColor(0);
           end;
      #60: begin {сохранить}
             if not sv then Continue;
             SetFillStyle(1, 15);
             Bar(0, 26, MaxX, MaxY - 26);
             Window(2, 4, 78, 24);
             Write('Имя файла: ');
             Readln(s);
             Assign(f, s); Rewrite(f);
             WriteLn(f, M, ' ', N);
             for i := 1 to M do
               begin
                 for j := 1 to N - 1 do
                   Write(f, G[i, j]
1,' ');
                 WriteLn(f, G[i, N]
1);
               end;
             Close(f);
             SetFillStyle(1, 15);
             Bar(0, 26, MaxX, MaxY - 26);
           end;
      #61: begin {загрузить}
             SetFillStyle(1, 15);
             Bar(0, 26, MaxX, MaxY - 26);
             Window(2, 4, 78, 24);
             Write('Имя файла: ');
             Readln(s);
             {$I-} Assign(f, s); Reset(f); {$I+}
             if IOResult <> 0 then Continue;
             ReadLn(f, M, N);
             for i := 1 to M do
               begin
                 for j := 1 to N do
                   Read(f, G[i, j]);
                 ReadLn(f);
               end;
             Close(f);
             sv := True;
             SetFillStyle(1, 15);
             Bar(0, 26, MaxX, MaxY - 26);
           end;
      #62: begin {Преобразовать}
             if not sv then Continue;
             SetColor(0);
             SetFillStyle(1, 15);
             Bar(0, 26, MaxX, MaxY - 26);
             Assign(f, 'v12'); Rewrite(f);
             WriteLn(f, 'Исходная матрица');
             for i := 1 to M do
               begin
                 for j := 1 to N do
                   Write(f, G[i, j]:8:1);
                 WriteLn(f);
               end;
             writeln(f, 'Минимумы');
             Write(f,DivAMin(G, M, N)
1,' ');
             writeln(f);
             WriteLn(f, 'Преобразованная матрица');
             for i := 1 to M do
               begin
                 for j := 1 to N do
                   Write(f, G[i, j]:8:2);
                 WriteLn(f);
               end;
             for i := 1 to N do
               begin
                 a[i] := G[1, i]; b[i] := G[2, i];
                 c[i] := G[3, i]; d[i] := G[4, i];
               end;
             WriteLn(f, 'Вектор из 1-й строки');
             for j := 1 to N do
               Write(f, a[j]:8:2);
             WriteLn(f);
             WriteLn(f, 'Вектор из 2-й строки');
             for j := 1 to N do
               Write(f, b[j]:8:2);
             WriteLn(f);
             WriteLn(f, 'Вектор из 3-й строки');
             for j := 1 to N do
               Write(f, c[j]:8:2);
             WriteLn(f);
             WriteLn(f, 'Вектор из 4-й строки');
             for j := 1 to N do
               Write(f, d[j]:8:2);
             WriteLn(f);
             Close(f);
             Reset(f);
             j := 40;
             while not EOF(f) do
               begin
                 ReadLn(f, s);
                 OutTextXY(10, j, s);
                 j := j + 11;
               end;
             Close(f);
           end;
    end;
  until ch = #27;
  CloseGraph;
end.


Сообщение отредактировано: DarkGhost -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 29.04.2025 1:23
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name