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

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

08.03.2013, 18:27. Показов 10094. Ответов 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
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
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
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
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
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru