Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.78
Victooor
0 / 0 / 0
Регистрация: 17.09.2009
Сообщений: 19
#1

Матрица по спирали - C++

24.09.2009, 13:20. Просмотров 2226. Ответов 4
Метки нет (Все метки)

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


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include "stdio.h"
#include "stdafx.h"
#include "iostream"
 
using std::cout;
using std::cin;
using std::endl;
 
void main()
{
 int const n=5;
 int A[n][n];
 int i=1,j,k,p=n/2;
 for(k=1;k<=p;k++)
 {
  for(j=k-1;j<n-k+1;j++) A[k-1][j]=i++;
  for(j=k;j<n-k+1;j++) A[j][n-k]=i++;
  for(j=n-k-1;j>=k-1;--j) A[n-k][j]=i++;
  for(j=n-k-1;j>=k;j--) A[j][k-1]=i++;
 }
 if (n%2==1) A[p][p]=n*n;
 for(i=0;i<n;i++)
 {
  printf("\n");
   for(j=0;j<n;j++)
     printf("%4d",A[i][j]);
 }
 cin.get();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.09.2009, 13:20     Матрица по спирали
Посмотрите здесь:

Матрица «по спирали» - C++
Составить программу, которая заполняет квадратную матрицу n-порядка натуральными числами 1, 2, 3, ..., n2, записывая их в нее «по спирали»....

Матрица по спирали - C++
Получить квадратную матрицу с елементами 1, 2,..., n (целые числа), розмещеные по спирали, начиная с левого верхнего та правого нижнего...

матрица "по спирали". - C++
знаю что задача была уже сдесь ... но просто она считает не так как надо... помогите пожалуйста!!! вот условие задачи: Составить программу,...

Массив по спирали - C++
Помогите, пожалуйста, заполнить массив по спирали, начиная от середины по часовой стрелке: 9 2 3 8 1 4 7 6 5

Заполнить матрицу по спирали - C++
Заполнить матрицу, от центра по спирали: вниз - влево - вверх - вправо. Размерность матрицы должна вводиться при выполнении программы.

Записать матрицу по спирали - C++
Число 1 ставится в центр матрицы, а затем массив заполняется по спирали против часовой стрелки значениями по возрастанию я сам...

Построение спирали (graphics.h) - C++
ПОМОГИТЕ РАЗОБРАТЬСЯ С ЦИКЛОМ, НЕ ПОНИМАЮ КАК ПРОИСХОДИТ ПОСТРОЕНИЕ СПИРАЛИ,И ЗАЧЕМ НАМ НУЖНО ЧИСЛО ПИ))) #define _USE_MATH_DEFINES...

Заполнить матрицу по спирали - C++
Как заполнить одномерный массив c++ по спирали?

координаты точек на спирали - C++
Не знал в какой раздел написать... Подскажите пожалуйста, как по спирали равномерно вывести символы? Точнее больше интересует сам...

Обход матрицы по спирали - C++
Пожалуйста, подскажите как должен выглядеть листинг к такой программе!? Обойти по спирали, начиная с центра, все элементы квадратной...

Вывод текста по спирали - C++
Напишите программу. которая анализирует текст в файле и выводит предожения (на экран или в фат-та) в форме спирали. Столбцы спирали должны...

Изобразить движение по спирали - C++
Помогите зделать движение по спирали(на рисунку). Я так понимаю надо двигатса по елипсу и смещать центр, но не знаю как это зделать.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
M128K145
Эксперт С++
8284 / 3503 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
24.09.2009, 13:38     Матрица по спирали #2
посмотри Большая коллекция решенных задач там есть решение
Victooor
0 / 0 / 0
Регистрация: 17.09.2009
Сообщений: 19
24.09.2009, 13:53  [ТС]     Матрица по спирали #3
Цитата Сообщение от M128K145 Посмотреть сообщение
посмотри Большая коллекция решенных задач там есть решение
да там опять же квадратная матрица рассматривается )
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
24.09.2009, 16:24     Матрица по спирали #4
размерность:

строк Х столбцов

определяем переменные - граничные индексы:
левый = 0
правый = столбцов-1
верхний = 0
нижний = строк-1

становимся в верхний левый угол.
выполняем цикл пока не выполнится условие выхода из цикла:

пойти вправо до "правый", если сделан хотя бы шаг, декреминировать "правый". если нет - конец цикла
пойти вниз до "нижний", если сделан хотя бы шаг, декреминировать "нижний". если нет - конец цикла
пойти влевво до "левый", если сделан хотя бы шаг, инкриминировать "левый". если нет - конец цикла
пойти вверх до "верхний", если сделан хотя бы шаг, инкриминировать "верхний". если нет - конец цикла

где-то наверняка ошибся в логике, но при выполнении ошибку будет легко найти и устранить. в общем, в этом направлении.
Alchem
0 / 0 / 0
Регистрация: 23.09.2009
Сообщений: 10
24.09.2009, 17:06     Матрица по спирали #5
Что-то типа того:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#include <iostream>
#include <iomanip>
using namespace std;
 
const int M = 6;
const int N = 4;
enum modes{moveRight, moveUp, moveLeft, moveDown} moving;
 
int main()
{
    int array[M][N];
    moving = moveRight;
    int m = 0;
    int n = 0;
    int mMax = M-1;
    int nMax = N-1;
    int mMin = 0;
    int nMin = 1;
    for(int i = 0 ; i < M*N ; i++)
    {
        array[m][n] = i;
        if(moving == moveRight)
        {
            if(m < mMax)
            {
                m++;
            }
            else
            {
                moving = moveUp;
                mMax = m-1;
                n++;
            }
        }
        else if(moving == moveUp)
        {
            if(n < nMax)
            {
                n++;
            }
            else
            {
                moving = moveLeft;
                nMax = n-1;
                m--;
            }
        }
        else if(moving == moveLeft)
        {
            if(m > mMin)
            {
                m--;
            }
            else
            {
                moving = moveDown;
                mMin = m+1;
                n--;
            }
        }
        else if(moving == moveDown)
        {
            if(n > nMin)
            {
                n--;
            }
            else
            {
                moving = moveRight;
                nMin = n+1;
                m++;
            }
        }
    }
    for(int j = N-1 ; j>=0 ; j--)
    {
        for(int i = 0 ; i<M ; i++)
        {
            cout << setw(3) << array[i][j] << " ";
        }
        cout << endl;
    }
}
Yandex
Объявления
24.09.2009, 17:06     Матрица по спирали
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru