Loading...
Filkolev avatar Filkolev 4482 Точки

[Exam Preparation] C# Basics September - 30.10.2014 (Exam - 25 July Morning)

Здравейте колеги,

За който не е присъствал на подготовката днес или не е успял да си препише решенията, давам линк към папката в Гитхъб профила ми, където са моите решения на задачите. Почти са идентични с кода от днес.

ЛИНК

Ако имате някакви въпроси може да ги задавате тук или да потърсите отговор във вече отворената тема за изпита от 25-ти юли сутринта.

 

13
Programming Basics 03/11/2014 12:04:27
Amaurea avatar Amaurea 9 Точки

Благодаря :)

1
FunnyBunny avatar FunnyBunny 38 Точки

Здравейте, може ли малко разяснение относно логиката в тази задача: MelonsAndWatermelons? Как стигаме до извода, че в loopа трябва да се смята по този начин: int dayOfWeek = currentDay % 7; Виждам, че работи правилно, но ме мога да си обясня защо е с "%" и каква е връзката.

Разбирам, че цялото число от numberOfDays отива във fullWeeks, а остатъка в remainingDays и цикълът ще се върти докато не достигне разликата от remainingDays. Как обаче остатъка от currentDay % 7 ни дава точно дните от switcha, които са ни нужни? Благодаря!

0
03/11/2014 12:00:30
TrifonApov avatar TrifonApov SoftUni Team Trainer 131 Точки

Здравей!

https://www.youtube.com/watch?v=uhcRdTG0XlY#t=5420 това е видеото от подговката. Към края на задачата обяснява защо. Първоначално я реши без това процентно деление.

1
Filkolev avatar Filkolev 4482 Точки

От основните математически операции modulo, т.е. взимането на остатък от деление е явно най-трудно за схващане. Предполагам просто защото в училище се ползва доста рядко, въпреки, че има доста приложения.

Логиката е сравнително проста. Ако имаме две числа, да речем едното е х, а другото е 7, както е в задачата, то целочисленото деление х / 7 ще даде като резултат някакво цяло число, а ако има дробна част тя се губи. х / 7 ни връща резултата: "колко пъти 7 се съдържа в х"; оттам дойде и оптимизацията с fullWeeks, намерихме колко пълни седмици Дидко яде плодове.

х % 7 ни дава остатъка от делението ("колко ни остава след като сме сложили 7 максимален брой пъти в х"). Тази операция връща число между 0 и 6 (в общия случай ако делителят е у, резултатът е между 0 и у-1). Какво означава х % 7 = 0. Това означава, че х се дели на 7 без остатък, т.е. х е 0, 7, 14, 21, ..., т.н. За нас това отговаря като ден от седмицата на неделя. Ако х % 7 = 1, то значи х може да е 1, 8, 15, 22, ..., т.н., т.е. понеделник.

Да предположим, че на входа ни дават като начален ден 3 (сряда). На първото завъртане на цикъла ще имаме i = 3 + 0 = 3. Когато i = 3, i % 7 = 3 (резултатът 3 / 7 = 0, с остатък 3). За нас 3 е сряда като ден от седмицата. Т.е. за числата по-малки от 7 мисля, че е очевидно, че ще ни дадат първоначалното число, т.е. лесно се вижда, че това представлява деня от седмицата.

Когато i = 7, това е неделя. i % 7 ще върне 0. Т.е. при пресмятането на i % 7, резултат от 1 до 6 представлява ден от понеделник до събота, а 0 отговаря на неделя. Когато имаме например стартов ден 7, на първото завъртане на цикъла ще получим dayOfWeek 0.

Понеже е доста вероятно като съберем стартовия ден с броя остатъчни дни, които сме намерили по-горе, да получим число по-голямо от 7, какво става в този случай? Например, дали са ни стартов ден 7; още на второто завъртане получаваме i = 8. i % 7 връща резултат 1, което е понеделник по нашата дефиниция.

Не знам дали обясних добре самата логика. В дебъгера може да проиграеш различни сценарии да видиш как точно работи.

В случая по-трудното е не да се схване как работи операцията %, а да се научи човек как да я ползва ефективно в такива случаи. А това как става - предполагам с опит в решаването на задачи.

2
SimeonStoykov avatar SimeonStoykov 114 Точки

Имаме ден от седмицата и делим този ден процентно на 7, тоест взимаме остатъка от делението на 7 и го използваме за switcha. С пример ще разбереш логиката по-лесно. Ако сме на 3-тия ден, то 3 % 7 дава точно 3 и знаем, че сме на него. Ако денят стане 8-ми обаче, това какво означава? Че сме на 1-вия ден от следващата седмица реално (тоест след 7-мия, тоест понеделник сме), а 8 % 7 дава точно 1 и по този начин знаем, че този 8-ми ден е реално 1-вия от следващата седмица. Ако сме на 15-тия ден (8+7), то пак би следвало да сме на 1-вия, защото сме една седмица след предния понеделник, а 15 % 7 пак си е 1 (точно това, което ни трябва). Тук малко по-странното е, че ако сме на 7-мия ден се получава 0 при процентно деление на 7 (7 % 7 = 0) и при case 0 в switch-a сме на 7-мия ден от седмицата реално, но в него нищо не се прави (не се ядат дини или пъпеши) и затова е пропуснат в switcha. 

6
Filkolev avatar Filkolev 4482 Точки

Здравейте,

Така и така си пазя задачите от подготовката, слагам линкове и към решенията от четвъртък. Има на места малки разлики.

01. Melons And Watermelons

02. Letters, Symbols, Numbers

03. Panda Scotland Flag

04. Morse Code Numbers

05. Bit Paths

 

По 3-та задача, споделям и другия вариант на метода, който сменя буквата - такъв, който не връща стойност. Аз така бих го написал, но пък щеше да се наложи вероятно да обяснявам какво означава подаването на променлива по референция. Накратко, за да променяме дадена променлива директно в метод, трябва да напишем ключовата дума ref преди типа данни и името й, а при викането на метода пак да слагаме ref преди името като подаваме променливата като параметър.  

Само методът - ChangeLetter.

Ето и целия КОД с този вариант на метода.

Този метод директно борави със самата буква и я променя. Съответно, когато се вика в програмата, не е нужно да се прави така: letter = ChangeLetter(letter). Казваме само: ChangeLetter(ref letter).

Тук исках да изкарам в метод и цикъла, ако имате желание мога да го направя и да постна кода тук.

Имаше желаещи да решим 5-та задача с низове. Ако някой все още се интересува, нека каже. Мога да сложа кода тук, а при въпроси да ме търсите по скайп.

 

П.П. Ще бъде качен и запис от екрана, който обаче приключва малко преждевременно поради технически причини - някъде към края на 3-та задача (т.е. решението на 4-та го няма изобщо). Извинявам се което.

 

1
djumi91 avatar djumi91 6 Точки

Извинявам се, че пиша в тази тема, но искам да попитам дали другите асистенти които водеха останалите 3 подготовки ще отворят тема като тази?

0
Filkolev avatar Filkolev 4482 Точки

Може да пишете в темите за съответните изпити при въпроси по задачите. Там са обсъждани вече доста от въпросите, които са изниквали. Каналът в youtube мисля също се следи и ако питате нещо конкретно по самата подготовка като коментар към видеото би трябвало да получите отговор.

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

1
djumi91 avatar djumi91 6 Точки

Благодаря за отговора.

Поздрави

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