0 / 0 / 0
Регистрация: 28.12.2016
Сообщений: 23
1

Заполнить матрицу по заданной схеме

22.05.2019, 22:57. Показов 3100. Ответов 3

Дано натуральное N (1<N<10). Заполнить матрицу размера NxN целыми числами 0, 1, 2, 3, …, N2–1 в соответствии со схемой расположения, определенной вариантом. Важное замечание. Заполнение матрицы надо организовать таким способом: найти соотношение между значением элемента K и его индексами [i,j], то есть функцию вида F(K,N) = <i,j>, которая по номеру K элемента в змейке возвращает его координаты в матрице <i,j>; другими словами a[i,j]=K. При этом данная функция не должна использовать циклы – только элементарные арифметические действия и проверку различных условий! Построив такую функцию можно простым перебором значений K от 0 до N2–1 находить индексы для каждого K с помощью функции F и записывать в матрицу К по найденным индексам.

Есть пример заполнения по 10 схеме, помогите пожалуйста сделать 9 так же!

https://pp.userapi.com/c855216... 2dD5uc.jpg - картинка

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
#include <iostream>
#include <iomanip>
#include <locale.h>
 
using namespace std;
 
//Функция выделяет динамическую память под квадратную матрицу
//размера n*n и возвращает ее адрес.
int** CreateMatrix(int n) {
    int** a = new int* [n];
    for (int i = 0; i < n; i++) {
        a[i] = new int[n];
    }
    return a;
}
 
//Функция выводит квадратную матрицу а размера n*n на консоль.
void PrintMatrix(int** a, int n) {
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            cout << setw(4) << a[i][j];
        }
        cout << endl;
    }
}
 
//Функция заполняет квадратную матрицу а размера n*n целыми числами
//от 0 до n^2-1 по схеме номер 10. Способ заполнения- вычисление 
//координат элемента k.
void FillMatrix(int** a, int n) {
    int i, j;
    int scp, snp, scl, snl;
 
    for (int k = n * n - 1; k >= 0; k--) {
        i = k / n;
        j = k % n;
        scp = j * 2 - n + 1; // четная правая дельта
        snp = n * 2 - j * 2 - 1; // нечетная правая дельта
 
        scl = n - 1 - j * 2; // четная левая дельта
        snl = j * 2 + 1; // нечетная левая дельта 
 
 
        if (i == n - 1) { // самая нижняя строка от которой идет отсчет
            if (((n % 2 == 0) && (j >= n / 2)) || ((n % 2 == 1) && (j > n / 2))) { // первый 'and' если число четное, а второй 'and' если число нечетное 
                a[i][j] = k; // правая половина матрицы
            }
            else {
                a[i][j] = j; // левая половина матрицы
            }
        }
        else {  // все оcтавшиеся строки матрицы
            if (n % 2 == 0) { // если размер матрицы N четное число
                if (i % 2 == 0) { // четные строки матрицы
                    if (j >= n / 2) { // правая половина матрицы
                        a[i][j] = a[i + 1][j] - scp;
                    }
                    else { // левая половина матрицы
                        a[i][j] = a[i + 1][j] + scl;
                    }
                }
                else {// не четные строки матрицы
                    if (j >= n / 2) { // правая половина матрицы
                        a[i][j] = a[i + 1][j] - snp;
                    }
                    else { // левая половина матрицы
                        a[i][j] = a[i + 1][j] + snl;
                    }
                }
            }
            else { // если размер матрицы N нечетное число
                if (i % 2 == 0) { // четные строки матрицы
                    if (j > n / 2) { // правая половина матрицы
                        a[i][j] = a[i + 1][j] - snp;
                    }
                    else { // левая половина матрицы
                        a[i][j] = a[i + 1][j] + snl;
                    }
                }
                else {// нечетные строки матрицы
                    if (j >= n / 2) { // правая половина матрицы
                        a[i][j] = a[i + 1][j] - scp + 1;
                    }
                    else { // левая половина матрицы
                        a[i][j] = a[i + 1][j] + scl + 1;
                    }
                }
            }
        }
    }
}
 
int main() {
    setlocale(LC_ALL, "Russian");
    int n;
    do {
        cout << "Введите размер квадратной матрицы " << endl;
        cin >> n;
    } while ((n < 1) || (n > 10));
 
    int** a = CreateMatrix(n);
    FillMatrix(a, n);
    cout << "" << endl;
    PrintMatrix(a, n);
 
    system("pause");
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.05.2019, 22:57
Ответы с готовыми решениями:

Заполнить матрицу элементами по схеме
в общем есть 3 задачи,так как я совсем чайник прошу помощи: 3.3. Дан одномерный массив целых...

Заполнить двумерный массив A [6][6] по заданной схеме
31 25 19 18 7 1 32 26 20 17 8 2 33 27 21 16 9 3 34 28 22 15 10 4 35 29 23 14 11 5 36 30...

Заполнить двумерный массив A [6][6] по заданной схеме
Составить программу заполнения двумерного массива А по заданной схеме. Результаты выдать на экран...

Вывести матрицу по заданной схеме
Как вывести матрицу по заданной схеме? 31 25 19 13 7 1 32 26 20 14 8 2 33 27 21 15 9 3 33...

3
0 / 0 / 0
Регистрация: 28.12.2016
Сообщений: 23
23.05.2019, 06:21  [ТС] 2
Помогите пожалуйста, срочно надо
0
0 / 0 / 0
Регистрация: 28.12.2016
Сообщений: 23
23.05.2019, 23:52  [ТС] 3
поднимаю вопрос
0
0 / 0 / 0
Регистрация: 28.12.2016
Сообщений: 23
29.05.2019, 22:21  [ТС] 4
Надежда умирает последней
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.05.2019, 22:21
Помогаю со студенческими работами здесь

Создать матрицу 6 на 6 по заданной схеме
Создать матрицу 6 на 6 6 5 4 3 2 1 12 11 10 9 8 7 13 14 15 16 17 18 19 20 21 22 23 24 30...

Массив: Сформировать квадратную матрицу порядка n по заданной схеме...
Помогите пожалуйста, нужно чтобы матрица выводилась в этом виде #include &lt;iostream&gt; #include...

Заполнить матрицу случайным образом, найти максимальный элемент в заданной области
Помогите пожалуйста написать программу... Дана квадратная матрица целых чисел размером N&lt;=12....

Заполнить матрицу по схеме
Дано натуральное N.Заполнить Матрицу порядка N*N целыми числами 0,1,2,3,4... N2-1 в соответствии ...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru