Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.97/35: Рейтинг темы: голосов - 35, средняя оценка - 4.97
0 / 0 / 0
Регистрация: 16.02.2010
Сообщений: 10
1

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

16.03.2010, 23:15. Показов 7064. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Заполнить матрицу ЛП, от левого верхнего угла по спирали: вправо - вниз - влево - вверх.
Изображения
 
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.03.2010, 23:15
Ответы с готовыми решениями:

Заполнить матрицу ЛП от левого верхнего угла по спирали : вправо-вниз-влево-вверх
#include <stdio.h> #define S 9 int Ar; int main (void){ short l, r; short r1,r2; ...

Заполнить матрицу ЛП, от левого верхнего угла по диагонали вправо — вверх
Помогите пожалуйста с лабораторной . 1. Создать квадратную матрицу целых чисел размером 9х9. В...

Заполнить матрицу, от левого верхнего угла по диагонали: вправо - вверх
Помогите пожалуйста, уже второй день мучаюсь...

Заполнить матрицу ЛП, от левого верхнего угла по диагонали: вправо - вверх
Здравствуйте, уважаемые форумчане. Я новичок в С++. Прошу помочь. Заполнить матрицу ЛП, от левого...

9
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
16.03.2010, 23:27 2
https://www.cyberforum.ru/cpp-... page2.html

https://www.cyberforum.ru/visu... d3621.html

Может что поможет...
0
0 / 0 / 0
Регистрация: 02.03.2023
Сообщений: 1
08.03.2023, 20:28 3
#include <iostream>

using namespace std;

int main() {
const int N = 9; // размер матрицы
int matrix[N][N] = { 0 }; // инициализируем матрицу нулями
int current = 1; // начальное значение для заполнения

// заполняем матрицу по спирали
for (int k = 0; k < N / 2; k++) {
for (int j = k; j < N - k - 1; j++) {
matrix[k][j] = current++; // справа
}
for (int i = k; i < N - k - 1; i++) {
matrix[i][N - k - 1] = current++; // вниз
}
for (int j = N - k - 1; j > k; j--) {
matrix[N - k - 1][j] = current++; // влево
}
for (int i = N - k - 1; i > k; i--) {
matrix[i][k] = current++; // вверх
}
matrix[N / 2][N / 2] = 81;

}

// выводим матрицу на экран
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
cout << matrix[i][j] << " ";
}
cout << endl;
}

return 0;
}
0
Злостный нарушитель
9492 / 5139 / 1172
Регистрация: 12.03.2015
Сообщений: 24,220
08.03.2023, 20:54 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
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#include <cstdio>
#include <cstring>
#include <cassert>
 
inline unsigned dec_width(unsigned x)
{
  unsigned w = 1;
  while (x /= 10) w++;
  return w;
}
 
int** new_matrix(unsigned rows, unsigned cols)
{
  int** x = new int*[rows];
  for (int row = 0; row != rows; row++)
  {
    x[row] = new int[cols];
    memset(x[row], 0, sizeof(int) * cols);
  }
  return x;
}
 
void free_matrix(int** src, unsigned rows)
{
  for (int row = 0; row != rows; row++) delete []src[row];
  delete []src;
}
 
void print_matrix(int** src, unsigned rows, unsigned cols, const char* header)
{
  unsigned* widths = new unsigned[cols];
  for (int col = 0; col != cols; col++)
  {
    widths[col] = 1;
    for (int row = 0; row != rows; row++)
    {
      unsigned cw = dec_width(src[row][col]);
      if (cw > widths[col]) widths[col] = cw;
    }
  }
 
  printf("\n%s [%d x %d]\n", header, rows, cols);
  for (int row = 0; row != rows; row++)
  {
    for (int col = 0; col != cols; col++) printf(" %*d", widths[col], src[row][col]);
    printf("\n");
  }
 
  delete []widths;
}
 
#define DOWN  0
#define RIGHT 1
#define UP    2
#define LEFT  3
 
// вычисление следующей позиции
bool next(int** x, unsigned rows, unsigned cols, int &row, int &col, int &dir)
{
  #define bounds(x, max) (0 <= (x) && (x) < (max)) // 0 ≤ x < max
  #define possible(r, c) (bounds(r, rows) && bounds(c, cols) && !x[r][c])
  
  switch (dir % 4) 
  {
    case RIGHT:
      if (possible(row, col + 1)) { col++; return true; } // вправо 
      if (possible(row + 1, col)) { row++, dir = DOWN; return true; } // вниз
    break;  
    
    case DOWN:
      if (possible(row + 1, col)) { row++; return true; } // вниз
      if (possible(row, col - 1)) { col--, dir = LEFT; return true; } // влево
    break;
    
    case LEFT:
      if (possible(row, col - 1)) { col--; return true; } // влево
      if (possible(row - 1, col)) { row--, dir = UP; return true; } // вверх
    break;
      
    case UP:
      if (possible(row - 1, col)) { row--; return true; } // вверх
      if (possible(row, col + 1)) { col++, dir = RIGHT; return true; } // вправо
    break;
  }
 
  return false;
}
 
