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

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

Войти
Регистрация
Восстановить пароль
 
alex-net
3 / 3 / 1
Регистрация: 27.11.2012
Сообщений: 173
#1

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

11.01.2014, 11:46. Просмотров 447. Ответов 7
Метки нет (Все метки)

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

Вывод членов матрицы по спирали
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.01.2014, 11:46
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вывод членов матрицы по спирали (C++):

Вывод матрицы по спирали - C++
Массив по спирали я заполнил. Но нужно вывести его так, чтобы был видел алгоритм заполнения. То есть вывести по спирали. Не знаю как...

Вывод матрицы по спирали изнутри - C++
Помогите пожалуйста, кто может написать функцию вывода матрицы a по спирали изнутри? a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 ...

Задача на вывод элементов матрицы по спирали - C++
#include<iostream.h> #include<conio.h> #define n 5 void main() { int k,j,i; int imin,jmin,imax,jmax; int a; jmin=0; ...

Для заданной матрицы найти такие k и n, что сумма членов k-го столбца совпадает с суммой членов n-й строки - C++
Нужно написать фрагмент кода: Для заданной матрицы размера NхN найти такие k и n, что сумма элементов k-столбца матрицы совпадает с...

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

Вывод массива по спирали. Ошибка исполнения. - C++
Дан квадратный массив задаваемой размерности, нужно вывести в ряд его элементы змейкой начиная с элемента последней строки последнего...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
alex-net
3 / 3 / 1
Регистрация: 27.11.2012
Сообщений: 173
12.01.2014, 19:30  [ТС] #2
Помогите написать плиз, завтра экзамен
0
genock94
20 / 20 / 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++;
        }
    }
}
1
alex-net
3 / 3 / 1
Регистрация: 27.11.2012
Сообщений: 173
12.01.2014, 20:25  [ТС] #4
genock94, спасибо огромное!
0
genock94
20 / 20 / 1
Регистрация: 16.11.2012
Сообщений: 348
12.01.2014, 20:35 #5
alex-net, незачто!) помню писал одногруппнице программу, которая действительно по спирали выводит.. вот это было весело:
Вывод членов матрицы по спирали
0
gunslinger
случайный прохожий
1134 / 752 / 192
Регистрация: 20.07.2013
Сообщений: 2,077
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);
2
Миниатюры
Вывод членов матрицы по спирали  
genock94
20 / 20 / 1
Регистрация: 16.11.2012
Сообщений: 348
13.01.2014, 09:11 #7
gunslinger, не могли бы Вы описать алгоритм работы своего варианта? Очень интересно, а понять не могу..
0
gunslinger
случайный прохожий
1134 / 752 / 192
Регистрация: 20.07.2013
Сообщений: 2,077
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), то есть останавливаемся при достижении левого нижнего угла.

Не работает для четной размерности массива.
Можно переделать (обобщить) для этого случая, что должно быть делом техники. Кто желает - пусть попрактикуется.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.01.2014, 23:30
Привет! Вот еще темы с ответами:

Заполнение матрицы по спирали - C++
Заполнить матрицу 10х10 числами от 1 до 100 по порядку, начиная с верхнего левого угла. #include&lt;conio.h&gt; #include&lt;stdio.h&gt; ...

Заполнение матрицы по спирали - C++
Привет всем, можете помочь пожалуйста: надо придумать алгоритм, написать код на С++ заполнения матрицы по контуру по часовой стрелке (т.е....

Заполнение матрицы по спирали - C++
как заполнить матрицу ЛП, от левого верхнего угла по спирали: вправо - вниз - влево - вверх

Заполнение матрицы по спирали - C++
Дано натуральное N (1&lt;=N&lt;=10). Заполнить матрицу порядка N*N целыми числами 0, 1, 2, 3, …, N^2–1 по спирали(по часовой стрелке). Важное...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
13.01.2014, 23:30
Ответ Создать тему
Опции темы

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