![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 08.05.2008
Сообщений: 13
|
![]()
Здравстуйте. Помогите пожалуйста разобраться. Не могу решить задачу..
Дан матрица N*M нужно отсортировать по спирале,по часовой стрелке, по не возрастанию. Метод сортировки-пузырьковая. Вот мои нароботки... const Nmax = 10; {Њ*Єб. ђ*§¬Ґа ¬*ваЁжл} type Matrix = array [0..Nmax,0..Nmax] of integer; var a : matrix; n,m : integer; Procedure Vvod (Var x,y:integer); Begin {Vvod} Repeat write('‚ўҐ¤ЁвҐ а*§¬Ґа*®бвм ¬*ваЁжл 1<=N<=10, N='); readln(x); Until (0<=x) and (x<=Nmax); repeat write('‚ўҐ¤ЁвҐ а*§¬Ґа*®бвм ¬*ваЁжл 1<=M<=10, M='); readln(y); Until (0<=y) and (y<=Nmax); End; {Vvod} procedure PrintMatrix (n,m:integer; var a : matrix); var i,j : integer; begin for i:=1 to n do begin writeln; for j:=1 to m do write(a[i,j]:3,' '); end; end; procedure MakeMatrix (n,m:integer; var a : matrix); var x,y,i,j:integer; begin for i:=1 to n do for j:=1 to m do a[i,j]:= random (10); end; {функция возвращает по номеру элемента координаты в матрице} function f1(i,n,m,x,y:integer):integer ; var o,s,l1,t,l2:integer; h:real; begin h:=((m+n)-sqrt(sqr(m+n)-4*i))/4; {} t:=round(h); x:=round(h); y:=x; s:=(2*m+2*n-4*t)*t; o:=i-s; l1:=n-t*2-1; l2:=m-t*2-1; if (o>l1+l2) then begin y:=y+l2; x:=x+ 2*l1+l2 -o; end else if (o>l1) then begin x:=x+l1; y:=0-l1; end; end; {Сортировка методом пузырька} procedure SortMatrix (n,m:integer; var a : matrix); var e1, t,x1,y1,x2,y2,i,j:integer; c:matrix; begin i:=m*n; while (i<>t) do begin t:=0; e1:=0; f1(e1,n,m,x1,y1); for j:=1 to i-1 do begin f1(j,n,m,x2,y2); if (a[x1,y1]>a[x2,y2]) then begin c[x1,y1]:=a[x1,y1]; a[x1,y1]:=a[x2,y2]; a[x2,y2]:=c[x1,y1]; t:=j+1; end; x1:=x2; y1:=y2; end; i:=t; end; end; begin {program} writeln('‡*Ї®«*Ґ**п ¬*ваЁж*='); writeln; Vvod(n,m); Sortmatrix(n,m,a); MakeMatrix(n,m,a); PrintMatrix(n,m,a); readln; end. {program} |
![]() |
![]() |
![]() |
#2 |
Участник клуба
Регистрация: 12.10.2007
Сообщений: 1,204
|
![]()
В функции f1 Вы вычисляете позицию следующей ячейки в спирали.
Вычисленная позиция должна возвращаться (var-параметры): function f1(i,n,m:integer; var x,y:integer):integer; Не знаю правильно ли работает эта функция. Не стал разбираться. На мой взгляд проще сделать обход по спирали так, как мы это делаем на бумаге - без вычислений - проходим M ячеек вправо, N-1 ячеек вниз, M-1 влево, N-2 вверх, M-2 вправо... Код:
|
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 08.05.2008
Сообщений: 13
|
![]()
Большое спасибо.Очнь благодарен. А можно это как то организовать без использования дополнительных циклов?
|
![]() |
![]() |
![]() |
#4 | |
Старожил
Регистрация: 13.10.2007
Сообщений: 2,740
|
![]()
To alexBlack
Цитата:
|
|
![]() |
![]() |
![]() |
#5 | |
Участник клуба
Регистрация: 12.10.2007
Сообщений: 1,204
|
![]() Цитата:
У автора-же по смыслу это и есть процедура. Возвращаемый результат нигде не используется. В любом случае спасибо. 2Влдислаав3911 А что Вы называете дополнительными циклами ? |
|
![]() |
![]() |
![]() |
#6 |
Пользователь
Регистрация: 08.05.2008
Сообщений: 13
|
![]()
Суть решения прграммы в том,чтобы искать сначала координаты элемента в матрице, по его номеру в матрице: например
123 894 765 у 4 элемента координаты i=2,j=3. Затем при сортировке пользоваться этими координатами. И уже без циклов расставлять каждый последующий элемент. |
![]() |
![]() |
![]() |
#7 | ||
Участник клуба
Регистрация: 12.10.2007
Сообщений: 1,204
|
![]() Цитата:
Если у Вас есть желание, можете рассмотреть последовательность m, n-1, m-1, n-2, m-2, n-3, m-3 ... и вычислять индексы по номеру в спирали. Цитата:
Как Вы представляете сортировку без циклов ? |
||
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Двумерные массивы в Си. | necky | Помощь студентам | 2 | 17.05.2009 19:35 |
Массивы двумерные | Nika_D | Помощь студентам | 3 | 19.01.2008 23:45 |
Двумерные массивы | Lioness | Помощь студентам | 2 | 06.01.2008 12:39 |
Помогите Написать программу Матрица и Массив | 77rusnaut | Помощь студентам | 4 | 20.12.2007 20:22 |
Двумерные массивы | Nata!!!@ | Помощь студентам | 15 | 05.12.2007 16:15 |