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

ромб - C++

Восстановить пароль Регистрация
 
Ann Joker
 Аватар для Ann Joker
3 / 3 / 1
Регистрация: 05.10.2011
Сообщений: 86
11.10.2011, 19:52     ромб #1
Вводится n-число линий. Нужно вывести ромб такого вида (n=7):
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
#include <iostream>
using namespace std;
int main () {
 
    int z = 1, s, n, c = 0,q;
 
    cin >> n;
        n;
        s=n-1;
        while (n > 0) {//для верхнего треугольника
 
            for (int i = 0; i < s; i++)
                cout << " ";
 
            for (int j = 0; j < z; j++)
                cout << "*";
 
            cout << endl;
 
            z+=2;
            s--;
            n--;
        }
        q=n-1;
        s=1;
        z=n;
        while (q>0){//для нижнего треугольника
            for (int w=0;w<s;w++ )
                cout<<" ";
            for (int e=0;e<z;e++)
                cout<<"*";
 
            cout<<endl;
            z-=2;
            s++;
            q--;
            }
return 0;
}
Изображения
 
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.10.2011, 19:52     ромб
Посмотрите здесь:

C++ Ромб. Что не так написал?
Изобразить ромб C++
Квадрат,круг,стрелка,ромб C++
C++ Циклом for напечатать ромб
Ромб в С++ с диагональю C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
aeshes
 Аватар для aeshes
437 / 200 / 13
Регистрация: 07.10.2011
Сообщений: 462
11.10.2011, 19: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
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <iostream>
using namespace std;
int main () {
 
        int z = 1, s, n, c = 0,q,n1;
 
        cin >> n;
                n1=n;
                s=n-1;
 
                while (n > 0) {//для верхнего треугольника
 
                        for (int i = 0; i < s; i++)
                                cout << " ";
 
                        for (int j = 0; j < z; j++)
                                cout << "*";
 
                        cout << endl;
 
                        z+=2;
                        s--;
                        n--;
                }
                q=n1-1;
                z=2*n1-3;
                s=1;
 
                while (q>0){//для нижнего треугольника
                        for (int w=0;w<s;w++ )
                                cout<<" ";
                        for (int e=0;e<z;e++)
                                cout<<"*";
 
                        cout<<endl;
                        z-=2;
                        s++;
                        q--;
                        }
return 0;
}
Ann Joker
 Аватар для Ann Joker
3 / 3 / 1
Регистрация: 05.10.2011
Сообщений: 86
11.10.2011, 20:03  [ТС]     ромб #3
да! классно, спасибо
а какая основная ошибка была?
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,585
Записей в блоге: 12
11.10.2011, 20:19     ромб #4
ну может z=2*n1-3;
а в проинципе я считаю что ошибки бывают тока синтаксические или по большой невнимательности(всякие пустышки)
aeshes
 Аватар для aeshes
437 / 200 / 13
Регистрация: 07.10.2011
Сообщений: 462
11.10.2011, 20:22     ромб #5
Ann Joker, ты в первом цикле изменяла n (уменьшала операцией n--), и поэтому перед вторым циклом q и z были нули, и второй цикл не запускался - ничего не рисовалось
Для этого завела n1, чтобы записать в нее n до всех изменений
Ну и z=2n-3 перед вторым циклом, как сказал Van111
Ann Joker
 Аватар для Ann Joker
3 / 3 / 1
Регистрация: 05.10.2011
Сообщений: 86
11.10.2011, 20:50  [ТС]     ромб #6
Цитата Сообщение от aeshes Посмотреть сообщение
ты в первом цикле изменяла n (уменьшала операцией n--), и поэтому перед вторым циклом q и z были нули, и второй цикл не запускался - ничего не рисовалось
точно! всегда так, еще думаю, почему не рисует вторую половину.. можно было сразу q=n-1 написать вначале. спасибо большое
Напильнег
480 / 120 / 10
Регистрация: 30.09.2010
Сообщений: 473
11.10.2011, 20:50     ромб #7
Цитата Сообщение от Ann Joker Посмотреть сообщение
а какая основная ошибка была?
Между креслом и клавиатурой

В первом цикле ты сгоняешь введенное значение n до нуля, а потом используешь это измененное значение для инициализации вспомогательных переменных второго цикла. А значение n изменилось с момента ввода! Van111 в своем варианте просто сохраняет исходное значение n в n1, а затем, во втором цикле, использует его.

А вот более симпатичный вариант от меня:
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
#include <iostream>
 
using namespace std;
 
int main () 
{
        int z, s, n;
 
        cin >> n;
 
        s=n-1;
        z=1;
 
        while (s > 0) {//для верхнего треугольника
 
                for (int i = 0; i < s; i++)
                        cout << " ";
 
                for (int j = 0; j < z; j++)
                        cout << "*";
 
                cout << endl;
 
                s--;
                z+=2;
        }
        
        while (s < n){//для нижнего треугольника
 
                for (int w = 0; w < s; w++ )
                        cout << " ";
               
                for (int e = 0; e < z; e++)
                        cout<<"*";
 
                cout << endl;
 
                s++;
                z-=2;
        }
        
        return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.10.2011, 21:52     ромб
Еще ссылки по теме:

Перегрузить операторы для класса Ромб. C++
Попадание точки в ромб C++
Написать функцию, выводящую на экран ромб с высотой N C++

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

Или воспользуйтесь поиском по форуму:
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,585
Записей в блоге: 12
11.10.2011, 21:52     ромб #8
извиняюсь за засорение поста этим сообщением просто оно случйно было послано два раза(проблема с нетом) и прошу админов его удалить
Yandex
Объявления
11.10.2011, 21:52     ромб
Ответ Создать тему
Опции темы

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