Софтуерно Инженерство
Loading...
al_rusev avatar al_rusev 0 Точки

C++ Square Of Stars?

Здравейте,

бях започнал този курс: https://softuni.bg/trainings/1962/programming-basics-with-csharp-may-2018 , Programming Basics with C#. Почти завърших курса и реших да започна да се занимавам и с С++. Потърсих курс за С++ и намерих този: https://softuni.bg/trainings/1726/programming-basics-with-c-plus-plus-september-2017
Въпреки, че беше изтекъл гледах видеотата и започнах да правя задачите.
Всичко беше лесно, докъто не стигнах до Square of stars. Не правя задачите по простия начин (например, вместо да направя триъгълник от 55 звезди пишейки десет линий код с всеки следващ ред принтирайки по една звезда повече, го направих с for loop и string()).

Та, започнах да правя задачата и стигнах до тук: https://pastebin.com/YpURciXa

По някаква причина игнорира първите два if-a и направо отива на последния (if (i == N) ) и принтира безкрайни редове звезди (ако напиша 5 за да е квадрат 5х5, просто принтира "*****" безкрайно).

Би трябвало да работи и не мога да разбера защо?!

Благодаря за помощта предварително!

П.С. Ето улеснена версия на предишния код, просто преместих първия и последния ред на квадрата в един if statement - if (i == 1 || i = N)

Тагове:
0
C++ Fundamentals
MartinPaunov avatar MartinPaunov 77 Точки

Здравей,

Мисля, че отговора се крие във въпроса ти погледни си цикъла 

for (int i = 1; i = N; i++)

Поздрави

0
al_rusev avatar al_rusev 0 Точки

Хмм,
не разбирам. Има грешка в цикъла ли? Не трябва ли да е for (начално число; условие при което цикълът спира; с колко се увеличава началното число)? Ако е така както мисля че е, не би ли следвало да напишем 5, цикълът да започне, на първото завъртане i е 1, така че принтира *****, завърта се втори път, i = 2, така че i > 1 и принтира *   *, продължава така, принтира *   * още 2 пъти, i е равно на 5 и принтира *****.
Поздрави

0
MartinPaunov avatar MartinPaunov 77 Точки

Проблема е точно в условието на цикъла, това което си написал не е булево условие, което да проверява до кога трябва да се изпълнява цикълка. Написал си присвояване на стойност, като този оператор в С++, поставен в накаква булева конструкция или израз винаги, докато може да присвои стойността ще върне резултата от присвояването в този случай повече от 0. Казано иначе, ако въведеш нула цикъла няма да се изпълни нито един път, от друга страна това всеки път присвоява стойността на N на i. Което е друга причина цикъла ти никога да не спре. Просто смени условието в цикъла:

 

for (int i = 1; i <= N; i++)

 

0
al_rusev avatar al_rusev 0 Точки

Мерси, сега разбрах :). Промених го и цикълът работи.

0