Kod jest raczej przejrzysty, ale długi... . Tak wiem, mieszam polskim z angielskim.
Kod: Zaznacz cały
#include <iostream>
#include <windows.h>
#include<vector>
#include<string>
#include<ctime>
#include<cstdlib>
#include <cstdio>
#include<cmath>
#include <algorithm>
//Jeszcze moze jaka biblioteka
//wyswietl drzewo - popraw polozenie, jak sie juz pokompiluje
using namespace std;
const size_t maxStudent = 16;
void Kolorek(int kolorek)
{
HANDLE kolor;
kolor = GetStdHandle( STD_OUTPUT_HANDLE );
SetConsoleTextAttribute(kolor, kolorek);
}
void BrakKolorku()
{
HANDLE kolor;
kolor = GetStdHandle( STD_OUTPUT_HANDLE );
SetConsoleTextAttribute(kolor, 15);
}
struct Student
{
string name;
float grade;
};
/*struct Node //No dobrze by było cos na wskaźnkach zrobić, ale.... ale ale.
{
Student student;
Node *left;
Node *right;
};*/
void polozenie(int x, int y)
{
COORD c;
c.X=x-1;
c.Y=y-1;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),c);
}
void pustekoleczka()
{
Kolorek(14);
cout<<" ******************"<<endl;
cout<<"* *"<<endl;
cout<<" ******************"<<endl;
}
Student add()
{
Student nowy;
cout<<"Podaj nazwisko nowego studenta:"<<endl;
cin>>nowy.name;
cout<<"Podaj jego ocene z poprzedniego semestru:"<<endl;
cin>>nowy.grade;
return nowy;
}
void Grade(vector<Student>students)
{
Student rodzice_na_boju;
cout<<"Podaj nazwisko studenta, ktorego chcesz sprawdzic ocene:";
cin>>rodzice_na_boju.name;
for(int i=0; i<students.size();i++)
{
if(students[i].name==rodzice_na_boju.name)
{
cout<<students[i].grade<<endl;
}
else
{
cout<<"Nie ma takiego studenta"<<endl;
}
}
}
vector<Student> sortuj(vector<Student>students)
{
students.sort(students.begin(), students.end());
return students;
}
Student Korzen(vector<Student>students)
{
students = sortuj(students);
int korzen=0;
if (students[students.size()/2]=NULL)
{
int korzen = students.size()/4;
}
else
{
int korzen= students.size()/2;
}
return students[korzen];
}
//No to drzewko
class BinaryTree
{
//private:
// const size_t maxStudent = 16;
public:
vector<Student> students[maxStudent];
bool empty[maxStudent];
vector<Student>dane[maxStudent];
void wyswietl_drzewo();
void pelnekoleczka(int i);
vector<Student> UsunSkubanca();
void LetsMakeNodes();
};
vector<Student> BinaryTree::UsunSkubanca()
{
Student bezboznik;
cout<<"Kogo Ci przywolac?";
cin>>bezboznik.name;
for(int ilosc=0; ilosc<=students.size();ilosc++)
{
if (students[ilosc].name==bezboznik.name)
{
Student temp;
temp=students[ilosc];
students[ilosc]=students[ilosc+1];
students[ilosc+1]=temp;
}
}
students[maxStudent]=NULL;
return students;
}
/////////////////////////////////////////////////////////////////////////////////
//Drzewkowe perypetie
void BinaryTree::LetsMakeNodes()
{
for(int j=0; j<empty.size(); j++)
{
empty[j]=true;
}
//BinaryTree *left = new lewa_galaz(int indeks);
//BinaryTree *right = new prawa_galaz(int indeks);
vector<Student> true_students[maxStudent];
true_students[0]=NULL;
true_students[1]=Korzen(students);
for (Student el : students)
{
if (el!=true_students[1])
true_students.push_back(el);
}
if (empty[1]==true)
{
dane[1]=true_students[1];
empty[1]=false;
}
for (int i=2; i<=true_students.size(); i++)
{
for (int k=1; k<=log2(students.size()); k++)
if (true_students[i.name]<true_students[k].name)
{
dane[i]=Lewa_galaz(k, i, dane, true_students);
}
else if (true_students[i].name<true_students[k].name)
{
dane[i]=Prawa_galaz(k, i, dane, true_students);
}
else dane[i]=random(k, i, dane, true_students);
}
}
Student Lewa_galaz(int k, int i, vector<Student> dane, vector<Student> true_students)
{
k=k*2;
if (k<=dane.size())
{
if (empty[k]==true)
{
dane[k]=true_students[i];
empty[k]=false;
return dane[k];
}
else if (true_students[i].name<true_students[k].name)
{
Lewa_galaz(k, i, dane, true_students);
}
else if (true_students[i].name>true_students[k].name)
{
Prawa_galaz(k, i, dane, true_students);
}
else random(k, i, dane, true_students);
}
else cout<<"Brak miejsca"<<endl;
}
Student Prawa_galaz(int k, int i, vector<Student> dane, vector<Student> true_students)
{
k=k*2+1;
if (k<=dane.size())
{
if (empty[k]==true)
{
dane[k]=true_students[i];
empty[k]=false;
return dane[k];
}
else if (true_students[i].name<true_students[k].name)
{
Lewa_galaz(k, i, dane, true_students);
}
else if (true_students[i].name>true_students[k].name)
{
Prawa_galaz(k, i, dane, true_students);
}
else random(k, i, dane, true_students);
}
else cout<<"Brak miejsca"<<endl;
}
Student random(int k, int i, vector<Student> dane, vector<Student> true_students)
{
srand( time( NULL ) );
int x=rand()*2;
if (x=0) Lewa_galaz(k, i, dane, true_students);
else Prawa_galaz(k, i, dane, true_students);
}
//Koniec drzewkowych perypetii
///////////////////////////////////////////////////////
/*class lewa_galaz: public Binary Tree //Ladnie by bylo jakby byl jaki interfejs
{
int szukaj(int indeks)
return indesk*2;
}
int k
class prawa_galaz(int indeks): public Binary Tree
{}*
int szukaj(int indeks)
return indeks*2+1;
}*/
void BinaryTree::pelnekoleczka (int i)
{
Kolorek(14);
cout<<" ******************"<<endl;
cout<<"*";
Kolorek(5);
cout<<dane[i].name<<"*"<<endl;
Kolorek(14);
cout<<" ******************"<<endl;
}
void BinaryTree::wyswietl_drzewo()
{
LetsMakeNodes();
system("CLS");
polozenie(40,1); if (empty[1]==true) pustekoleczka(); else pelnekoleczka(1);
polozenie(20,5); if (empty[2]==true) pustekoleczka(); else pelnekoleczka(2);
polozenie(60,5); if (empty[3]==true) pustekoleczka(); else pelnekoleczka(3);
polozenie(10,9); if (empty[4]==true) pustekoleczka(); else pelnekoleczka(4);
polozenie(30,9); if (empty[5]==true) pustekoleczka(); else pelnekoleczka(5);
polozenie(50,9); if (empty[6]==true) pustekoleczka(); else pelnekoleczka(6);
polozenie(70,9); if (empty[7]==true) pustekoleczka(); else pelnekoleczka(7);
polozenie(5,13); if (empty[8]==true) pustekoleczka(); else pelnekoleczka(8);
polozenie(15,13); if (empty[9]==true) pustekoleczka(); else pelnekoleczka(9);
polozenie(25,13); if (empty[10]==true) pustekoleczka(); else pelnekoleczka(10);
polozenie(35,13); if (empty[11]==true) pustekoleczka(); else pelnekoleczka(11);
polozenie(45,13); if (empty[12]==true) pustekoleczka(); else pelnekoleczka(12);
polozenie(55,13); if (empty[13]==true) pustekoleczka(); else pelnekoleczka(13);
polozenie(65,13); if (empty[14]==true) pustekoleczka(); else pelnekoleczka(14);
polozenie(75,13); if (empty[15]==true) pustekoleczka(); else pelnekoleczka(15);
cout<<endl<<endl<<endl;
BrakKolorku();
}
//Po drzewku
int main()
{
BinaryTree tree;
Student student1{ "Adamiak", 3.0 };
Student student2{ "Piotrkowski", 4.5 };
Student student3{ "Misiak", 3.0 };
Student student4{ "Raciborski", 5.0 };
Student student5{ "Faradowski", 3.5 };
Student student6{ "Zabik", 5.0 };
Student student7{ "Kokoszanel", 4.0 };
tree.students.push_back(student2);
tree.students.push_back(student3);
tree.students.push_back(student4);
tree.students.push_back(student5);
tree.students.push_back(student6);
tree.students.push_back(student7);
tree.wyswietl_drzewo();
int CzyGrac=1;
while(CzyGrac)
{
int wybor = 0;
do
{
Kolorek(5);
cout<<"*******************************MENU********************************"<<endl;
cout<<"Witaj w cudownym programie - programie szczesliwosci i beztroski!"<<endl;
cout<<"Otoz w tym programie tworzymy drzewko, skaladajace sie ze studentow /n Studentow na laboratoriach moze byc maksymalnie 15 osob /n Mam nadzieje, ze znasz dzialanie takiego drzewka, bo ja ci opowiadac o tym nie bede - domysl sie /n Generelanie jest pare rzeczy ktore mozesz zrobic, wcisnij odpowiedni nr"<<endl;
cout<<"1.Dodaj studenta"<<endl;
cout<<"2.Usun studenta"<<endl;
cout<<"3.Sprawdz ocene"<<endl;
cout<<"4.Krokiety"<<endl;
cout<<"5.Wyjscie z programu."<<endl;
cout<<"Wybieram : ";
cin>>wybor;
BrakKolorku();
switch (wybor)
{
case 1:
Student do_dodania =add();
tree.students.push_back(do_dodania);
tree.wyswietl_drzewo();
break;
case 2:
tree.students = tree.students(UsunSkubanca());
tree.wyswietl_drzewo();
break;
case 3:
Grade(tree.students);
break;
case 4:
int przycisk=0;
while(przycisk!=0)
{
system("cls");
cout<<"Wcisnij [1] , by powrocic: "<<endl;
cin>>przycisk;
srand(time(NULL));
int a = rand();
int b = rand();
polozenie(a,b);
cout<<"Krokiety";
}
break;
default :
cout<<"Wcisnales zla liczbe"<<endl;
cout<<"Wcisnij cokolwiek"<<endl;
system("PAUSE");
break;
}
}while(wybor!=5);
CzyGrac=0;
}
return 0;
}