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

> 

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Указать номера строк и номера столбцов на пересечении, которых находятся максимальный и минимальный элементы., Дописать код
сообщение
Сообщение #1





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

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


Дописать код наработки есть, но чет не могу понять как указать номер строк и столбца мин и мах значения


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;

begin

if x <= 0 then //при х<=-3

F := sqrt(-x) //1-я формула

else if ((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 := 1 to n do //перебираем строки

for j := 1 to 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;

begin

for i := 1 to n do //перебираем строки

begin

for j := 1 to 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 div 2; //высчитвыем номер первой строки второй области

for i := 1 to h do //перебираем строки перволй половины матрицы

begin

for j := 2*i-1 to min(2*i-2+h,n) do //перебираем строки

swap(a[i, j], a[i + h+(n mod 2), 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 div 2;

for i := 1 to h do

begin

m := m + 1; //увеличиваем индекс в матрице строке

b[m] := a[i,min(2*i-2+h,n)]; //вставляем значение

end;

k:=n;

if n mod 2 = 1 then

i:=i+1

else

k:=n-1;

for j := k downto 1 do

begin

m := m + 1; //увеличиваем индекс в матрице строке

b[m] := a[i,j]; //вставляем значение

end;

k:=0;

for i := i+1 to n do

begin

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;

begin

for i := 1 to 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;

begin

for i := 1 to m - 1 do //перебор элементов

for j := 1 to m - i do

// если текущий элемент больше или меньше следующего в зависимости от параметра IsDesc

if (arr[j] > arr[j + 1]) and IsDesc or not IsDesc and (arr[j] < arr[j + 1]) then

begin

//то меняем местами элементы

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 div 2 ;

h2 := h + n mod 2 ;

for i := 1 to n do //перебор строк

begin

for j := 1 to n do //перебор столбцов

begin

if (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)

else if (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)

else if (i>h) and (j<=h-(n mod 2)) 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 div 2 ;

h2 := h + n mod 2 ;

max := a[2, 1]; //изначально считаем что мин и мак элемент по индексу 2,1

mn := a[2, 1];

for i := 1 to n do //перебераем строки

for j := 1 to n do //перебераем столбцы

if not((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

begin

if 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 := 1 to n do //перебераем строки

if min > a[i, i] then //если тек. элемент больше минмльного

min := a[i, i]; //то делаем его минимальным

//если несколько максимальных, то замени все

for i := 1 to 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.

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Большевик–концептуал
***

Группа: Пользователи
Сообщений: 194
Пол: Мужской
Реальное имя: Иван Левашев
Jabber: bu_gen@octagram.name
Skype: i.levashew
QQ: 3152538431
WeChat
Ада: Сторонник
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик
Turbo Pascal: Установлен

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


В MinMaxMatrix в момент, когда найден новый минимум/максимум, не только значение сохраняется, но строка/столбец, в котором оно было


--------------------
If you want to get to the top, you have to start at the bottom
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3





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

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


Цитата(OCTAGRAM @ 23.06.2020 16:30) *

В MinMaxMatrix в момент, когда найден новый минимум/максимум, не только значение сохраняется, но строка/столбец, в котором оно было

слушай, хорошо понял тебя про мин и макс, а вот траекторию поменять по картинке, но тут я так понимаю по маленьким стрелочкам (Красная фотография моя.) (Зеленая которая в коде.) мне вот надо на мою поменять картинку (траекторию движения )


Эскизы прикрепленных изображений
Прикрепленное изображение Прикрепленное изображение
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Большевик–концептуал
***

Группа: Пользователи
Сообщений: 194
Пол: Мужской
Реальное имя: Иван Левашев
Jabber: bu_gen@octagram.name
Skype: i.levashew
QQ: 3152538431
WeChat
Ада: Сторонник
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик
Turbo Pascal: Установлен

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


В PrintMatrixColor общая схема работы уже задана. Надо только заменить ту часть, что тестирует в if координаты и выставляет цвета.

На рисунке несколько треугольников, можете их все в if перебрать, если не знаете, как проще


--------------------
If you want to get to the top, you have to start at the bottom
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5





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

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


Цитата(OCTAGRAM @ 24.06.2020 16:00) *

В PrintMatrixColor общая схема работы уже задана. Надо только заменить ту часть, что тестирует в if координаты и выставляет цвета.

На рисунке несколько треугольников, можете их все в if перебрать, если не знаете, как проще

Блин чет вообще не понял как (( если тебе несложно помоги с кодом, я просто вижу что ты прям шаришь в этом, а мне надо просто сделать, что бы не отчислили. Специальность у меня вообще другая, не знаю зачем вообще на это говорят делать(
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Большевик–концептуал
***

Группа: Пользователи
Сообщений: 194
Пол: Мужской
Реальное имя: Иван Левашев
Jabber: bu_gen@octagram.name
Skype: i.levashew
QQ: 3152538431
WeChat
Ада: Сторонник
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик
Turbo Pascal: Установлен

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


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
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7





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

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


Цитата(OCTAGRAM @ 24.06.2020 21:58) *

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, такой треугольник можно задать одним сравнением.

Правильно сделают, что отчислят. Какую работу можно поручить человеку, который не в состоянии справиться с ТАКИМ?


Я заочник мне нахер это не надо, я работаю и времени нет это делать. А учусь я не на программиста, я не должен знать этот паскаль и мне он не нужен.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Большевик–концептуал
***

Группа: Пользователи
Сообщений: 194
Пол: Мужской
Реальное имя: Иван Левашев
Jabber: bu_gen@octagram.name
Skype: i.levashew
QQ: 3152538431
WeChat
Ада: Сторонник
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик
Turbo Pascal: Установлен

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


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

Если учитесь, то должны. Если не должны, то не учитесь. Вот так очень просто всё понять

Я как обладатель диплома не заинтересован в его девальвации; и как плательщик налогов не заинтересован, чтоб они выбрасывались на тех, кому не надо.

Проблемы у вас не с Паскалём, а ещё, похоже, со школьной программой, с алгебраической геометрией. И с мотивацией. Не задалось с алгемом, можно было опытным путём уже всяко-разно попробовать покрасить матрицу, приближая результат к желаемому. Это не Паскаль, это школа жизни, не с одного, так с другого края подойти к проблеме.


--------------------
If you want to get to the top, you have to start at the bottom
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9





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

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


Цитата(OCTAGRAM @ 25.06.2020 4:40) *

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

Если учитесь, то должны. Если не должны, то не учитесь. Вот так очень просто всё понять

Я как обладатель диплома не заинтересован в его девальвации; и как плательщик налогов не заинтересован, чтоб они выбрасывались на тех, кому не надо.

Проблемы у вас не с Паскалём, а ещё, похоже, со школьной программой, с алгебраической геометрией. И с мотивацией. Не задалось с алгемом, можно было опытным путём уже всяко-разно попробовать покрасить матрицу, приближая результат к желаемому. Это не Паскаль, это школа жизни, не с одного, так с другого края подойти к проблеме.


Ладно, вы правы, пошел делать.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





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