Loading...

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

zombiefrog avatar zombiefrog 2 Точки

И здравейте отново. Как да проверя колко цифри има едно число?

Трябва ми за следната проверка на задача 6:

The number has always exactly 4 digits and cannot start with 0.

Опитах с myint.ToString().Lenght

но май не го използвам както трябва.

 

0
bsdemon avatar bsdemon 348 Точки

Трябва да работи, поне при мен работи:

int n = myint.ToString().Length;

Освен ако числото не е отрицателно, "-" си го брои за стринг. Math.Abs ти дава абсолютната стойност.

int n = ((int)Math.Abs(myint)).ToString().Length;

Сега вече ще показва броя на цифрите коректно, дори и ако числото е отрицателно.

1
milen8204 avatar milen8204 296 Точки

Ето моето решение аз не проверявам, колко цифри е числото а просто задавам интервал при въвеждане и казвам да е между 1000 и 9999 :). След това създавам 4-ри променливи всяка, от която е съответно първата, втората,  третата и четвъртата цифра на числото и си ги принтирам в комбинациите на условието.

1
Anichka avatar Anichka 93 Точки

Ето и моите решения на всичките задачи от домашното без тези със звездичка - тях ще добавя после ЦЪК

Мисля, че работят. Чакам някой да каже, ако нещо съм пропуснала или сбъркала. Мерси :)

UPDATE 28.03.2014

Вече качих и задачите със звездичка плюс корекции.

3
ScreeM avatar ScreeM 19 Точки

Anichka , би ли обяснила решението на задача 14 и най-вече следното:

int mask = bitValue << indexP;
int result = numberN | mask;
if (bitValue == 0)
{
mask = ~(1 << indexP);
result = numberN & mask;
}

Благодаря предварително и поздравление за успешно решената задача!

1
GTeoharov avatar GTeoharov 2 Точки

Трета задача ти е грешна. Въведи 0 и ще ти дава True пак. Трябва да използваш логически оператор "&&". Демек да въведеш изключение за нулата.  :)

1
Anichka avatar Anichka 93 Точки

ScreeM,

всъщност по-правилно май е да го напиша така:

int mask;
int result;
if (bitValue == 0)
{
mask = ~(1 << indexP);
result = numberN & mask;
}
else
{
mask = bitValue << indexP;
result = numberN | mask;
}

въпреки че върши същата работа за изхода на конзолата.

GTeoharov,

Това с нулата изобщо не го бях забелязала. Мерси :)

1
mantodeus avatar mantodeus 17 Точки

Имам един въпрос към задача 14 - видях че има функция за изкарване бинарния код на числото като стринг. Дали няма да стане ако го изкарам така, разбия го на char-ове, после сменя точно определената позиция с 1 или 0 и пак да го конвертирам към binary формат (тук ще е малко проблемно) като съответно после изведа и полученото число ?

 

1
Anichka avatar Anichka 93 Точки

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

1
mantodeus avatar mantodeus 17 Точки

Забравих да допълня, че варианта с маската е ясен :) Просто мислех и за алтернативно решение.

1
Anichka avatar Anichka 93 Точки

Аз още упражнявам побитовите - всеки гледа от собствената камбанария :)

Затова не те разбрах правилно.

Хрумна ми нещо със стринг и чарове. Уж работи, но има нужда от още работа по него:

Console.WriteLine("Enter integer number n");
        int numberN = int.Parse(Console.ReadLine());
        Console.WriteLine("Enter index p");
        int indexP = int.Parse(Console.ReadLine());
        Console.WriteLine("Enter value 0 or 1 for the bit at index p");
        int bitValue = int.Parse(Console.ReadLine());

        string strNumberN = Convert.ToString(numberN, 2).PadLeft(16, '0');
        Console.WriteLine("Binary representation of n");
        Console.WriteLine(strNumberN);
        char[] numberNBits = new char[16];
        for (int i = 0; i < numberNBits.Length; i++)
        {
            if (i == strNumberN.Length - 1 - indexP)
            {
                numberNBits[i] = Convert.ToChar(bitValue.ToString());
            }
            else
            {
                numberNBits[i] = strNumberN[i];
            }
        }
        for (int i = 0; i < numberNBits.Length; i++)
        {
            Console.Write(numberNBits[i]);
        }
        Console.WriteLine();

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

Но засега това измъдрих :)

1
n.galabov avatar n.galabov 40 Точки

Моят вариант за 15-та (използвам цикли, за да не преписвам код)

using System;

class BitsExchange
{
static void Main()
{
while (true)
{
uint num = uint.Parse(Console.ReadLine());

for (int i = 0; i < 3; i++)
{
uint mask1 = 1;
uint mask2 = 1;
mask1 = mask1 << 3 + i;
mask2 = mask2 << 24 + i;
mask1 = num & mask1;
mask2 = num & mask2;
mask1 = mask1 >> 3 + i;
mask2 = mask2 >> 24 + i;
if (mask1==0&&mask2==1)
{
num = num & (uint)(~(1 << 24 + i));
num = num | mask2 << 3 + i;
}
else if (mask1==1&mask2==0)
{
num = num & (uint)(~(1 << 3 + i));
num = num | mask1 << 24 + i;
}
}
Console.WriteLine(num);
}
}
}

 

1
Masovski avatar Masovski 211 Точки

Ето и моят вариант на 15-та задача:

http://pastebin.com/HJD1shgW

Сложил съм няколко коментара, но ако има неясноти или критики - коментирайте.

1
Maka7a avatar Maka7a 6 Точки

Ето и моето Домашно.Все още не е цялото,но ще качвам другите задачи в последствие.И понеже съм начинаещ ще се радвам ако някой го разгледа и даде мнение на какво ниво е г/д.Благодаря :)

1
Anichka avatar Anichka 93 Точки
int a = (int)char.GetNumericValue(digit[0]); 
Този тип редове от 6 задача много ми харесаха! Имам само едно
единствено предложение за 3-та - можеш да търсиш остатъка направо
от 35 (НОК), а не веднъж от 7 и веднъж от 5.
Както си го направил си работи правилно, просто идея. Успех!
1
Dancho avatar Dancho 0 Точки

Maka7a, раэгледах домашното ти и видях, че имаш интересни решения. Забеляэах само една малка техническа грешка в задачата Third digit is 7?. След като разделиш въведеното число на 100, трябва да разделиш полученото на 10, a не на 7, иначе програмата не прави коректна проверка. Ето така (digit / 100) % 10 == 7

0
mantodeus avatar mantodeus 17 Точки

Имам известен проблем с 14та задача и ще се радвам, ако някой даде идея какво пропускам... Кода ми работи за всички числа с изключение на нулата, защото битовото й представяне естествено е само нули и като поискам да вкарам една единица, тя се инвертира към нула и нещата зацепват. Мъчех се да добавя някакво изключение ако числото е равно на 0, да не ми прави инвертиране, ами директно да вкарва единицата на определената позиция, но нищо не направих (не мога да мисля вече чак :) )

using System;


namespace Modify_a_Bit_at_Given_Position
{
class Bit_at_Given_Position
{
static void Main()
{
int number,position;
int value;
int mask;
Console.Write("Please enter number: ");
number = int.Parse(Console.ReadLine());
Console.WriteLine("Your number in binary format is " + (Convert.ToString(number, 2).PadLeft(16, '0')));
Console.Write("Please enter position: ");
position = int.Parse(Console.ReadLine());
Console.Write("Please enter v (1 or 0): ");
value = int.Parse(Console.ReadLine());
if (value == 1)
{
mask = ~(0 << position);
}
else
{
mask = ~(1 << position);
}
int result = number & mask;
Console.WriteLine("Your new number in binary format is " + (Convert.ToString(result, 2).PadLeft(16, '0')));
Console.WriteLine("Your new number is {0}",result);
}
}
}

 

0
Masovski avatar Masovski 211 Точки

int result = number & mask;

Това тук важи само, ако искаш да обърнеш 1 към 0, за да обърнеш 0 към 1 - можеш да ползваш побитов оператор ИЛИ --> |.

Тоест:

if (value == 1)

{

    result = number | mask;

}

else if (value == 0)

{

    result = number & mask;

}

А маската ~(0 << position); смени на 1 << position за value == 1.

Като това цялото можеш да го сложиш в горните if-ове за да не пишеш втори път едни и същи if-ове.

Надявам се да съм помогнал. smile

2
mantodeus avatar mantodeus 17 Точки

Пропуснал съм как се ползва или-то. Мерси :)

1
vvulevv avatar vvulevv 51 Точки

Искам да попитам дали може малко да ми разясните условието на самата задача, защото не успявам да разбера каква е идеята?

0
Masovski avatar Masovski 211 Точки

Хванах се днес и написах набързо 16-та задача. Направил съм и някои шукарийки (цвят на резултата). 

Ето кода: http://pastebin.com/M0qrrP1w.

Сложил съм няколко коментара, за да разгранича кой код за какво е. 

Ако помогне на някого, ще се радвам.

Ако имате критики - не ги пестете. smile

 

EDIT №1: Всъщност сега забелязах, че формулата за overlapping, ми е грешна и сега ще я променя.

EDIT №2: Overlapping формулата е оправена.

 

Формула за Overlapping: (p + k - 1) <= k

Формула за Out of range(p + k - 1) > 31 || (q + k) > 31

1
kolchakov96 avatar kolchakov96 3 Точки

Problem 15.* Bits Exchange

Не знам дали е чийтване, но я реших изцяло със стрингове,

опитах с побитови операции, стигнах до половината и пробвах по този начин.

Изглежда, че работи :)

1
g.georgiev avatar g.georgiev -1 Точки


може ли малко помощ за 13 задача Check a Bit at given position

 

using System;

class CheckBitGivenPosition
{
static void Main()
{
Console.WriteLine("Enter the integer number: ");
int number = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Enter the bit at position: ");
int bitP = int.Parse(Console.ReadLine());
int changeNumber = number << bitP;
bool results = (changeNumber & 1) == 1;
Console.WriteLine("bit at position p have value 1? - {0}",results);
}
}

къде греша

0
svetli0o avatar svetli0o 134 Точки

Смени посоката на стрелката. Вместо int changeNumber = number << bitP; го направи int changeNumber = number >> bitP;

Поздрави :)

1
g.georgiev avatar g.georgiev -1 Точки

вярно къде съм спал 

благодаря за корекцията

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