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]2.gif1,' ');
WriteLn(f, G[i, N]2.gif1);
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)2.gif1,' ');
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 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2





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

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


спасибо, заработало, но выводит некорректные значения, видимо в самом алгоритме уже ошибся...
Ещё появился вопрос
при запуске программы отображение надписей F1,F2,F3, ESC нормальное, после выполнения любой процедуры становится некорректным (уменьшается до нечитаемого).
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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


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

 





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