Софтуерно Инженерство
Loading...
+ Нов въпрос
niknedkov avatar niknedkov 1 Точки

[Homework] Square of Stars и for-цикли

Здравейте,

къде мога да намеря информация за значението на отделните части в скобите на цикъл for,

и как мога да обвържа цикъла с определен символ, например изписване на * или празен интервал " "?

От самостоятелно ровене в интернет намерих това:

for (initializer; condition; iterator) 
от тук:

https://msdn.microsoft.com/en-us/library/ch45axte.aspx

... но не мога да разбера какво прави всяко от тях на практика.

 

В задачата за първото домашно пише:

"var n = int.Parse(Console.ReadLine());

1.       Допишете програмата по-горе, за да отпечатва квадрат, съставен от звездички. Може да се наложи да използвате for-цикли. Потърсете информация в Интернет."

Не искам готово решение, а искам да разбера как работи цикъла.

1
Programming Basics 12/06/2016 17:49:52
Losko avatar Losko 69 Точки

Здравей. Мога да го обясня, но едва ли ще е на нивото на лекторите. В youtube станицата на университета можеш да намериш тонове с лекций в които се бяснява. Накратко в началото задаваш някакъв брояч в общия случай "int" след което задаваш условие което цикъла проверява на всяка итерация. Като на пример дали стойноста която придаваш на този "int" е по-голяма, рана или по-малка от някъква стойност ( обикновенно тази стойност е толкова голяма колкото пъти искаш цикъла да се завърти ) а в последната част "Итератор" задаваш с колко искаш да увеличиш началната стойност на "инт"-а .... Едва ли го обясних правилно, но на пример.
for (int i = 0; i < 10; i++)
        {
            Console.WriteLine(i);
        }
Този цикул започва от "0" което се явява "инициализацията" втората част проверява дали i e по-малко от 10 ако е вярно ( в случая е така ) тогава условието е вярно и цикъла изпълнява командтата която е зададена в  { ... } ( мисля, че се наричат фигурни скоби ), след което овеличава "i" със 1 ( i++ овеличава стойноста на "i" с 1) след което проверява пак. печати 2 .... и така до 10.
Но аз лично те съветвам първо да решиш 7-ма задача. Аз след като я реших 8-ма ми беше елементарна.
Дано съм бил от полза.

1
Woofles avatar Woofles 7 Точки
for (initializer; condition; iterator) 

В първото поле освен инициализация имаме и декларация в нашият случай:
   Инициализацията е създаването на променлива от тип int с наименование примерно Promenliva, за нея автоматично се заделя място в паметта.  
   Декларацията е задаването на начална стойност тъй като понякога една нова променлива може да е "празна" или нула да не ни върши работа.

Второто поле е условието за изпълнение на блока във for-цикълът.

Третото мисля че не е точно задължително  - то се извършва в края на всяко преминаване през for-цикълът и в този смисъл може да се постави там или ако в самият цикъл имаш изрази които променят стойността на променливата може дори да се изпусне, стига да си наясно как ще протича всичко.

За по-ясно можеш да четеш от книгата Въведение в програмирането. 99% от съдържанието е на Български и покрива целият материал от въвеждащият курс.

2
Losko avatar Losko 69 Точки

https://www.youtube.com/channel/UCPlL0QmMNVtubUKO2SqU4zQ
Мисля, че ще е полезно на всеки който не зане за него.

1
ragingbull avatar ragingbull 5 Точки

Здравей,

Можеш да погледнеш тази статия в Stackoverflow, имаше една уеб страница, в която бяха обяснени много добре, ще се опитам да я потърся и ако имаш късмет ще ти я пратя и нея :)

Поздрави!

Ragingbull

1
MihailTsvetogorov avatar MihailTsvetogorov 3 Точки

Здравей,

