[Homework] Programming Basics - Primitive Data Types and Variables - Problem {8} - IsoscelesTriangle - търсено решение (цикъл)
Привет колеги,
Първо ще се обърна към модераторите - моля, НЕ заключвайте тази тема! Съгласно правилата използвах търсачката, прегледах всички (дублирани и незаключени теми) и най-прясната е ТАЗИ. Тя е от две страници, в които има различни кодове, предложения, хипотези и т.н. Пускайки това решение там смятам, че ще е объркващо за всеки новобранец да се рови из различните варианти и да разбере какво точно се случва (и малко код е много за нас, а много е ужасно МНОГО). В края на темата е зададен въпрос за решение с цикъл, но явно никой не го е направил, защото липсва отговор.
Още веднъж - най-учтиво Ви моля, с оглед на горното и с желание за дискусия да не заключвате темата ако предизвиква интерес. Обещавам, че в противен случай лично ще я заключа и ще си посипя главата с пепел (същият триъгълник, но с по-подходящи символи примерно). Надявам се, че 9-тата тема със същото заглавие ще се радва на липсата на катинар като останалите 8. Благодаря Ви предварително!
И така...
Видях, че хората са питали за решение с цикъл.
Е, аз така или иначе реших да се опитам да го направя по подобен начин, защото:
- Не познавам операторите и командите;
- Стори ми се интересно да може да се развива, тоест триъгълника да не е просто с 5 символа за основа, а с 15, 50 или колкото ми се струва забавно в момента;
- Мързи ме да пиша много и почти повтарящи се редове, които отговарят на т.2.
Кодът може да видите ТУК, като на всеки ред съм описал какво точно правя.
Ако на някой не му е ясно, алгоритъмът е следния:
- Задавам си символа, който ще принтвам (по условието на задачата е в случая, но може да си го смените с нещо интересно за Вас);
- Задавам си променливи "a","b" и "c", като използвам "a" за интервалите в триъгълника, "b" - за интервалите отляво на триъгълника, а "c" - за броя печатане на символи в основата. //Бонус за развитие- лесно можем да поискаме от потребителя от колко символа да е триъгълника. Проверка за числа и хоп - ето ти желано от него триъгълниЩЕ.
- Принтвам си върха ( в конкретния код ръчно е поставен на мястото си, но мога да го барна, така че да е автоматично поставен (n на брой интервали, в зависимост от броя редове), както правя с интервалите по-долу);
- Започвам цикъл, в който намалявам интервалите "b" вляво от триъгълника с по 1 (за да върви както трябва), увеличавам "а" с 2 (логично за да се разширява в двете посоки, тоест "a"=2 х стъпката на "b"). Печатам всеки ред, докато "a" не стане 11 (толкова съм си избрал като пример, но спокойно може да променяте стойностите "а" и "b" едновременно и до 1000000);
- След приключването на цикъла принтвам основата, като броя символи е с 2 повече от стойността на a (един отляво и един отдясно за да прилича на триъгълник изобщо);
- Потупвам се по рамото, самопрегръщам се и компилирам.
Ще ме прощавате за недотам добрия английски и вероятно нескопосания тип на решение, но ми се ще да прочета какво мислите за него и респективно как бихте го подобрили.
Бих възприел с удоволствие подобрения в стил "нулево ниво", тоест не преписваме, не крадем и използваме само "елементарни" и преподавани оператори. Високо ще оценя отделеното от Вас време и за по-сложни решения, но предупреждавам, че вероятно няма да ги разбера.
Благодаря предварително на всички отзовали се!
P.S. Хрумна ми и друго решение за цикъла, при което ще избегнем цикъл в цикъл. Печатаме половината триъгълник и огледалото му (триъгълника е равнобедрен, разделете го мислено по височината му - условно печатаме string a - лявата половина, който е зададен и string -a - дясната половина). За съжаление нямам нужните познания, това е само хипотеза.
Прав си на 100% за красотата , говоря теоретично, а не като графичен дизайнер.:)
Относно центрирането - вероятно ще поработя върху това в следващото или по-следващото домашно, когато ще се заиграя със задачи от типа координатна система.
Относно питането - мислех, че съм питал още в първия пост, но ето - питам те - дай моля те свежата идея, която така любезно пропусна в предишния си отговор.
Благодаря!
Заповядай.
Да предположим, че имаш да центрираш нещо (фигура, текст) в прозорец (екран) със широчина 100 единици (примерно). Широчината на нещото ти е 40 едници (примерно) , тогава намиране на началната ти точка х ще ти бъде (100 - 40)/2 .
Сега можеш сам да се опиташ да намериш началната точка на нещо със широчина 30 едници, ако нещото трябва да бъде разположено в интервал с начало 20 и край 70, който е част от прозорец (примерно) със широчина (0 - 100). :)
Ако пак ти трябва помощ, питай.
Не, не е нужно. Това е елементарна математика (и вярна естествено), но де съм достигнал ниво на знания за да определям размер на прозореца. Подозирах, че имаш хитро предложение да се прави проверка на размера на екрана, размера на триъгълника при зададени от потребителя размери и автоматично преоразмеряване до максималния възможен размер без да излизаме от екрана. Това би било още по-полезно.:)
Прегледах учебната програма и май съвсем скоро ще минем и през това. Изнервя ме опцията да създам алгоритъм за секунди, но да не мога да го кажа с код, но и това ще мине.:)
Да те прехвърля и в друга посока? Една от задачите, е да се разменят взаимно стойностите на две числа. И това направих с цикъл (+/- 1 със стъпка разликата между двете). Замислих се обаче какво би било при 3,4 и повече числа, когато се четат от конзолата и са производни. Мислех да намеря сбора на четирите и да ги движа (две средни към две крайни при 4 числа), докато сбора не е отново еднакъв. На 5-тата секунда се сетих, че 9 и 6 е 15, при първа стъпка 8 и 7 пак е 15 и ето, че имаме грешен отговор. Решение може би би било да се вземе сбора от четирите числа и НОК, след което да почне движението им както го описах и да се прави проверка за сбор и НОК едновременно. Подозирам, че може и да има частни случаи, но не съм готов веднага да напиша кода и проверя. Виждам, че си на "ти" с математиката, а и със C#. Ако ти се занимава и провериш дали хипотезата е вярна, ще почерпя с удоволствие.:)
Между другото - какво мислиш за принтване на "огледален образ" в едно с нормалния (постскриптума на първия пост)? Възможно ли е и как да се получи? Ще работи добре при правилни/симетрични фигури от всякакъв тип.:)