Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > C/C++/С#


Ответ
 
Опции темы Опции просмотра
Старый 07.12.2012, 16:05   #1 (permalink)
Dominus
Новичок
 
Регистрация: 06.12.2012
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Заполнение массива по спирали

надо запомнить массив так
Название: mas.png
Просмотров: 1752

Размер: 3.9 Кб
а у меня заполняется последовательно помогите решить
#include <stdio.h>
#define S 9
int Ar[S][S]; /* матрица */
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;
}
Dominus вне форума   Ответить с цитированием

Старый 07.12.2012, 16:05
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Данные темы содержат похожую информацию

Даны два массива по 15 элементов
Создание, онлайн заполнение бланков заявлений

Старый 07.12.2012, 20:55   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Не знаю, будет ли Вам в том польза, но, поскольку я на СИ не программирую, написал на Паскале, но с максимальной "приближенностью" к сишным параметрам (нумерация массива с нуля, что мне непривычно, и т.п.). Посмотрите, может быть поможет:
Код:
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.jpg  
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 11:58.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.