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

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

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

> Квадратная матрица
Pautina
сообщение 22.03.2007 21:11
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 40
Пол: Женский
Реальное имя: Nataly

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


Доброго времени суток! очень нужна ваша помощь. Помогите решить задачу.
Начиная с центра. обойти по спирали все элементы квадратной матрицы размером 13х13 (распечатывая их в порядке обхода).
Заранее огромное спасибо!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 28.03.2007 11:00
Сообщение #2


Гость






const
size = 13;

var
X, Y: integer;
square: array[1 .. size, 1 .. size] of integer;

function check(X, Y: integer): boolean;
begin
check := ((X > 0) and (X <= size) and
(Y > 0) and (Y <= size))
end;

type
dirs = (_up, _down, _left, _right);
axis = (_X, _Y);
const
offset: array[dirs, axis] of integer = (
(0, -1), (0, 1), (1, 0), (-1, 0)
);

function go(where: dirs; delta: integer): boolean;
var i: integer;
begin
go := false;
for i := 1 to delta do
if check(Y + offset[where, _Y], X + offset[where, _X]) then begin
X := X + offset[where, _X];
Y := Y + offset[where, _Y];
write(square[Y, X]:4);
end
else exit;
go := true;
end;

var
i, j, plus: integer;
status: boolean;
begin
for i := 1 to size do
for j := 1 to size do
square[i, j] := (i - 1)*size + j;

for i := 1 to size do begin
for j := 1 to size do write(square[i, j]:4);
writeln;
end;


plus := 0;
X := size div 2 + 1; Y := size div 2 + 1;
write(square[Y, X]:4);
status := true;
repeat
inc(plus);
status := status and go(_right, plus);
status := status and go(_down, plus);
inc(plus);
status := status and go(_left, plus);
status := status and go(_up, plus);
until not status;

end.

Порядок обхода из центра: влево, вниз, вправо, вверх... Если надо по-другому, меняй направления в цикле repeat/until ... В начале распечатывается матрица, чтобы можно было проверить правильность работы программы...
 К началу страницы 
+ Ответить 
@лё][@
сообщение 31.03.2010 16:03
Сообщение #3


Гость






Всё-таки порядок обхода в выше написанной программе: из центра влево, вниз, вправо, вверх... Правда программист мог сидеть и спиной к монитору smile.gif Спасибо этому программисту, мне его программа тоже пригодится rolleyes.gif
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Pautina   Квадратная матрица   22.03.2007 21:11
Tan   Поиск, подобное задание есть.   22.03.2007 23:22
St@senk@   Я попытался найти, но не нашел. Вот мое решение, п...   22.03.2007 23:52
Алена   St@senk@, задание было:А у тебя - как раз с левого...   23.03.2007 0:03
St@senk@   Если я приведу полностью работающий код, то не буд...   23.03.2007 0:20
Алена   А ты и так привел нерабочий код. Во всяком случае,...   23.03.2007 0:23
St@senk@   с поиском, согласен, искать совсем не умею. prog...   23.03.2007 0:29
Pautina   В поиске не смогла ничего найти.. :(   23.03.2007 21:41
Pautina   Так и не смогла понять, в чем смысл данной проги.....   23.03.2007 23:01
St@senk@   :) скажи честно, ты хоть взглянула на код? Думаю, ...   23.03.2007 23:13
-Pautina-   Конечно,смотрела.. если не заметил, там даже файл ...   24.03.2007 9:58
St@senk@   Работает она так же как и у меня. for i:=1 to yl ...   24.03.2007 10:19
Pautina   а не мог бы ты прикрепить саму прогу?   26.03.2007 23:14
Pautina   Попробовала написать по-другому.. но все равно ест...   27.03.2007 21:58
volvo   const size = 13; var X, Y: integer; square:...   28.03.2007 11:00
@лё][@   Всё-таки порядок обхода в выше написанной программ...   31.03.2010 16:03


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

 



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