diff --git a/src/mk/10.md b/src/mk/10.md index cfc6c4b..f8aed68 100644 --- a/src/mk/10.md +++ b/src/mk/10.md @@ -3,7 +3,7 @@ # Објектно ориентирано програмирање ## Аудиториска вежба 10 (Исклучоци) -## 1. Производи +## 1. Производи со попуст Дел од производите во една продавница по новата политика на продавницата мора да имаат одреден попуст. За таа цел во системот на продавницата потребно е да се моделира апстрактната класа Discount. Оваа класа како податок ги има курсевите на евра и долари во денари и методите кои мора секоја класа што ќе наследи од неа да ги имплементира: float discount_price(); @@ -230,100 +230,58 @@ Product{ name=parfem, price=3500} Vnesena e negativna vrednost za cena! ``` -## 2. Продукти со попуст -Да се имплементира класа Product за која се чуваат името и цената. Да се имплементира апстрактна класа Discount во која има два чисто виртуелни методи за цена и за цена со попуст. Од овие класи да се изведат класите: +## 2. Редови со самогласки во датотека +Дадена е текстуална датотека "Primer.txt". Да се напише програма која ќе ја прочита датотеката и на екран ќе го отпечати бројот на редови во кои има повеќе од 10 самогласки, како и вкупниот број на самогласки во датотеката. -FoodProduct за која дополнително се чува бројот на калории; - -DigitalProduct за која дополнително се чува големината (во MB) +Пример. Ако датотеката "Primer.txt" ја има следнава содржина: +```text +Zdravo, kako si? +Eve, dobro sum. A ti? +I jas dobro. Kako se tvoite? Ima li neshto novo? +Dobri se i tie. Si kupiv avtomobil. +``` -Да се имплементира надворешна функција total_discount која ќе пресметува вкупен попуст на неколку продукти на попуст кои ги прима како аргумент. +тогаш програмата треба да отпечати: +```text +Vkupno 2 reda imaat povekje od 10 samoglaski. +Vo datotekata ima vkupno 42 samoglaski. +``` Решение: ```cpp #include <iostream> -#include <cstring> +#include <fstream> +#include <ctype.h> using namespace std; -class Discount { -public: - virtual float getDiscount_price() = 0; - virtual float getPrice() = 0; -}; -class Product { -protected: - string name; - float price; -public: - Product(string name = "", const float price = 0) { - this -> name = name; - this->price = price; - } - float getPrice() { - return price; - } -}; -class DigitalProduct : public Product, public Discount { -private: - float size; -public: - DigitalProduct(string name = "", const float price = 0, const float size = 0): Product(name, price){ - this->size = size; - } - // се препокриваат функциите од апстрактната класа - float getDiscount_price() { - // попустот е 10% - return 0.9 * getPrice(); - } - // и двете класи Product и Discount имаат функција getPrice, која се - // препокрива во изведената. Оваа ја користи getPrice од Product - float getPrice() { - return Product::getPrice(); - } - -}; - -class FoodProduct : public Product, public Discount { -private: - float callories; -public: - FoodProduct(const char *name = "", const float price = 0, const float callories = 0) : Product(name, price) { - this->callories = callories; - } - float getDiscount_price() { - // попустот е 20% - return .8 * getPrice(); - } - // и двете класи Product и Discount имаат функција getPrice, која се - // препокрива во изведената. Оваа ја користи getPrice од Product - float getPrice() { - return Product::getPrice(); - } -}; - -float total_discount(Discount **d, int n) { - float price = 0; - for (int i = 0; i < n; ++i) { - // повик на функцијата getPrice од класата FoodProduct или - // DigitalProduct соодветно, затоа што во Discount функцијата е виртуелна - price += d[i]->getPrice(); - } - float discount = 0; - for (int i = 0; i < n; ++i) { - discount += d[i]->getDiscount_price(); - } - return price - discount; +int e_samoglaska(char c){ + c = tolower(c); + return (c == 'a') || (c == 'e') || (c == 'i') || (c == 'o') || (c == 'u'); } -int main() { - Discount **d = new Discount*[3]; - d[0] = new FoodProduct("Cheese", 450, 1200); - d[1] = new FoodProduct("Wine", 780, 250); - d[2] = new DigitalProduct("WOW", 380, 400); - cout << "Difference: " << total_discount(d, 3) << endl; - for (int i = 0; i < 3; ++i) { - delete d[i]; +int main() +{ + ifstream fin("Primer.txt"); + if(!fin.is_open()){ + cout<<"Ne mozham da ja otvoram datotekata!"<<endl; + return -1; + } + char c; + int red = 0, vkupno = 0, samoglaski = 0; + while(fin.get(c)) + { + if(e_samoglaska(c)){ + ++samoglaski; + ++vkupno; + } + if(c == '\n') { + if(samoglaski > 10){ + red++; + } + samoglaski = 0; } - delete[] d; - return 0; + } + cout<<"Vkupno "<<red<<" reda imaat povekje od 10 samoglaski"<<endl; + cout<<"Vo datotekata ima vkupno "<<vkupno<<" samoglaski."<<endl; + return 0; } ```