forked from s444409/POB_2019
initial commit
This commit is contained in:
commit
45fd3d0f65
5
README
Normal file
5
README
Normal file
@ -0,0 +1,5 @@
|
||||
Miłosz Makowski
|
||||
|
||||
Zadania + info milosz.faculty.wmi.amu.edu.pl
|
||||
|
||||
Zaliczenie: Klokwium + projekt (2 języki)
|
9
logs/log1.txt
Normal file
9
logs/log1.txt
Normal file
@ -0,0 +1,9 @@
|
||||
cpp1
|
||||
cpp2
|
||||
ilovecpp
|
||||
linuxoverwindows
|
||||
123
|
||||
456
|
||||
789
|
||||
abc
|
||||
qwe
|
9
logs/log2.txt
Normal file
9
logs/log2.txt
Normal file
@ -0,0 +1,9 @@
|
||||
cpp1
|
||||
cpp2
|
||||
ilovecpp
|
||||
linuxoverwindows
|
||||
123
|
||||
456
|
||||
789
|
||||
abc
|
||||
qwe
|
16
zad1_1.py
Normal file
16
zad1_1.py
Normal file
@ -0,0 +1,16 @@
|
||||
class Przedmiot():
|
||||
def __init__(self, subject):
|
||||
self.name=subject
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
subjects=[]
|
||||
subjects.append(Przedmiot("Maths"))
|
||||
subjects.append(Przedmiot("Physics"))
|
||||
subjects.append(Przedmiot("PE"))
|
||||
subjects.append(Przedmiot("Chemistry"))
|
||||
subjects.append(Przedmiot("Computer Science"))
|
||||
|
||||
for subject in subjects:
|
||||
print(subject)
|
25
zad1_2.py
Normal file
25
zad1_2.py
Normal file
@ -0,0 +1,25 @@
|
||||
class Vector2D():
|
||||
def __init__(self, xCoord, yCoord):
|
||||
self.x=xCoord
|
||||
self.y=yCoord
|
||||
|
||||
def add(self, vec):
|
||||
return Vector2D(self.x+vec.x, self.y+vec.y)
|
||||
|
||||
def multiply(self, vec):
|
||||
return (float(self.x*vec.x) + float(self.y*vec.y))
|
||||
|
||||
def __str__(self):
|
||||
return ("[" + str(self.x) + ", " + str(self.y) + "]")
|
||||
|
||||
# test data
|
||||
|
||||
vec1=Vector2D(-3, 1.4)
|
||||
vec2=Vector2D(2, 2.7)
|
||||
vec3=vec1.add(vec2)
|
||||
|
||||
vec4=vec1.multiply(vec2)
|
||||
|
||||
print(vec3)
|
||||
print(vec4)
|
||||
|
56
zad2_1.py
Normal file
56
zad2_1.py
Normal file
@ -0,0 +1,56 @@
|
||||
class Produkt():
|
||||
def __init__(self, id, name, price):
|
||||
self.id=id
|
||||
self.name=name
|
||||
self.price=price
|
||||
def __str__(self):
|
||||
return str(self.id) + ' Nazwa: ' + self.name + '\n' + 'Cena: ' + str(self.price) + 'PLN'
|
||||
|
||||
class Koszyk():
|
||||
def __init__(self, clientName):
|
||||
self.clientName=clientName
|
||||
self.due=0
|
||||
self.products=[]
|
||||
def dodajProdukt(self, produkt):
|
||||
self.products.append(produkt)
|
||||
self.due+=produkt.price
|
||||
self.due=round(self.due, 2)
|
||||
print('Dodano produkt do koszyka')
|
||||
def lacznyKoszt(self):
|
||||
return "Do zapłaty: " + str(self.due)
|
||||
def __str__(self):
|
||||
return ('Koszyk użytkownika ' + self.clientName +
|
||||
'\nProdukty w koszyku:\n' +
|
||||
'\n'.join(map(str, self.products)))
|
||||
|
||||
products=[Produkt(1, 'Jabłko', 3.19),
|
||||
Produkt(2, 'Pomarańcza', 2.59),
|
||||
Produkt(3, 'Banan', 5.99),
|
||||
Produkt(4, 'Śliwka', 4.89)]
|
||||
|
||||
print("Wprowadź nazwę użytkownika: ", end='')
|
||||
username=input()
|
||||
koszyk=Koszyk(username)
|
||||
print("Witaj " + username + "!")
|
||||
print("Lista dostępnych produktów:")
|
||||
for product in products:
|
||||
print(product)
|
||||
print("Aby dodać produkt do koszyka, wprowadź jego numer. Wpisz '0' aby zobaczyć zawartość swojego koszyka.")
|
||||
while True:
|
||||
while True:
|
||||
choice=int(input())
|
||||
if choice > len(products) or choice < 0:
|
||||
print("Nie ma produktu o takim numerze.")
|
||||
continue
|
||||
elif choice==0:
|
||||
print(koszyk)
|
||||
break
|
||||
else:
|
||||
koszyk.dodajProdukt(products[choice-1])
|
||||
print(koszyk.lacznyKoszt())
|
||||
print("Chcesz zakończyć zakupy i zapłacić? [Y/n]", end=' ')
|
||||
wantExit=input()
|
||||
if wantExit=='Y' or wantExit=='y':
|
||||
print("Zapłacono " + str(koszyk.due) + '.')
|
||||
print("Dziękujemy za zakupy!")
|
||||
break
|
97
zad2_2.cpp
Normal file
97
zad2_2.cpp
Normal file
@ -0,0 +1,97 @@
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <sstream>
|
||||
|
||||
using namespace std;
|
||||
|
||||
class Produkt{
|
||||
public:
|
||||
float price;
|
||||
Produkt(int iId, string iName, float iPrice){
|
||||
id=iId;
|
||||
name=iName;
|
||||
price=iPrice;
|
||||
}
|
||||
string description(){
|
||||
stringstream s;
|
||||
s << id << " Nazwa: " << name << "\n" << "Cena: "
|
||||
<< price << "PLN" << endl;
|
||||
return s.str();
|
||||
}
|
||||
private:
|
||||
int id;
|
||||
string name;
|
||||
};
|
||||
|
||||
class Koszyk{
|
||||
public:
|
||||
float due;
|
||||
Koszyk(string iClientName){
|
||||
clientName=iClientName;
|
||||
due=0;
|
||||
}
|
||||
void dodajProdukt(Produkt produkt){
|
||||
products.push_back(produkt);
|
||||
due+=produkt.price;
|
||||
cout << "Dodano produkt do koszyka" << endl;
|
||||
}
|
||||
string lacznyKoszt(){
|
||||
stringstream s;
|
||||
s << "Do zapłaty: " << due << "PLN.\n";
|
||||
return s.str();
|
||||
}
|
||||
string description(){
|
||||
stringstream s;
|
||||
s << "Koszyk użytkownika " << clientName << "\nProdukty w koszyku\n";
|
||||
for(Produkt x : products)
|
||||
s << x.description();
|
||||
s << endl;
|
||||
return s.str();
|
||||
}
|
||||
private:
|
||||
string clientName;
|
||||
vector<Produkt> products;
|
||||
|
||||
};
|
||||
|
||||
int main(){
|
||||
vector<Produkt*> products;
|
||||
products.push_back(new Produkt(1, "Jabłko", 3.19));
|
||||
products.push_back(new Produkt(2, "Pomarańcza", 2.59));
|
||||
products.push_back(new Produkt(3, "Banan", 5.99));
|
||||
products.push_back(new Produkt(4, "Śliwka", 4.89));
|
||||
|
||||
cout << "Wprowadź nazwę użytkownika: " << endl;
|
||||
string username;
|
||||
cin >> username;
|
||||
Koszyk* koszyk = new Koszyk(username);
|
||||
cout << "Witaj " << username << "!\n"
|
||||
<< "Lista dostępnych produktów:\n";
|
||||
for(Produkt *p : products)
|
||||
cout << p->description();
|
||||
cout << "Aby dodać produkt do koszyka, wprowadź jego numer. Wpisz '0' aby zobaczyć zawartość swojego koszyka.\n";
|
||||
while(true){
|
||||
while(true){
|
||||
string choice;
|
||||
cin >> choice;
|
||||
int choiceNumber=stoi(choice, nullptr, 10);
|
||||
if(choiceNumber > products.size()){
|
||||
cout << "Nie ma produktu o takim numerze.\n";
|
||||
continue;
|
||||
} else if(choiceNumber==0){
|
||||
cout << koszyk->description();
|
||||
break;
|
||||
} else
|
||||
koszyk->dodajProdukt(*products[choiceNumber-1]);
|
||||
}
|
||||
cout << koszyk->lacznyKoszt() << "\nChcesz zakończyć zakupy i zapłacić? [Y/n]\n";
|
||||
string wantExit;
|
||||
cin >> wantExit;
|
||||
if(wantExit[0]=='Y' || wantExit[0]=='y'){
|
||||
cout << "Zapłacono " << koszyk->due << ".\nDziękujemy za zakupy!";
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
66
zad3_1.cpp
Normal file
66
zad3_1.cpp
Normal file
@ -0,0 +1,66 @@
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <fstream>
|
||||
using namespace std;
|
||||
|
||||
class Logger{
|
||||
public:
|
||||
virtual void log(string textToLog)=0;
|
||||
virtual void del(){};
|
||||
|
||||
vector<string> history;
|
||||
|
||||
protected:
|
||||
virtual void history_add(string textToLog){
|
||||
history.push_back(textToLog);
|
||||
}
|
||||
};
|
||||
|
||||
class FileLogger : public Logger{
|
||||
public:
|
||||
FileLogger(string filePath){
|
||||
logFile.open(filePath);
|
||||
}
|
||||
void log(string textToLog){
|
||||
history_add(textToLog);
|
||||
logFile << textToLog << "\n";
|
||||
}
|
||||
void del(){
|
||||
logFile.close();
|
||||
}
|
||||
private:
|
||||
ofstream logFile;
|
||||
};
|
||||
|
||||
class StdoutLogger : public Logger{
|
||||
public:
|
||||
void log(string textToLog){
|
||||
history_add(textToLog);
|
||||
cout << textToLog << "\n";
|
||||
}
|
||||
};
|
||||
|
||||
void saveLogs(vector<Logger*> &logs, string text){
|
||||
for(Logger* l : logs)
|
||||
l->log(text);
|
||||
}
|
||||
|
||||
void stopLogging(vector<Logger*> &logs){
|
||||
for(Logger* l : logs)
|
||||
l->del();
|
||||
}
|
||||
|
||||
int main(void){
|
||||
vector<Logger*> logs={new FileLogger("/home/marcin/Documents/Coding/POB_2019/logs/log1.txt"),
|
||||
new FileLogger("/home/marcin/Documents/Coding/POB_2019/logs/log2.txt"),
|
||||
new StdoutLogger()};
|
||||
vector<string> texts={"cpp1", "cpp2", "ilovecpp", "linuxoverwindows"};
|
||||
for(string text : texts)
|
||||
saveLogs(logs, text);
|
||||
stopLogging(logs);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
50
zad3_1.py
Normal file
50
zad3_1.py
Normal file
@ -0,0 +1,50 @@
|
||||
import os
|
||||
|
||||
class Logger():
|
||||
def __init__(self):
|
||||
self.history=[]
|
||||
def history_add(self, textToLog):
|
||||
self.history.append(textToLog)
|
||||
def log(self, textToLog):
|
||||
self.history_add(textToLog)
|
||||
def __del__(self):
|
||||
pass
|
||||
|
||||
class FileLogger(Logger):
|
||||
def __init__(self, filePath):
|
||||
self.history=[]
|
||||
self.logFile=open(filePath, "a+")
|
||||
def log(self, textToLog):
|
||||
self.history_add(textToLog)
|
||||
self.logFile.write(textToLog + "\n")
|
||||
def __del__(self):
|
||||
self.logFile.close()
|
||||
|
||||
class StdoutLogger(Logger):
|
||||
def log(self, textToLog):
|
||||
self.history_add(textToLog)
|
||||
print(textToLog)
|
||||
|
||||
|
||||
def saveLogs(loggers, text):
|
||||
for log in loggers:
|
||||
log.log(text)
|
||||
|
||||
def stopLogging(loggers):
|
||||
for log in loggers:
|
||||
del log
|
||||
|
||||
|
||||
dir=os.path.join(os.path.dirname(__file__), "logs")
|
||||
|
||||
loggers=[StdoutLogger(),
|
||||
FileLogger(os.path.join(dir, "log1.txt")),
|
||||
FileLogger(os.path.join(dir, "log2.txt"))]
|
||||
|
||||
texts=["123", "456", "789",
|
||||
"abc", "qwe"]
|
||||
|
||||
for line in texts:
|
||||
saveLogs(loggers, line)
|
||||
|
||||
stopLogging(loggers)
|
128
zad5_1.cpp
Normal file
128
zad5_1.cpp
Normal file
@ -0,0 +1,128 @@
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <set>
|
||||
#include <sstream>
|
||||
|
||||
using namespace std;
|
||||
|
||||
class Person;
|
||||
class Vehicle;
|
||||
|
||||
class Entity {
|
||||
private:
|
||||
static int nextId;
|
||||
protected:
|
||||
static vector<Entity*> entities;
|
||||
int id;
|
||||
public:
|
||||
Entity(){
|
||||
id=nextId++;
|
||||
entities.push_back(this);
|
||||
}
|
||||
static Entity* getEntityById(int _id){
|
||||
for(Entity *entity : entities){
|
||||
if (entity->id==_id)
|
||||
return entity;
|
||||
}
|
||||
cout << "Could not find any entity with id " << _id << ".\n";
|
||||
return nullptr;
|
||||
}
|
||||
int getId(){
|
||||
return id;
|
||||
}
|
||||
virtual ~Entity(){
|
||||
for(unsigned int i=0; i<=entities.size(); i++){
|
||||
if (entities[i]->id==id)
|
||||
entities.erase(entities.begin()+i);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
int Entity::nextId=0;
|
||||
vector <Entity*> Entity::entities;
|
||||
|
||||
class Vehicle : public Entity {
|
||||
friend class Person;
|
||||
private:
|
||||
set<int> idsInside;
|
||||
const short unsigned int limit=5;
|
||||
public:
|
||||
void addPerson(Person &person);
|
||||
int occupiedSpaces(){
|
||||
return idsInside.size();
|
||||
}
|
||||
void whoIsInside(){
|
||||
cout << "People inside car " << id << ":\n";
|
||||
if(idsInside.size()==0)
|
||||
return;
|
||||
for(int pid : idsInside){
|
||||
cout << pid << endl;
|
||||
}
|
||||
return;
|
||||
}
|
||||
virtual ~Vehicle();
|
||||
};
|
||||
|
||||
class Person : public Entity {
|
||||
friend class Vehicle;
|
||||
private:
|
||||
int vehicleId;
|
||||
bool isInVehicle;
|
||||
public:
|
||||
Person(){
|
||||
vehicleId=-1;
|
||||
isInVehicle=false;
|
||||
}
|
||||
void getOut(){
|
||||
if(vehicleId==-1){
|
||||
cout << "This person is not inside any vehicle.\n";
|
||||
return;
|
||||
}
|
||||
Vehicle* vehicle=(Vehicle*)getEntityById(vehicleId);
|
||||
vehicle->idsInside.erase(vehicle->idsInside.find(id));
|
||||
vehicleId=-1;
|
||||
isInVehicle=false;
|
||||
}
|
||||
virtual ~Person(){
|
||||
getOut();
|
||||
}
|
||||
};
|
||||
|
||||
void Vehicle::addPerson(Person &person){
|
||||
if(idsInside.size()>=limit) {
|
||||
cout << "This vehicle has no more room for another passenger.\n";
|
||||
return;
|
||||
} else if (person.isInVehicle==true){
|
||||
cout << "The person is alredy in some other vehicle.\n";
|
||||
return;
|
||||
} else {
|
||||
idsInside.insert(person.getId());
|
||||
person.isInVehicle=true;
|
||||
person.vehicleId=id;
|
||||
}
|
||||
}
|
||||
|
||||
Vehicle::~Vehicle(){
|
||||
for(int id : idsInside){
|
||||
Person* personInside=(Person*)getEntityById(id);
|
||||
personInside->getOut();
|
||||
}
|
||||
}
|
||||
|
||||
int main(){
|
||||
vector<Person*> people;
|
||||
for(int i=0; i<10; i++)
|
||||
people.push_back(new Person);
|
||||
Vehicle* car1=new Vehicle();
|
||||
for(Person *newguy : people)
|
||||
car1->addPerson(*newguy);
|
||||
delete people[0];
|
||||
people.erase(people.begin());
|
||||
car1->whoIsInside();
|
||||
delete car1;
|
||||
Vehicle* car2=new Vehicle();
|
||||
for(Person *newguy : people)
|
||||
car2->addPerson(*newguy);
|
||||
car2->whoIsInside();
|
||||
}
|
Loading…
Reference in New Issue
Block a user