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

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

Войти
Регистрация
Восстановить пароль
 
skileton1994
0 / 0 / 1
Регистрация: 05.07.2016
Сообщений: 54
#1

Нарисовать фигуру используя двумерный массив - C++

20.07.2016, 11:28. Просмотров 351. Ответов 13
Метки нет (Все метки)

Привет. Подскажите кто, как нарисовать с помощью двумерного массива?
*
* *
* * *
* * * *
и
*
* *
* *
* * * *
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.07.2016, 11:28     Нарисовать фигуру используя двумерный массив
Посмотрите здесь:

Нарисовать фигуру C++
Надо нарисовать фигуру C++
Нарисовать любую геометрическую фигуру C++
C++ Нарисовать фигуру (язык С)
Нарисовать фигуру (язык C) C++
Двумерный массив. Программу написать используя указатели и строковые функции. C++
C++ создать и отсортировать двумерный массив по строкам используя алгоритм сортировки вставкой
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
shilko2013
239 / 216 / 116
Регистрация: 02.04.2016
Сообщений: 822
Завершенные тесты: 1
20.07.2016, 11:34     Нарисовать фигуру используя двумерный массив #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<iostream>
using namespace std;
int main() {
 
    char a[4][4] = { {'*',' ',' ',' '},
                     {'*','*',' ',' '},
                     {'*','*','*',' '},
                     {'*','*','*','*'} };
    for (int i = 0; i < 4; ++i) {
        for (int j = 0; j < 4; ++j)
            cout << a[i][j];
        cout << endl;
    }
    return 0;
}
И убираешь одну звездочку)
skileton1994
0 / 0 / 1
Регистрация: 05.07.2016
Сообщений: 54
20.07.2016, 11:48  [ТС]     Нарисовать фигуру используя двумерный массив #3
а если такая ситуация, что размер массива может меняться. сначала мы задали 5х5, потом 6х6.
как в таком случаем поступить?
shilko2013
239 / 216 / 116
Регистрация: 02.04.2016
Сообщений: 822
Завершенные тесты: 1
20.07.2016, 12:01     Нарисовать фигуру используя двумерный массив #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
#include<iostream>
using namespace std;
int main() {
 
    const int n = 10;
    char a[n][n];
 
    for (int i = 0; i < n; ++i)
        for (int j = 0; j < n; ++j)
            a[i][j] = ' ';
 
    for (int i = 0; i < n; ++i)
        for (int j = 0; j <= i; ++j)
            a[i][j] = '*';
 
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < n; ++j)
            cout << a[i][j];
        cout << endl;
    }
    cout << endl;
 
    for (int i = 0; i < n; ++i)
        for (int j = 0; j < n; ++j)
            a[i][j] = ' ';
 
    for (int i = 0; i < n; ++i)
        for (int j = 0; j <= i; ++j) {
            if ((i == n - 2) && (j == n - 2))
                a[i][j] = ' ';
            else
                a[i][j] = '*';
        }
 
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < n; ++j)
            cout << a[i][j];
        cout << endl;
    }
    cout << endl;
 
    return 0;
}
skileton1994
0 / 0 / 1
Регистрация: 05.07.2016
Сообщений: 54
20.07.2016, 13:35  [ТС]     Нарисовать фигуру используя двумерный массив #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
#include <iostream>
 
using namespace std;
 
const int n = 4;
char z, r;
int a, b, c;
void res(int, char);
void res(int, char);
void res(int, char);
 
void main()
{
    setlocale(LC_ALL, "Russian");
 
    res(a,z);
    res(b,r);
    res(c,r)
 
}
 
void res(int a, char z)
{
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            if (i == j)
                cout << " * ";          
            else if (i>j)
                cout << " * ";
            else 
                cout << "  ";
        }
        cout << endl;       
    }
}
 
void res(int b, char r)
{
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            if (i == j)
                cout << " * ";
            else if (i>0 && j == 0)
                cout << " * ";
            else if (i == n - 1 && j > 0 && j<n - 1)
                cout << " * ";
            else
                cout << "   ";
        }
        cout << endl;
    }
}
 
void res(int c, char r)
{
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            if (i +j== n-1)
                cout << " * ";
            else if (j==0 && i<n-1 )
                cout << " * ";
            else if (i==0 && j>0&&j<n-1)
                cout << " * ";
            else
                cout << "   ";
        }
        cout << endl;
    }
}
shilko2013
239 / 216 / 116
Регистрация: 02.04.2016
Сообщений: 822
Завершенные тесты: 1
20.07.2016, 13:40     Нарисовать фигуру используя двумерный массив #6
Назовите функции разными именами

Добавлено через 46 секунд
И я тебе скидывал рациональное решение, ты нерациональное пишешь...
zss
Модератор
Эксперт С++
6187 / 5790 / 1875
Регистрация: 18.12.2011
Сообщений: 14,790
Завершенные тесты: 1
20.07.2016, 13:58     Нарисовать фигуру используя двумерный массив #7
Перегруженные функции имеют одинаковые имена, но разный тип (либо разное количество) параметров.
Т.к. у Вас параметры одинаковые, то они не могут быть перегруженными, им придется дать разные имена.

Но на самом деле параметры Вы никак не используете. Можно сделать перегрузку используя разный тип параметра исключительно для демонстрации перегрузки:
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
#include <iostream>
using namespace std;
 
const int n = 4;
void res(int);
void res(char);
void res(double);
 
int main()
{
    setlocale(LC_ALL, "Russian");
 
    res(1);
    res('a');
    res(1.1);
    system("pause");
    return 0;
 
}
 
void res(int)
{
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            if (i == j)
                cout << " * ";          
            else if (i>j)
                cout << " * ";
            else 
                cout << "  ";
        }
        cout << endl;       
    }
}
 
void res(char)
{
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            if (i == j)
                cout << " * ";
            else if (i>0 && j == 0)
                cout << " * ";
            else if (i == n - 1 && j > 0 && j<n - 1)
                cout << " * ";
            else
                cout << "   ";
        }
        cout << endl;
    }
}
 
void res(double)
{
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            if (i +j== n-1)
                cout << " * ";
            else if (j==0 && i<n-1 )
                cout << " * ";
            else if (i==0 && j>0&&j<n-1)
                cout << " * ";
            else
                cout << "   ";
        }
        cout << endl;
    }
}
shilko2013
239 / 216 / 116
Регистрация: 02.04.2016
Сообщений: 822
Завершенные тесты: 1
20.07.2016, 14:38     Нарисовать фигуру используя двумерный массив #8
zss, zss разве это рациональное решение?
Для заполнения элементов ниже главной диагонали или на ней можно использовать
C++
1
2
3
for (int i=0;i<n;++i)
   for (int j-0;j<=i;++j)
        a[i][j] = '*';
А не перебирать весь массив с условиями.
zss
Модератор
Эксперт С++
6187 / 5790 / 1875
Регистрация: 18.12.2011
Сообщений: 14,790
Завершенные тесты: 1
20.07.2016, 15:14     Нарисовать фигуру используя двумерный массив #9
Я не вдавался в алгоритм решения.
Как я понял, ТС поставили задачу использовать перегруженные функции.
skileton1994
0 / 0 / 1
Регистрация: 05.07.2016
Сообщений: 54
20.07.2016, 20:14  [ТС]     Нарисовать фигуру используя двумерный массив #10
На последней функции оно просто закрывает программу при выполнении. и всё из за знака >=
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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
#include <iostream>
 
using namespace std;
 
const int n = 5;
char mas[n][n];
 
void res1(int a = 1, char ch = 'z');
void res2(int b = 11, char ch = 'r');
void res3(int c = 2, char ch = 'z');
void res4(int d = 12, char ch = 'z');
void res5(int e = 3, char ch = 'r');
 
void main()
{
    setlocale(LC_ALL, "Russian");
    
    res1();
    res2();
    res3();
    res4();
    res5();
    
}
 
void res1(int a, char ch)
{
    for (int i = 0; i < n; ++i)
        for (int j = 0; j < n; ++j)
            mas[i][j] = ' ';
 
    for (int i = 0; i < n; ++i)
        for (int j = 0; j <= i; ++j)
            mas[i][j] = '*';
 
    for (int i = 0; i < n; ++i) 
    {
        for (int j = 0; j < n; ++j)
            cout << mas[i][j];
        cout << endl;
    }
    cout << endl;
}
 
void res2(int b, char ch)
{
    for (int i = 0; i < n; ++i)
        for (int j = 0; j < n; ++j)
            mas[i][j] = ' ';
 
    for (int i = 0; i < n; ++i)
        for (int j = 0; j <= i; ++j)
        {
        if ((i != j) && (j != 0) && (i != n - 1))
            mas[i][j] = ' ';
        else
            mas[i][j] = '*';
    }
 
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < n; ++j)
            cout << mas[i][j];
        cout << endl;
    }
    cout << endl;
}
 
void res3(int c, char ch)
{
    for (int i = 0; i < n; ++i)
    {
        for (int j = 0; j < n; ++j)
            mas[i][j] = ' ';
    }
 
    for (int i = 0; i < n; ++i)
    {
        for (int j = 0; j +i <= n-1; ++j)
            mas[i][j] = '*';
    }
    
    for (int i = 0; i < n; ++i)
    {
        for (int j = 0; j < n; ++j)
            cout << mas[i][j];
        cout << endl;
    }
    cout << endl;
}
 
 
void res4(int d, char ch)
{
    for (int i = 0; i < n; ++i)
    {
        for (int j = 0; j < n; ++j)
            mas[i][j] = ' ';
    }
 
    for (int i = 0; i < n; ++i)
    {
        for (int j = 0; j + i <= n - 1; ++j)
        {
            if ((i != 0) && (j != 0) && (j + i != n - 1))
                mas[i][j] = ' ';
            else
                mas[i][j] = '*';
        }
    }
 
    for (int i = 0; i < n; ++i)
    {
        for (int j = 0; j < n; ++j)
            cout << mas[i][j];
        cout << endl;
    }
    cout << endl;
}
 
void res5(int e, char ch)
{
    for (int i = 0; i < n; ++i)
    {
        for (int j = 0; j < n; ++j)
            mas[i][j] = ' ';
    }
 
    for (int i = 0; i < n; ++i)
    {
        for (int j = 0; j + i >= n - 1; ++j)
            mas[i][j] = '*';
    }
 
    for (int i = 0; i < n; ++i)
    {
        for (int j = 0; j < n; ++j)
            cout << mas[i][j];
        cout << endl;
    }
    cout << endl;
}
zss
Модератор
Эксперт С++
6187 / 5790 / 1875
Регистрация: 18.12.2011
Сообщений: 14,790
Завершенные тесты: 1
20.07.2016, 21:45     Нарисовать фигуру используя двумерный массив #11
Цитата Сообщение от skileton1994 Посмотреть сообщение
просто закрывает программу
А кто за Вас будет писать:
Цитата Сообщение от zss Посмотреть сообщение
system("pause");
return 0;
p.s. Какой все же Вы подразумеваете смысл под параметрами функций?
Они в их коде нигде не использованы.
Можно, например, передать первым параметром - символ фона, вторым параметром - символ фигуры.
skileton1994
0 / 0 / 1
Регистрация: 05.07.2016
Сообщений: 54
20.07.2016, 22:00  [ТС]     Нарисовать фигуру используя двумерный массив #12
А зачем system("pause"), если до этого все функции выполнялись.

Написать функции и протестировать их в основной программе. Функции печатают фигуры и используют параметры по умолчанию. Параметры по умолчанию определяют, каким символом печатается фигура и является ли она заполненной или печатается только рамка фигуры.
В прикреплённом файле вид готовой программы. так должно быть.
Но наверно я не могу понять задачу
Миниатюры
Нарисовать фигуру используя двумерный массив  
zss
Модератор
Эксперт С++
6187 / 5790 / 1875
Регистрация: 18.12.2011
Сообщений: 14,790
Завершенные тесты: 1
20.07.2016, 22:34     Нарисовать фигуру используя двумерный массив #13
C++
1
2
3
4
5
6
7
8
9
10
void res1(char a, char ch)
{
    for (int i = 0; i < n; ++i)
        for (int j = 0; j < n; ++j)
            mas[i][j] = a;
 
    for (int i = 0; i < n; ++i)
        for (int j = 0; j <= i; ++j)
            mas[i][j] = ch;
....
C++
1
res1(' ','*');
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.07.2016, 23:06     Нарисовать фигуру используя двумерный массив
Еще ссылки по теме:

Нарисовать фигуру C++
Нарисовать фигуру знаками ASCII C++
Используя массив сформировать фигуру на экране C++
C++ Нарисовать фигуру

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

Или воспользуйтесь поиском по форуму:
skileton1994
0 / 0 / 1
Регистрация: 05.07.2016
Сообщений: 54
20.07.2016, 23:06  [ТС]     Нарисовать фигуру используя двумерный массив #14
С этим всё ясно. а вот почему выскакивает ошибка на выполнении последней функции всё ещё не ясно.

Добавлено через 8 минут
Да и задержка тут вовсе не нужна, т.к. и без последней функции всё работает хорошо
Yandex
Объявления
20.07.2016, 23:06     Нарисовать фигуру используя двумерный массив
Ответ Создать тему
Опции темы

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