// заполнение матрицы по спирали по часовой стрелке 
// из левого верхнего угла.
void fill_matrix(int** x, unsigned rows, unsigned cols)
{
  int row = 0, col = 0, value = 0, dir = RIGHT;
  do x[row][col] = ++value;
  while (next(x, rows, cols, row, col, dir));
}
 
int main(void)
{
  unsigned rows, cols;
  do printf("\n? rows & cols: ");
  while (scanf("%u %u", &rows, &cols) != 2 || !rows || !cols);
  int** x = new_matrix(rows, cols);
  fill_matrix(x, rows, cols);
  print_matrix(x, rows, cols, " >> matrix: ");
  free_matrix(x, rows);
  return 0;
}
0
842 / 645 / 323
Регистрация: 24.02.2017
Сообщений: 2,276
08.03.2023, 21:30 5
Verevkin, ну ты даешь. Перепил что ли?
0
Злостный нарушитель
9492 / 5139 / 1172
Регистрация: 12.03.2015
Сообщений: 24,220
08.03.2023, 21:51 6
Цитата Сообщение от повар1 Посмотреть сообщение
ну ты даешь. Перепил что ли?
Я не пью среди недели, завтра на работу.
Чо не так-то?
0
Just Do It!
4012 / 2396 / 639
Регистрация: 23.09.2014
Сообщений: 7,673
Записей в блоге: 2
09.03.2023, 12:14 7
Цитата Сообщение от Verevkin Посмотреть сообщение
Чо не так-то?
вот
Цитата Сообщение от Verevkin Посмотреть сообщение
Я не пью
надо пить)
0
Злостный нарушитель
9492 / 5139 / 1172
Регистрация: 12.03.2015
Сообщений: 24,220
09.03.2023, 12:16 8
Цитата Сообщение от XLAT Посмотреть сообщение
надо пить)
0
фрилансер
5832 / 5349 / 1100
Регистрация: 11.10.2019
Сообщений: 14,302
09.03.2023, 12:18 9
Цитата Сообщение от XLAT Посмотреть сообщение
надо пить
а то будет обезвоживание
0
Just Do It!
4012 / 2396 / 639
Регистрация: 23.09.2014
Сообщений: 7,673
Записей в блоге: 2
09.03.2023, 14:48 10
Verevkin,


шоп флейм разбавить:
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
#include <iostream>
#include <iomanip>
#include <vector>
 
struct Plot
{   int x, y;
    Plot operator+(const Plot& p){return {x + p.x, y + p.y};}
};
 
using vec1_t = std::vector<int   >;
using vec2_t = std::vector<vec1_t>;
 
std::ostream& operator<<(std::ostream& o, vec2_t m)
{   const auto a = std::to_string(m.size() * m.front().size()).size();
    for     (const auto& r : m)
    {   for (const auto& c : r)
        {   std::cout << std::setw(a) << c << ' ';
        }   std::cout << '\n';
    }       std::cout << '\n';
    return o;
}
 
const Plot P[] =
{   {  1,  0},
    {  0,  1},
    { -1,  0},
    {  0, -1}
};
 
int main()
{
    while(true)
    {
        int R, C; std::cout << "Row, Column: "; std::cin >> R >> C;
 
        auto m = vec2_t(R, vec1_t(C, 0));
 
        auto b = [&](const Plot& p)
        {   return (size_t)p.y < R && (size_t)p.x < C && m[p.y][p.x] == 0;
        };
 
        Plot now{0, 0};
 
        for(int N = C * R + 1, i = 1, j = 0; i < N && b(now); ++i)
        {
            m[now.y][now.x] = i;
            auto      a = now + P[  j%4];
            if(!b(a)) a = now + P[++j%4];
            now = a;
        }
 
        std::system("cls"); std::cout << m;
    }
}
https://rextester.com/BONRF78936
0
09.03.2023, 14:48
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.03.2023, 14:48
Помогаю со студенческими работами здесь

Заполнить матрицу линейной последовательностью от левого верхнего угла по диагонали вправо вверх
Заполнить матрицу линейной последовательностью от левого верхнего угла по диагонали вправо -вверх

Заполнить матрицу линейной последовательностью (0-81), от левого верхнего угла по диагонали: вправо - вверх
Помогите пожалуйста написать программу: Заполнить матрицу линейной последовательностью (1-81), от...

(CИ)Заполнить матрицу ЛП, от центра по спирали: влево - вниз - вправо - вверх.
(СИ)Заполнить матрицу ЛП, от центра по спирали: влево - вниз - вправо - вверх.

Заполнить квадратную матрицу от левого верхнего угла по спирали
Заполнить матрицу А(9,9), от левого верхнего угла по спирали: вправо - вниз - влево - вверх.

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

Заполнить матрицу от левого нижнего угла по диагонали: влево - вверх
Заполнить матрицу А(9,9), от левого нижнего угла по диагонали: влево - вверх. Помогите пожалуйста

Заполнить матрицу ЛП, от левого нижнего угла по диагонали: влево - вверх
Здравствуйте! Помогите с кодом. Заполнить матрицу ЛП, от левого нижнего угла по диагонали: влево -...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru