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

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

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

 
 Ответить  Открыть новую тему 
> Задача на работу с матрицой.Сортировка.
сообщение
Сообщение #1


Бывалый
***

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

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


Задача такова :
Дана квадратная матрица MxN. Есле в главной диагонали присутствует отрицательный элемент,то выписать тот столбик,в котором этот отрицательный элемент стоит,и отсортировать его по убыванию.
Вот типа графически как это выглядит
1 5 3
1 -2 3
1 3 3

выписывается 2ой столбик
5
-2
3

и отсортировывается в ввиде
-2
5
3

Проблема возникает в следующем :
не понимаю как выписать этот столбик,главную диагональ нахожу,нахожу в ней отриц. элемент.
Я понимаю что надо сначала этот столбик записать в отдельный массив однамерный(вектор),потом отсортировать и вставить обратно..
вот с отбором столбика,сортировкой и вставкой у меня проблемы.

вот мой код..

uses crt;
const
n=3;
m=3;
l=3;
k=3;
type
matr = array [1..n,1..m] of integer;
stolb = array [1..l,1..k] of integer;
var
a:matr;
i,j,buf:integer;
ot:stolb;


begin
clrscr;
writeln('el-ti matrici vvedite plz');
for i:=1 to n do
for j:=1 to m do
begin
write('A[',i,j,']=');read(a[i,j]);
end;
for i:=1 to n do begin
for j:=1 to m do
write(a[i,j],' ');
writeln;
end;

readkey;
writeln;
{=========================}
for I:=1 to n do
for j:=1 to m do
begin
if i=j then
if a[i,j] <0 then begin {таким образом я записываю только главную диагональ,а как сделать что бы записывался стобец...=/ }
buf:=a[i,j];
ot[i,j]:=buf;
end
else
buf:=a[i,j];
ot[i,j]:=buf;
end;
for i:=1 to n do
begin
write(ot[i,j],' ');
writeln;
end;
readkey;
end.


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


Гость






var buffer: array[1 .. n] of integer;
...
for i := 1 to n do
if a[i, i] < 0 then begin
for j := 1 to n do buffer[j] := a[j, i]; { <--- Смотри на индексы !!! }

{ Здесь как-то сортируешь buffer }

for j := 1 to n do a[j, i] := buffer[j]; { <--- И возвращаешь назад в матрицу }
end;
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Бывалый
***

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

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


ааа,спасибо!=)Вы настоящий мужтчина=))
только мне плохо понятна запись if a[i, i] < 0 then begin вот эта... dry.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

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


у элементов на главной диагонали номер столбца и номер строки равны между собой...
поэтому и пишется a[i,i]


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Бывалый
***

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

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


хм..после сортировки получаеться так,что отсортированный вектор встает на последний стоблец,а не на котором он был..видимо надо делать сортировку в матрице.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Занчит, при сортировке ты изменяешь значение i, что недопустимо... Используй другую переменную.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Бывалый
***

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

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


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


Бывалый
***

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

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


║for i := 1 to n do
║ if a[i, i] < 0 then
║ for j:=1 to n do
║ begin
║ buf[j]:=a[j,i]
║ end;
║ for i:=1 to n do
║ for j:=1 to n do
║ if buf[i]>buf[j] then begin
║ temp_var:=buf[i];
║ buf[i]:=buf[j];
║ buf[j]:=temp_var;
║ end;

║for j := 1 to n do a[j, i] := buf[j];




вот что я делаю.
результат...
el-ti matrici vvedite plz
A[11]=-1
A[12]=1
A[13]=2
A[21]=6
A[22]=4
A[23]=7
A[31]=8
A[32]=5
A[33]=3
-1 1 2
6 4 7
8 5 3


-1 1 8
6 4 6
8 5 -1
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гость






Ну, как же "не изменял"? Ты же запускаешь ВНУТРИ еще один цикл по i !!!

Кстати, ты нарушил структуру: у тебя begin/end стоят не там, где я показывал... Я говорил вот про такое:

for i := 1 to n do

if a[i, i] < 0 then begin
for j:=1 to n do buf[j]:=a[j,i];

for K:=1 to n do { <--- Заменить i и j на K и L, например !!! }
for L:=1 to n do
if buf[K]>buf[L] then begin
temp_var:=buf[K];
buf[K]:=buf[L];
buf[L]:=temp_var;
end;

for j := 1 to n do a[j, i] := buf[j];
end;

переменные i и j для тебя - ТАБУ... У тебя уже есть внешиий цикл по ним, поэтому внутренний ты не имеешь права делать по ним же... Современные компиляторы, кстати, тебе просто не будут такую программу компилировать, а дедушка TP - позволяет... Вот и глюки smile.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

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


компилятор не виноват... тут же вложенности нет:
║for i := 1 to n do {заголовок цикла по i. begin отсутствует}
║ if a[i, i] < 0 then {тело цикла по i}
║ for j:=1 to n do {заголовок по j}
║ begin{начала тела по j}
║ buf[j]:=a[j,i]
║ end;{конец тела цикла по j. и по i тоже}

║ for i:=1 to n do{а это уже независимо}
║ for j:=1 to n do
║ if buf[i]>buf[j] then begin
║ temp_var:=buf[i];
║ buf[i]:=buf[j];
║ buf[j]:=temp_var;
║ end;


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Бывалый
***

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

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


for i := 1 to n do 
begin
if a[i, i] < 0 then
for j:=1 to n do
begin

buf[j]:=a[j,i];
end;
end;
for k:=1 to n do
begin
for l:=1 to n do
if buf[k]>buf[l] then
begin
temp_var:=buf[k];
buf[k]:=buf[l];
buf[l]:=temp_var;
end;
end;


так?
есле так,то всеравно не правильно вставляет столбец.

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


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

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


я в этом куске вставку вообще не вижу.
а курсы ясновидящих еще не окончила.


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Бывалый
***

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

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


сори)
шас

for i := 1 to n do
begin

if a[i, i] < 0 then
for j:=1 to n do
begin

buf[j]:=a[j,i];
end;
end;

for k:=1 to n do
begin

for l:=1 to n do
if buf[k]>buf[l] then begin

temp_var:=buf[k];
buf[k]:=buf[l];
buf[l]:=temp_var;
end;
end;

for j := 1 to n do
a[j, i] := buf[j];


так нормально?...просто у меня голова уже очень плохо варит,я в инсте это писал ,потом писал дома,в электричке писал,весь день писал и никак не могу..написать=/

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


Гость






Andrewshkovskii, послушай !!! Ты что, издеваешься??? Тебе в каком виде приводят фрагменты? Какого ... ты их коверкаешь так, что не поймешь, кде у тебя блок начинается, а где заканчивается? Возьми и отформатируй текст так, как это делал я в посте №9, чтобы end ЗАКРЫВАЛ блок, и было ВИДНО, какой именно блок он закрывает.

Все...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Бывалый
***

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

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


Не кипятись,пожалуйста,я понимаю что с новичками приходится тяжело,очень тяжело,но все мы когда-то учились и учимсяsmile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





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