Loading...
Gabble avatar Gabble 3 Точки

Programming Basics - Пробен изпит

Здравейте, кодът на последната задача от изпита (Multiply Table) по някаква причина (непонятна за мен :D ) реагира като безкарен цикъл. Може ли малко помощ? :) 

string num = Console.ReadLine();
            char a = num[0];
            char b = num[1];
            char c = num[2];
            if (a > 0 && b > 0 && c > 0)
            {
                for (int i = 0; i < c; i++)
                {
                    c++;
                    for (int j = 0; j < b; j++)
                    {
                        b++;
                        for (int g = 0; g < a; g++)
                        {
                            a++;
                            Console.WriteLine($"{a} * {b} * {c} = {a * b * c}");
                        }
                    }
                }
            }

0
Programming Basics
aavramov avatar aavramov 1 Точки

Махни редовете а++, b++ и c++. В момента както е, просто отдалечаваш границата при всяка итерация, която i,j и g трябва да достигнат, т.е. цикълът е безкраен на трета степен :)

0
27/11/2018 21:17:21
EvgeniVT avatar EvgeniVT 61 Точки

Тъй като колегата aavramov оспори моето твърдение се почуствах длъжен да докажа думите си в предния коментар. Започнах да дебъгвам  дадения код и ето какво открих. Трите вложени цикъла не са безкрайни защото типът char се превърта на 65535. Когато добавиш 1 към максималната стойност, стоиността на променливата от тип char става равна на 0.

Да разгледаме какво става в най-вътрешния цикъл когато променливата от тип char се превърти g е близо до максималната стойност и при условието g<a се излиза от цикъла като стойноста на а остава 0. Връщаме се в горния цикъл условието му е изпълнено и той завърта втора съпка, стига се до последния трети цикъл, той обаче инициализира променливата g=0 и се проверява условието g<a но то не е изпълнено и тялото му се прескача. Втория цикъл породължава докато превърти неговата char променлива без изобщо да се изпънява третия цикъл. По аналогичен начин завършва изпълнението си и първия цикъл без да се изпълняват другите вложени цикли. Така, че наистина не бях прав в първия коментар, че се завъртат 50*50*50 пъти = 125000, а само окло 65500 от които виждаме отпечатване на резултат и други 65500*2 от които няма резултат.  Но и колегата не е прав с твърдението, че цикълите са  безкрайни.  Щяха да бъдат ако променливите a,b и c не бяха от тип char а от int.

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