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

Заполнить матрицу по образцу - C++

Восстановить пароль Регистрация
 
blackster
2 / 2 / 1
Регистрация: 19.09.2011
Сообщений: 15
19.09.2011, 22:32     Заполнить матрицу по образцу #1
Нужно создать матрицу и заполнить ее таким образом:

1 2 6 7 15 16 28 ...
3 5 8 14 17 27 ...
4 9 13 18 26 ...
10 12 19 25 ...
11 20 24 ...
21 23 ...
22 ...
.
.
.
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
sandye51
программист С++
 Аватар для sandye51
677 / 579 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
19.09.2011, 22:59     Заполнить матрицу по образцу #2
Цитата Сообщение от blackster Посмотреть сообщение
Нужно создать матрицу и заполнить ее таким образом
ну так приступай
blackster
2 / 2 / 1
Регистрация: 19.09.2011
Сообщений: 15
19.09.2011, 23:34  [ТС]     Заполнить матрицу по образцу #3
если бы я знал как ето сделать, то я бы здесь не писал
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
20.09.2011, 03:04     Заполнить матрицу по образцу #4
blackster, что-то мне эта последовательность напоминает не помню только что именно, но что-то из области арифметики точно.
IrineK
Заблокирован
20.09.2011, 05:08     Заполнить матрицу по образцу #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
#include <iostream>
#include <iomanip>
#define N 10
 
using namespace std;
 
int main()
{
    int i,k, num=1, A[N][N];
    int numMax = N*N;
 
    //filling
    for(k=0;k<N;k++)
    {   if(k%2)
            for(i=0;i<k+1;i++)
            {   A[i][k-i] = num;
                A[N-1-i][N-1-k+i] = numMax+1-num;
                num++;
            }
        else
            for(i=k;i>-1;i--)
            {   A[i][k-i] = num;
                A[N-1-i][N-1-k+i] = numMax+1-num;
                num++;
            }
    }
    
    //showing
    for(i=0;i<N;i++)
    {   for(k=0;k<N;k++)
            cout<<setw(5)<<A[i][k];
        cout<<"\n";
    }
 
    cin.get();
    return 0;
 
}
Миниатюры
Заполнить матрицу по образцу  
-=ЮрА=-
Заблокирован
Автор FAQ
20.09.2011, 12:00     Заполнить матрицу по образцу #6
Цитата Сообщение от blackster Посмотреть сообщение
Нужно создать матрицу и заполнить ее таким образом:
1 2 6 7 15 16 28 ...
3 5 8 14 17 27 ...
4 9 13 18 26 ...
10 12 19 25 ...
11 20 24 ...
21 23 ...
22 ...
.
.
.
- в каждой строке сдвиг элемента на 1 и добавление его в конец, сейчас накидаю

Добавлено через 9 минут
Вот решение на плюсах
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
#include <iostream>
#include <conio.h>
using namespace std;
 
//Руссификация
ostream& operator<<(ostream &stream,char* s){
    for(char* ps=s; *ps; ps++){
        if(*ps=='ё')
            stream<<char(241);
        else if(*ps=='Ё')
            stream<<char(240);
        else if(*ps>=-64 && *ps<=-17)           
            stream<<char(*ps+64+128);
        else if(*ps<0)
            stream<<char(*ps+64+176);
        else
            stream<<*ps;
    }
    return stream;
}
 
int main()
{
    int k,i,j,n;
    int ** arr;
    do
    {
        std::cout<<"Ведите размерность матрицы : ";
        std::cin>>n;
        arr = new int *[n];
        for(i = 0; i < n; i++)
        {
            arr[i] = new int[n];
            for(j = 0,k = i + 1; j < n; j++,k++)
            {
                if(k < n)
                    arr[i][j] = k;
                else
                    arr[i][j] = k - n + 1;
                std::cout<<arr[i][j]<<" ";
            }
            std::cout<<"\r\n";
        }
        std::cout<<"Нажмите Y для нового ввода\r\n";
        delete [] arr;
    }
    while(toupper(getch()) == 'Y');
    return 0;
}
Ведите размерность матрицы : 6
1 2 3 4 5 1
2 3 4 5 1 2
3 4 5 1 2 3
4 5 1 2 3 4
5 1 2 3 4 5
1 2 3 4 5 6
Нажмите Y для нового ввода

Добавлено через 2 минуты
PS:Если ниже побочной диагонали элементы не нужны то цикли имеет следующий виды
C++
1
2
3
4
5
6
7
8
9
10
11
12
for(i = 0; i < n; i++)
        {
            arr[i] = new int[n];
            for(j = 0,k = i + 1; j < n; j++,k++)
            {
                arr[i][j] = 0;
                if(k <= n)
                    arr[i][j] = k;
                std::cout<<arr[i][j]<<" ";
            }
            std::cout<<"\r\n";
        }
Ведите размерность матрицы : 6
1 2 3 4 5 6
2 3 4 5 6 0
3 4 5 6 0 0
4 5 6 0 0 0
5 6 0 0 0 0
6 0 0 0 0 0
Нажмите Y для нового ввода
sandye51
программист С++
 Аватар для sandye51
677 / 579 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
20.09.2011, 12:03     Заполнить матрицу по образцу #7
-=ЮрА=-, ты не то, что нужно сделал
-=ЮрА=-
Заблокирован
Автор FAQ
20.09.2011, 14:31     Заполнить матрицу по образцу #8
Цитата Сообщение от sandye51 Посмотреть сообщение
-=ЮрА=-, ты не то, что нужно сделал
- всмотрелся, точно в строке переменный шаг, сейчас поправлюсь...

Добавлено через 2 часа 20 минут
Вобщем вот алгоритм на плюсах с переменным шагом по i и j
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
#include <iostream>
#include <conio.h>
using namespace std;
 
//Руссификация
ostream& operator<<(ostream &stream,char* s){
    for(char* ps=s; *ps; ps++){
        if(*ps=='ё')
            stream<<char(241);
        else if(*ps=='Ё')
            stream<<char(240);
        else if(*ps>=-64 && *ps<=-17)           
            stream<<char(*ps+64+128);
        else if(*ps<0)
            stream<<char(*ps+64+176);
        else
            stream<<*ps;
    }
    return stream;
}
 
//1 2 6 7 15 16 28 ... 
//3 5 8 14 17 27 ...
//4 9 13 18 26 ...
//10 12 19 25 ... 
//11 20 24 ...
//21 23 ...
//22 ...
 
void PrntVec(int n, int * vec);
void FillVec(int n, int base, int plus, int * vec);
 
int main()
{
    int i,j,n;
    int ** arr;
    int i_plus = 6, j_plus = 4;
    do
    {
        std::cout<<"Ведите размерность матрицы : ";
        std::cin>>n;
        arr    = new int *[n];
        arr[0] = new int[n];//Первая строка не вписывается в алгоритм 
        //переменного шага по i
        //Верней он со 2-й строки начинается
        FillVec(n, 1, j_plus, arr[0]);
        PrntVec(n, arr[0]);
        for(int i = 1, k = 3, nCount = 1; i < n; i++)
        {
            arr[i] = new int[n];
            FillVec(n, k, j_plus, arr[i]);
            PrntVec(n, arr[i]);
            if(i % 2 == 0)
                k += i_plus*(nCount++);
            else
                k++;
        }
        std::cout<<"Нажмите Y для нового ввода\r\n";
        delete [] arr;
    }
    while(toupper(getch()) == 'Y');
    return 0;
}
 
void PrntVec(int n, int * vec)
{
    for(int i = 0; i < n; i++)
        std::cout<<vec[i]<<" ";
    std::cout<<"\r\n";
}
 
void FillVec(int n, int base, int plus, int * vec)
{
    for(int i = 1, k = base, nCount = 1; i <= n; i++)
    {
        vec[i - 1] = k;
        if(i % 2 == 0)
            k += plus*(nCount++);
        else
            k++;
    }
}
Ведите размерность матрицы : 11
1 2 6 7 15 16 28 29 45 46 66
3 4 8 9 17 18 30 31 47 48 68
4 5 9 10 18 19 31 32 48 49 69
10 11 15 16 24 25 37 38 54 55 75
11 12 16 17 25 26 38 39 55 56 76
продолжение
23 24 28 29 37 38 50 51 67 68 88
24 25 29 30 38 39 51 52 68 69 89
42 43 47 48 56 57 69 70 86 87 107
43 44 48 49 57 58 70 71 87 88 108
67 68 72 73 81 82 94 95 111 112 132
68 69 73 74 82 83 95 96 112 113 133
Нажмите Y для нового ввода
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
20.09.2011, 15:49     Заполнить матрицу по образцу #9
-=ЮрА=-, не то. вот что нужно, автор напомнил бы что это... так и быстрее дело пошло бы.
Изображения
 
-=ЮрА=-
Заблокирован
Автор FAQ
20.09.2011, 16:09     Заполнить матрицу по образцу #10
Теперь дошло, по змейке...
blackster
2 / 2 / 1
Регистрация: 19.09.2011
Сообщений: 15
20.09.2011, 20:53  [ТС]     Заполнить матрицу по образцу #11
Цитата Сообщение от alkagolik Посмотреть сообщение
-=ЮрА=-, не то. вот что нужно, автор напомнил бы что это... так и быстрее дело пошло бы.
alkagolik прав, то что нужно)

Добавлено через 11 минут
IrineK

СПАСИБО!)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.09.2011, 19:19     Заполнить матрицу по образцу
Еще ссылки по теме:

C++ Сформировать матрицу по образцу
C++ Заполнить матрицу по заданному образцу
C++ Заполнить матрицу по образцу

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

Или воспользуйтесь поиском по форуму:
Vedola
0 / 0 / 0
Регистрация: 22.09.2011
Сообщений: 7
22.09.2011, 19:19     Заполнить матрицу по образцу #12
Помогите пожалуйста..на С надо написать...

1.Дана прямоугольная матрица [m x n]. Заполнить матрицу случайными числами. На побочной диагонали разместить суммы элементов, которые лежат на той же строке и столбце.
2.Дано k литерных строк (эти строки сохраняются в массиве строк A). Каждая строка содержит латинские и русские буквы, цифры и все возможные разделители. Требуется:
1) Выделить из каждой строки и напечатать подстроки, заключенные в квадратные скобки
2) Среди выделенных подстрок найти подстроку, начинающуюся с наибольшего числа цифр
3) Удалить путем сдвига все русские буквы.
Yandex
Объявления
22.09.2011, 19:19     Заполнить матрицу по образцу
Ответ Создать тему
Опции темы

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