Loading...
zontak avatar zontak 457 Точки

Някой да е стигнал до 15-та задачка? Неед пример.. ;д Зная.. ,че за решението на тази задача трябва да използваме комбинация от задачите за взимане и установяване на бит на определена позиция но.. нещо съм блокирал ;д Трябва ми само с 1 изречение да ми подскажете как да спретна задачата.. аз ще се оправя натам.. Благодаря предварително :))

5
Tr00peR avatar Tr00peR 566 Точки

Жокер 1 : Маската трябва да ти е 7 (0000 0111), за да влияеш на 3 бита. Сега вече се опитай по презентацията на Наков да се оправиш.

 

Ако трябва ще помагам още :)

0
ViValDam avatar ViValDam 15 Точки

Не съм още , на 8 съм ,но погледни във файла демо , в личната ти страница за лекции и домашни - там слагат подсказки ! До 2 - 3 часа и аз ще съм на нея и ще коментираме !Приятно решаване !

1
nikolay.dimov83 avatar nikolay.dimov83 143 Точки

Има ли мераклии да ми проверят 16 задача, че бая ме замая - ще съм много благодарен, ако някой я изтества още веднъж :)

Току що я свърших и въпреки, че преди това бях решил последната задача от учебника, тази имаше още подводни камъни - гърми при стойности близки до граничните, когато си дефинирал с int, ако дефинираш uint пък започват да пищят bitwise операторите. 

 

Ето и предложение за решението:

 

http://pastebin.com/vQYR0yyH

 

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

0
HPetrov avatar HPetrov 822 Точки

Здравей колега. Признавам, че не съм ти тествал решението но вярвам, че ако ти работи коректо за всичките тестове по домашното и правилно си адресирал проблемите когато битовете ще се overlap-ват или ще бъдат out of range значи всичко трябва да ти е наред. Искам обаче да ти дам няколко насоки за по добро форматиране на кода и в крайна сметка да бъде по четим. Когато искаш да въведеш число в конзолата най-добре да ползваш директно int.Parse(Console.ReadLine()); Има си изключения разбира се но когато имаш нужда да се въвежда просто число най-добре на един ред да се инициализира променливата. Също така забелязах по-надолу в тялото на else statement-а, създаваш променливи но на по долен ред ги инициализираш. Това също може да се направи на един ред и е по четимо. По принцип не е грешно и така както си го направил но обикновено така се прави когато на въпросните променливи ще им придаваш постоянно нови стойности в някой цикъл, докато тук просто 1 път им задаваш стойност и това е :) Изключвам само променливата chngZeroOne - там съм съгласен как си го направил :) Като цяло се опитвай да придаваш на кода си по-добра четимост ако е възможно още докато го пишеш и се старай да е добре форматиран.

Това е моето решение на задачата. Използвал съм един while цикъл, който да разменя бит по бит отколкото да грабне цялото парче от последователни битове и да прави малко извращения с тях :) Надявам се да си ме разбрал и да съм бил от полза.

0
stoian_kirkov avatar stoian_kirkov 18 Точки

Към User: HPetrov (points: 112) | 15/03/2014 20:17:22

Задачата ти е много добре описана, подредена и с кратко изчистено решение според мен. Трябва да обърнеш обаче внимание на проверката за overlapping не е коректна:

if (k > firstPos && k > secondPos)
{
Console.WriteLine("Overlapping");
return;
}

 и няма да проработи в случай че имаш, числа например p=7;q=8;k=5.

Според мен просто трябва да промениш проверката на

if ((secondPos - firstPos) < k) //  - трябва да се извади от по-голямото по-малкото или да се използва модул
{
Console.WriteLine("Overlapping");
return;
}

За съжаление не може да се коментира коментар затова коментирам към User: nikolay.dimov83 (points: 3) | 15/03/2014 17:30:32

Лека!

1
HPetrov avatar HPetrov 822 Точки

Прав си за overalapping-а, явно не съм обърнал достатъчно внимание. Мисля, че (Math.Max - Math.Min) < k  ще свърши работата или може би даже Math.Abs

0
svetli0o avatar svetli0o 134 Точки

Това са решенията ми Линк 15-та и 16-та задача също са решени. Сложил съм и коментари, за да бъде по - ясно. Ако някой намери грешки чакам критики :). За тези, които искат да се помъчат сами на задачите и да не гледат решенията на другите, ето малко допълнителни разяснения:

