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

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

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

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

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

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

Циклический алгоритм. Изобразите на экране тараканьи бега
Изобразите на экране тараканьи бега(или авторалли, или конные соревнования, или большие гонки или что-нибудь, подобное). Соревнующихся...

33
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
30.11.2013, 18:47
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  [ТС]
Спасибо, можете разъяснить очень подробно строку 8? Почти ничего не понял
0
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
30.11.2013, 19:15
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  [ТС]
понянто

Добавлено через 4 минуты
нигде не могу найти информацию о стд:: стринг? ссылку не подскажете?
0
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
30.11.2013, 19:44
http://yandex.ru/yandsearch?te... ing&lr=213
0
1 / 1 / 1
Регистрация: 23.10.2013
Сообщений: 25
07.07.2014, 16:55
Всем привет. Сижу ломаю себе голову над этим примером. Наткнулся на него в книге Р. Лафоре "Объектно ориентированное программирование". Так вот, если делать его так как написано в задании, то у меня возникает вопрос, как его сделать?
В задании написано: "при помощи цикла 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
Эксперт С++
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
07.07.2014, 17:12
Лучший ответ Сообщение было отмечено 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
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
Это все замечательно, но в задании указано, что нужны еще и пробелы во вложенном цикле вместе с Х, которые будут формировать пирамиду, и в нем не указано как она будет располагаться (как она будет выравниваться), по правому краю или по левому. А внешний цикл должен выводить символ перевода строки.
Просто указано как она должна выглядеть, приблизительно так:
х
ххх
ххххх
ххххххх
ххххххххх

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

Вопрос только в том, что бы сделать именно так как требуется в задании. А если делать по другому, то вариантов есть много.
Просто хочу разобраться как сделать именно по заданию. Вот и все.
0
Эксперт С++
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
08.07.2014, 19:10
Цитата Сообщение от mpol Посмотреть сообщение
именно так как требуется в задании
Это тоже просто: вставить во внутренний цикл условие, которое выбирает, печатать пробел или икс в зависимости от текущей позиции. Однако ж выполнять задание, настолько рьяно, с точностью до буквы, придерживаясь довольно-таки туманных сопровождающих рекомендаций, странно.
0
1 / 1 / 1
Регистрация: 23.10.2013
Сообщений: 25
08.07.2014, 23:33
Ну почему же странно.
Можно смухлевать и сделать немного по другому. Сделать так что бы пирамида получилась, так как у меня, более простой вариант, а вот сделать именно так как в задании, как по мне более сложно. Во всяком случае для меня. Потому и хочу разобраться. Ведь решить более простым способом не означает что этот способ лучше. Да и задание давалось бы по другому и в нем не указывалось бы, что его нужно решить именно так. Указывалось бы просто, что нужно вывести на экран пирамиду из символов, неважно как вы это решите. А тут конкретное указание, решите так, подумайте.
Как то так. Но это мое мнение, у вас оно может быть другим.
0
272 / 266 / 146
Регистрация: 02.08.2012
Сообщений: 609
09.07.2014, 00:03
Я не понял пирамида нужна или треугольник с прямым углом?
Вот пирамида, если тема актуальна:
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!
 Аватар для gray_fox
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
09.07.2014, 01:52
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
gray_fox, но это не пирамида
1
What a waste!
 Аватар для gray_fox
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
09.07.2014, 02:23
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
GuGo1991, большое спасибо.
Ваше решение наиболее соответствует условию. Про IF во 2 цикле я не подумал.
0
Эксперт С++
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
09.07.2014, 09:29
Цитата Сообщение от mpol Посмотреть сообщение
Ведь решить более простым способом не означает что этот способ лучше.
Не всегда, конечно, но в большинстве случаев как раз означает. Печатать пробелы одним циклом, а кресты вторым и нагляднее, и эффективнее, чем проверять условие для каждого символа. А понятность и выразительность текста программы - приоритет нумер один.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.07.2014, 09:29
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru