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

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

Восстановить пароль Регистрация
 
Gonzovision
0 / 0 / 0
Регистрация: 11.07.2015
Сообщений: 1
12.07.2015, 19:07     Нарисовать звездочками квадрат в квадрате в С++ #1
Не могу разобраться как циклами for нарисовать звездочками (*) квадрат в квадрате.
Что-то такого вида:

**********
* *
* ******* *
* * * *
* * * *
* * * *
* * * *
* ******* *
* *
**********

Ну в общем чтоб один внутри другого был, но что-то у меня никак...
заранее спасибо и всем добра!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Геомеханик
 Аватар для Геомеханик
517 / 324 / 253
Регистрация: 26.06.2015
Сообщений: 738
12.07.2015, 20:59     Нарисовать звездочками квадрат в квадрате в С++ #2
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>
 
void out_square(std::ostream& _o, int num, int cnt){
    bool chk;
    int  len = num - 1;
    for(int i = 0; i < num; ++i){
        chk = (i < cnt || i > len-cnt);
        for(int j = 0; j < num; ++j){
            if((j < cnt) || (j > len-cnt) || chk)
                _o << '*';
            else
                _o << ' ';
        }
        _o << std::endl;
    }
    _o.flush();
}
 
 
int main(void){
    out_square(std::cout, 12, 2);
    return 0;
}
Результат работы кода
Gelo123321
 Аватар для Gelo123321
21 / 21 / 4
Регистрация: 05.01.2012
Сообщений: 279
Завершенные тесты: 1
12.07.2015, 21:44     Нарисовать звездочками квадрат в квадрате в С++ #3
Gonzovision, примитивный вариант:
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
// Рисование квадрата символами в консоли. ------------------------------------
#include <iostream>
#include <conio.h>
 
using namespace std;
 
int main()
{
    char rects[6][6] = { { '*', '*', '*', '*', '*', '*' },
                         { '*', ' ', ' ', ' ', ' ', '*' },
                         { '*', ' ', '*', '*', ' ', '*' },
                         { '*', ' ', '*', '*', ' ', '*' },
                         { '*', ' ', ' ', ' ', ' ', '*' },
                         { '*', '*', '*', '*', '*', '*' } };
    // Рисуем фигуры в окне консоли. ------------------------------------------
    for (int i = 0; i < 6; ++ i) {
        for (int j = 0; j < 6; ++j) {
            cout << rects[j][i] << ' ';
        }
        cout << '\n';
    }
 
    _getch();
    return 0;
}
Добавлено через 43 минуты
Вариант получше:
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
// Рисование квадрата символами в консоли. ------------------------------------
#include <iostream>
#include <conio.h>
 
using namespace std;
// Фукция, которая рисует квадраты на окне консоли. ---------------------------
// PEN - символ, которым будут нарисованы квадраты. ---------------------------
// SIZE_RECT1 - размер внешнего квадрата. -------------------------------------
// SIZE_RECT2 - размер внутреннего квадрата относительно сторон внешнего. -----
// Например, если SIZE_RECT1 = 10, а SIZE_RECT2 = 2, то: размер внешнего = 10,
// размер внутреннего = 10 - 2 * 2 = 6. ---------------------------------------
void draw(char PEN, int SIZE_RECT1, int SIZE_RECT2) 
{
    for (int i = 0; i < SIZE_RECT1; ++i) {
        for (int j = 0; j < SIZE_RECT1; ++j) {
                // Рисованые внешнего квадрата. -------------------------------
            if ((i == 0) || (i == SIZE_RECT1 - 1) ||
                (j == 0) || (j == SIZE_RECT1 - 1) ||
                // Рисование внутреннего квадрата. ----------------------------
                ((i == SIZE_RECT2) && 
                    (j >= SIZE_RECT2 && j <= SIZE_RECT1 - SIZE_RECT2 - 1)) ||
                ((i == SIZE_RECT1 - SIZE_RECT2 - 1) &&
                    (j >= SIZE_RECT2 && j <= SIZE_RECT1 - SIZE_RECT2 - 1)) ||
                ((j == SIZE_RECT2) &&
                    (i >= SIZE_RECT2 && i <= SIZE_RECT1 - SIZE_RECT2 - 1)) ||
                ((j == SIZE_RECT1 - SIZE_RECT2 - 1) && 
                    (i >= SIZE_RECT2 && i <= SIZE_RECT1 - SIZE_RECT2 - 1))) 
                cout << PEN;
            else cout << ' ';
        }
        cout << '\n';
    }
}
 
int main()
{
    draw('*', 12, 4);
 
    _getch();
    return 0;
}

Не по теме:

Однако мне кажеться, что куча исключений и проверок в if'е - издевательсво. Есть у кого идеи, как улучшить это?

Vlad_Evka
42 / 1 / 0
Регистрация: 12.07.2015
Сообщений: 8
12.07.2015, 23:04     Нарисовать звездочками квадрат в квадрате в С++ #4
Gelo123321,

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
void draw(const int size) {
    if(size <= 0) return;
 
    if(size < 5) {
        for(int i=0; i < size; ++i) {
            for(int j=0; j < size; ++j) {
                std::cout << "*";
            }
            std::cout << std::endl;
        }
        return;
    }
 
 
    for(int i=0; i < size; ++i) {
        for(int j=0; j < size; ++j) {
            if(i == 0 || i == 1) {
                std::cout << "*";
                continue;
            }
 
            if(i == size-1 || i == size-2) {
                std::cout << "*";
                continue;
            }
 
            if(j == 0 || j == 1) {
                std::cout << "*";
                continue;
            }
 
            if(j == size-1 || j == size-2) {
                std::cout << "*";
                continue;
            }
 
            std::cout << "5";
        }
        std::cout << std::endl;
    }
 
}
Добавлено через 1 минуту
Нормальное издевательство Главное чтобы читалось
Yandex
Объявления
12.07.2015, 23:04     Нарисовать звездочками квадрат в квадрате в С++
Ответ Создать тему
Опции темы

Текущее время: 10:30. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru