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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.68
ARM
Сообщений: n/a
#1

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

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

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

* * * * *
* *
* *
* *
* * * * *
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.03.2013, 18:27     Нарисовать квадрат заданного размера
Посмотрите здесь:

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

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

Графика.Как нарисовать квадрат? - C++
Собственно вопрос в теме...как нарисовать простейий квадрат с помощью линий

Нарисовать звездочками квадрат в квадрате в С++ - C++
Не могу разобраться как циклами for нарисовать звездочками (*) квадрат в квадрате. Что-то такого вида: ********** * ...

Нарисовать квадрат на C++ (желательно для компилятора Dev C++) - C++
Всем привет! Надо нарисовать квадрат размером 20 на 20 пикселей красного цвета с координатами x - 100, y - 200 в окне размером 300 на 500...

Нарисовать в левом углу экрана сплошной квадрат из звездочек - C++
Напишите программу, которая отображает в левом углу экрана сплошной квадрат со звездочек, сторона которого указана целым параметром size....

Выведено изображение, нужно на нем нарисовать по фигуру (квадрат, круг) - C++
Выведено изображение, нужно на нем нарисовать по фигуру (квадрат, круг). размер и положение я должен выбрать.

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gru74ik
Модератор
Эксперт CЭксперт С++
4106 / 1751 / 197
Регистрация: 20.02.2013
Сообщений: 4,856
Записей в блоге: 21
13.08.2014, 11:39     Нарисовать квадрат заданного размера #16
SatanaXIII, чё-то у меня твой код не компилится ((
SatanaXIII
Супер-модератор
Эксперт С++
5602 / 2636 / 242
Регистрация: 01.11.2011
Сообщений: 6,496
Завершенные тесты: 1
13.08.2014, 11:42     Нарисовать квадрат заданного размера #17
gru74ik, мож не винда?
gru74ik
Модератор
Эксперт CЭксперт С++
4106 / 1751 / 197
Регистрация: 20.02.2013
Сообщений: 4,856
Записей в блоге: 21
13.08.2014, 11:45     Нарисовать квадрат заданного размера #18
Цитата Сообщение от SatanaXIII Посмотреть сообщение
gru74ik, мож не винда?
Windows XP, Code::Blocks + MinGW 4.8.1
zss
Модератор
Эксперт С++
6321 / 5905 / 1913
Регистрация: 18.12.2011
Сообщений: 15,186
Завершенные тесты: 1
13.08.2014, 11:46     Нарисовать квадрат заданного размера #19
В VS (у меня VS 2008) нет функции gotoxy()
SatanaXIII
Супер-модератор
Эксперт С++
5602 / 2636 / 242
Регистрация: 01.11.2011
Сообщений: 6,496
Завершенные тесты: 1
13.08.2014, 11:48     Нарисовать квадрат заданного размера #20
Цитата Сообщение от gru74ik Посмотреть сообщение
чё-то у меня твой код не компилится
Обычно в таких случаях наступает короткая перепалка, сводящаяся моралью к тому, что надо текст ошибки хоть приводить, или пространные мысли о происходящем, если это не укладывается в понятие ошибки, иначе беседа плавно перерастет в потусторонне-телепатическую область.
gru74ik
Модератор
Эксперт CЭксперт С++
4106 / 1751 / 197
Регистрация: 20.02.2013
Сообщений: 4,856
Записей в блоге: 21
13.08.2014, 11:50     Нарисовать квадрат заданного размера #21
Цитата Сообщение от zss Посмотреть сообщение
В VS нет функции gotoxy()
В Code::Blocks, видать, тоже нет:
Миниатюры
Нарисовать квадрат заданного размера  
SatanaXIII
Супер-модератор
Эксперт С++
5602 / 2636 / 242
Регистрация: 01.11.2011
Сообщений: 6,496
Завершенные тесты: 1
13.08.2014, 11:52     Нарисовать квадрат заданного размера #22
Цитата Сообщение от 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 );
}
gru74ik
Модератор
Эксперт CЭксперт С++
4106 / 1751 / 197
Регистрация: 20.02.2013
Сообщений: 4,856
Записей в блоге: 21
13.08.2014, 11:59     Нарисовать квадрат заданного размера #23
Цитата Сообщение от 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, прикольно, но поставленной задачи твой код не выполняет )))
DrOffset
7058 / 4199 / 949
Регистрация: 30.01.2014
Сообщений: 6,965
13.08.2014, 21:31     Нарисовать квадрат заданного размера #24
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
SatanaXIII
Супер-модератор
Эксперт С++
5602 / 2636 / 242
Регистрация: 01.11.2011
Сообщений: 6,496
Завершенные тесты: 1
14.08.2014, 12:25     Нарисовать квадрат заданного размера #25
Цитата Сообщение от DrOffset Посмотреть сообщение
чтобы рисовать произвольные фигуры
Звезда давида это произвольная фигура таки?

И вообще, даешь пентакли в консоль!
DrOffset
7058 / 4199 / 949
Регистрация: 30.01.2014
Сообщений: 6,965
14.08.2014, 13:30     Нарисовать квадрат заданного размера #26
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Звезда давида это произвольная фигура таки?
Не понял вопроса. Разве нет?
Цитата Сообщение от SatanaXIII Посмотреть сообщение
И вообще, даешь пентакли в консоль!
Да без проблем. Нужно только функцию генерации точек написать
SatanaXIII
14.08.2014, 13:34
  #27

Не по теме:

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

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.08.2014, 15:31     Нарисовать квадрат заданного размера
Еще ссылки по теме:

определить равен ли квадрат заданного двухзначного числа - C++
определить,равен ли квадрат заданного двухзначного числа (введенного с клавиатуры)кубу суммы цифр этого числа.

Возвести в квадрат все локальные минимумы заданного массива - C++
Дан массив размера N. Возвести в квадрат все его локальные минимумы (т. е. числа, меньшие своих соседей).

Равен ли квадрат заданного числа сумме кубов его цифр - C++
Дано трехзначное целое число. Определить, равен ли квадрат этого числа сумме кубов его цифр

Вывод квадрата из звездочек заданного размера - C++
Напишите программу, которая отображает у левого края экрана сплошной квадрат из звездочек, сторона которого указана целым параметром side.

Дан массив размера N. Возвести в квадрат все его локальные миниму-мы (то есть числа, меньшие своих соседей) - C++
Задачу на массив оформить с помощью лямда выражений. Элементы массива получить с помощью Random. На С++


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

Или воспользуйтесь поиском по форуму:
DrOffset
14.08.2014, 15:31     Нарисовать квадрат заданного размера
  #28

Не по теме:

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

Yandex
Объявления
14.08.2014, 15:31     Нарисовать квадрат заданного размера
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru