Софтуерно Инженерство
Loading...
JOHNY avatar JOHNY 197 Точки

[Homework] Programming Basics - Primitive Data Types and Variables - Problem {8} - IsoscelesTriangle - търсено решение (цикъл)

Привет колеги,

Първо ще се обърна към модераторите - моля, НЕ заключвайте тази тема! Съгласно правилата използвах търсачката, прегледах всички (дублирани и незаключени теми) и най-прясната е ТАЗИ. Тя е от две страници, в които има различни кодове, предложения, хипотези и т.н. Пускайки това решение там смятам, че ще е объркващо за всеки новобранец да се рови из различните варианти и да разбере какво точно се случва (и малко код е много за нас, а много е ужасно МНОГО). В края на темата е зададен въпрос за решение с цикъл, но явно никой не го е направил, защото липсва отговор. 

Още веднъж - най-учтиво Ви моля, с оглед на горното и с желание за дискусия да не заключвате темата ако предизвиква интерес. Обещавам, че в противен случай лично ще я заключа и ще си посипя главата с пепел (същият триъгълник, но с по-подходящи символи примерно). Надявам се, че 9-тата тема със същото заглавие ще се радва на липсата на катинар като останалите 8. Благодаря Ви предварително!

 

И така...

Видях, че хората са питали за решение с цикъл.

Е, аз така или иначе реших да се опитам да го направя по подобен начин, защото:

  1. Не познавам операторите и командите;
  2. Стори ми се интересно да може да се развива, тоест триъгълника да не е просто с 5 символа за основа, а с 15, 50 или колкото ми се струва забавно в момента;
  3. Мързи ме да пиша много и почти повтарящи се редове, които отговарят на т.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 - дясната половина). За съжаление нямам нужните познания, това е само хипотеза.

1
Основи на програмирането 08/04/2015 23:32:26
KatyaMarincheva avatar KatyaMarincheva 572 Точки

"Помощ за правилното изпълнение на алгоритъма ми ползвах" JOHNY

Искам да изкажа огромната си благодарност към JOHNY за идеите му за алгоритми!

Аз съм взела вече другаде изпита C#1 (отговарящ на C# в Basics SoftUni) с отличен, но покрай JOHNY за първи път имам чуството че реално се занимавам с програмиране - алгоритмите за решение, които предлага са светкавични, и до един са изпълними и работят! Покрай него започнах и аз да се престрашавам да измислям собствени алтернативни решения, и взе помалко да ми се получава :)

Предложи ми например да програмирам начертаването на само една половина от Isosceles Triangle, да я запазя, и после без нови изчисления да отпечатам огледално копие на първата половина - ами да, възможно е :)

Дотук стигнах до 3 различни варианта на решение:

http://pastebin.com/UVNdu1tB

http://pastebin.com/NWZsaiv3

http://pastebin.com/6ExqRke2

Това, което той прави е отвъд решаването на задачи, той измисля задачи - в което е самата същност на идеята за програмирането, да се намират нови приложения.

Background: впечатлена съм въз основа на 46 години живот сред програмисти - майка ми е програмистка от 1969 година, на историческия IBM System/360.

1