Loading...

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

ptbgnr avatar ptbgnr 1 Точки

[ C# Basics Exam 7 November 2014 ] Problem.03 Plane

Здравейте, наскоро започнах да решавам и 3тите задачи от изпита за влизане в SoftUni. Може би не трябваше да започвам с по-сложните рисунки, но вече е късно а и не искам да я оставям нерешена. Имам няколко проблема, за които се надявам да ми помогнете.

Проблем 1: На 6 ред не отпечатвам нужното, когато въведа 7 и 9, защото не мога да намеря подходящата формула, при която точките по средата при "n = 5 са 11"
                                                                                                "n = 7 са 17"
                                                                                                "n = 9 са 23"


Проблем 2: При 9, 10, 11 и 12 ред, външните точки не ми ги намалява с -1 въпреки, че съм задал командата, а вътрешните --> не се увеличават с 2.



Тук е кодът 



Благодаря предварително!

0
Programming Basics
djc_bg2015 avatar djc_bg2015 923 Точки

Здравей,

Имаш доста неточности по кода, и можеби ще е по -добре да започнеш от начало.

ето ти млако насоки:

Ако разделим самолета на 4 части, ето техните височини:

size / 2 + 2

size / 2

size / 2

size

Принципно, може да се получи само с 4 цикъла и иф/елсове вътре в тях, или пък да отпечатваш единични редове (като ред 1, 9, последния ред - ако вземем размера от снимката по - горе 7) и каквото остане да го сложиш в 4 цикъла.

Ето го моето решение: http://pastebin.com/xTP5vYHP , където може да видиш как съм увеличавал и намалял елементите по редове.

 

Поздрави

2
29/06/2015 07:30:42
t.316 avatar t.316 137 Точки

Здравей!

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

В подобни задачи на мен ми е най-удобно да се декларирам две променливи - една за вътрешните символи и една за външните(в случая са точки), като едната е зависима от другата и при променянето на първата се променя и втората. Примерно:

        int outterDots = n * 3 - 3;
        int innerDots = n * 3 - outterDots - 2;

Където n * 3 е ширината на цялата фигура, а - 3 е защото в първият ред, който искам да отпечатам външните точки са винаги 2 астирикса и една точка, общо 3. След това в цикъла махам по 2 от външните точки(по една от всяка страна) и тъй като в зависимостта на вътрешните се вклячват и външните то и вътрешните ще се променяг с две. Така се полечава първата част от фигурата:

        for (int i = 0; i < n - (n / 2 - 1); i++)
        {
            Console.WriteLine("{0}*{1}*{0}", new string('.', outterDots / 2), new string('.', innerDots));
            outterDots -= 2;
            innerDots = n * 3 - outterDots - 2;
        }

След това за следващата фигура (ако е нужно)  променям стойностите на външните и вътрешните точки. 

Незнам дали изглежда толкова лесно, колкото на мен ми изглежда, но след като видях подобно решение преди време ми се стори много удобно и само така решавам трета задача. От всички задачи, които съм решавал не се получава така само на една - DNA. За абсолятно всички останали се получава с подобно решение.

Ето и цялото ми решение: http://pastebin.com/fWqGnY3L

Надявам се това да ти е полезно!

2
29/06/2015 13:33:58
ptbgnr avatar ptbgnr 1 Точки

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

0
29/06/2015 16:14:54
KameliyaIvanova avatar KameliyaIvanova 3 Точки

Мога ли да помоля и аз за помощ, яко зациклих и не мога да разбера къде ми е грешката http://pastebin.com/EpAZZfrB

0
30/07/2015 16:19:20
djc_bg2015 avatar djc_bg2015 923 Точки

Здавей, като гледам не смяташ правилно различните части на самолета (височините).

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

0
Lamms avatar Lamms 197 Точки

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

Друго, което ми направи впечатление е, че винаги работиш в циклите с i++, а понякога е по-удобно да е с i+=2.

http://pastebin.com/DbqHZv5C

Така кодът дава 100 точки в джъджа.

2
TonislavAtanasov avatar TonislavAtanasov 86 Точки

Дебъгвайте бе, хора, дебъгвайте! То затова има дебъгер. :)

Веднага ще си хванеш къде точно ти гърми програмата или ти прави грешно изчисление. В задачите за рисуване обикновено става въпрос за "донатамъняване". Където е +1 да е -1 или някаква такава тъпотия.

При теб грешка се получава когато въведеш 17 или по-голямо число. Би трябвало да е в първия цикъл (сори, няма как да го видя, с линукс съм на работа). Пробвай да въведеш примерно 25 и ще видиш веднага къде точно е. Това е някаква грешка в изчислението. Промени формулата, явно не смята точно, но при малките числа отклонението е твърде малко и целочисленото деление не се обърква.

Поздрави!

 

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