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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 52, средняя оценка - 4.92
D_bl_M
 Аватар для D_bl_M
25 / 25 / 1
Регистрация: 25.03.2012
Сообщений: 129
21.10.2012, 17:50     Нарисовать треугольник #1
День добрый!
Учу по книге.
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
25 / 25 / 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
5 / 5 / 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
16 / 14 / 2
Регистрация: 15.10.2012
Сообщений: 33
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
25 / 25 / 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
5 / 5 / 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
4237 / 2770 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 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
25 / 25 / 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
5 / 5 / 0
Регистрация: 21.10.2012
Сообщений: 26
21.10.2012, 18:52     Нарисовать треугольник #11
D_bl_M, ссори, шаблон брала из другой программки, должно быть стандартно
int_main ();

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


Kastaneda,
De_N,
Ryzhikov_A,
И вам ребята огромное спасибо, еще раз утверждаюсь что это самый оперативный форум. Еще вернусь ))) вопросов масса
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.01.2014, 00:48     Нарисовать треугольник
Еще ссылки по теме:

C++ нарисовать треугольник
C++ Нарисовать треугольник звездочками
C++ Нарисовать треугольник в консоли с помощью '*'

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

Или воспользуйтесь поиском по форуму:
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;
    }
}
Yandex
Объявления
16.01.2014, 00:48     Нарисовать треугольник
Ответ Создать тему
Опции темы

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