//--------------------------------------------------------------------------- #ifndef Unit1H #define Unit1H //--------------------------------------------------------------------------- #include #include #include #include #include #include #include using namespace std; const int CPavadinimas = 0; const int CDestytojas = 1; const int CTrukme = 2; const int CKreditai = 3; const int CDydis = 255; const int CKiekis = 100; String Pavadinimai[4] = { " Pavadinimas ", " Destytojas ", " Trukme ", " Kreditai " }; struct TDuomenys { String Pavadinimas; String Destytojas; String Trukme; String Kreditai; TDuomenys() {}; TDuomenys(String pav, String dest, String trukme, String kred){ Nustatyti(pav, dest, trukme, kred); } char* Gauti(int i) { if (i == CPavadinimas) return Pavadinimas.c_str(); else if (i == CDestytojas) return Destytojas.c_str(); else if (i == CTrukme) return Trukme.c_str(); else if (i == CKreditai) return Kreditai.c_str(); return NULL; } void Nustatyti(TDuomenys duom){ Nustatyti(duom.Pavadinimas, duom.Destytojas, duom.Trukme, duom.Kreditai); } void Nustatyti(String pav, String dest, String trukme, String kred){ Pavadinimas = pav; Destytojas = dest; Trukme = trukme; Kreditai = kred; } }; int kiekis; TDuomenys Masyvas[CKiekis]; //mantelis001@gmail.com struct TElementas { TDuomenys duomenys; TElementas *left, *right, *back; TElementas(){ back = right = left = NULL; } TElementas(TDuomenys duom){ duomenys.Nustatyti(duom); } TElementas(TDuomenys duom,TElementas* b){ back = b; right = left = NULL; duomenys.Nustatyti(duom); } ~TElementas(){ Naikinti(); } void Iterpti(TElementas* data,int formatas) { int rez = strcmp(duomenys.Gauti(formatas), data->duomenys.Gauti(formatas)); if (rez > 0) { if(right) right->Iterpti(data, formatas); else{ right = data; right->back = this; } } else { if(left) left->Iterpti(data, formatas); else{ left = data; left->back = this; } } } void Iterpti(TDuomenys duom, int formatas){ Iterpti(new TElementas(duom), formatas); } void Rasti(char* str,int formatas) { int sk = strcmp(duomenys.Gauti(formatas),str); if(sk == 0) { Masyvas[kiekis].Nustatyti(duomenys); if(CKiekis > kiekis) kiekis++; } if((sk > 0) && right) right->Rasti(str,formatas); if((sk < 0) && left) left->Rasti(str,formatas); } void Spausdinti(ofstream& f,int k,int formatas) { int prideti = 4; if(right) right->Spausdinti(f, prideti+k,formatas); for(int j = 0;k > j;j++) f << " "; f << "| " << duomenys.Gauti(formatas) << " | "; for(int i=0; 4 > i;i++) if(formatas != i) f << duomenys.Gauti(i) << " |"; f << endl; if(left) left->Spausdinti(f,prideti+k,formatas); } bool NaikintiElementa(char* str,int formatas,int formatas2,TElementas* head) { int sk = strcmp(duomenys.Gauti(formatas),str); if (sk == 0) { if(!left && !right) { if(back) { if(back->left == this) back->left = NULL; else back->right = NULL; delete this; } else { delete this; return true; } } if(left && !right) { TElementas* l = left; duomenys.Nustatyti(l->duomenys); left = l->left; right= l->right; return false; } if(!left && right) { TElementas* r = right; duomenys.Nustatyti(r->duomenys); left = r->left; right= r->right; return false; } if(right && left) { TElementas* l = left; TElementas* r = right; duomenys.Nustatyti(l->duomenys); left = l->left; right = l->right; head->Iterpti(r,formatas); return false; } } if(sk > 0 && right) return right->NaikintiElementa(str, formatas, formatas2, head); if(sk < 0 && left) return left->NaikintiElementa(str, formatas, formatas2, head); } void Naikinti() { if (right) { right->Naikinti(); delete right; } if (left) { left->Naikinti(); delete left; } } }; struct TMedis { int formatas; TElementas* top; TMedis() { top = NULL; formatas = 0; } ~TMedis() { Naikinti(); } void Ivesti() { TDuomenys D; ifstream fd("duom.txt"); char str0[255]; char str1[255]; char str2[255]; char str3[255]; while (!fd.eof()) { fd >> str0 >> str1 >> str2 >> str3; D.Nustatyti(str0, str1, str2, str3); Iterpti(D); } fd.close(); } void Spausdinti() { ofstream f("rez.txt"); if(top) top->Spausdinti(f, 0, formatas); f.close(); } void Iterpti(TDuomenys duom) { if(top) top->Iterpti(duom, formatas); else top = new TElementas(duom, NULL); } void Rasti(char* str,int formatas) { kiekis = 0; if(top) top->Rasti(str,formatas); } void NaikintiElementa(char* str,int formatas) { if(top) { if(top->NaikintiElementa(str, formatas, top)) top = NULL; } } void Naikinti() { if (top) top->Naikinti(); delete top; top = NULL; } }; class TForm1 : public TForm { __published: // IDE-managed Components TMemo *Memo1; TButton *Button1; TButton *Button2; TEdit *Edit1; TEdit *Edit2; TEdit *Edit3; TEdit *Edit4; TButton *Button3; TButton *Button4; TEdit *Edit5; TButton *Button5; TEdit *Edit6; TButton *Button6; TButton *Button7; TEdit *Edit7; void __fastcall Button1Click(TObject *Sender); void __fastcall Button2Click(TObject *Sender); void __fastcall Button3Click(TObject *Sender); void __fastcall Button4Click(TObject *Sender); void __fastcall Button5Click(TObject *Sender); void __fastcall Button6Click(TObject *Sender); void __fastcall Button7Click(TObject *Sender); private: // User declarations public: // User declarations TMedis medis; __fastcall TForm1(TComponent* Owner); }; //--------------------------------------------------------------------------- extern PACKAGE TForm1 *Form1; //--------------------------------------------------------------------------- #endif