Направете функции, които извършват аритметичните операции събиране, изваждане, умножение и целочислено деление между две обикновени дроби, подадени като параметри. В главната програма с помощта на тези функции пресметнете изразите:
- 2/3 + 3/4 =
- 4/5 – 3/6 =
- 1/6 * 25/4 =
- 25/4 : 2/ =
По желание: Да се добавят и функции, които проверяват дали дробта е правилна или неправилна, за представянето на неправилните дроби като смесени числа и за съкращаване на числителя и знаменателя доколкото е възможно.
„4. 25/4 : 2/колко =“ направил съм го с 2/1. За целочисленото делене не съм сигурен дали така трябва да се направи :D
Калояне, целта на тази задача е да се направят функции, които извършват операциите с обикновени дроби, като ги запазват като обикновени (с числител и знаменател), а не да ги превръщат в десетични. Например умножението би трябвало да бъде така: ако a3/b3 = a1/b1 * a2/b2, то a3=a1*a2 и b3=b1*b2 Тоест за да намерим числителя и знаменателя на резултата, умножаваме числителите и знаменателите на двете дроби.
Браво, голям напредък по задачата! Почти си на финала! Процедурата smeseno обаче не ми харесва – ако дробта е правилна, няма да се запише нищо в параметрите a,b,c. И няма как да се разбере дали там ще има нещо или не, освен да се вика проверка. Тоест тази функция понякога работи, а понякога не. Добрата функция е като инструмент (като тесла или лопата например – винаги работи :-) За мен по-добро решение щеше да бъде ако когато дробта е правилна, за цялата част се връща 0. Тогава и функциите за събиране, изваждане, умножение и деление ще станат по-прости и само с 3 изходящи параметъра. Дори аз бих ги направил с два, за да връщат само числителя и знаменателя на резултата – защо винаги да преобразуват към смесени числа – може това понякога да не е желано (например ако ще продължим със следващи изчисления с дробите, получени като резултат). И накрая бих направил една функция за печат на дроби, която проверява дали дробта е правилна или неправилна и евентуално отпечатва неправилната дроб като смесено число. Така и главната програма ще стане по-проста.
Има някои прости препоръки, които трябва да се знаят за писане на „добри“ функции:
1. Една функция прави едно нещо
2. Една функция винаги връща резултат
3. Ако има повторения в кода, значи може да се заменят с функция
И малко обяснение по 1: ако функцията прави много неща, първо тя става сложна като код, има повече вероятност за грешки в нея, от извикването и не може да се разбере коя от всичките си функции изпълнява и, понеже прави какво ли не, вероятно ще се извиква от много места в програмата и при промяна на функцията има по-голям шанс за прецакване на програмата на много места :-) Ако функцията е проста и прави едно нещо, всички изброени по-горе недостатъци се избягват.
Перфектно! Мисля, че вече знаеш малко повече по въпроса каква е ползата от функциите и как да употребяваш ефективно параметрите им :-)
Ако лятото качваш решения и по задачите от предишни години, при първа възможност ще ги преглеждам и ако имам забележки ще ти пиша. Иначе само ще ги одобрявам. Другият вариант е да решаваш задачи от сайта, който ти казах, или да разгледаш архивите на форума по информатика (регистрирай се там, пиши кой потребител си и ще ти дам пълни права да виждаш всичко и да публикуваш).