🟡 Մարիոյի աշտարակ

Դե ինչ, փոքրիկ վարժությունները հաջողությամբ լուծելուց հետո այժմ ժամանակն է գրել լիակատար ծրագիր։ Երևի թե բոլորդ էլ կհիշեք, Նիթենդո ընկերության հայտնի «Մարիո» խաղը։ Այդ խաղում Մարիոն հաճախ պետք է բարձրանար աշտարակի վրա։

pyramid.png

Եկե՛ք փորձենք կառուցել այս աշտարակը գրելով ծրագիր C++ լեզվով։
Մեր աշտարակը կունենա տեքստային ներկայացում, որտեղ աշտարակի ամեն աղյուսը կներկայացնենք # սիմվոլով։

Screen Shot 2022-10-22 at 16.53.35.png

Նախագծենք ծրագիրը այնպես, որ այն թույլ տա օգտագործողին ներմուծել աշտարակի բարձրությունը (այն իրենից ներկայացնում է ամբողջ տիպի դրական թիվ)։
Այսպիսով, եթե օգտագործողը ներմուծել է 4, ծրագիրը էկրանին կտպի հետևյալ պատկերը (նկատեք, որ ծրագիրը նախ էկրանին տպում է Height: տողը, որից հետո սպասում է, որպեսզի օգտագործողը ներմուծի աշտարակի բարձրությունը)։

Screen Shot 2022-10-22 at 16.58.13.png

Եթե օգտագործողը ներմուծի 2, կունենանք այսպիսի պատկեր՝

Screen Shot 2022-10-22 at 16.58.24.png

Եթե օգտագործողը ներմուծի 1, կունենանք այսպիսի պատկեր՝

Screen Shot 2022-10-22 at 16.58.32.png

Եթե օգտագործողի ներմուծած թիվը չի պատկանում [1, 8] միջակայքին, ապա ծրագիրը պետք է նորից խնդրի օգտագործողին ներմուծել թիվ, այնքան ժամանակ, քանի դեռ օգտագործողը չի ներմուծել վալիդ ([1, 8] միջակայքին պատկանող) թիվ։

Այս օրինակում օգտագործողը ներմուծել է -1, և ծրագիրը նրան առաջարկում է նորից ներմուծել թիվ։ Հաջորդ անգամ օգտագործողը ներմուծել է 0, և ծրագիրը նրան կրկին առաջարկում է ներմուծել նոր թիվ։ Այս պրոցեսը շարունակվում է այնքան ժամանակ քանի դեռ օգտագործողը չի ներմուծել ճիշտ թիվ։

Screen Shot 2022-10-22 at 17.07.23.png

Հուշում 1

Ծրագիրը կարելի է բաժանել երկու տրամաբանական մասերի։ Նախ և առաջ պետք է գրել կոդ, որը կմշակի օգտագործողի մուտքագրած տվյալները։ Եթե օգտագործողի ներմուծած թիվը չի պատկանում [1, 8] միջակայքին, ապա ծրագիրը պետք է նորից խնդրի օգտագործողին ներմուծել թիվ այնքան ժամանակ, քանի դեռ օգտագործողը չի ներմուծել վալիդ թիվ։

🚩 Հուշում 1.1

Փորձե՛ք գրել կոդի այս հատվածը օգտագործելով do-while ցիկլի օպերատորը՝

  1. Տպել Height: տողը

  2. Սպասել օգտագործողի մուտքագրած թվին

  3. Կրկնել 1-2 քայլերը քանի դեռ օգտագործողը չի ներմուծել [1, 8] միջակայքին պատկանող թիվ։

Հուշում 2

Աշտարակը տպելու համար անհրաժեշտ է օգտագործել ներդրված ցիկլեր։

Հուշում 3

Փորձե՛ք տպել աշտարակի ավելի պարզ (ձախից հավասարեցված) տարբերակը։

Screen Shot 2022-10-22 at 18.02.38.png

Նկատե՛ք, որ առաջին տողը պարունակում է 1 հատ #։ Երկրորդ տողը՝ 2 հատ #, երրորդ տողը` 3 և այդպես շարունակ։ Ընդհանուր դեպքում i-երրորդ տողը պարունակում է i հատ #։

🚩Հուշում 3.1
for (int i = 1; i <= height; i++) {
   // Այստեղ պետք է լինի ցիկլ, որը կտպի i հատ #
}
Հուշում 4

Այժմ փորձե՛ք հավասարացնել աշտարակը դեպի աջ։

Screen Shot 2022-10-22 at 18.08.36.png

Այս օրինակում աշտարակի բարձրությունը հավասար է 8։ Նկատենք, որ առաջին տողը պարունակում է 7 հատ . և 1 հատ Երկրորդ տողը պարունակում է 6 հատ . և 2 հատ #։ Երրորդ տողը պարունակում է 5 հատ . և 3 հատ Ընդհանուր դեպքում i-րդ տողը պարունակում է (n-i) հատ . և i- հատ #, որտեղ n-ը աշտարակի բարձրություն է։

🚩 Հուշում 5

Աշտարակի i-երորդ տողը պարունակում է (n-i) հատ բացատ և i հատ #։

Constraints

Time limit: 0.2 seconds

Memory limit: 512 MB

Output limit: 1 MB

To check your solution you need to sign in
Sign in to continue