15 задача - решава се в следните основни стъпки:

За нея най - добре става с маска равна на 7 (последни битове са 111)

1) Запаметяване на битовете от позиция 3,4,5 в една променлива от целочислен тип

2) Запаметяване на битовете от позиция 24,25,26 също в променлива от целочислен тип

3) Нулиране на битовете на числото на позиции 3,4,5

4) Нулиране на битовете на числото на позиции 24,25,26

5) използване на създадените променливи за добавяне на запаметените стойности

 

16 задача - решава се по същия начин, само че трябва да се заместят числата 3 и 24 с "q" и "p" и маската не е фиксирано число 7, а се калкулира от променливата "k". Аз съм използвал следният израз за калкулиране на маската: 

mask = Convert.ToInt32(new string('1',k), 2) -> Този израз създава стринг с толкова единици колкото ни е "k" и след това обръща от стринг в число от целочислен тип. Другата разлика от предната задача е, че трябва да се направят проверки.

Надявам се, че съм бил от полза. Успех! :)

5
Tr00peR avatar Tr00peR 566 Точки

Колега, при проверката за овърлап не трябва да има равно - ако разликата е точно колкото К не се получава застъпване.

Иначе твоя вариант за мска много ми допадна :)

1
svetli0o avatar svetli0o 134 Точки

Благодаря за проверката :) Поправих си грешката

0
WhatTheFoxSay avatar WhatTheFoxSay 61 Точки

На 8 задача за всички числа под 10 ти дава, че са False.

Вкарай и тази проверка:

  bool primeCases = ((number == 2) || (number == 3) || (number == 5) || (number == 7));

2
kostadin avatar kostadin 9 Точки

Един hint и от мен за тези, които се чудят как да си направят маската в зад. 16 (ако ще сменяте цялата редица наведнъж):

Можете да ползвате следната логика, за да си направите цикъл:

00000001 =  1  =  20

00000011 =  3  =  20 + 21

00000111 =  7  =  20 + 21 + 22

00001111 = 15 =  20 + 21 + 22 + 23

..и т.н.

3
georgimanov avatar georgimanov 107 Точки

Здравейте,

Предлагам Ви алтернативно решение на 10-та задача. Point Inside a Circle & Outside of a Rectangle.

http://pastebin.com/MNGRE4VA

1
bsdemon avatar bsdemon 348 Точки

И аз така съм я решил. Само че, може да съкратиш малко, като зададеш да смята само стойности y>1 . Няма сисъл да се занимаваш с целия правоъгълник. Това което ни интерисува се намира над y>1 .

2
zombiefrog avatar zombiefrog 2 Точки

Здравейте, може ли някой да ми обясни тази задача:

Problem 5. Third Digit is 7?
Write an expression that checks for given integer if its third digit from right-to-left is 7.

 

И по - точно каква е идеята с делението на 100 и след това на 10 и защо остатъкът е третата цифра всъщност?

(математиката не е от най - силните ми предмети)

0
svetli0o avatar svetli0o 134 Точки

Ако имаш едно число например 111711 и искаш да вземеш неговата трета цифра го делиш на 100 и се получава 1117.11, но тъй като ние го запазваме в променлива от целочислен тип (int) то дробната част се маха и остава 1117. След това като делиш на 10 с оператор (%) се получава от израза 1117 % 10 = 7, защото от 111.7 се взима само остатъка (7) , докато в обикновеното деление се взима само 111. Надявам се да съм го обяснил разбираемо :D

11
milen8204 avatar milen8204 296 Точки

zombiefrog Здрасти,

Идеята е следната първо делим въведеното число от тип int на 100, за да осигурим третата цифра от числото да стане последна. Пример: int x = 65798; Това число като го разделим на 100 ще получим 657, защото числата от тип int са цели числа и остатъка след десетичната запетая се губи, тоест ще получим 657, а не 657.98, ... сега веднага ще попиташ "е и?" :) Тука се появвява нуждата от цялочислено делене на 10. Цялочисленото делена в С# се извършава с оператора %. Делим полученото число цялочислено на 10 и получаваме неговата последна цифра 7 (която е трета за зададеното число 65798), защото дленето % връща като резултат само остатъка от деленето. С други думи изважда последното число което се дели точно на десет от настоящото число, от нашето число 657, последното число делящо се точно на 10 е 650 и 657 - 650 = 7. За този пример твоята програма трява да върне "True" защото третата цифра е 7. 

