1

Тема: Задача с++

Задача така: потрібно щоб користувач ввів висоту рівнобедреного трикутника, а програма намалювала цей трикутник. Розв'язок ось(знайшла в інтернеті, все працює):

#include <iostream>
using namespace std;
int main()
{
    int h;
    cin >> h;
    for (int i = 0; i<h; i++)
    {
        for (int j = 1; j < h - i; j++)
            cout << ' ';
        for (int j = h - 2*i; j <= h; j++)
            cout << '*';
        cout << endl;
    }
    system("pause");
    return 0;
}


Хтось може пояснити такий код, ламаю голову вже який день :(
Не розумію толком як функціонують два вкладених цикли, які в першому циклі.

Подякували: ostap34PHP1

2

Re: Задача с++

kemey написав:

Задача така: потрібно щоб користувач ввів висоту рівнобедреного трикутника, а програма намалювала цей трикутник. Розв'язок ось(знайшла в інтернеті, все працює):

#include <iostream>
using namespace std;
int main()
{
    int h;
    cin >> h;
    for (int i = 0; i<h; i++)
    {
        for (int j = 1; j < h - i; j++)
            cout << ' ';
        for (int j = h - 2*i; j <= h; j++)
            cout << '*';
        cout << endl;
    }
    system("pause");
    return 0;
}


Хтось може пояснити такий код, ламаю голову вже який день :(
Не розумію толком як функціонують два вкладених цикли, які в першому циклі.

Раджу в IDEшці поставити точку зупинки перед ними і потім пройтися покроково..

Подякували: kemey, leofun012

3 Востаннє редагувалося kemey (17.07.2018 22:40:19)

Re: Задача с++

HetmanNet написав:
kemey написав:

Задача така: потрібно щоб користувач ввів висоту рівнобедреного трикутника, а програма намалювала цей трикутник. Розв'язок ось(знайшла в інтернеті, все працює):

#include <iostream>
using namespace std;
int main()
{
    int h;
    cin >> h;
    for (int i = 0; i<h; i++)
    {
        for (int j = 1; j < h - i; j++)
            cout << ' ';
        for (int j = h - 2*i; j <= h; j++)
            cout << '*';
        cout << endl;
    }
    system("pause");
    return 0;
}


Хтось може пояснити такий код, ламаю голову вже який день :(
Не розумію толком як функціонують два вкладених цикли, які в першому циклі.

Раджу в IDEшці поставити точку зупинки перед ними і потім пройтися покроково..

може я не так пояснила, не можу зрозуміти як програма вимальовує ті символи ,щоб намалювати трикутник,за те відповідають ті вкладені цикли, поясніть хтось!)

4

Re: Задача с++

kemey написав:
HetmanNet написав:
kemey написав:

Задача така: потрібно щоб користувач ввів висоту рівнобедреного трикутника, а програма намалювала цей трикутник. Розв'язок ось(знайшла в інтернеті, все працює):

#include <iostream>
using namespace std;
int main()
{
    int h;
    cin >> h;
    for (int i = 0; i<h; i++)
    {
        for (int j = 1; j < h - i; j++)
            cout << ' ';
        for (int j = h - 2*i; j <= h; j++)
            cout << '*';
        cout << endl;
    }
    system("pause");
    return 0;
}


Хтось може пояснити такий код, ламаю голову вже який день :(
Не розумію толком як функціонують два вкладених цикли, які в першому циклі.

Раджу в IDEшці поставити точку зупинки перед ними і потім пройтися покроково..

може я не так пояснила, не можу зрозуміти як програма вимальовує ті символи ,щоб намалювати трикутник,за те відповідають ті вкладені цикли, поясніть хтось!)

Почнемо з того що перший цикл робить відступами, їх кількість дуже проста: "(ширина_піраміди - 1 )/2  - номер_строки".. строки нумеруються з 0.. тобто на 0 це 10.. на 1 це 9.. і т.д.

Зробивши відступ у строчці першим циклом другий ставить *, кількість визначає по принципу "номер_строки * 2 + 1".. тобто на 0 це 1, на 1 це 3, на 2 це 5.. і т.д.

Після того як завершує ставити * робить перехід на наступну, тобто строчка завершується малюватися після останньої в ній *.

Раджу взяти аркуш у клітинку та уявивши що то екран самій по програмі намалювати вручну.

Подякували: kemey1

5

Re: Задача с++

Або візьміть студію чи ще якийсь ІДЕ з підтримкою покрокового дебагу, і дивіться, шо і як виводиться.

Подякували: kemey, HetmanNet2

6

Re: Задача с++

HetmanNet написав:
kemey написав:
HetmanNet написав:

Раджу в IDEшці поставити точку зупинки перед ними і потім пройтися покроково..

може я не так пояснила, не можу зрозуміти як програма вимальовує ті символи ,щоб намалювати трикутник,за те відповідають ті вкладені цикли, поясніть хтось!)

Почнемо з того що перший цикл робить відступами, їх кількість дуже проста: "(ширина_піраміди - 1 )/2  - номер_строки".. строки нумеруються з 0.. тобто на 0 це 10.. на 1 це 9.. і т.д.

Зробивши відступ у строчці першим циклом другий ставить *, кількість визначає по принципу "номер_строки * 2 + 1".. тобто на 0 це 1, на 1 це 3, на 2 це 5.. і т.д.

Після того як завершує ставити * робить перехід на наступну, тобто строчка завершується малюватися після останньої в ній *.

Раджу взяти аркуш у клітинку та уявивши що то екран самій по програмі намалювати вручну.

дякую, ви виручили!
глянула на код з іншого боку і все зрозуміла