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

Условия построения матрицы - C++

Восстановить пароль Регистрация
 
atom.paul
12 / 2 / 1
Регистрация: 26.07.2012
Сообщений: 37
14.08.2013, 13:38     Условия построения матрицы #1
Здравствуйте! Подскажите нубу, как вообще работают условия, например требуется вывести двумерный массив в виде:
Код
4
22
177
5738
23479
Т.е. не в виде квадрата, а вот таким образом. Я погуглил, и нашел ответ на этот вопрос, условие - "if (i + k >= 5)". Однако мне нужно вывести не только в виде одной формы, вот мучаюсь над созданием условия для получение вот такого результата:
Код
  4 
 76
7776

(Пирамида)

55597
 565
  48
   2
(Перевернутая пирамида)

14866
 121
   5
 146
17677

И наоборот
Это далеко не все, рисунок прикрепил.
По рисунку только первые два готовы. Объясните как это вообще работает и как с этим справляться, заранее благодарен.
Миниатюры
Условия построения матрицы  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.08.2013, 13:38     Условия построения матрицы
Посмотрите здесь:

C++ Построения суммы ряда
C++ условия
Построения на плоскости C++
Алгоритм построения функции C++
C++ условия с++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Мимино
 Аватар для Мимино
180 / 151 / 5
Регистрация: 22.05.2013
Сообщений: 435
Записей в блоге: 1
14.08.2013, 14:27     Условия построения матрицы #2
Цитата Сообщение от atom.paul Посмотреть сообщение
Это далеко не все, рисунок прикрепил.
По рисунку только первые два готовы. Объясните как это вообще работает и как с этим справляться, заранее благодарен.
Цифры должны быть именно такие. как у Вас? Я с первого взгляда логики в них не вижу.
Wolkodav
 Аватар для Wolkodav
599 / 452 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
14.08.2013, 14:44     Условия построения матрицы #3
У человека кажется просто есь матрица и её надо вывести как на рисунке.

Добавлено через 8 минут
А так (i-строка, j-стобец), i==j (это для главная диагональ), i<j (выше главной диагонали), i>j (ниже главной диагонали), а все остальное объединение, пересечение таких множеств. j == n-i-1 ( побочная диагональ) n-i-1<j (выше побочной), n-i-1>j ( ниже побочной диагонали). Вроде ничего не напутал.
Praktolock
 Аватар для Praktolock
58 / 58 / 0
Регистрация: 29.11.2011
Сообщений: 272
14.08.2013, 14:45     Условия построения матрицы #4
Создай еще одну матрицу с маской, в соостветствии с которой выводится либо элемент (если соответствующий элемент в маске 1) либо пара пробелов, например (если в маске 1). Тогда задача сводится с заполнению маски
Wolkodav
 Аватар для Wolkodav
599 / 452 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
14.08.2013, 14:48     Условия построения матрицы #5
Praktolock, да нет, просто надо условие намутить, для вывода...
Praktolock
 Аватар для Praktolock
58 / 58 / 0
Регистрация: 29.11.2011
Сообщений: 272
14.08.2013, 14:49     Условия построения матрицы #6
Цитата Сообщение от Wolkodav Посмотреть сообщение
А так (i-строка, j-стобец), i==j (это для главная диагональ), i<j (выше главной диагонали), i>j (ниже главной диагонали), а все остальное объединение, пересечение таких множеств. j == n-i-1 ( побочная диагональ) n-i-1<j (выше побочной), n-i-1>j ( ниже побочной диагонали). Вроде ничего не напутал.
Дико плюсую. Но если матрица не квадратная?)
Wolkodav
 Аватар для Wolkodav
599 / 452 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
14.08.2013, 14:54     Условия построения матрицы #7
Тогда задача не имеет смысла.

Добавлено через 14 секунд
Praktolock, мог ошибится с побочной диагональю.

Добавлено через 3 минуты
так и знал:
А так (i-строка, j-стобец), i==j (это для главная диагональ), i<j (выше главной диагонали), i>j (ниже главной диагонали), а все остальное объединение, пересечение таких множеств. j == n-i-1 ( побочная диагональ) n-i-1<j (нижу побочной), n-i-1>j ( выше побочной диагонали). Вот так.
atom.paul
12 / 2 / 1
Регистрация: 26.07.2012
Сообщений: 37
14.08.2013, 16:21  [ТС]     Условия построения матрицы #8
У цифр нет никакой закономерности, заполнение рандомно. Спасибо за ответы, вот мучаюсь с третьим вариантом и какое условие у меня получилось:
C++
1
if (i + k <= 7)
Вот что выводит:
C++
1
2
3
4
5
15238
78678
45786
4874
138
Т.е. только одна (правая) сторона обрезается, а вот как другую обрезать...
Должно получиться вот так:
C++
1
2
3
4
5
15238
78678
45786
 874
  8
Заранее спасибо.
BigLow
55 / 55 / 2
Регистрация: 07.07.2013
Сообщений: 345
14.08.2013, 16:32     Условия построения матрицы #9
В третьем варианте элемент должен печататься если он в матрице находится выше главной диагонали и выше побочной. Вот как это записать?
Мимино
 Аватар для Мимино
180 / 151 / 5
Регистрация: 22.05.2013
Сообщений: 435
Записей в блоге: 1
14.08.2013, 16:42     Условия построения матрицы #10
вот первые 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
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
#include <iostream>
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Russian");
    const int size = 10;
    int matrix[size][size] = {0};
 
    for (int i = 0; i < size; i++)
    {
        for (int j = 0; j < size; j++)
            cout << (matrix[i][j]++) << ' ';
        cout << endl;
    }
 
 
    cout << "Вариант а: " << endl;
    for (int i = 0; i < size; i++)
    {
        for (int j = 0; j < size; j++)
            if (j >= i)
                cout << matrix[i][j] << ' ';
            else
                cout << "  ";
        cout << endl;
    }
 
    cout << "Вариант б: " << endl;
    for (int i = 0; i < size; i++)
    {
        for (int j = 0; j < size; j++)
            if (j <= i)
                cout << matrix[i][j] << ' ';
            else
                cout << "  ";
        cout << endl;
    }
 
    int tmp = size;
    cout << "Вариант в: " << endl;
    for (int i = 0; i < size; i++)
    {
        for (int j = 0; j < tmp; j++)
            if (j >= i)
                cout << matrix[i][j] << ' ';
            else
                cout << "  ";
        cout << endl;
        tmp--;
    }
 
    tmp = size;
    cout << "Вариант г: " << endl;
    for (int i = 0; i < size; i++)
    {
        for (int j = 0; j < size; j++)
            if (i >= size / 2 && j <= i && j >= tmp - 1)
                cout << matrix[i][j] << ' ';
            else
                cout << "  ";
        cout << endl;
        tmp--;
    }
 
    tmp = size;
    cout << "Вариант д: " << endl;
    for (int i = 0; i < size; i++)
    {
        for (int j = 0; j < tmp; j++)
            if (j >= i)
                cout << matrix[i][j] << ' ';
            else
                if (j != tmp - 1)
                cout << "  ";
        if (i >= size / 2)
        {
            for (int j = tmp - 1; j < size; j++)
                if (j <= i && j >= tmp - 1)
                    cout << matrix[i][j] << ' ';
                else
                    cout << "  ";
        }
 
        cout << endl;
        tmp--;
    }
 
 
    system("pause");
    return 0;
}
Добавлено через 8 минут
Правда я немного неудачный вариант размерности выбрал - четный.
atom.paul
12 / 2 / 1
Регистрация: 26.07.2012
Сообщений: 37
14.08.2013, 17:23  [ТС]     Условия построения матрицы #11
2BigLow:
Написал, вывело только три символа в одну строку. Условие:
C++
1
if (i < k && sizeCol - i - 1 > k)
Добавлено через 7 минут
Мимино,
Эмм.. Вы правы, что-то тут слишком все запутанно, мне необходимы лишь условия. Ну, а за то, что потратили на меня время и написали, спасибо.
Мимино
 Аватар для Мимино
180 / 151 / 5
Регистрация: 22.05.2013
Сообщений: 435
Записей в блоге: 1
14.08.2013, 17:38     Условия построения матрицы #12
Цитата Сообщение от atom.paul Посмотреть сообщение
мне необходимы лишь условия.
Там одни условия, за исключением объявления матрицы и всех cout-ов. Если Вам нужен вывод только значений в данных областях, программу можно упростить.
Миниатюры
Условия построения матрицы  
Мимино
 Аватар для Мимино
180 / 151 / 5
Регистрация: 22.05.2013
Сообщений: 435
Записей в блоге: 1
14.08.2013, 17:48     Условия построения матрицы #13
Вот с нечетной размерностью. Только в варианте Д нужно заменить одно условие
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
tmp = size;
    cout << "Вариант д: " << endl;
    for (int i = 0; i < size; i++)
    {
        for (int j = 0; j < tmp; j++)
            if (j >= i)
                cout << matrix[i][j] << ' ';
            else
                if (j != tmp - 1)
                cout << "  ";
        if (i > size / 2)
        {
            for (int j = tmp - 1; j < size; j++)
                if (j <= i && j >= tmp - 1)
                    cout << matrix[i][j] << ' ';
                else
                    cout << "  ";
        }
 
        cout << endl;
        tmp--;
    }
Миниатюры
Условия построения матрицы  
atom.paul
12 / 2 / 1
Регистрация: 26.07.2012
Сообщений: 37
14.08.2013, 18:45  [ТС]     Условия построения матрицы #14
Спасибо. Только вот что такое переменная temp?

Добавлено через 9 минут
И что еще значит четная и нечетная размерность?
Мимино
 Аватар для Мимино
180 / 151 / 5
Регистрация: 22.05.2013
Сообщений: 435
Записей в блоге: 1
14.08.2013, 19:56     Условия построения матрицы #15
Цитата Сообщение от atom.paul Посмотреть сообщение
Только вот что такое переменная temp?
Добавлено через 9 минут
И что еще значит четная и нечетная размерность?

temp - переменная, которая равна размеру строки/столбца матрицы. size менять нельзя, поэтому ввел temp.
Размерность - размер матрицы. При четном количестве строк/столбцов пересечение диагоналей не будет попадать на один элемент (варианты в - д на скриншоте выше это показывают наглядно)
Praktolock
 Аватар для Praktolock
58 / 58 / 0
Регистрация: 29.11.2011
Сообщений: 272
14.08.2013, 23:15     Условия построения матрицы #16
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
#include <iostream>
#include <math.h>
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Russian");
    const int size = 20;
    int matrix[size][size] = {0};
 
    for (int i = 0; i < size; i++)
    {
        for (int j = 0; j < size; j++)
            cout << (++matrix[i][j]) << ' ';
        cout << endl;
    }
 
 
    cout << "Вариант круг: " << endl;
    for (int i = 0; i < size; i++)
    {
        for (int j = 0; j < size; j++)
        {
         double c=size/2-0.5;
         if(sqrt((i-c)*(i-c)+(j-c)*(j-c))<size/2)
                cout << matrix[i][j] << ' ';
            else
                cout << "  ";
        }
        cout << endl;
    }
 
    cout << "Вариант круг наоборот: " << endl;
    for (int i = 0; i < size; i++)
    {
        for (int j = 0; j < size; j++)
        {
         double c=size/2-0.5;
         if(sqrt((i-c)*(i-c)+(j-c)*(j-c))>size/2)
                cout << matrix[i][j] << ' ';
            else
                cout << "  ";
        }
        cout << endl;
    } 
    system("pause");
    return 0;
}
Миниатюры
Условия построения матрицы  
Praktolock
 Аватар для Praktolock
58 / 58 / 0
Регистрация: 29.11.2011
Сообщений: 272
14.08.2013, 23:15     Условия построения матрицы #17
ну это уже конечно баловство:-)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.08.2013, 23:30     Условия построения матрицы
Еще ссылки по теме:

Составить функцию для построения вектора из элементов матрицы по заданному правилу и отсортировать элементы матрицы C++
C++ Многомерные массивы. Написать функцию построения по действительными числами квадратной матрицы
C++ Условия с++

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

Или воспользуйтесь поиском по форуму:
Praktolock
 Аватар для Praktolock
58 / 58 / 0
Регистрация: 29.11.2011
Сообщений: 272
14.08.2013, 23:30     Условия построения матрицы #18
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
    cout << "Вариант синусоида: " << endl;
    for (int i = 0; i < size; i++)
    {
        for (int j = 0; j < size; j++)
        {
         double c=size/2-0.5;
         if(i>sin(3.1415926535897932384626433832795*2/size*j)*size/2.1+c)
                cout << matrix[i][j] << ' ';
            else
                cout << "  ";
        }
        cout << endl;
    }
Миниатюры
Условия построения матрицы  
Yandex
Объявления
14.08.2013, 23:30     Условия построения матрицы
Ответ Создать тему
Опции темы

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