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

Вывод членов матрицы по спирали - C++

Восстановить пароль Регистрация
 
alex-net
3 / 3 / 1
Регистрация: 27.11.2012
Сообщений: 171
11.01.2014, 11:46     Вывод членов матрицы по спирали #1
Помогите написать программу для вывода членов матрицы по такой схеме:

Вывод членов матрицы по спирали
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alex-net
3 / 3 / 1
Регистрация: 27.11.2012
Сообщений: 171
12.01.2014, 19:30  [ТС]     Вывод членов матрицы по спирали #2
Помогите написать плиз, завтра экзамен
genock94
 Аватар для genock94
19 / 19 / 1
Регистрация: 16.11.2012
Сообщений: 348
12.01.2014, 20:22     Вывод членов матрицы по спирали #3
alex-net, вот вариант:
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
/*
[url]http://www.cyberforum.ru/cpp-beginners/thread1068272.html[/url]
*/
#include <iostream>
#include <iomanip>
#include <cstdlib>
 
using namespace std;
//////////ÃëîáГ*ëüГ*ûå ïåðåìåГ*Г*ûå, ñòðóêòóðû, ГЄГ«Г*Г±Г±Г»////////
const int N=5;
int mas[N][N];
//////////Ïðîòîòèïû ГґГіГ*êöèé///////////////////////////////
void zapolnenie_massiva();
void vivod_massiva();
void vivod_elementov();
//////////////////////////////////////////////////////////
int main()
{
    zapolnenie_massiva();
    vivod_massiva();
    cout << endl;
    vivod_elementov();      
        
    return 0;
}
//////////////////////////////////////////////////////////
void zapolnenie_massiva() {
    for (int i=0; i<N; i++) {
        for (int j=0; j<N; j++) {
            mas[i][j] = rand()%100;
        }       
    }
}
void vivod_massiva(){
    for (int i=0; i<N; i++) {
        for (int j=0; j<N; j++) {
            cout << setw(6) << mas[i][j];
        }
        cout << endl;
    }
}
void vivod_elementov() {
    int x;
    for (int k=0; k<N; k++) {
        x=0;
        for (int i=0; i<N-k*2; i++) {
            cout << mas[(N-1)-x][(N-1)-k*2-x] << "   ";
            x++;
        }
        x=0;
        for (int i=0; i<(N-1)-k*2; i++) {
            cout << mas[1+k*2+x][0+x] << "   ";
            x++;
        }
    }
}
alex-net
3 / 3 / 1
Регистрация: 27.11.2012
Сообщений: 171
12.01.2014, 20:25  [ТС]     Вывод членов матрицы по спирали #4
genock94, спасибо огромное!
genock94
 Аватар для genock94
19 / 19 / 1
Регистрация: 16.11.2012
Сообщений: 348
12.01.2014, 20:35     Вывод членов матрицы по спирали #5
alex-net, незачто!) помню писал одногруппнице программу, которая действительно по спирали выводит.. вот это было весело:
Вывод членов матрицы по спирали
gunslinger
случайный прохожий
 Аватар для gunslinger
1097 / 715 / 184
Регистрация: 20.07.2013
Сообщений: 1,969
12.01.2014, 21:44     Вывод членов матрицы по спирали #6
Для нечетной размерности (на Builder'е):
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
  const dim = 11;
  int i, j, mas[dim][dim], dir = -1;
  String s = "", res = "";
  randomize();
  for (i = 0; i < dim; i++)
  {
    for (j = 0; j < dim; j++)
    {
      mas[i][j] = random(100);
      if (mas[i][j] < 10)
        s += "0";  // или " "
      s += IntToStr(mas[i][j]) + " ";
    }
    s += "\n";
  }
 
  i = dim;
  j = dim;
  do
  {
    i += dir;
    j += dir;
    res += IntToStr(mas[i][j]) + " ";
    if (i%2 == 0 && j == 0)
    {
      i++;
      res += IntToStr(mas[i][j]) + " ";
      dir = 1;
    }
    if (j%2 == 1 && i == dim-1)
    {
      j--;
      res += IntToStr(mas[i][j]) + " ";
      dir = -1;
    }
  }
  while (i != dim-1 || j != 0);
  s += "\n" + res;
  ShowMessage(s);
Миниатюры
Вывод членов матрицы по спирали  
genock94
 Аватар для genock94
19 / 19 / 1
Регистрация: 16.11.2012
Сообщений: 348
13.01.2014, 09:11     Вывод членов матрицы по спирали #7
gunslinger, не могли бы Вы описать алгоритм работы своего варианта? Очень интересно, а понять не могу..
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.01.2014, 23:30     Вывод членов матрицы по спирали
Еще ссылки по теме:

Заполнение матрицы по спирали C++
C++ Вывод матрицы по спирали
Вывод текста по спирали C++

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

Или воспользуйтесь поиском по форуму:
gunslinger
случайный прохожий
 Аватар для gunslinger
1097 / 715 / 184
Регистрация: 20.07.2013
Сообщений: 1,969
13.01.2014, 23:30     Вывод членов матрицы по спирали #8
Учитель из меня не очень, но попробую объяснить.
i - строки, j - столбцы массива.
dir - направление движения. Если -1, то "идем" влево вверх (индексы массива одновременно уменьшаются на -1).
Если 1, то вправо вниз.
При достижении "края" (левой стороны j=0, i%2=0 - i четное или нижней - i = dim-1, j%2=1 - j нечетное) инкрементируем i либо декрементируем j, задавая направление движения (1 или -1).
Во всех случаях не забываем запоминать элементы массива (в строке).
Повторяем процесс, пока выполняется !(i == dim-1 && j == 0), что равнозначно
условию (i != dim-1 || j != 0), то есть останавливаемся при достижении левого нижнего угла.

Не работает для четной размерности массива.
Можно переделать (обобщить) для этого случая, что должно быть делом техники. Кто желает - пусть попрактикуется.
Yandex
Объявления
13.01.2014, 23:30     Вывод членов матрицы по спирали
Ответ Создать тему
Опции темы

Текущее время: 12:17. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru