Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.87/106: Рейтинг темы: голосов - 106, средняя оценка - 4.87
1 / 1 / 0
Регистрация: 20.11.2013
Сообщений: 40
1

Изобразите на экране пирамиду из символов 'X

30.11.2013, 18:00. Показов 20607. Ответов 33
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
При помощи цикла for изобразите на экране пирамиду из символов 'X'. Верхняя часть пирамиды должна выглядеть следующим образом:
х
ххх
ххххх
ххххххх
ххххххххх
Вся пирамида должна быть высотой не 5 линий, как изображено здесь, а 20 линий. Одним из способов ее построения может служить использование двух вложенных циклов, из которых внутренний будет заниматься печатанием символов 'X' и пробелов, а другой осуществлять переход на одну строку вниз.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.11.2013, 18:00
Ответы с готовыми решениями:

Изобразите на экране закрашенную пятиконечную звезду
1. Изобразите на экране закрашенную пятиконечную звезду в центре экрана и заставьте её...

Изобразить на экране пирамиду
Всем привет, задали задачу. Сделать надо через uses crt; Условие задачи: Изобразите на экране...

Циклический алгоритм. Изобразите на экране тараканьи бега
Изобразите на экране тараканьи бега(или авторалли, или конные соревнования, или большие гонки или...

Изобразите на экране движение бильярдного шара после столкновения со стенкой
Изобразите на экране движение шара по бильярду без луз.Используйте правило:угол отражения равен...

33
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
30.11.2013, 18:47 2
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include <string>
 
int main()
{
  for (int i = 1; i <= 20; ++i)
  {
    std::cout << std::string(i, 'X') << std::endl;
  }
  return 0;
}
1
1 / 1 / 0
Регистрация: 20.11.2013
Сообщений: 40
30.11.2013, 19:09  [ТС] 3
Спасибо, можете разъяснить очень подробно строку 8? Почти ничего не понял
0
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
30.11.2013, 19:15 4
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <string>
 
int main()
{
  for (int i = 1; i <= 20; ++i)
  {
    std::string str(i, 'X'); // создаем переменную-строку длинной i все символы которой - X
    std::cout << str << std::endl; // печатаем строку str на экран и затем переходим на новую строку (<< std::endl)
  }
  return 0;
}
1
1 / 1 / 0
Регистрация: 20.11.2013
Сообщений: 40
30.11.2013, 19:32  [ТС] 5
понянто

Добавлено через 4 минуты
нигде не могу найти информацию о стд:: стринг? ссылку не подскажете?
0
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
30.11.2013, 19:44 6
http://yandex.ru/yandsearch?te... ing&lr=213
0
1 / 1 / 1
Регистрация: 23.10.2013
Сообщений: 25
07.07.2014, 16:55 7
Всем привет. Сижу ломаю себе голову над этим примером. Наткнулся на него в книге Р. Лафоре "Объектно ориентированное программирование". Так вот, если делать его так как написано в задании, то у меня возникает вопрос, как его сделать?
В задании написано: "при помощи цикла FOR изобразите пирамиду ......... Одним из способов ее построения может служить использование ДВУХ вложенных циклов, из которых внутренний будет заниматься печатанием символов 'Х' и пробелов, а другой осуществлять переход на одну строку вниз."

Как с одним циклом реализовать понятно, а вот как с двумя???

Подскажите пожалуйста. Это не срочно и не на экзамен, так, для себя. Просто интересно.

Это как я сделал:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <iomanip>
using namespace std;
int main(){
    char ch('X');
    int j=60,l=0;
    for (int i=0;i<20;i++){
            cout<<setw(j/2)<<setfill(' ')<<' '<<setw(l)<<setfill(ch);
        j-=2,l+=2;
        cout<<"\n";
    };
    return 0;
}
0
Эксперт С++
1674 / 1046 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
07.07.2014, 17:12 8
Лучший ответ Сообщение было отмечено SatanaXIII как решение

Решение

Цитата Сообщение от mpol Посмотреть сообщение
а вот как с двумя?
С двумя легче:
C++
1
2
3
4
5
6
7
8
#include <iostream>
int main(){
    for(int i = 1; i <= 20; ++i) {
        for(int j = 0; j < i; ++j)
            cout << 'X';
        cout << '\n';
    }
}
0
0 / 0 / 1
Регистрация: 08.07.2014
Сообщений: 5
08.07.2014, 03:47 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
#include<iostream>
#include<conio.h>
using namespace std;
int main(void)
{
   setlocale(LC_ALL, "rus");
   cout<<"Введите символ:"<<endl;
   char a[20];
   cin>>a;
   cout<<"Введите кол-во строк:"<<endl;
   int b;
   cin>>b;
   cout<<endl;
   for(int i=1; i<=b; i++)
   {
       for(int j=1; j<=i; j++)
       {
           cout<<a;
       }
   cout<<endl;
   }
   getch();
}
Вот моя реализация
0
1 / 1 / 1
Регистрация: 23.10.2013
Сообщений: 25
08.07.2014, 10:19 10
Это все замечательно, но в задании указано, что нужны еще и пробелы во вложенном цикле вместе с Х, которые будут формировать пирамиду, и в нем не указано как она будет располагаться (как она будет выравниваться), по правому краю или по левому. А внешний цикл должен выводить символ перевода строки.
Просто указано как она должна выглядеть, приблизительно так:
х
ххх
ххххх
ххххххх
ххххххххх

Так вот, как указать внешний цикл с переводом строки понятно, а вот что делать с внутренним? Что бы он выводил определенное количество пробелов, затем печатал "Х", затем переходил во внешний цикл, переводил все на новую строку, затем передавал управление внутреннему циклу, который в свою очередь печатал, отсчитывая нужное количество пробелов и символов "Х" и т.д.
0
Эксперт С++
1674 / 1046 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
08.07.2014, 10:31 11
Цитата Сообщение от mpol Посмотреть сообщение
Так вот, как указать внешний цикл с переводом строки понятно, а вот что делать с внутренним? Что бы он выводил определенное количество пробелов, затем печатал "Х",
А кто мешает сначала напечатать сколько надо пробелов одним циклом, а затем сколько надо иксов вторым? Я как-то не могу понять, в чём вообще проблема и что вызывает вопросы?
0
1 / 1 / 1
Регистрация: 23.10.2013
Сообщений: 25
08.07.2014, 15:29 12
Цитата Сообщение от Nick Alte Посмотреть сообщение
А кто мешает сначала напечатать сколько надо пробелов одним циклом, а затем сколько надо иксов вторым? Я как-то не могу понять, в чём вообще проблема и что вызывает вопросы?
Да как бы никто не мешает.

Вопрос только в том, что бы сделать именно так как требуется в задании. А если делать по другому, то вариантов есть много.
Просто хочу разобраться как сделать именно по заданию. Вот и все.
0
Эксперт С++
1674 / 1046 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
08.07.2014, 19:10 13
Цитата Сообщение от mpol Посмотреть сообщение
именно так как требуется в задании
Это тоже просто: вставить во внутренний цикл условие, которое выбирает, печатать пробел или икс в зависимости от текущей позиции. Однако ж выполнять задание, настолько рьяно, с точностью до буквы, придерживаясь довольно-таки туманных сопровождающих рекомендаций, странно.
0
1 / 1 / 1
Регистрация: 23.10.2013
Сообщений: 25
08.07.2014, 23:33 14
Ну почему же странно.
Можно смухлевать и сделать немного по другому. Сделать так что бы пирамида получилась, так как у меня, более простой вариант, а вот сделать именно так как в задании, как по мне более сложно. Во всяком случае для меня. Потому и хочу разобраться. Ведь решить более простым способом не означает что этот способ лучше. Да и задание давалось бы по другому и в нем не указывалось бы, что его нужно решить именно так. Указывалось бы просто, что нужно вывести на экран пирамиду из символов, неважно как вы это решите. А тут конкретное указание, решите так, подумайте.
Как то так. Но это мое мнение, у вас оно может быть другим.
0
272 / 266 / 146
Регистрация: 02.08.2012
Сообщений: 609
09.07.2014, 00:03 15
Я не понял пирамида нужна или треугольник с прямым углом?
Вот пирамида, если тема актуальна:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
 
int main()
{
    int n;
    std::cout << "Type n: "; std::cin >> n;
    for(int i = 0 ; i < n; i++)
    {
        for(int j = n; j >= 0; j--)
        {
            if(j <= i) std::cout << 'X';
            std::cout << ' ';
        }
        std::cout << std::endl;
    }
    
    return 0;
}
2
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
09.07.2014, 01:52 16
mpol,
C++
1
2
3
4
5
6
7
8
9
10
for (std::size_t i = 1; i <= 20; ++i) {
   std::size_t j = 0;
   for ( ; j != 20 - i; ++j) {
      std::cout << ' ';
   }
   for ( ; j != 20; ++j) {
      std::cout << 'X';
   }
   std::cout << std::endl;
}
Добавлено через 2 минуты
ну или так
C++
1
2
3
for (std::size_t i = 1; i <= 20; ++i) {
   std::cout << std::string(20 - i, ' ') << std::string(i, 'X') << std::endl;
}
0
272 / 266 / 146
Регистрация: 02.08.2012
Сообщений: 609
09.07.2014, 02:13 17
gray_fox, но это не пирамида
1
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
09.07.2014, 02:23 18
GuGo1991, а, понял, тогда так:
C++
1
2
3
4
5
6
for (std::size_t i = 0; i != 20; ++i) {
   std::cout << std::string(20 - i - 1, ' ')
             << std::string(i * 2 + 1, 'X')
             << std::string(20 - i - 1, ' ')
             << std::endl;
}
0
1 / 1 / 1
Регистрация: 23.10.2013
Сообщений: 25
09.07.2014, 07:10 19
GuGo1991, большое спасибо.
Ваше решение наиболее соответствует условию. Про IF во 2 цикле я не подумал.
0
Эксперт С++
1674 / 1046 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
09.07.2014, 09:29 20
Цитата Сообщение от mpol Посмотреть сообщение
Ведь решить более простым способом не означает что этот способ лучше.
Не всегда, конечно, но в большинстве случаев как раз означает. Печатать пробелы одним циклом, а кресты вторым и нагляднее, и эффективнее, чем проверять условие для каждого символа. А понятность и выразительность текста программы - приоритет нумер один.
0
09.07.2014, 09:29
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.07.2014, 09:29
Помогаю со студенческими работами здесь

Разработка программы на языке Ассемблер, рисующую на экране пирамиду
Здравствуйте, уважаемые коллеги! Помогите пожалуйста написать программу, рисующую на экране...

Изобразите на экране прямую, вращающуюся в плоскости экрана вокруг одной из своих точек.
вообщем вот такое задание:Изобразите на экране прямую, вращающуюся в плоскости экрана вокруг одной...

Используя метод Canvas, изобразите на экране график функции y=ax2+b, где a≠0. Параметры a,b задаются пользователем
Используя метод Canvas, изобразите на экране график функции y=ax2+b, где a≠0. Параметры a,b...

Вывести пирамиду символов
Вывести пирамиду символов,как показано на рисунке.Глубину пирамиды -число строк,опеределяемых...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru