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 745 Точки

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
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.