Omegga
|
|
1 | |
Заполнить квадратную матрицу единицами по спирали24.09.2008, 21:40. Показов 3330. Ответов 4
Метки нет Все метки)
(
Помогите решить, пожалуйста!!!
![]() Заполнить квадратную матрицу NxN единицами ('1') по спирали (начиная с элемента с координатами (1,1) по часовой стрелке. N ввести с клавиатуры (1 <= N <= 10). Распечатывать матрицу после каждого изменения направления заполнения. |
|
24.09.2008, 21:40 | |
Ответы с готовыми решениями:
4
Заполнить квадратную матрицу натуральными числами по спирали
|
6139 / 1897 / 14
Регистрация: 07.07.2008
Сообщений: 10,417
|
|
24.09.2008, 22:15 | 2 |
если не гнаться за оптимизацией, то можно заполнять верхний ряд-правый-нижний-левый-2й верхний-2й ат будет тот-же правый.... результат будет тот-же. распечатывать после заполнения каждого ряда.
можно по другому: 1)заполнить ячейку 1;1 2)n=n-1 3)от текущей ячейки не включая её заполнить n ячеек справа. распечатать 4)от текущей ячейки не включая её заполнить n ячеек вниз. распечатать 5)от текущей ячейки не включая её заполнить n ячеек влево. распечатать 6)n=n-1 if (n=0) exit 7)от текущей ячейки не включая её заполнить n ячеек вверх. распечатать 8)goto 3;
0
|
Почетный модератор
64291 / 47589 / 32740
Регистрация: 18.05.2008
Сообщений: 115,181
|
|
25.09.2008, 09:07 | 3 |
Я вот сделал вывод по другому, мне так больше нравится, если что переделаете.
Там правда маленький глюк есть, на некоторых участках по две единицы выводит, лень думать. Код
uses crt; type Tmatr=array[1..20,1..20]of byte; var a:Tmatr; n,i,j:byte; x,y:byte;{координаты} add:integer;{длина отрезка от поворота до поворота} dir:integer;{шаг = +1 вправо и вниз, -1 влево и вверх} procedure Vyvod(m,c,d:byte;var q:Tmatr); begin for c:=1 to m do begin for d:=1 to m do write(q[c,d]:3); writeln; end; end; begin clrscr; write('n=');readln(n); for i:=1 to n do for j:=1 to n do a[i,j]:=0; x:=0; y:=1; Add:=n; dir:=1; while (add<>0) do begin i:=0; while (i<>Add) do begin x:=x+dir; a[y,x]:=1; clrscr; Vyvod(n,x,y,a); delay(400); i:=i+1; end; i:=0; Add:=Add-1; while (i<>Add) do begin y:=y+dir; a[y,x]:=1; clrscr; Vyvod(n,x,y,a); delay(400); i:=i+1; end; dir:=dir*(-1); end; readln end.
0
|
Omegga
|
|
25.09.2008, 19:15 | 4 |
спасибо Вам, очень благодарна, спасли, спасли))
|
Почетный модератор
64291 / 47589 / 32740
Регистрация: 18.05.2008
Сообщений: 115,181
|
|
25.09.2008, 19:21 | 5 |
Но это ведь не соответствует Вашему заданию. Сами переделаете?
Вот код как в задании. Код
uses crt; type Tmatr=array[1..20,1..20]of byte; var a:Tmatr; n,i,j:byte; x,y:byte;{координаты} add:integer;{длина отрезка от поворота до поворота} dir:integer;{шаг = +1 вправо и вниз, -1 влево и вверх} procedure Vyvod(m,c,d:byte;var q:Tmatr); begin for c:=1 to m do begin for d:=1 to m do write(q[c,d]:3); writeln; end; end; begin clrscr; write('n=');readln(n); for i:=1 to n do for j:=1 to n do a[i,j]:=0; x:=0; y:=1; Add:=n; dir:=1; while (add<>0) do begin i:=0; while (i<>Add) do begin x:=x+dir; a[y,x]:=1; i:=i+1; end; Vyvod(n,x,y,a);//вывод и поворот writeln; readln; i:=0; Add:=Add-1; while (i<>Add) do begin y:=y+dir; a[y,x]:=1; i:=i+1; end; Vyvod(n,x,y,a);//вывод и поворот writeln; readln; dir:=dir*(-1); end; end.
0
|
25.09.2008, 19:21 | |
Помогаю со студенческими работами здесь
5
Заполнить матрицу по спирали. Заполнить квадратную матрицу Заполнить квадратную матрицу Заполнить матрицу от центра по спирали: вниз - влево - вверх - вправо Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |