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

Нарисовать квадрат заданного размера

08.03.2013, 18:27. Показов 10380. Ответов 27
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Напишите программу, которая читает размер стороны квадрата и затем печатает звездочками и пробелами пустой квадрат заданного размера. Ваша программа должна работать для любых размеров, заданных в интервале 1-20. Например, если программа прочла раз¬мер 5, она должна напечатать:

* * * * *
* *
* *
* *
* * * * *
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.03.2013, 18:27
Ответы с готовыми решениями:

Подпрограмма: Построить "квадрат" из знаков '*' заданного размера...
Привет! Не могу додуматься как бы решить. Напишите программу, которая строит "квадрат" из знаков '*' заданного размера....

В матрице из нулей и единиц найти квадрат заданного размера, состоящую целиком из нулей
В матрице A (m, n), которая состоит из нулей и единиц, найти квадрат заданного размера (квадратную подматрицу), состоящую целиком из нулей ...

Нарисовать квадрат с одинокой звёздочкой в центре. Весь квадрат орисовывается плюсиками
Нарисовать квадрат с одинокой звёздочкой в центре. Весь квадрат орисовывается плюсиками. Пользователь задаёт высоту и ширину.С++ Помогите...

27
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
13.08.2014, 11:50
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от zss Посмотреть сообщение
В VS нет функции gotoxy()
В Code::Blocks, видать, тоже нет:
Миниатюры
Нарисовать квадрат заданного размера  
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
13.08.2014, 11:52
Цитата Сообщение от zss Посмотреть сообщение
В VS (у меня VS 2008) нет функции gotoxy()
Hate:
C++
1
2
3
4
5
6
7
8
9
10
#include <windows.h>
//---------------------------------------------------------------------------
void gotoxy_satanic( short x, short y )
{
    HANDLE handle = GetStdHandle( STD_OUTPUT_HANDLE );
    COORD position;
    position.X = x;
    position.Y = y;
    SetConsoleCursorPosition( handle, position );
}
1
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
13.08.2014, 11:59
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Обычно в таких случаях наступает короткая перепалка, сводящаяся моралью к тому, что надо текст ошибки хоть приводить, или пространные мысли о происходящем, если это не укладывается в понятие ошибки, иначе беседа плавно перерастет в потусторонне-телепатическую область.
Ты прав. Извини. Уже исправился.
Чё-то я сплю сегодня на ходу...

Добавлено через 6 минут
Кликните здесь для просмотра всего текста

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
//---------------------------------------------------------------------------
#include <conio.h>
#include <windows.h>
//---------------------------------------------------------------------------
void gotoxy_satanic( short x, short y )
{
    HANDLE handle = GetStdHandle( STD_OUTPUT_HANDLE );
    COORD position;
    position.X = x;
    position.Y = y;
    SetConsoleCursorPosition( handle, position );
}
void stamping( unsigned x, unsigned y, char who )
{
  gotoxy_satanic( x, y );
  putch( who );
}
//---------------------------------------------------------------------------
int main()
{
const unsigned n          = 10,
               borderSize = 3,
               symbolKod  = 42;
unsigned i, ns /*number scroll*/;
 
for( ns=1; ns<n && ns <= borderSize; ns++ )
  {
  for( i=ns;    i<n-ns+2; i++ ) stamping( i,      ns,     symbolKod );
  for( i=ns;    i<n-ns+1; i++ ) stamping( n-ns+1, i+1,    symbolKod );
  for( i=n-ns;  i>=ns;    i-- ) stamping( i,      n-ns+1, symbolKod );
  for( i=n-ns-1;i>=ns;    i-- ) stamping( ns,     i+1,    symbolKod );
  }
 
getch();
return 0;
}
//---------------------------------------------------------------------------

SatanaXIII, прикольно, но поставленной задачи твой код не выполняет )))
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
13.08.2014, 21:31
gru74ik, SatanaXIII, раз уж вы тут выкладываете всякие варианты, давайте и я выложу
Вот вариант с использованием Bresenham's line algorithm для рисования линий.
Кликните здесь для просмотра всего текста
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
#include <cmath>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <iostream>
 
struct Point
{
    int x;
    int y;
};
 
//Bresenham's line algorithm
void line(char * screen, size_t xMax, Point p0, Point p1)
{
    bool steep = std::abs(p1.y - p0.y) > std::abs(p1.x - p0.x);
    if(steep)
    {
        std::swap(p0.x, p0.y);
        std::swap(p1.x, p1.y);
    }
    if(p0.x > p1.x)
    {
        std::swap(p0.x, p1.x);
        std::swap(p0.y, p1.y);
    }
    int dx = p1.x - p0.x;
    int dy = std::abs(p1.y - p0.y);
    int error = dx / 2;
    int ystep = (p0.y < p1.y) ? 1 : -1;
    int y = p0.y;
    for(int x = p0.x; x <= p1.x; ++x)
    {
        screen[steep ? y + x * xMax : x + y * xMax] = '*';
        error -= dy;
        if(error < 0)
        {
            y += ystep;
            error += dx;
        }
    }
}
 
template <size_t (*next)(size_t, size_t), size_t M>
void paintFigure(char (&screen)[M], size_t xMax, Point * points, size_t size)
{
    for(size_t idx = 0; idx < size; ++idx)
    {
        line(screen, xMax, points[idx], points[next(idx, size)]);
    }
    std::fwrite(screen, sizeof(char), M / sizeof(char), stdout);
}
 
size_t nextPoint(size_t idx, size_t limit)
{
    return (idx += 1) >= limit ? idx - limit : idx;
}
 
int main()
{
    enum
    {
        Chars = 20
      , Lines = 20
    };
 
    char screen[(Chars + 1) * Lines];
    std::memset(screen, ' ', sizeof(screen));
 
    for(size_t lines = 0; lines < Lines; ++lines)
    {
        screen[Chars + lines * (Chars + 1)] = '\n';
    }
    Point center = {Chars / 2, Lines / 2};
 
    int side;
    std::cout << "Enter side: ";
    std::cin >> side;
    if(side <= Lines && side <= Chars && side > 0)
    {
        const size_t numPoints = 4;
        const bool a = side % 2 == 0;
        side /= 2;
        Point points[numPoints] =
        {
            {center.x + (side - a), center.y + (side - a)}
           ,{center.x - side, center.y + (side - a)}
           ,{center.x - side, center.y - side}
           ,{center.x + (side - a), center.y - side}
        };
        paintFigure<&nextPoint>(screen, Chars + 1, points, numPoints);
    }
    else
    {
        std::cerr << "Side is not in [1:20]\n";
    }
}

Тест: http://codepad.org/9iihYe3T
Ну конечно это все затевалось не ради несчастного квадрата, а для того, чтобы рисовать произвольные фигуры (поменял только main и функцию шага координат, остальной код тот же):
Кликните здесь для просмотра всего текста
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
size_t nextPoint(size_t idx, size_t limit)
{
    return (idx += 2) >= limit ? idx - limit : idx;
}
 
int main()
{
    enum
    {
        Chars = 20
      , Lines = 20
    };
 
    char screen[(Chars + 1) * Lines];
    std::memset(screen, ' ', sizeof(screen));
 
    for(size_t lines = 0; lines < Lines; ++lines)
    {
        screen[Chars + lines * (Chars + 1)] = '\n';
    }
    Point center = {Chars / 2, Lines / 2};
 
    int side;
    std::cout << "Enter side: ";
    std::cin  >> side;
 
    const double pi = M_PI;
    // углы
    const double alpha = 120 * pi / 180;
    const double beta  = 30  * pi / 180;
    const double radius = side * std::sin(alpha) / std::sin(beta);
 
    const int d = int(radius * 2);
    if(d < Lines && d < Chars && d > 0)
    {
        const size_t numPoints = 6;
        const double angle = 2 * pi / numPoints;
 
        Point points[numPoints];
        for(size_t i = 0; i < numPoints; ++i)
        {
            points[i].x = int(center.x + radius * std::sin(i * angle));
            points[i].y = int(center.y + radius * std::cos(i * angle));
        }
        paintFigure<&nextPoint>(screen, Chars + 1, points, numPoints);
    }
    else
    {
        std::cerr << "Figure size is not in [1:20]\n";
    }
}

Тест: http://codepad.org/JpA0YVDh
1
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
14.08.2014, 12:25
Цитата Сообщение от DrOffset Посмотреть сообщение
чтобы рисовать произвольные фигуры
Звезда давида это произвольная фигура таки?

И вообще, даешь пентакли в консоль!
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
14.08.2014, 13:30
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Звезда давида это произвольная фигура таки?
Не понял вопроса. Разве нет?
Цитата Сообщение от SatanaXIII Посмотреть сообщение
И вообще, даешь пентакли в консоль!
Да без проблем. Нужно только функцию генерации точек написать
0
14.08.2014, 13:34

Не по теме:

Цитата Сообщение от DrOffset Посмотреть сообщение
Разве нет?
Таки ви имеете сказать, чьто из всех произвольных фигур вам совершенно случайно пришла в голову именно звезда давида?

0
14.08.2014, 15:31

Не по теме:

Цитата Сообщение от SatanaXIII Посмотреть сообщение
Таки ви имеете сказать, чьто из всех произвольных фигур вам совершенно случайно пришла в голову именно звезда давида?
Я таки хочу сказать, что звезду Давида я уже рисовал тут по просьбе одного из участников форума, и мне таки лень было переписывать генерацию координат для какой-нибудь другой сложной фигуры. Жаль, что развеял твои мысли о мировом заговоре :)

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.08.2014, 15:31

Узнать, возможно ли пронести холодильник заданного размера через дверной проём указанного размера
Описание: Размеры холодильника A x B x C. Возможно ли его пронести через дверной проем размерами X x Y? Будем считать, что холодильник...

Нарисовать квадрат
Задача Написать программу, которая выводит на экран - следующую фигуру: ************* * * * * * ...

Нарисовать квадрат циклом while
Нужно нарисовать квадрат типа: /* ***** * * * * * * ***** */

Нарисовать квадрат из звездочек
int N; cin &gt;&gt; N; for (int i=0;i&lt;=N;i++) for (int j=0;j&lt;=N;j++) { if...

Нарисовать квадрат звездочками
Нужно сделать цикл for, чтобы он рисовал квадрат звездочкой &quot;*&quot;, должно получиться что-то типа такого ******** ******** * ****** ...


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

Или воспользуйтесь поиском по форуму:
28
Ответ Создать тему
Новые блоги и статьи
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы Всем привет! Хочу поделиться свежим (и довольно. . .
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения: - добавлена многоязычность - добавлено снятие скриншотов - добавлено поддержание бафов хождения по воде (для жреца, дк и шамана) - и так, по. . .
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
anaschu 30.06.2026
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу))) Критические ошибки, мешающие компиляции и. . .
сукцессия 16. Общий обзор, в основном что бы другие ии поняли
anaschu 29.06.2026
# Передаточный документ: модель микоризной сукцессии (для нового чата) Этот документ предназначен для того, чтобы новый чат Claude мог продолжить работу без необходимости заново разбираться в. . .
сукцессия 15 неявная схема
anaschu 29.06.2026
Алиса Калибровка параметров симбиотической модели: технический обзор Содержание: Введение Постановка проблемы Технические аспекты реализации Процесс внедрения изменений
сукцессия 14. Обновленная схема модели
anaschu 28.06.2026
ГЛОБАЛЬНАЯ ОПИСАТЕЛЬНАЯ СПЕЦИФИКАЦИЯ ЭКОСИСТЕМНОЙ МОДЕЛИ «SOIL CHEMISTRY & MYCORRHIZA 2. 0» https:/ / ibb. co/ NnkGpfMd Представленная интегрированная схема описывает непрерывную нелинейную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru