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

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

Войти
Регистрация
Восстановить пароль
 
 
D_bl_M
 Аватар для D_bl_M
28 / 28 / 1
Регистрация: 25.03.2012
Сообщений: 129
#1

Нарисовать треугольник - C++

21.10.2012, 17:50. Просмотров 7033. Ответов 28
Метки нет (Все метки)

День добрый!
Учу по книге.
Not student!

Тема не раз уже поднималась, но моего варианта не нашел, подскажите, направьте (код не обязательно), как сделать такое (фигура должна быть именно такая, только без точек, это я пробелы забил т.к. неправильно отображалось)
5. При помощи цикла for изобразите на экране пирамиду из символов 'X'.
Верхняя часть пирамиды должна выглядеть следующим образом:
............х
.........ххх
......ххххх
...ххххххх
ххххххххх
Вся пирамида должна быть высотой не 5 линий, как изображено здесь, а 20 линий. Одним из способов ее построения может служить использование двух вложенных циклов, из которых внутренний будет заниматься печатанием символов 'X' и пробелов, а другой осуществлять переход на одну строку вниз.
Я собственно вот что накрутил:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>;
#include <iomanip>;
using namespace std;
 
int main()
{
    char star = '*';
    char space = ' ';
 
    int lines =20; // comment if use var 2!
// var 2:
// for (int i = 1; i <= 20; i++)
    for (int i = 1; i <= lines; i++)
    {
        for (int j = 1; j < i; j++)
            cout << star;
        cout << '\n'; // or endl
    }
    
    return 0;
}
На мои комменты внимание не обращаем, это я так для себя...
Как видите
C++
1
char space = ' ';
не задействовано, и куда приткнуть ума не приложу, но чет подсказывает надо что-то от кого-то вычесть ))
Всем спасибо!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ryzhikov_A
6 / 6 / 0
Регистрация: 14.10.2012
Сообщений: 36
21.10.2012, 18:14     Нарисовать треугольник #2
Треугольник равнобедренный, как я понял...
C++
1
2
3
4
5
6
7
8
9
10
11
for (int i=0; i<20; i++)
    {
        for (int j=0; j<20; j++)
        {
            if ((j<20-i)|(j>i))
                std::cout<<' ';
            else 
                std::cout<<'*';
        }
        std::cout<<'\n';
    }
D_bl_M
 Аватар для D_bl_M
28 / 28 / 1
Регистрация: 25.03.2012
Сообщений: 129
21.10.2012, 18:19  [ТС]     Нарисовать треугольник #3
Цитата Сообщение от Ryzhikov_A Посмотреть сообщение
Треугольник равнобедренный, как я понял...
C++
1
2
3
4
5
6
7
8
9
10
11
for (int i=0; i<20; i++)
    {
        for (int j=0; j<20; j++)
        {
            if ((j<20-i)|(j>i))
                std::cout<<' ';
            else 
                std::cout<<'*';
        }
        std::cout<<'\n';
    }
не-не-не, не то, именно такой как я нарисовал, прижат к правой стороне
Ryzhikov_A
6 / 6 / 0
Регистрация: 14.10.2012
Сообщений: 36
21.10.2012, 18:27     Нарисовать треугольник #4
Т.е. самый правый элемент всегда *? Если нет, поясните словани смещение строки относительно более нижней.
C++
1
2
3
4
5
6
7
8
9
10
11
for (int i=0; i<20; i++)
    {
        for (int j=0; j<20; j++)
        {
            if (j<20-i)
                std::cout<<' ';
            else 
                std::cout<<'*';
        }
        std::cout<<'\n';
    }
Lana_levchuk
6 / 6 / 0
Регистрация: 21.10.2012
Сообщений: 26
21.10.2012, 18:34     Нарисовать треугольник #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
#include "stdafx.h"
#include <iomanip>
#include <iostream>
#include <conio.h>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale (LC_ALL, "Russian");
    int s;
    cout<<"Введите количество строк: "<<endl;;
    cin>>s;
    char ch;
    cout<<"Введите символ пирамиды: "<<endl;
    cin>>ch;
    cout<<endl;
    for(int i=0;i<s;i++)
    {
        cout<<setw(s-i)<<' ';        
        for (int j=0; j<=i*2;j++)   
            cout<<ch;                
        cout<<endl;
    }
    cout<<endl<<endl;
    _getch ();
    return 0;
}
De_N
19 / 17 / 2
Регистрация: 15.10.2012
Сообщений: 45
21.10.2012, 18:34     Нарисовать треугольник #6
D_bl_M, код, который предоставил Ryzhikov_A мне кажется верным.
Только чуть-чуть изменив:
C++
1
2
3
4
5
6
7
8
9
10
11
for (int i=0; i<20; i++)
    {
        for (int j=0; j<20; j++)
        {
            if (j<20-i)
                std::cout<<' ';
            else 
                std::cout<<'*';
        }
        std::cout<<'\n';
    }
Всё равно что-то не получается?
D_bl_M
 Аватар для D_bl_M
28 / 28 / 1
Регистрация: 25.03.2012
Сообщений: 129
21.10.2012, 18:35  [ТС]     Нарисовать треугольник #7
Цитата Сообщение от Ryzhikov_A Посмотреть сообщение
Т.е. самый правый элемент всегда *? Если нет, поясните словани смещение строки относительно более нижней.
C++
1
2
3
4
5
6
7
8
9
10
11
for (int i=0; i<20; i++)
    {
        for (int j=0; j<20; j++)
        {
            if (j<20-i)
                std::cout<<' ';
            else 
                std::cout<<'*';
        }
        std::cout<<'\n';
    }
все верно вы поняли, результат удовлетворяет, но один черт не понимаю ))) все ведь элементарно и с циклами как бы разобрался, но тут ппц какой-то. Код прочитать могу, но для разума что-то непонятно.
Lana_levchuk
6 / 6 / 0
Регистрация: 21.10.2012
Сообщений: 26
21.10.2012, 18:36     Нарисовать треугольник #8
Если точно нужно, чтобы по правой стороне, то тогда так:
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
#include "stdafx.h"
#include <iomanip>
#include <iostream>
#include <conio.h>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale (LC_ALL, "Russian");
    int s;
    cout<<"Введите количество строк: "<<endl;;
    cin>>s;
    char ch;
    cout<<"Введите символ пирамиды: "<<endl;
    cin>>ch;
    cout<<endl;
    for(int i=0;i<s;i++)
    {
        cout<<setw(s-i)<<' ';        
        for (int j=0; j<=i;j++)   
            cout<<ch;                
        cout<<endl;
    }
    cout<<endl<<endl;
    _getch ();
    return 0;
}
Kastaneda
Форумчанин
Эксперт С++
 Аватар для Kastaneda
4252 / 2784 / 219
Регистрация: 12.12.2009
Сообщений: 7,109
Записей в блоге: 1
Завершенные тесты: 1
21.10.2012, 18:41     Нарисовать треугольник #9
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <iomanip>
#include <algorithm>
#include <iterator>
 
int main()
{
   int n;
   
   std::cout << "Enter n: ";
   std::cin >> n;
   int length = n + 1;
   
   std::generate_n(std::ostream_iterator<std::string>(std::cout), n, 
                         [=, &n] () -> std::string {std::cout << std::setw(length); 
                                                    return std::string(n--, '*') + "\n";});
   
   return 0;
}

Не по теме:

так и придумал, как читабельно лямды оформлять

D_bl_M
 Аватар для D_bl_M
28 / 28 / 1
Регистрация: 25.03.2012
Сообщений: 129
21.10.2012, 18:42  [ТС]     Нарисовать треугольник #10
Lana_levchuk,
Цитата Сообщение от Lana_levchuk Посмотреть сообщение
int _tmain(int argc, _TCHAR* argv[])
это у нас что? qt creator?
этот вариант мне даже больше нравится, так как в этой главе про setw() говорилось, изначально тоже хотел задействовать.
Именно Лафоре, я думал именно такой и нужно было. А оно вон оказывается что, в любом случае спасибо.

Добавлено через 1 минуту
De_N, все получается, просто туго сообразить
Lana_levchuk
6 / 6 / 0
Регистрация: 21.10.2012
Сообщений: 26
21.10.2012, 18:52     Нарисовать треугольник #11
D_bl_M, ссори, шаблон брала из другой программки, должно быть стандартно
int_main ();

на здоровье
D_bl_M
 Аватар для D_bl_M
28 / 28 / 1
Регистрация: 25.03.2012
Сообщений: 129
21.10.2012, 19:19  [ТС]     Нарисовать треугольник #12
for Lana_levchuk,
Кликните здесь для просмотра всего текста
можете со мной связаться? skype: timofeev.d.i (если он у Вас есть), личные сообщения отключены из-за нулевой репутации


Kastaneda,
De_N,
Ryzhikov_A,
И вам ребята огромное спасибо, еще раз утверждаюсь что это самый оперативный форум. Еще вернусь ))) вопросов масса
vcyberf
0 / 0 / 0
Регистрация: 15.01.2014
Сообщений: 5
16.01.2014, 00: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
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 <iostream>
using namespace std;
 
void main()
{
    cout << "Triangles empty and full! \n"; 
 
    int a;
    cout << "\nEnter cathetus of triangle: ";
    cin >> a;
 
    for (int y = 1; y <= a; y++)// treugolinik 1 pustoi
    {
        for (int x = 1; x <= a; x++)
        {
            if (x == 1 || y == a || x == y)
                cout << "*";
            else
                cout << " ";
        }
        cout << endl;
    }
    cout << endl;
 
    for (int y = 1; y <= a; y++)// treugolinik 1 zapolnennii
    {
        for (int x = 1; x <= y; x++)
        {
            cout << "*";
        }
        cout << endl;
    }
    cout << endl;
 
    for (int y = 1; y <= a; y++)// treugolinik 2 pustoi
    {
        for (int x = 1; x <= a; x++)
        {
            if (x == a || y == a || y == a - x + 1)
                cout << "*";
            else
                cout << " ";
        }
        cout << endl;
    }
    cout << endl;
 
    for (int y = 1; y <= a; y++)// treugolinik 2 zapolnennii 
    {
        for (int x = 1; x <= a; x++)
        {
            if (y <= a - x)
                cout << " ";
            else
                cout << "*";
        }
        cout << endl;
    }
    cout << endl;
 
    for (int y = 1; y <= a; y++)// treugolinik 3 pustoi
    {
        for (int x = 1; x <= a; x++)
        {
            if (x == 1 || y == 1 || y == a - x + 1)
                cout << "*";
            else
                cout << " ";
        }
        cout << endl;
    }
    cout << endl;
 
    for (int y = 1; y <= a; y++)// treugolinik 3 zapolnennii
    {
        for (int x = 1; x <= a - y + 1; x++)
        {
            cout << "*";
        }
        cout << endl;
    }
    cout << endl;
 
    for (int y = 1; y <= a; y++)// treugolinik 4 pustoi
    {
        for (int x = 1; x <= a; x++)
        {
            if (x == a || y == 1 || x == y)
                cout << "*";
            else
                cout << " ";
        }
        cout << endl;
    }
    cout << endl;
 
    for (int y = 1; y <= a; y++)// treugolinik 4 zapolnennii
    {
        for (int x = 1; x <= a; x++)
        {
            if (x >= y)
                cout << "*";
            else
                cout << " ";
        }
        cout << endl;
    }
}
Oleksiy
0 / 0 / 0
Регистрация: 29.01.2017
Сообщений: 7
06.02.2017, 22:26     Нарисовать треугольник #14
а как сделать такой трехугольник токо с вайлами
х
хх
ххх
хххх
ххххх

Добавлено через 1 минуту
и такое самое но первернутое
De_N
19 / 17 / 2
Регистрация: 15.10.2012
Сообщений: 45
07.02.2017, 09:51     Нарисовать треугольник #15
Если с cstream, то вот.
Для обратной последовательности следует раскомментировать строку 15 (убрав 14-ю).

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
#include <iostream>
using namespace std;
 
int count_line=5;     // количество строк
int i;              // Переменная цикла
 
int main()
{
int i = 0;       // Подсчет линий
 
while (i<=count_line)       // Главный цикл-while
    {
    int ii = 0;                 // Подсчет звоздочек к текущей строке
    while (ii<i)                // Вложенный цикл-while
    //while (ii<count_line-i)   // Для обратной последовательности
        {
        cout << "*";
        ii++;
        }
 
    cout << endl;       // Переход на новую строку
    i++;
    }
 
    return 0;
}
MrGluck
Ворчун
Эксперт CЭксперт С++
 Аватар для MrGluck
6208 / 3453 / 423
Регистрация: 29.11.2010
Сообщений: 9,156
07.02.2017, 12:15     Нарисовать треугольник #16
Цитата Сообщение от Oleksiy Посмотреть сообщение
х
хх
ххх
хххх
ххххх
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
 
int main()
{
    const int N = 7;
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < N; j++)
            std::cout << (i < j ? ' ' : '*');
        std::cout << std::endl;
    }
}
Цитата Сообщение от Oleksiy Посмотреть сообщение
и такое самое но первернутое
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
 
int main()
{
    const int N = 7;
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < N; j++)
            std::cout << (i >= N - j ? ' ' : '*');
        std::cout << std::endl;
    }
}
Oleksiy
0 / 0 / 0
Регистрация: 29.01.2017
Сообщений: 7
07.02.2017, 17:34     Нарисовать треугольник #17
а как вот такой
***
.**
..*

Добавлено через 2 минуты
но без точек

Добавлено через 23 секунды
но без точек
MrGluck
Ворчун
Эксперт CЭксперт С++
 Аватар для MrGluck
6208 / 3453 / 423
Регистрация: 29.11.2010
Сообщений: 9,156
07.02.2017, 17:42     Нарисовать треугольник #18
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
 
int main()
{
    const int N = 7;
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < N; j++)
            std::cout << (i < j ? ' ' : '*');
        std::cout << std::endl;
    }
}
Как бы могли и сами догадаться, тут две буквы местами поменялись
Oleksiy
0 / 0 / 0
Регистрация: 29.01.2017
Сообщений: 7
07.02.2017, 18:28     Нарисовать треугольник #19
с while и cout

Добавлено через 41 секунду
и int
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.02.2017, 18:29     Нарисовать треугольник
Еще ссылки по теме:

Самоучитель С. Прата Нарисовать треугольник C++
C++ Нарисовать треугольник звездочками
Нарисовать треугольник C++
Нарисовать зеркальный треугольник из символов C++
Нарисовать треугольник в консоли C++

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

Или воспользуйтесь поиском по форуму:
MrGluck
Ворчун
Эксперт CЭксперт С++
 Аватар для MrGluck
6208 / 3453 / 423
Регистрация: 29.11.2010
Сообщений: 9,156
07.02.2017, 18:29     Нарисовать треугольник #20
Цитата Сообщение от Oleksiy Посмотреть сообщение
с while и cout
Добавлено через 41 секунду
и int
Делайте сами
Yandex
Объявления
07.02.2017, 18:29     Нарисовать треугольник
Ответ Создать тему
Опции темы

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