7
zombiefrog avatar zombiefrog 2 Точки

Мерси за обяснението, наистина е изчерпателно и вече смятам, че го разбрах. Лек ден :)

1
milen8204 avatar milen8204 296 Точки

Явно докато съм писал и обядвал едновременно svetli0o ти е отговорил, извинявам се за дублирането и на двамата.

0
Dexter avatar Dexter 119 Точки

Благодаря и на теб и на svetli0o. Лошо е като си забравил някакви основни неща от математиката, но пък чувството да ги научиш отново, макр и след години е супер :)

0
milen8204 avatar milen8204 296 Точки

С родилни мъки успях да направя моето работещо решение на домашно за 16-та задача с двете звездички. Истината е, че 15 я бях напраил с масиви и ако не беше форума нямаше да мога да реша 16-та. И така да кажа няколко думи за това как съм я решил. Повечето във формума 15-та задача са я решили чрез маска 7 (битово 111), която се отмества на ляво със 24 и с 3 бита и с побитовите оператори & и | си правят две променливи, които пазят резултатите от тези битове. След това зануляват по 3 бита на числото, след 3-тия и 24-тия и им разменят стойностите. По подобен начин става и с 16 задача. Тука проблема е, че се задават от потребителя, броя на битовете, които да се сменят. В 15 бяха постоянно 3 бита и затова се използва маска 7 (битово 111). За 16 задача си направих един стринг, в който се начукват 1-ци, к на брой пъти (подадените битове от потребителя). След което получения стринг го конвертирам в число (маска) и така по стария път на 15 задача.

За да ни е гадно, който е измислил задачата е дал и пример, в който не винаги q e по - голямо от р, поради което съм направил една проверка за по-голямо или равно и програмата наглася стойностите, така че по - голямото да е q и нямам проблем, иначе се получава проблеми при проверките.

1
kyamaliev avatar kyamaliev 209 Точки

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

Прилагам моето решение, в което не се ползват нито стрингове, нито цикли, само няколко if-а. Линк

Поздрави

1
Plami avatar Plami 373 Точки

Задача 7-въпрос

Здравейте,

Във връзка с решението ми на зад.7 пиша следното:

using System;

    class PointInACircle
    {
        static void Main()
        {
            Console.WriteLine("x =");
            double x = double.Parse(Console.ReadLine());
            Console.WriteLine("y =");
            double y = double.Parse(Console.ReadLine());

            bool inside = (x * x) + (y * y) <= (2 * 2);
            Console.WriteLine("These coodinates are inside the circle= {1}",inside);
        }
    }

Проблема е, че при двата случая когато x e 0 или y e 0, ми излиза като грешка при стартирането на програмата. Логично е,че тези две точки са вътре, но как да го напиша в програмата?

 

0
milen8204 avatar milen8204 296 Точки

В Console.WriteLine("These coodinates are inside the circle= {1}",inside);

Напиши {0} вместо {1}.

 

1
rosenrusev avatar rosenrusev 175 Точки

 

Здравей,

Грешката ти беше в конзолното отпечатване, последен ред. Така работи :) и с координати х = 0 и у = 0 няма проблем :)

class PointInACircle
{
static void Main()
{
Console.WriteLine("x = ");
double x = double.Parse(Console.ReadLine());
Console.WriteLine("y = ");
double y = double.Parse(Console.ReadLine());

bool inside = (x * x) + (y * y) <= (2 * 2);
Console.WriteLine("These coodinates are inside the circle = {0}", inside);
}

 

Ето как бих те посъветвал да го направиш:

 

class PointInACircle
{
static void Main()
{
//Console.WriteLine("x =");
Console.Write("x = ");
double x = double.Parse(Console.ReadLine());
//Console.WriteLine("y =");
Console.Write("y = ");
double y = double.Parse(Console.ReadLine());
double radius = 2;
bool inside = (x * x) + (y * y) <= (radius * radius);
//Console.WriteLine("These coodinates are inside the circle = {0}", inside);
Console.WriteLine(inside ? true : false);
}

1
Plami avatar Plami 373 Точки

Въпреки че е против правилата ви благодаря :) Просто 2 очи не виждат като 6 :D

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