#include #include // kvůli počítání mocniny using namespace std; //Jan Drašnar int main() { //Deklarace int a = 0;// Promenna pro vstup int i = 0;// Druha povolena promenna / promenna for cyklu //Vstup cout << "Vloz cislo a program vypise trojuhelnikovy patern.\nVloz prirozene cislo: "; cin >> a; //Vystup for (i = 1; i < ((((a * a) - a) / 2) + a + 1); i++)// od 1 do poctu znaku v trojuhelniku + 1 { cout << "#";//Znnak # se vypíše pokaždé /* Pokud si očísujeme znaky v trojúhelníku dostaneme patern: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 Na konci řádků máme číslice 1,3,6,10,15,21... Řádek Ř1 1 = 1 Ř2 3 = 1 + 2 Ř3 6 = 1 + 2 + 3 Ř4 10 = 1 + 2 + 3 + 4 Ř5 15 = 1 + 2 + 3 + 4 + 5 Ř6 21 = 1 + 2 + 3 + 4 + 5 + 6 ... Z čísla řádku se dá spočítat poslední číslo pomocí rovnice: n * (n + 1) // 2 Bohužel nemáme další proměnnou na číslování řádků. Pomocí chatbota jsem vygeneroval funkci se kterou z posledního čísla získáme číslo řádku (o kolikátý řádek se jedná). Což je k ničemu, protože s takovou informací pak už zase pracovat nejde, protože nemáme další proměnné. Do vygenerované funkce (2 * n + 0.25)^0.5 - 0.5 dosadíme za n poslední číslo v řádku a funkce vrátí přirozené číslo reprezentující číslo řádku. ALE pokud se do funkce vloží jiné číslo než které připadá na konec řádku, pak funkce vypíše desetinné číslo. Pokud (IF) z funkce vypadne celé číslo, pak jsme na konci řádku a musíme odřádkovat. Převedením výsledku funkce na integer se jen odříznou desetinná místa. (Argument podmínky) Porovnáme přímo hodnotu z funkce s hodnotou převedenou do formátu integer a když se budou rovnat, pak je výstup z funkce celé číslo. Budeme tisknout znaky forcyklem a když jsme na konci čádku, tak odřádkujeme. */ if (int(pow(2 * i + 0.25, 0.5) - 0.5) == (pow(2 * i + 0.25, 0.5) - 0.5)) { cout << "\n"; } } }