Дописать код наработки есть, но чет не могу понять как указать номер строк и столбца мин и мах значения
uses
crt;
var
FText: text;
//создаем свои типы
type
matrix = array [1..15, 1..15] of real;//матрица
arrayB = array [1..50] of real;//матрица-строка
function F(x: real): real;
beginif x <= 0then//при х<=-3
F := sqrt(-x) //1-я формула
elseif ((x>=0) and (x<5)) then//при х<3
F := x //2-я формула
else//иначе
F := 4*x*x; //3-я формула
end;
//функция инициализации матрицы
function CreateMatrix(n: integer; xn: real; xk: real): matrix;
var
i, j: integer;
x, h: real;
a: matrix;
begin
x := xn;
h := (xk - xn) / (n * n - 1); //высчитываем шаг
for i := 1to n do//перебираем строки
for j := 1to n do//перебираем столбцы
begin
a[i, j] := f(x);
x := x + h;//увеличиваем х на шаг;
a[i, j]:=i*n-n+j;// удобно для теста
end;
CreateMatrix := a; //возвращаем матрицу
end;
//функция печати массива
procedure PrintMatrix(a: matrix; n: integer);
var
i, j: integer;
beginfor i := 1to n do//перебираем строки
beginfor j := 1to n do//перебираем столбцы
begin
write(a[i, j]:8:2, ' '); //выводим элемент матрицы
write(Ftext,a[i, j]:8:2, ' '); //выводим элемент матрицы
end;
writeln(Ftext,'');
writeln; //после каждой строки переход
end;
end;
//функци замены областей местами
procedure SwapMatrix(var a: matrix; n: integer);
var
i, j, h, h2: integer;
begin
h := n div2; //высчитвыем номер первой строки второй области
for i := 1to h do//перебираем строки перволй половины матрицы
beginfor j := 2*i-1to min(2*i-2+h,n) do//перебираем строки
swap(a[i, j], a[i + h+(n mod2), j]); //меняем на соответсвующие элмементы второй области
end;
end;
//функция создания матрицы чтроки
function CreateArray(a: matrix; n: integer; var m: integer): arrayB;
var
i, h, j, k: integer;
b: arrayB;
begin
m := 0;
h := n div2;
for i := 1to h dobegin
m := m + 1; //увеличиваем индекс в матрице строке
b[m] := a[i,min(2*i-2+h,n)]; //вставляем значение
end;
k:=n;
if n mod2 = 1then
i:=i+1else
k:=n-1;
for j := k downto1dobegin
m := m + 1; //увеличиваем индекс в матрице строке
b[m] := a[i,j]; //вставляем значение
end;
k:=0;
for i := i+1to n dobegin
m := m + 1; //увеличиваем индекс в матрице строке
k:=k+1;
b[m] := a[i,2*k-1]; //вставляем значение
end;
CreateArray := b; //возвращаем результат
end;
//функция печати матрицы-строки
procedure PrintArray(a: arrayB; n: integer);
var
i: integer;
beginfor i := 1to n do//перебор индексов
begin
write(Ftext,a[i]:8:2, ' ');
write(a[i]:8:2, ' '); //печать элемента
end;
writeln(Ftext,'');
writeln;
end;
//функция сортировки пузырьком
procedure SortArray(var arr: arrayB; m: integer; IsDesc: Boolean);
var
i, j: integer;
k: real;
beginfor i := 1to m - 1do//перебор элементов
for j := 1to m - i do// если текущий элемент больше или меньше следующего в зависимости от параметра IsDesc
if (arr[j] > arr[j + 1]) and IsDesc ornot IsDesc and (arr[j] < arr[j + 1]) thenbegin//то меняем местами элементы
k := arr[j];
arr[j] := arr[j + 1];
arr[j + 1] := k
end;
end;
//покраска элементов
procedure PrintMatrixColor(a: matrix; n: integer);
var
i, j, h, h2: integer;
begin
h := n div2 ;
h2 := h + n mod2 ;
for i := 1to n do//перебор строк
beginfor j := 1to n do//перебор столбцов
beginif (i<=h) and (j=min(2*i-2+h,n)) or (i=h2) or (i>h) and (j=2*(i-h2)-1) then//проверка принадлежности стрелок
textcolor(green)
elseif (i<=h) and (j>=2*i-1) and (j<=min(2*i-2+h,n))
or (i>h2) and (j>=2*(i-h2)-1) and (j<=min(2*(i-h2)-2+h,n)) then//принадлежность верхенму участку
textcolor(red)
elseif (i>h) and (j<=h-(n mod2)) and (i-h<=j) then//принадлежность нижнему участку
textcolor(Cyan)
else
textcolor(white);
write(a[i, j]:8:2, ' ');
end;
writeln;
end;
textcolor(white);
end;
//поиск минимального и максимального элемента
procedure MinMaxMatrix(var a: matrix; n: integer; var mn: real; var max: real);
var
i, j, h, h2: integer;
begin
h := n div2 ;
h2 := h + n mod2 ;
max := a[2, 1]; //изначально считаем что мин и мак элемент по индексу 2,1
mn := a[2, 1];
for i := 1to n do//перебераем строки
for j := 1to n do//перебераем столбцы
ifnot((i<=h) and (j>=2*i-1) and (j<=min(2*i-2+h,n))
or (i>h2) and (j>=2*(i-h2)-1) and (j<=min(2*(i-h2)-2+h,n))) thenbeginif max < a[i, j] then//если тек. элемент больше максимального
max := a[i, j]; //то делаем его максимальным
if mn > a[i, j] then//аналогично для минимального
mn := a[i, j];
end;
end;
// замена элементов в диагонали
procedure SwapDiagonalMatrix(var a: matrix; n: integer);
var
i, j: integer;
min: real;
begin
min:=a[1,n];
for i := 1to n do//перебераем строки
if min > a[i, i] then//если тек. элемент больше минмльного
min := a[i, i]; //то делаем его минимальным
//если несколько максимальных, то замени все
for i := 1to n do//перебераем строки
begin
a[i,i] := min;
a[i, n-i+1]:=min;
end;
end;
var
a: matrix;
n, m: integer;
xn, xk, mx, mn: real;
b: arrayB;
begin//ввод разномернос с проверкой
assign(Ftext,'result.txt');
Rewrite (Ftext);
repeat
write('Введите число в диапазоне от 5 до 15: ');
readln(n);
until (n >= 5) and (n <= 15);
write('Введите x начальное: ');
readln(xn);
write('Введите x конечное: ');
readln(xk);
a := CreateMatrix(n, xn, xk);//создаем матрицу
writeln('Исходная матрица: ');
writeln(Ftext,'Исходная матрица: ');
PrintMatrix(a, n); //печатаем ее
writeln('Измененный массив: ');
writeln(Ftext,'Измененный массив: ');
SwapMatrix(a,n);
PrintMatrix(a, n);
writeln('Массив B: ');
writeln(Ftext,'Массив B: ');
b := CreateArray(a, n, m);
PrintArray(b, m);
writeln('Массив B отсоритрованный по возростанию: ');
writeln(Ftext,'Массив B отсоритрованный по возростанию: ');
SortArray(b,m,true);
PrintArray(b, m);
writeln('Массив B отсоритрованный по убыванию: ');
writeln(Ftext,'Массив B отсоритрованный по убыванию: ');
SortArray(b,m,false);
PrintArray(b, m);
MinMaxMatrix(a,n,mn,mx);
writeln('Максимальный элемент: ',mx:0:3);
writeln('Минимальный элемент: ',mn:0:3);
writeln(Ftext,'Максимальный элемент: ',mx:0:3);
writeln(Ftext,'Минимальный элемент: ',mn:0:3);
close(Ftext);
end.
В MinMaxMatrix в момент, когда найден новый минимум/максимум, не только значение сохраняется, но строка/столбец, в котором оно было
слушай, хорошо понял тебя про мин и макс, а вот траекторию поменять по картинке, но тут я так понимаю по маленьким стрелочкам (Красная фотография моя.) (Зеленая которая в коде.) мне вот надо на мою поменять картинку (траекторию движения )
В PrintMatrixColor общая схема работы уже задана. Надо только заменить ту часть, что тестирует в if координаты и выставляет цвета.
На рисунке несколько треугольников, можете их все в if перебрать, если не знаете, как проще
Блин чет вообще не понял как (( если тебе несложно помоги с кодом, я просто вижу что ты прям шаришь в этом, а мне надо просто сделать, что бы не отчислили. Специальность у меня вообще другая, не знаю зачем вообще на это говорят делать(
h и h2, как я посмотрю, разбивают матрицу так, что это примерно пополам, и h+h2=n, h<=h2
Если в if сравниваются i и j, возможно, с разностью от h или h2, такое условие верно на какой-то диагональной линии и по какую-то сторону от неё. Если только i или только j сравниваются с 1, h, h2 или n, это задаёт вертикальную или горизонтальную линию с полуплоскостью в какой-то стороне от неё.
Треугольник можно задать как общее подмножество трёх полуплоскостей, то есть, в условии три сравнения через and. Но если не рассчитать, полуплоскость не в ту сторону развернуть, в итоге есть риск получить пустое множество, и не понятно, что не так. Можете начинать красить полуплоскости, добавляя условия, чтоб становились треугольники.
Ещё на картинке видно, как некоторые треугольники прижаты к углу. Там естественным ограничителем выступают два из четырёх тождеств i >= 1, j >= 1, i <= n, j <= n, такой треугольник можно задать одним сравнением.
Правильно сделают, что отчислят. Какую работу можно поручить человеку, который не в состоянии справиться с ТАКИМ?
--------------------
If you want to get to the top, you have to start at the bottom
h и h2, как я посмотрю, разбивают матрицу так, что это примерно пополам, и h+h2=n, h<=h2
Если в if сравниваются i и j, возможно, с разностью от h или h2, такое условие верно на какой-то диагональной линии и по какую-то сторону от неё. Если только i или только j сравниваются с 1, h, h2 или n, это задаёт вертикальную или горизонтальную линию с полуплоскостью в какой-то стороне от неё.
Треугольник можно задать как общее подмножество трёх полуплоскостей, то есть, в условии три сравнения через and. Но если не рассчитать, полуплоскость не в ту сторону развернуть, в итоге есть риск получить пустое множество, и не понятно, что не так. Можете начинать красить полуплоскости, добавляя условия, чтоб становились треугольники.
Ещё на картинке видно, как некоторые треугольники прижаты к углу. Там естественным ограничителем выступают два из четырёх тождеств i >= 1, j >= 1, i <= n, j <= n, такой треугольник можно задать одним сравнением.
Правильно сделают, что отчислят. Какую работу можно поручить человеку, который не в состоянии справиться с ТАКИМ?
Я заочник мне нахер это не надо, я работаю и времени нет это делать. А учусь я не на программиста, я не должен знать этот паскаль и мне он не нужен.
Ну знаете, я тоже не на очном учился и не по специальности, и мне так ещё и не пригодились ни сопромат, ни обработка сигналов, ни материаловедение, и тоже работал на полный день, что не помешало закончить с отличием и ещё язык иностранный по чуть-чуть начать учить. Не серьёзно. Не нашли понимания такие слова. На собеседовании так поговорите, очень вдохновляет.
Если учитесь, то должны. Если не должны, то не учитесь. Вот так очень просто всё понять
Я как обладатель диплома не заинтересован в его девальвации; и как плательщик налогов не заинтересован, чтоб они выбрасывались на тех, кому не надо.
Проблемы у вас не с Паскалём, а ещё, похоже, со школьной программой, с алгебраической геометрией. И с мотивацией. Не задалось с алгемом, можно было опытным путём уже всяко-разно попробовать покрасить матрицу, приближая результат к желаемому. Это не Паскаль, это школа жизни, не с одного, так с другого края подойти к проблеме.
--------------------
If you want to get to the top, you have to start at the bottom
Ну знаете, я тоже не на очном учился и не по специальности, и мне так ещё и не пригодились ни сопромат, ни обработка сигналов, ни материаловедение, и тоже работал на полный день, что не помешало закончить с отличием и ещё язык иностранный по чуть-чуть начать учить. Не серьёзно. Не нашли понимания такие слова. На собеседовании так поговорите, очень вдохновляет.
Если учитесь, то должны. Если не должны, то не учитесь. Вот так очень просто всё понять
Я как обладатель диплома не заинтересован в его девальвации; и как плательщик налогов не заинтересован, чтоб они выбрасывались на тех, кому не надо.
Проблемы у вас не с Паскалём, а ещё, похоже, со школьной программой, с алгебраической геометрией. И с мотивацией. Не задалось с алгемом, можно было опытным путём уже всяко-разно попробовать покрасить матрицу, приближая результат к желаемому. Это не Паскаль, это школа жизни, не с одного, так с другого края подойти к проблеме.