рисуя простой треугольник с циклом while - PullRequest
1 голос
/ 20 сентября 2010

Обратное обучение после глупых жизненных проблем сошло с ума! Я решил сменить учебный материал, и теперь я работаю через Accelerated C ++.

Глава 2, Упражнение 5:
Напишите набор символов «*», чтобы они образовывали квадрат, прямоугольник и треугольник.

Я пытался, но точно не смог опустить треугольник. Быстрый гугл нашел следующий ответ:

// draw triangle
    int row = 0;
    int col = 0;
    int height = 5;

// draw rows above base
    while (row < height - 1)
    {
        col = 0;
        while (col < height + row)
        {
            ++col;
            if (col == height - row)
                cout << '*';
            else
            {
                if (col == height + row)
                    cout << '*';
                else
                    cout << ' ';
            }
        }
        cout << endl;
        ++row;
    }

// draw the base
    col = 0;

    while (col < height * 2 - 1)
    {
        cout << '*';
        ++col;
    }

Я хотел разобраться в этом и полностью понять это, так как мне было трудно придумать собственный ответ. Не имеет значения, сколько раз я прохожу это, я не могу видеть, как это рисует правую сторону треугольника:

- - - - *
- - - *
- - *
- *
*
* * * * * * * * * * 

Это то, что я прошёл через эту петлю на бумаге. Откуда же эта правая сторона? У меня есть чувство, что выражения делают то, чего я не вижу. Код работает.

Ответы [ 2 ]

3 голосов
/ 20 сентября 2010

Во вложенном цикле while внутри предложения else:

else
{
    if (col == height + row)
        cout << '*';  // This draws the right side
    else
        cout << ' ';
}

Хитрость заключается в том, что цикл while не завершается, пока столбец не достигнет height + row, что соответствует позиции правой стороны.,Он печатает левую сторону (на height - row) ранее, в предложении if, которое стоит перед этим.

1 голос
/ 22 февраля 2011

Я являюсь автором решения упражнения, которое ОП показало выше.Я прошу прощения за путаницу;Я сделаю заметку, чтобы вернуться и добавить некоторые комментарии к решениям, которые находятся на http://www.parkscomputing.com/accelerated-cpp-solutions/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...