16.06.2012, 20:42 | #1 (permalink) |
Новичок
Регистрация: 16.06.2012
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Нужна помощь со второй половиной задачи на матрицы
Дан двумерный массив А(М,М) в виде квадратной матрицы. Составьте программу, обнуляющую главную диагональ матрицы, если в ней найдется хотя бы один отрицательный элемент. Из элементов побочной диагонали сформируйте одномерный массив и отсортируйте его по возрастанию методом Шелла (Shell Sort). Выведите на экран исходную и преобразованную матрицы и отсортированный массив. первую часть программы написала(до красного шрифта): Код Pascal const n=5; var a:array[1..n,1..n] of longint; i,j:integer; begin writeln('Заполните матрицу '); for i:=1 to n do for j:=1 to n do begin read(a[i,j]); end; for i:=1 to n do begin for j:=1 to n do write(a[i,j]:5); writeln; end; for i:=1 to n do for j:=1 to n do if i=j then if a[i,j]<0 then if i=j then a[i,j]:=0; writeln; for i:=1 to n do begin for j:=1 to n do write(a[i,j]:5); writeln; end; end; |
16.06.2012, 20:42 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Аналогичное уже было создано ранее, можете почитать Задачи на матрицы. Паскаль нужна помощь Нужна помощь Задачи на матрицы Нужна помощь в решении задачи Нужна помощь в решении задачи |
16.06.2012, 21:06 | #2 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
В список переменных добавляем "флажок", лучше всего булевский, например b:boolean; Дальше: Код:
b:=false; for i:=1 to n do if a[i,i]<0 then b:=true; if b then for i:=1 to n do a[i,i]:=0; |
|
16.06.2012, 21:43 | #3 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Да, и еще вопрос: как нумеровать элементы побочной диагонали - от правого верхнего угла в левый нижний или наоборот? Я так вот не знаю.
|
16.06.2012, 22:12 | #4 (permalink) | |
Новичок
Регистрация: 16.06.2012
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Цитата:
добавить в переменные массив, а ему присвоить элементы побочной masp[i]:=a[i,n-i+1] мне бы отсортировать этот массив методом Шелла... |
|
16.06.2012, 23:00 | #5 (permalink) |
Новичок
Регистрация: 16.06.2012
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
кажется получилось...))
вторая часть: for i:=1 to n do begin masp[i]:=a[i,n-i+1]; end; writeln; writeln('pobochnaya diagonal'); for i:=1 to n do write(masp[i]:3); readln; begin k:=n div 2; while k>0 do begin for j:=n-k downto 1 do begin i:=j; while i<=n-k do begin if masp[i]>masp[i+k] then begin c:=masp[i]; masp[i]:=masp[i+k]; masp[i+k]:=c; end; i:=i+k; end; end; k:=k div 2; end; writeln; for i:=1 to n do write(masp[i]:4); end; readln; end. |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
17.06.2012, 11:58 | #6 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Получиться-то получилось, но это пол дела. Беда в том, что алгоритм Шелла в общем случае не доводит упорядочение до конца, а осуществляет лишь предварительную сортировку. Далее, после того, как стало k=1, необходимо применить сортировку пузырьком или вставкой.
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|