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

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

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

 
 Ответить  Открыть новую тему 
> Задача на работу с матрицой.Сортировка.
Andrewshkovskii
сообщение 30.11.2006 12:11
Сообщение #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 - 30.11.2006 12:16
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 30.11.2006 12:23
Сообщение #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;
 К началу страницы 
+ Ответить 
Andrewshkovskii
сообщение 30.11.2006 16:31
Сообщение #3


Бывалый
***

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

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


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


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

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

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


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


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


Бывалый
***

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

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


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


Гость






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


Бывалый
***

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

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


в сортировке не изменял,а так делал как ты писал..
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Andrewshkovskii
сообщение 30.11.2006 20:55
Сообщение #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 
 К началу страницы 
+ Ответить 
volvo
сообщение 30.11.2006 21:15
Сообщение #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
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 30.11.2006 21:39
Сообщение #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 
 К началу страницы 
+ Ответить 
Andrewshkovskii
сообщение 30.11.2006 21:43
Сообщение #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 - 30.11.2006 21:50
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 30.11.2006 21:57
Сообщение #12


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

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

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


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


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Andrewshkovskii
сообщение 30.11.2006 22:01
Сообщение #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 - 30.11.2006 22:49
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 30.11.2006 22:07
Сообщение #14


Гость






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

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


Бывалый
***

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

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


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

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

 



- Текстовая версия 20.07.2025 1:57
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"