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

Рисование ромба. - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.85
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
11.09.2011, 21:16     Рисование ромба. #1
Приветствую. У Дейтелов есть задания ( глава 5, задание 5.23 - 24 ): 5.23 Напишите программу, которая напечатает показанный ниже ромб. Вы можете использовать операторы вывода, которые печатают или одну звездочку (*), или один пробел. Максимально используйте повторение (с вложенными операторами for) и минимизируйте число операторов вывода.
5.24 Модифицируйте программу, которую вы написали в упражнении 5.23, чтобы она читала нечетное число в пределах от 1 до 19, определяющее число строк в ромбе. Ваша программа должна выводить на экран ромб соответствующего размера.

Написал, все работает, но не нравятся мне мои смещения Может можно как то покрасивее? Сразу оговорюсь что ни массивы ни функции до главы 5 не проходятся, проходятся только управляющие операторы.

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
#include <iostream>
 
int main()
{
    setlocale( LC_ALL, "RUS" );
 
    int size;
 
    std::cout << "Enter the size of rhomb or 0 for exit ( size must be <= 19, >= 1 and be an odd number ): ";
    std::cin >> size;
 
    if ( size == 0 )
        return 0;
 
    while ( size < 1 || size > 19 || !( size % 2 ))
    {
        std::cout << "Size must be <= 19, >= 1 and be an odd number, enter new size or 0 for exit: ";
        std::cin >> size;
 
        if ( size == 0 )
            return 0;
    }
 
    for ( int i = 1; i <= size / 2 + 1; i++ )
    {
        for ( int j = size; j >= 1; j-- )
        {
            if ( j <= i  )
                std::cout << '*';
            else
                std::cout << ' ';
        }
 
        for ( int j = 1; j <= size; j++ )
        {
            if ( j < i )
                std::cout << '*';
                std::cout << ' ';
        }
 
        std::cout << std::endl;
    }
 
    for ( int i =  size / 2 + 1; i <= size; i++ )
    {
        for ( int j = 1; j <= size; j++ )
        {
            if ( j > i )
                std::cout << '*';
            else
                std::cout << ' ';
        }
 
        for ( int j = size; j >= 1; j-- )
        {
            if ( j > i + 1 )
                std::cout << '*';
            else
                std::cout << ' ';
        }
 
        std::cout << std::endl;
    }
 
    std::cout << '\a' << std::endl;
    system( "pause" );
    return 0;
}
Спасибо.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Sokolov
 Аватар для Sokolov
42 / 42 / 3
Регистрация: 04.01.2011
Сообщений: 125
11.09.2011, 23:43     Рисование ромба. #2
Вот, что получилось у меня:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<iostream>
using namespace std;
int main()
{setlocale(LC_ALL,"Russian");
int i,j,n=0,N;
cout<<"Введите N:";
cin>>N;
for(j=0;n<N;n++,n<N/2+1?j++:j--)
{   for(i=0;i<N/2+j+1;i++)
        if(i<N/2-j)
            cout<<" ";
        else 
            cout<<"*";
    cout<<"\n";
}
return 0;
}
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
12.09.2011, 01:00  [ТС]     Рисование ромба. #3
Как же коротко получилось. Спасибо, буду разбираться
-=ЮрА=-
Заблокирован
Автор FAQ
12.09.2011, 09:22     Рисование ромба. #4
Цитата Сообщение от Toshkarik Посмотреть сообщение
Напишите программу, которая напечатает показанный ниже ромб.
- вот ещё как вариант Ромб. Что не так написал?
МаксимМВ
C/C++
90 / 90 / 5
Регистрация: 01.07.2010
Сообщений: 281
12.09.2011, 10:17     Рисование ромба. #5
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
#include <stdlib.h>
 
int main(int argc, char *argv[])
{
    int N, i, j;
    printf("Enter N: ");
    scanf("%d", &N);
    printf("N=%d\n", N);
    for (i=0; i<N+1; i++)
    {
        for (j=0; j<N+1; j++)
            if (j>=N/2-(i<N/2?i:N/2-(i-N/2)) && j<=N/2+(i<N/2?i:N/2-(i-N/2)))
                putchar('*');
            else
                putchar(' ');
        putchar('\n');
    }
    return 0;
}
Yandex
Объявления
12.09.2011, 10:17     Рисование ромба.
Ответ Создать тему
Опции темы

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