За for цикъла- initialiser означава в началото още да декларираш някаква допълнителна променлива (в случая равна на 1); condition- това казва на програмата кога да спре с цикъла-тоест да кажем казваш "for (int i=1;i<=N;i++)"-напрактика казваш на програмата "въведи променливата i, която е равна на 1 и работи докато i е по-малко от N (числото което въвеждаш в програмата) и при всяко завъртане на цикъла увеличавай i с 1"; iterator- на прост език "модификатор"- това е как променяш дадена променлива (в случая променяме допълнителната). За изписването на символи- използваш string-ове (слагаш дадения символ в къвички).
За задачата- трябва да търсиш някаква зависимост между редовете и броя на звездичките на всеки ред (директно ти казвам-ако редовете са N, то звездчките на всеки ред пак са N), трябва да имаш вложени цикили (цикъл в цикъла). Другото за празните места ти го оставям сам да го разбереш :) . Ако имаш нужда от още помощ пиши като коментар :) .
Поздрави!

2
12/06/2016 18:29:05
MihailTsvetogorov avatar MihailTsvetogorov 3 Точки

Ragingbull извинявай- не исках да е отговор на твоя коментар, а на постa :D :D :D 

0
12/06/2016 18:29:58
ragingbull avatar ragingbull 5 Точки

Няма проблем :)

0
kami_1197 avatar kami_1197 2 Точки

static void Main(string[] args)
        {
            var n = int.Parse(Console.ReadLine());
            Console.WriteLine(new string('*', n));

            for (int i = 0; i < n - 2; i++)
                Console.WriteLine(new string('*', 1) + new string(' ', n - 2) + new string('*', 1));

            Console.WriteLine(new string('*', n));
        }

Това е най-лесното и най-краткото решение на задачата.

1
Kralev avatar Kralev 15 Точки

Здравей! На мен това решение ми дава грешка! Не знам доколко е правилно, но при мен не работи!

0
14/06/2016 23:16:12
kami_1197 avatar kami_1197 2 Точки

Къде го пробва и при копирането сложи ли го точно на мястото му?

0
borislav9212 avatar borislav9212 746 Точки

Kralev решението работи, но няма class и using system, затова не може да ти го компилира, вземи само кода от main метода. kami_1197 само да допълня, че когато имаш статично по една звездичка няма нужда от new string ето така -> http://pastebin.com/vmCThp4a

0
Kralev avatar Kralev 15 Точки

Здравей!

Аз сега се уча. Това което разбрах докато си блъсках главата да реша задачата е, че само с for цикъл няма да стане, защото в този цикъл няма как да направиш квадрата кух. Трябва цикъл от типа if-else. Аз обаче колкото и да се мъчих не успях сам да напиша програмата и накрая видях решението. Също това, което в началото ми убягваше е да си заложа променливите. 

For цикъла по моето простичко разбиране задава начална позиция i = 0. Което ако не греша значи, че когато i e 0 цукъла започва да работи! След това задаваш крайна позиция на цикъла i < 10. Тоест , когато i стигне до 9 включително то цикълът спира да работи. И накрая казваш на цикъла какво да прави докато работи. Примерно i++ му казва да добява единица при всяко преминаване. 

Надявам се моето разбиране да е вярно и да ти помага да го разбереш и ти!

-1
Losko avatar Losko 69 Точки

Другото добре обаче if , else if  не са цикли. for i while са цикли. Имаш и (Разновидности) на тези двата. като foreach  и "do ... while"... Относо това до колкот ти стигат знанията. Целта на тези домашни е да се учиш докато ги правиш това, че си потърсил готово решение е ок, само трябва да го разбереш кое какво прави в това решение и за следващият път да имаш идея как да решиш подобна задача.

0
kami_1197 avatar kami_1197 2 Точки

Не е вярно че е нужен If else if, за да работи програмата. Това, което съм дала аз като код при мен работи и то както трябва - от вътре е празно и звездичките са само самите страни.

0
Kralev avatar Kralev 15 Точки

Разбирам! Аз отначало съм останал с грешно разбиране за if else,  че е цикъл! Гледах много различни обяснения и съм се объркал! Смятам, че като за абсолютен начинаещ ми е простено :) Но за в бъдеще ще внимавам повече! 

0
IvMironov avatar IvMironov 35 Точки

