Нужна помощь со второй половиной задачи на матрицы
Уважаемые программисты! Помогите с задачкой, очень нужно:tehnari_ru_942:
Дан двумерный массив А(М,М) в виде квадратной матрицы. Составьте программу, обнуляющую главную диагональ матрицы, если в ней найдется хотя бы один отрицательный элемент. Из элементов побочной диагонали сформируйте одномерный массив и отсортируйте его по возрастанию методом Шелла (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; |
Цитата:
В список переменных добавляем "флажок", лучше всего булевский, например b:boolean; Дальше: Код:
b:=false; |
Да, и еще вопрос: как нумеровать элементы побочной диагонали - от правого верхнего угла в левый нижний или наоборот? Я так вот не знаю.
|
Цитата:
добавить в переменные массив, а ему присвоить элементы побочной masp[i]:=a[i,n-i+1] мне бы отсортировать этот массив методом Шелла... |
кажется получилось...))
вторая часть: 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. |
Получиться-то получилось, но это пол дела. Беда в том, что алгоритм Шелла в общем случае не доводит упорядочение до конца, а осуществляет лишь предварительную сортировку. Далее, после того, как стало k=1, необходимо применить сортировку пузырьком или вставкой.
|
Часовой пояс GMT +4, время: 20:21. |
Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.