• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о проекте, чтобы узнать больше. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Заполнение массива по спирали

  • Автор темы Автор темы Dominus
  • Дата начала Дата начала

Dominus

Ученик
Регистрация
6 Дек 2012
Сообщения
2
Реакции
0
Баллы
0
Заполнение массива по спирали

надо запомнить массив так
mas.webp
а у меня заполняется последовательно помогите решить
#include <stdio.h>
#define S 9
int Ar; /* матрица */
int main(void) {
short l, r; /* текущие индексы */
short r1,r2; /* граничные номера столбцов */
short dd; /* модификатор граничных номеров */
short k; /* текущий член ЛП */
/* начальные значения переменных */
r1=1; r2=S-1; dd=1; k=1;
for (l=0; l<S; l++) { /* перебор строк */
for (r=0; r<S; r++) /* перебор столбцов */
/* условие ненулевого значения */
if ((r<r1)||(r>r2)) Ar[l][r]=1;
else Ar[l][r]=k++;
/* конец перебора строк */
/* модификация границ */
r1-=dd; r2+=dd;
/* уловие перехода в нижнюю часть */
if (r1>r2) dd=-dd;
} /* конец перебора столбцов */
/* вывод матрицы */
for (l=0; l<S; l++) {
for (r=0; r<S; r++) {
printf("%3d",Ar[l][r]);
}
printf("\n");
}
return 0;
}
 
Не знаю, будет ли Вам в том польза, но, поскольку я на СИ не программирую, написал на Паскале, но с максимальной "приближенностью" к сишным параметрам (нумерация массива с нуля, что мне непривычно, и т.п.). Посмотрите, может быть поможет:
Код:
Var
 k,i,j,Ibeg,Ifin,Jbeg,Jfin:Byte;
 M:Array[0..8,0..8] of Byte;
Begin
 Ibeg:=0;
 Jbeg:=0;
 Ifin:=0;
 Jfin:=0;
 k:=0;

 While k<81 do
  begin
   for j:=Jbeg to 8-Jfin do
    begin
     k:=k+1;
     M[Ibeg,j]:=k;
    end;
   Ibeg:=Ibeg+1;
   for i:=Ibeg to 8-Ifin do
    begin
     k:=k+1;
     M[i,8-Jfin]:=k;
    end;
   Jfin:=Jfin+1;
   for j:=8-Jfin downto Jbeg do
    begin
     k:=k+1;
     M[8-Ifin,j]:=k;
    end;
   Ifin:=Ifin+1;
   for i:=8-Ifin downto Ibeg do
    begin
     k:=k+1;
     M[i,Jbeg]:=k;
    end;
   Jbeg:=Jbeg+1;
  end;

 For i:=0 to 8 do
  begin
   For j:=0 to 8 do
    Write(M[i,j]:4);
   Writeln;
  end;
 Readln;
End.
 

Вложения

  • SPIR01.webp
    SPIR01.webp
    12.4 KB · Просмотры: 364
Назад
Сверху