Skip to content

Commit

Permalink
Update 10.md
Browse files Browse the repository at this point in the history
  • Loading branch information
emilstankov authored May 11, 2024
1 parent 7ba0a52 commit 6a710bb
Showing 1 changed file with 44 additions and 86 deletions.
130 changes: 44 additions & 86 deletions src/mk/10.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
# Објектно ориентирано програмирање
## Аудиториска вежба 10 (Исклучоци)

## 1. Производи
## 1. Производи со попуст
Дел од производите во една продавница по новата политика на продавницата мора да имаат одреден попуст. За таа цел во системот на продавницата потребно е да се моделира апстрактната класа Discount. Оваа класа како податок ги има курсевите на евра и долари во денари и методите кои мора секоја класа што ќе наследи од неа да ги имплементира:

float discount_price();
Expand Down Expand Up @@ -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;
}
```

0 comments on commit 6a710bb

Please sign in to comment.