Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.10.2010, 21:46   #1
juzam
Пользователь
 
Аватар для juzam
 
Регистрация: 25.11.2008
Сообщений: 31
Счастье Вывести матрицу, числа в которой возрастают по спирали(C).

С клавиатуры вводится число, им задается сторона квадратной матрицы. Всю матрицу заполнить числами от одного и по возрастанию.

Вводиться:5

Результат:
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9

Вообще все, что в моих силах, это просто вывести массив со всеми числами подряд.

Код:
#include <stdio.h>
#include <conio.h>
int main()

{
 int i,k,j,n;
 int a[5][5];
 scanf("%d",&n);
  for(i=0;i<n;i++)
    for(j=0;j<n;j++)
      {a[i][j]=i*n+j+2;
      printf("%3d ",a[i][j]); 
      if (j==n-1) printf("\n");}
      
      getch();
			
}
Собственно, как ее закрутить то?
juzam вне форума Ответить с цитированием
Старый 15.10.2010, 22:14   #2
DM_bite
Участник клуба
 
Аватар для DM_bite
 
Регистрация: 29.07.2008
Сообщений: 1,091
По умолчанию

А что сложного-то? Задача достаточно просто решается с помощью нескольких циклов while. Вначале проходим вперед по строке, потом вниз по столбцу, далее - назад по строке и наконец вверх по столбцу не доходя до первого элемента матрицы. С каждым разом уменьшаем кол-во проходов. Условие выхода из главного цикла - элемент матрицы не должен быть равен элементу[n\2][n\2], где n - размерность матрицы. Все. Код писать не буду, все достаточно тривиально.
Кто бы ты ни был - не думай о себе слишком (с)
DM_bite вне форума Ответить с цитированием
Старый 18.10.2010, 22:12   #3
juzam
Пользователь
 
Аватар для juzam
 
Регистрация: 25.11.2008
Сообщений: 31
По умолчанию

Вроде что-то набросал. По-своему. Но суть та же. Однако не работает :с
Выдает левый результат. Где я уже запорол?

Код:
#include<stdio.h>
#include<conio.h>

int main()
{
 int i,imin,k,j,jmin,imax,jmax,n;
 int a[5][5];
 scanf("%d",&n);
 k=0;
 jmin=0;
 imin=1;
 jmax=n-1;
 imax=n-1;
 while (k>=jmax*jmax)
 
 { for(j=jmin;j<=jmax;j++)  //Проходим по верхней строке
       {k++;
        a[imin-1][j]=k;
       }
   for(i=imin;i<=imax;i++)  //Проходим по правому столбцу
       {k++;
        a[i][jmax]=k;
       }
       jmax--;
   for(j=jmax;j>=jmin;j--)  //Проходим по нижней строке
       {k++;
        a[imax-1][j]=k;
        }
        imax--;
   for(i=imax;i>=imin;i--)  //Проходим по левому столбцу
       {k++;
        a[i][jmin-1]=k;
        }
        imin++;
        jmin++;

   }
 
 	for (i=0;i<n;i++) //вывод 
		for (j=0;j<n;j++)
		{
			printf("3%d ",a[i][j]);
				if (j==4)
			printf("\n");
		}
    
    getch();
}

Последний раз редактировалось juzam; 18.10.2010 в 23:44.
juzam вне форума Ответить с цитированием
Старый 22.10.2010, 00:59   #4
juzam
Пользователь
 
Аватар для juzam
 
Регистрация: 25.11.2008
Сообщений: 31
По умолчанию

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

Код:
#include<stdio.h>
#include<conio.h>
#define n 5
int main()
{
 int k,j,i;
 int imin,jmin,imax,jmax;
 int a[n][n];
 jmin=0;
 imin=1;
 jmax=n-1;
 imax=n-1;		
 k=0;

 do
 { 
   for(j=jmin;j<=jmax;j++)  //Верхняя строка
       { k++;
         a[imin-1][j]=k;
       }
   for(i=imin;i<=imax;i++)  // Крайний столбец
       {k++;
        a[i][jmax]=k;
       }
       jmax--;
   for(j=jmax;j>=jmin;j--)  //Нижняя строка
       {k++;
        a[imax][j]=k;
        }
        imax--;
   for(i=imax;i>=imin;i--)  //Правый столбец
       {k++;
        a[i][jmin]=k;
        }
        imin++;
        jmin++; 
   }
  while (k<25);
 	for (i=0;i<n;i++)          //вывод
		for (j=0;j<n;j++)
		{
			printf("%5d  ",a[i][j]);
				if (j==4)
			printf("\n\n\n\n");
		}
    getch();
}
Спасибо всем. В смысле, Биту.
juzam вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Заполнить матрицу по спирали (turbo pascal) cL1zMa Помощь студентам 8 16.05.2020 12:00
Заполнить матрицу по спирали kloffelin Общие вопросы C/C++ 4 03.05.2010 13:37
Сформировать матрицу A - первый столбец которой равен последнему столбцу исходной матрицы Вика М. Помощь студентам 3 23.12.2008 04:51
фортран, ввести квадратную матрицу 4-го порядка ,элементы которой заданы для ввода построчно slepen346 Помощь студентам 0 09.12.2008 18:58
Вывести на экран матрицу, в которой наибольшее число нулевых строк Александр НИК-В Паскаль, Turbo Pascal, PascalABC.NET 0 05.12.2008 20:49