Здравей,

Ето едно просто решение и от мен само със цикли. Може да ти е от полза за разбирането им.

http://pastebin.com/m6rUM21X

Поздрави

0
sharpfen avatar sharpfen 0 Точки

Готино решение с 3 цикъла.

Само както си го написал for цикъла без под него в скобите  съдържанието {  съдържанието   } Харе са ми , но е трудно за четене и може да обърка :)

Но е интересно и човек може да се поучи от това ;)

0
07/01/2020 13:25:25
stoyan.grigorov avatar stoyan.grigorov 37 Точки

Ето моето  решение на задачата с условна конструкция ( ако не се казва така, моля някой да ме поправи ).

Работи по следния начин:

Ако е първия ред( 0 ) или последния ( N -1 ) то тогава цикъла се върти ( N ) брой пъти за всяка колона на тези редове и принтира *.

Ако е първата колона ( 0 ) или последната ( N-1 ) при всяко завъртане на цикъла принтира  *.

А там където редът и колоната не ни отговарят на условията конзолата си принти " ".

И след всяко завъртане на колония цикъл си слагаме едно празни ControlWriteLine(); за да ни пренесе на следващия ред, защото ако не го направим програмата ни ще продължи да пише на същия ред.

Двата фор цикъла се изпълняват по следния начин ако числото N е примерно 5:

R = ред , C = колона

    C0 C1 C2 C3 C4
R0 ⇒  ⇒  ⇒  ⇒  ⇒
R1 ⇒  ⇒  ⇒  ⇒  ⇒
R2 ⇒  ⇒  ⇒  ⇒  ⇒
R3 ⇒  ⇒  ⇒  ⇒  ⇒
R4 ⇒  ⇒  ⇒  ⇒  ⇒

Следователно нещата се завъртат така:  
R0 => C0 C1 C2 C3 C4

R1 => C0 C1 C2 C3 C4

R2 => C0 C1 C2 C3 C4

R3 => C0 C1 C2 C3 C4

R4 => C0 C1 C2 C3 C4

 

Не знам , до колко добре успях да обясня решението ми но се надявам да бъде от полза.

Лек ден.

0
AleksanderKostadinov avatar AleksanderKostadinov 12 Точки

Ето моето решение с if-else. По-дълго е от на колежката, но върши работа.

 

 var n = int.Parse(Console.ReadLine());
            for (var k = 1; k <= n; k++)
            {
                for (var i = 1; i <= n; i++)

                {

                    if (((1 < k) && (k < n)) && ((1 < i) &&(i < n)))
                    {
                        Console.Write(" ");
                    }
                    else
                        Console.Write("*");


                }
                Console.WriteLine();
            }

0
Ivvelichkova avatar Ivvelichkova 7 Точки

За мен едно от най-точните обяснения на работата на for-loop  е в този линк-    https://www.youtube.com/watch?v=npaZyIb-dHY и този-    https://www.youtube.com/watch?v=s2wAGpx1mj0  с обяснение  за  " отделните части в скобите на цикъл for" - тялото,и всички останали части,една по една!

0
08/07/2016 23:07:25
bedamusa avatar bedamusa 8 Точки

Това е моята версия на задачата както съм я разбрал аз с помоща на лнковете от Ivvelichkova


            var n = int.Parse(Console.ReadLine());
            for (int i = 0; i < n; i++)
            {
                Console.Write("*");
            }
            Console.WriteLine();
            for (int j = 0; j < n - 2; j++)
            {
                Console.Write("*");
                for (int i = 0; i < n - 2; i++)
                {
                    Console.Write(" ");
                }
                Console.WriteLine("*");
            }
            for (int i = 0; i < n; i++)
            {
                Console.Write("*");
            }
            Console.WriteLine();
 

0
Ivvelichkova avatar Ivvelichkova 7 Точки

Радвам се,че съм помогнала,но ще трябва и аз да ги прегледам пак,защото на изпита,задачата с фигурата я пропуснах и не я реших :)
Факт е,че е основно практика,докато стане нещо естествено.

0