|
C++ / C Програмирање |
Внеси реплика | страница <1 23456 12> |
Автор | |
Flix
Профил од член
Испрати лична порака
Најди пораки од член
Посети го сајтот на членот
Додај во листа на пријатели
Сениор Клабинг Регистриран: 14.Септември.2005 Статус: Офлајн Поени: 9229 |
Опции за коментарот
Благодарам(0)
|
На тест ми беше дадено и само толку беше објаснато , и доволно е :) го направив до негде само функцијата за replace не ми е нешто во ред.
Инаку ова го учиме исто по бази од податоци, и алгоритми по бази од податоци ова моментално е најлесното . Eве што направив. #include <iostream> #include <string> using namespace std; template <typename Object> class Sequence { private: enum { CAPACITY = 1000 }; int N; Object* S; int f,r; public: Sequence(int cap = CAPACITY){ N = cap; S = new Object[N]; f = 0; r = 0; }; int size() const {return ((N - f + r) % N);}; bool isEmpty() const {return (f==r);}; Object& get_last() { return S[r];}; void insert_last (const Object& obj){ S[r] = obj; r = ((r + 1) % N);}; Object remove_last(){ Object& obj = S[f]; f = ((f + 1) % N); return obj;}; Sequence(const Sequence& st){ N = st.N; f = st.f; r = st.r; S = new Object[N]; for (int i = f; i <= f+st.size(); i++) { S[i%N] = st.S[i%N]; }}; Sequence& operator=(const Sequence& st){ if (this != &st) { delete [] S; N = st.N; f = st.f; r = st.r; S = new Object[N]; for (int i = f; i <= f+st.size(); i++) { S[i%N] = st.S[i%N]; }}return *this;}; ~Sequence(){ delete [] S; }; }; void reverse (const Sequence<string> st){ Sequence<string> st1(st.size()); while (!st.isEmpty()) st1.insert_last(st.remove_last()); st=st1;}; int main() { Sequence<string> names(20); char c='y'; cout<<"Add names in sequence"<<endl; while (c=='y') {cout<<"Enter a name: ";string a;cin>>a; names.insert_last(a); cout<<"Do you wish to enter more names? (y/n)";cin>>c;} cout<<endl; cout<<"Do you wish to print the sequence in reverse? (y/n)"; cin>>c; reverse(names); if (c=='y') while (!names.isEmpty()) cout<<names.remove_last()<<endl; system("pause"); return 0; } |
|
ZoraNaSlobodata
Сениор Регистриран: 03.Јуни.2008 Статус: Офлајн Поени: 3392 |
Опции за коментарот
Благодарам(0)
|
Која година си,и кај учиш,на електро :O.Бог нека ти е напомош ако си таму :D.
|
|
За нея ние живеемъ,за нея ние мремъ!
|
|
Flix
Профил од член
Испрати лична порака
Најди пораки од член
Посети го сајтот на членот
Додај во листа на пријатели
Сениор Клабинг Регистриран: 14.Септември.2005 Статус: Офлајн Поени: 9229 |
Опции за коментарот
Благодарам(0)
|
Втора година сум :)
Не сум на електро во бугарија студирам на еден интернационален универзитет , компјутерски мрежи и интернет програмирање :) |
|
ZoraNaSlobodata
Сениор Регистриран: 03.Јуни.2008 Статус: Офлајн Поени: 3392 |
Опции за коментарот
Благодарам(0)
|
Море беља,ова засега претставува тешко за мене,ама сепак немам книга фатено,за една недела имам прв колоквиум :).
Учам нешто како,незнам ни како се вика од шо имам книга фатено...Linked Lists англиски,то е доста просто,изгледа вакви работи допрва ќе учам.Моментално сум скроз концентриран на програмирање. И велиш функцијата Reverse не ти работи.Какви грешки ти кажува,при компајлирање или рановање?И кои се тие(Што вели компајлерот)? Изменето од ZoraNaSlobodata - 20.Ноември.2008 во 02:12 |
|
За нея ние живеемъ,за нея ние мремъ!
|
|
Flix
Профил од член
Испрати лична порака
Најди пораки од член
Посети го сајтот на членот
Додај во листа на пријатели
Сениор Клабинг Регистриран: 14.Септември.2005 Статус: Офлајн Поени: 9229 |
Опции за коментарот
Благодарам(0)
|
Па на англиски и студирам и затоа на англиски ми е задачата инаку ова ептен е комплицирано треба до крајот на семестарот до највисоко ниво да го научиме c++
|
|
ZoraNaSlobodata
Сениор Регистриран: 03.Јуни.2008 Статус: Офлајн Поени: 3392 |
Опции за коментарот
Благодарам(0)
|
Па многу уба работа е то шо ти е се на англиски,јас од C++ ни ништо освен основата не учев на македонски.Се што научив беше со помош на англискиот јазик и интернетот.
Ете веќе гледам користите Templates i operator overloading а тоа се веќе пренапредни концепти.Претпоставувам дека имате се научено во врска со Објектно Ориентирано Програмирање.Инаку нема ништо што би ме убедило дека на факултет можи да се научи програмски јазик во целост,најголемото знаење доаѓа од самостојна работа. |
|
За нея ние живеемъ,за нея ние мремъ!
|
|
Petkovsky
Сениор Регистриран: 09.Декември.2007 Статус: Офлајн Поени: 239 |
Опции за коментарот
Благодарам(0)
|
Koga ke gi pomines site fakulteti vo svetot ke mozes slobodno da kazes dali moze ili ne moze da se nauci programski jazik vo celost |
|
ZoraNaSlobodata
Сениор Регистриран: 03.Јуни.2008 Статус: Офлајн Поени: 3392 |
Опции за коментарот
Благодарам(0)
|
Рака давам :)И мислам дека е така за скоро секоја струка.
|
|
За нея ние живеемъ,за нея ние мремъ!
|
|
sanjago4e
Група Регистриран: 23.Јануари.2009 Локација: Macedonia Статус: Офлајн Поени: 74 |
Опции за коментарот
Благодарам(0)
|
c++ e mnogu lesno da naucite veruvajte mi
|
|
Flix
Профил од член
Испрати лична порака
Најди пораки од член
Посети го сајтот на членот
Додај во листа на пријатели
Сениор Клабинг Регистриран: 14.Септември.2005 Статус: Офлајн Поени: 9229 |
Опции за коментарот
Благодарам(0)
|
да да основите лесно се учат нешто понапредно тешко е :) |
|
sanjago4e
Група Регистриран: 23.Јануари.2009 Локација: Macedonia Статус: Офлајн Поени: 74 |
Опции за коментарот
Благодарам(0)
|
ti javuva greska kaj while ciklusot #include <iostream> #include <string> using namespace std; template <typename Object> class Sequence { private: enum { CAPACITY = 1000 }; int N; Object* S; int f,r; public: Sequence(int cap = CAPACITY){ N = cap; S = new Object[N]; f = 0; r = 0; }; int size() const {return ((N - f + r) % N);}; bool isEmpty() const {return (f==r);}; Object& get_last() { return S[r];}; void insert_last (const Object& obj){ S[r] = obj; r = ((r + 1) % N);}; Object remove_last(){ Object& obj = S[f]; f = ((f + 1) % N); return obj;}; Sequence(const Sequence& st){ N = st.N; f = st.f; r = st.r; S = new Object[N]; for (int i = f; i <= f+st.size(); i++) { S[i%N] = st.S[i%N]; }}; Sequence& operator=(const Sequence& st){ if (this != &st) { delete [] S; N = st.N; f = st.f; r = st.r; S = new Object[N]; for (int i = f; i <= f+st.size(); i++) { S[i%N] = st.S[i%N]; }}return *this;}; ~Sequence(){ delete [] S; }; }; void reverse (const Sequence<string> st){ Sequence<string> st1(st.size()); while (!st.isEmpty()) st1.insert_last(st.remove_last()); st=st1;}; int main() { Sequence<string> names(20); char c='y'; cout<<"Add names in sequence"<<endl; while (c=='y') {cout<<"Enter a name: ";string a;cin>>a; names.insert_last(a); cout<<"Do you wish to enter more names? (y/n)";cin>>c;} cout<<endl; cout<<"Do you wish to print the sequence in reverse? (y/n)"; cin>>c; reverse(names); if (c=='y') while (!names.isEmpty()) cout<<names.remove_last()<<endl; system("pause"); return 0; } |
|
Flix
Профил од член
Испрати лична порака
Најди пораки од член
Посети го сајтот на членот
Додај во листа на пријатели
Сениор Клабинг Регистриран: 14.Септември.2005 Статус: Офлајн Поени: 9229 |
Опции за коментарот
Благодарам(0)
|
Ја решив таа :)
И еве последната задача за овој семестар што ми беше за задача да ја решам. Write a C++ class that implements all the functions of an ordered dictionary Eве ја ставам па можеби ќе му се најди на некој. #include <iostream> #include <conio.h> #include <stdio.h> #include <fstream> #include <stdlib.h> using namespace std; class Student { public: friend istream& operator >>(istream& ,Student& ); friend ostream& operator <<(ostream& ,Student& ); Student(); private: int id; char name[30]; float Cgpa; friend class Node; friend class two_3_4_Tree; }; istream& operator >>(istream &in,Student& obj) { cout <<"Please Enter the ID: "<<endl; in >>obj.id; cout <<"Please Enter the First Name: "<<endl; gets(obj.name); cout <<"\nPlease Enter the Cgpa:"<<endl; in >>obj.Cgpa; return in; } ostream& operator<<(ostream& out,Student& obj) { cout <<"ID of the Student is :"; out <<obj.id<<endl; cout <<"Name of the Student is :"; out <<obj.name<<endl; cout <<"Cgpa of the Student is :"; out <<obj.Cgpa<<endl; return out; } Student::Student() { id=-1; Cgpa=0; name[0]='\0'; } struct Node { Node(); Student array[3]; Node *left; Node *leftMiddle; Node *rightMiddle; Node *right; int findKey(int,int&); int count; }; Node::Node() { for(int i=0;i<3;i++) array.id=-1; left=leftMiddle=rightMiddle=right=NULL; count = 0; } int Node::findKey(int key,int &success) { if(array[0].id==key||array[1].id==key||array[2].id==key) { success=1; return 1; } if(array[0].id>key) return 2; else if((array[0].id<key&&array[1].id>key)||count==1) return 3; else if((array[1].id<key&&array[2].id>key)||count==2) return 4; else if(array[2].id<key) return 5; else { success=1; return 1; } } class Queue { public: Queue(){front=0; rear=0;} int isEmpty(); void enQueue(Node*,int&); Node* deQueue(); private: Node* data[300]; int front,rear; }; void Queue::enQueue(Node* temp,int &count) { if(temp) { data[rear]=temp; rear++; count++; } } Node* Queue::deQueue() { front++; return data[front-1]; } int Queue::isEmpty() { if(front==rear) return 1; else return 0; } class two_3_4_Tree { public: two_3_4_Tree(); ~two_3_4_Tree(); void resetTree(); int insertElement(Student); void deleteElement(int,int&); void saveToFileInorder(); void saveToFileBreath(); void retrieveData(int,Student&,int&); void getFromFile(int&); void printBreath(); void printSortedOrder(); private: Node *root; void insertElementHelper(Student,Node*,int&,Node*); void deleteElementHelper(int,Node*,Node*,int&); void mergeLeft(Node*&,Node*&); void mergeLeftMiddle(Node*&,Node*&); void mergeRightMiddle(Node*&,Node*&); void mergeRight(Node*&,Node*&); void removeLeaf(Node*&,int key,int&); Node* searchNode(int,int&); void deAllocat(Node*&); void arrange(Node* ,Student,int&); Node* split(Node*,Node*,Student,int&); void inOrderTraversal(); void retrieveHelper(Node*,int,Student&,int&); int checkCountDel(Node*); Student predecessor(Node* ,int&); void breathTraversal(Node*); void inOrderHelper(Node*); void saveHelper(Node* ptr,ofstream& obj); void saveHelperInorder(Node*,ofstream&); }; two_3_4_Tree::two_3_4_Tree() { root=NULL; } two_3_4_Tree::~two_3_4_Tree() { deAllocat(root); } void two_3_4_Tree::arrange(Node* ptr,Student key,int &success) { if(key.id==ptr->array[0].id||key.id==ptr->array[1].id||key.id==ptr->array[2].id) { success=0; return; } if(key.id<ptr->array[0].id) { ptr->array[2]=ptr->array[1]; ptr->array[1]=ptr->array[0]; ptr->array[0]=key; } else if(key.id<ptr->array[1].id) { ptr->array[2]=ptr->array[1]; ptr->array[1]=key; } else ptr->array[ptr->count]=key; ptr->count++; success=1; } int two_3_4_Tree::insertElement(Student key) { int success=1; Node *prev=new Node; Node *ptr=new Node; ptr=root; insertElementHelper(key,ptr,success,prev); return success; } void two_3_4_Tree::insertElementHelper(Student key,Node *ptr,int &success,Node *prev) { if(root==NULL) { prev=NULL; Node* temp=new Node; temp->array[0]=key; temp->count++; root=temp; } else { if(ptr->count==3) { if(success==1) ptr=split(ptr,prev,key,success); } if(ptr->array[0].id>key.id) { if(ptr->left&&success==1) { prev=ptr; insertElementHelper(key,ptr->left,success,prev); } else { arrange(ptr,key,success); } } else if(ptr->array[0].id<key.id&&(ptr->array[1].id>key.id||ptr->array[1].id==-1)) { if(ptr->leftMiddle&&success==1) { prev=ptr; insertElementHelper(key,ptr->leftMiddle,success,prev); } else { arrange(ptr,key,success); } } else if(ptr->array[1].id<key.id && (ptr->array[2].id>key.id || ptr->array[2].id==-1) ) { if(ptr->rightMiddle&&success==1) { prev=ptr; insertElementHelper(key,ptr->rightMiddle,success,prev); } else { arrange(ptr,key,success); } } else { if(ptr->array[2].id<key.id) { if(ptr->right&&success==1) { prev=ptr; insertElementHelper(key,ptr->right,success,prev); } else { arrange(ptr,key,success); } } } } } Node* two_3_4_Tree::split(Node* ptr,Node* prev,Student key,int &success) { Node *temp=new Node; temp->array[0]=ptr->array[2]; if(ptr==root) { Node *temp1=new Node; temp1->array[0]=ptr->array[1]; temp1->count++; temp1->left=ptr; root=temp1; prev=root; temp1->leftMiddle=temp; } else if(prev->rightMiddle==NULL) { if(ptr==prev->left) { arrange(prev,ptr->array[1],success); prev->rightMiddle=prev->leftMiddle; prev->leftMiddle=temp; } else { if(ptr==prev->leftMiddle) { arrange(prev,ptr->array[1],success); prev->rightMiddle=temp; } } } else if(prev->right==NULL) { if(ptr==prev->left) { prev->right=prev->rightMiddle; prev->rightMiddle=prev->leftMiddle; prev->leftMiddle=temp; arrange(prev,ptr->array[1],success); } else if(ptr==prev->leftMiddle) { prev->right=prev->rightMiddle; prev->rightMiddle=temp; arrange(prev,ptr->array[1],success); } else if(ptr==prev->rightMiddle) { prev->right=temp; arrange(prev,ptr->array[1],success); } } ptr->array[1].id=-1; ptr->array[2].id=-1; ptr->count=1; temp->count++; if(ptr->left!=NULL&&ptr->leftMiddle!=NULL&&ptr->rightMiddle!=NULL&&ptr->right!=NULL) { temp->left=ptr->rightMiddle; temp->leftMiddle=ptr->right; ptr->rightMiddle=NULL; ptr->right=NULL; } if(key.id<prev->array[0].id) return prev->left; if(key.id>prev->array[0].id&&(key.id<prev->array[1].id||prev->array[1].id==-1)) return prev->leftMiddle; if(key.id>prev->array[1].id&&(key.id<prev->array[2].id||prev->array[2].id==-1)) return prev->rightMiddle; else return prev->right; } void two_3_4_Tree::deleteElement(int key,int &success) { Node *sibling=root; Node *prev=NULL; deleteElementHelper(key,sibling,prev,success); } void two_3_4_Tree::deleteElementHelper(int key,Node* sibling,Node* prev,int &success) { int prev1=key; Student s; if(root!=NULL) { if(sibling->count==1&&sibling!=root) { if(sibling==prev->left) mergeLeft(prev,sibling); else if(sibling==prev->leftMiddle) mergeLeftMiddle(prev,sibling); else if(sibling==prev->rightMiddle) mergeRightMiddle(prev,sibling); else if(sibling==prev->right) mergeRight(prev,sibling); } if(sibling->left==NULL) { removeLeaf(sibling,key,success); return; } prev=sibling; if(sibling->findKey(key,success)==1) { if(sibling->array[0].id==key) { s=predecessor(sibling->left,key); deleteElementHelper(key,sibling->left,prev,success); } else if(sibling->array[1].id==key) { s=predecessor(sibling->leftMiddle,key); deleteElementHelper(key,sibling->leftMiddle,prev,success); } else if(sibling->array[2].id==key) { s=predecessor(sibling->rightMiddle,key); deleteElementHelper(key,sibling->rightMiddle,prev,success); } } else if(sibling->findKey(key,success)==2) deleteElementHelper(key,sibling->left,prev,success); else if(sibling->findKey(key,success)==3) deleteElementHelper(key,sibling->leftMiddle,prev,success); else if(sibling->findKey(key,success)==4) deleteElementHelper(key,sibling->rightMiddle,prev,success); else if(sibling->findKey(key,success)==5) deleteElementHelper(key,sibling->right,prev,success); } if(s.id!=0) { Node* temp=searchNode(prev1,success); if(temp->array[0].id==prev1) temp->array[0]=s; else if(temp->array[1].id==prev1) temp->array[1]=s; else if(temp->array[2].id==prev1) temp->array[2]=s; } if(root->rightMiddle==NULL) { if(root->left->count==1&&root->leftMiddle->count==1&&root->left->left==NULL&&root->leftMiddle->left==NULL) { root->array[1]=root->array[0]; root->array[0]=root->left->array[0]; root->array[2]=root->leftMiddle->array[0]; root->count=3; delete root->left; delete root->leftMiddle; root->left=NULL; root->leftMiddle=NULL; } } } int two_3_4_Tree::checkCountDel(Node *ptr) { if(ptr->array[0].id==-1) return 0; else if(ptr->array[1].id==-1) return 1; else if(ptr->array[2].id==-1) return 2; else return 3; } Node* two_3_4_Tree::searchNode(int key,int &success) { Node* temp=root; while(temp->left) { if(temp->findKey(key,success)==1) return temp; else if(temp->findKey(key,success)==2) temp=temp->left; else if(temp->findKey(key,success)==3) temp=temp->leftMiddle; else if(temp->findKey(key,success)==4) temp=temp->rightMiddle; else if(temp->findKey(key,success)==5) temp=temp->right; } return temp; } void two_3_4_Tree::removeLeaf(Node*& ptr,int key,int &success) { if(ptr->findKey(key,success)==1) { if(ptr->array[0].id==key) { ptr->array[0]=ptr->array[1]; ptr->array[1]=ptr->array[2]; ptr->array[2].id=-1; } else if(ptr->array[1].id==key) { ptr->array[1]=ptr->array[2]; ptr->array[2].id=-1; } else ptr->array[2].id=-1; ptr->count=checkCountDel(ptr); } } Student two_3_4_Tree::predecessor(Node* current,int& key) { Node* temp=current; while(temp->left) { if(temp->count==3) temp=temp->right; else if(temp->count==2) temp=temp->rightMiddle; else if(temp->count==1) temp=temp->leftMiddle; } if(temp->count==3) { key=temp->array[2].id; return temp->array[2]; } else if(temp->count==2) { key=temp->array[1].id; return temp->array[1]; } else { key=temp->array[0].id; return temp->array[0]; } } void two_3_4_Tree::mergeLeft(Node*& prev,Node*& sibling) { if(prev->leftMiddle->count==1) { sibling->array[1]=prev->array[0]; sibling->array[2]=prev->leftMiddle->array[0]; sibling->count=checkCountDel(sibling); sibling->rightMiddle=prev->leftMiddle->left; sibling->right=prev->leftMiddle->leftMiddle; delete prev->leftMiddle; prev->leftMiddle=NULL; if(prev->count==1) { Node* temp=root; root=root->left; delete temp; } else { prev->array[0]=prev->array[1]; prev->array[1]=prev->array[2]; prev->array[2].id=-1; prev->count=checkCountDel(prev); prev->leftMiddle=prev->rightMiddle; prev->rightMiddle=prev->right; prev->right=NULL; } } else { sibling->array[1]=prev->array[0]; sibling->count=2; prev->array[0]=prev->leftMiddle->array[0]; sibling->rightMiddle=prev->leftMiddle->left; prev->leftMiddle->array[0]=prev->leftMiddle->array[1]; prev->leftMiddle->array[1]=prev->leftMiddle->array[2]; prev->leftMiddle->array[2].id=-1; prev->leftMiddle->count=checkCountDel(prev->leftMiddle); prev->leftMiddle->left=prev->leftMiddle->leftMiddle; prev->leftMiddle->leftMiddle=prev->leftMiddle->rightMiddle; prev->leftMiddle->rightMiddle=prev->leftMiddle->right; prev->leftMiddle->right=NULL; } } void two_3_4_Tree::mergeLeftMiddle(Node*& prev,Node*& sibling) { if(prev->left->count==1) { sibling->array[2]=sibling->array[0]; sibling->array[1]=prev->array[0]; sibling->array[0]=prev->left->array[0]; sibling->count=checkCountDel(sibling); sibling->right=sibling->leftMiddle; sibling->rightMiddle=sibling->left; sibling->leftMiddle=prev->left->leftMiddle; sibling->left=prev->left->left; delete prev->left; prev->left=NULL; if(prev->count==1) { Node* temp=root; root=root->leftMiddle; delete temp; } else { prev->array[0]=prev->array[1]; prev->array[1]=prev->array[2]; prev->array[2].id=-1; prev->count=checkCountDel(prev); prev->left=prev->leftMiddle; prev->leftMiddle=prev->rightMiddle; prev->rightMiddle=prev->right; prev->right=NULL; } } else if(prev->left->count==2) { sibling->array[1]=sibling->array[0]; sibling->array[0]=prev->array[0]; sibling->count=2; prev->array[0]=prev->left->array[1]; prev->left->array[1].id=-1; prev->left->count=checkCountDel(prev->left); sibling->rightMiddle=sibling->leftMiddle; sibling->leftMiddle=sibling->left; sibling->left=prev->left->rightMiddle; prev->left->rightMiddle=NULL; } else if(prev->left->count==3) { sibling->array[1]=sibling->array[0]; sibling->array[0]=prev->array[0]; sibling->count=2; prev->array[0]=prev->left->array[2]; prev->left->array[2].id=-1; prev->left->count=checkCountDel(prev->left); sibling->rightMiddle=sibling->leftMiddle; sibling->leftMiddle=sibling->left; sibling->left=prev->left->right; prev->left->right=NULL; } } void two_3_4_Tree::mergeRightMiddle(Node*& prev,Node*& sibling) { if(prev->leftMiddle->count==1) { sibling->array[2]=sibling->array[0]; sibling->array[1]=prev->array[1]; sibling->array[0]=prev->leftMiddle->array[0]; sibling->count=checkCountDel(sibling); sibling->right=sibling->leftMiddle; sibling->rightMiddle=sibling->left; sibling->leftMiddle=prev->leftMiddle->leftMiddle; sibling->left=prev->leftMiddle->left; delete prev->leftMiddle; prev->leftMiddle=NULL; prev->array[1]=prev->array[2]; prev->array[2].id=-1; prev->count=checkCountDel(prev); prev->leftMiddle=prev->rightMiddle; prev->rightMiddle=prev->right; prev->right=NULL; } else if(prev->leftMiddle->count==2) { sibling->array[1]=sibling->array[0]; sibling->array[0]=prev->array[1]; sibling->count=checkCountDel(sibling); prev->array[1]=prev->leftMiddle->array[1]; prev->leftMiddle->array[1].id=-1; prev->leftMiddle->count=checkCountDel(prev->leftMiddle); sibling->rightMiddle=sibling->leftMiddle; sibling->leftMiddle=sibling->left; sibling->left=prev->leftMiddle->rightMiddle; prev->leftMiddle->rightMiddle=NULL; } else if(prev->left->count==3) { sibling->array[1]=sibling->array[0]; sibling->array[0]=prev->array[1]; sibling->count=checkCountDel(sibling); prev->array[1]=prev->leftMiddle->array[2]; prev->leftMiddle->array[2].id=-1; prev->leftMiddle->count=checkCountDel(prev->leftMiddle); sibling->rightMiddle=sibling->leftMiddle; sibling->leftMiddle=sibling->left; sibling->left=prev->leftMiddle->right; prev->right->right=NULL; } } void two_3_4_Tree::mergeRight(Node*& prev,Node*& sibling) { if(prev->rightMiddle->count==1) { sibling->array[2]=sibling->array[0]; sibling->array[1]=prev->array[2]; sibling->array[0]=prev->rightMiddle->array[0]; sibling->count=checkCountDel(sibling); prev->array[2].id=-1; sibling->rightMiddle=sibling->left; sibling->right=sibling->leftMiddle; sibling->left=prev->rightMiddle->left; sibling->leftMiddle=prev->rightMiddle->leftMiddle; delete prev->rightMiddle; prev->rightMiddle=prev->right; prev->right=NULL; prev->count=checkCountDel(prev); } else if(prev->rightMiddle->count==2) { sibling->array[1]=sibling->array[0]; sibling->array[0]=prev->array[2]; sibling->count=checkCountDel(sibling); prev->array[2]=prev->rightMiddle->array[1]; prev->rightMiddle->array[1].id=-1; prev->rightMiddle->count=checkCountDel(prev->rightMiddle); sibling->rightMiddle=sibling->leftMiddle; sibling->leftMiddle=sibling->left; sibling->left=prev->rightMiddle->rightMiddle; prev->rightMiddle->rightMiddle=NULL; } else if(prev->rightMiddle->count==2) { sibling->array[1]=sibling->array[0]; sibling->array[0]=prev->array[2]; sibling->count=checkCountDel(sibling); prev->array[2]=prev->rightMiddle->array[2]; prev->rightMiddle->array[2].id=-1; prev->rightMiddle->count=checkCountDel(prev->rightMiddle); sibling->rightMiddle=sibling->leftMiddle; sibling->leftMiddle=sibling->left; sibling->left=prev->rightMiddle->right; prev->rightMiddle->right=NULL; } } void two_3_4_Tree::retrieveData(int key,Student& array,int& success) { retrieveHelper(root,key,array,success); } void two_3_4_Tree::retrieveHelper(Node* ptr,int key,Student& array,int &success) { Queue q; Node *temp; int count=0; q.enQueue(ptr,count); while(!q.isEmpty()) { temp=q.deQueue(); for(int i=0;i<temp->count;i++) { if(temp->array.id==key) { array=temp->array; success=1; return; } else success=0; } q.enQueue(temp->left,count); q.enQueue(temp->leftMiddle,count); q.enQueue(temp->rightMiddle,count); q.enQueue(temp->right,count); } } void two_3_4_Tree::resetTree() { deAllocat(root); } void two_3_4_Tree::deAllocat(Node*& current) { if(current) { Queue q; int count=0,value=0; Node *temp; q.enQueue(current,count); count=0; while(!q.isEmpty()) { temp=q.deQueue(); q.enQueue(temp->left,count); q.enQueue(temp->leftMiddle,count); q.enQueue(temp->rightMiddle,count); q.enQueue(temp->right,count); delete temp; temp=NULL; } } current=NULL; } void two_3_4_Tree::printBreath() { breathTraversal(root); } void two_3_4_Tree::breathTraversal(Node* ptr) { if(root) { Queue q; int count=0,value=0; Node *temp; q.enQueue(ptr,count); count=0; while(!q.isEmpty()) { temp=q.deQueue(); for(int i=0;temp->array.id!=-1&&i<3;i++) cout <<temp->array.id<<" "; cout <<" "; q.enQueue(temp->left,count); q.enQueue(temp->leftMiddle,count); q.enQueue(temp->rightMiddle,count); q.enQueue(temp->right,count); if(value==0) { value=count; count=0; cout <<endl; } value--; } } else cout <<"No Data Present In The Key"<<endl; } void two_3_4_Tree::saveToFileBreath() { ofstream obj; char fileName[40]; cout <<"Please Enter the File Name and Path"<<endl; cin >>fileName; obj.open(fileName,ios::out); if(!obj) { cout <<"File cannot be created"<<endl; return; } saveHelper(root,obj); obj <<"^Z"; cout <<"Your Data Has Been Saved"<<endl; obj.close(); } void two_3_4_Tree::saveHelper(Node* ptr,ofstream& obj) { Queue q; int count=0,value=0; Node *temp; q.enQueue(ptr,count); count=0; while(!q.isEmpty()) { temp=q.deQueue(); for(int i=0;i<temp->count;i++) obj <<temp->array.id<<" "; obj <<" "; q.enQueue(temp->left,count); q.enQueue(temp->leftMiddle,count); q.enQueue(temp->rightMiddle,count); q.enQueue(temp->right,count); if(value==0) { value=count; count=0; obj <<'\n'; } value--; } } void two_3_4_Tree::saveToFileInorder() { ofstream obj; char fileName[40]; cout <<"Please Enter The File Name and Path"<<endl; cin >>fileName; obj.open(fileName,ios::out); if(!obj) { cout <<"File Cannot Be Created"<<endl; return; } saveHelperInorder(root,obj); obj <<"^Z"; obj.close(); } void two_3_4_Tree::saveHelperInorder(Node *ptr,ofstream& obj) { if(ptr!=0) { saveHelperInorder(ptr->left,obj); if(ptr->array[0].id!=-1) obj <<ptr->array[0].id<<'\n'<<ptr->array[0].name<<'\n'<<ptr->array[0].Cgpa<<'\n'; saveHelperInorder(ptr->leftMiddle,obj); if(ptr->array[1].id!=-1) obj <<ptr->array[1].id<<'\n'<<ptr->array[1].name<<'\n'<<ptr->array[1].Cgpa<<'\n'; saveHelperInorder(ptr->rightMiddle,obj); if(ptr->array[2].id!=-1) obj <<ptr->array[2].id<<'\n'<<ptr->array[2].name<<'\n'<<ptr->array[2].Cgpa<<'\n'; saveHelperInorder(ptr->right,obj); } } void two_3_4_Tree::getFromFile(int &success) { ifstream obj; Student array; char get[30]; char fileName[30]; cout <<"Enter the file Name"<<endl; cin >>fileName; obj.open(fileName,ios::in); if(!obj) { success=0; return; } while(!obj.eof()) { obj.getline(get,80); array.id=atoi(get); obj.getline(array.name,80); obj.getline(get,80); array.Cgpa=atof(get); if(array.id!=0) insertElement(array); success=1; } obj.close(); } void two_3_4_Tree::inOrderTraversal() { inOrderHelper(root); } void two_3_4_Tree::inOrderHelper(Node* ptr) { if(root==NULL) { cout <<"There Is No Data In The Tree"<<endl; return; } else if(ptr!=0) { inOrderHelper(ptr->left); if(ptr->array[0].id!=-1) cout <<ptr->array[0]<<endl; inOrderHelper(ptr->leftMiddle); if(ptr->array[1].id!=-1) cout <<ptr->array[1]<<endl; inOrderHelper(ptr->rightMiddle); if(ptr->array[2].id!=-1) cout <<ptr->array[2]<<endl; inOrderHelper(ptr->right); } } void two_3_4_Tree::printSortedOrder() { inOrderTraversal(); } int main() { two_3_4_Tree t,key; Student value,array; char fileName[10]; fileName[0]='\0'; int id=0; int choice=0; int success=1; while(1) { cout <<"1: Enter The Record"<<endl; cout <<"2: Delete The Record"<<endl; cout <<"3: Retrive The Record"<<endl; cout <<"4: Print The Data BreathFirst"<<endl; cout <<"5: Print The Data In Sorted Order"<<endl; cout <<"6: Save ID To File BreathFirst"<<endl; cout <<"7: Save Records To File In Sorted Order"<<endl; cout <<"8: Retrive Records From The File"<<endl; cout <<"9: Reset The Tree"<<endl; cout <<"Q: Exit"<<endl; choice=getch(); switch(choice) { case '1':{ cin >>value; int success=t.insertElement(value); if(success==0) cout <<"Id Already Exist"<<endl; getch();} break; case '2':{ success=0; cout <<"Please enter the ID to be deleted"<<endl; cin >>id; t.deleteElement(id,success); if(success==1) cout <<"The id "<<id<<" has been deleted"<<endl; else cout <<"Id Not Fount"<<endl; getch();} break; case '3': { success=0; cout <<"Please enter the ID of array to be retrieved"<<endl; cin >>id; t.retrieveData(id,array,success); if(success==1) cout <<array; else cout <<"Cannot Found The ID"<<endl; getch();} break; case '4': { t.printBreath(); getch();} break; case '5': { t.printSortedOrder(); getch();} break; case '6': { t.saveToFileBreath(); getch();} break; case '7': { t.saveToFileInorder(); cout <<"Your Data Has Been Saved"<<endl; getch();} break; case '8': { t.getFromFile(success); if(success==0) cout <<"File Not Found"<<endl; getch();} break; case '9': { t.resetTree(); cout <<"Tree Has Been Reseted"<<endl; getch();} break; case 'Q': case 'q': exit(0); break; } } system ("pause"); return 0;} |
|
sanjago4e
Група Регистриран: 23.Јануари.2009 Локација: Macedonia Статус: Офлајн Поени: 74 |
Опции за коментарот
Благодарам(0)
|
baram programa vo c++ ista kako ona sto e so iks tocka,no da bide so iganje na sah
vo programata mora da se opfatat site potezi na sekoja od figurite ako nekoj znae da mi kaze nesto oti ne mozam da ja napravam celata programa Изменето од sanjago4e - 27.Јануари.2009 во 10:28 |
|
Flix
Профил од член
Испрати лична порака
Најди пораки од член
Посети го сајтот на членот
Додај во листа на пријатели
Сениор Клабинг Регистриран: 14.Септември.2005 Статус: Офлајн Поени: 9229 |
Опции за коментарот
Благодарам(0)
|
За шах тешко ама еве ти програма како x и точка па можи ќе ти помогни. Ако најдам за шах ќе ти пратам. http://rapidshare.com/files/190130493/Trica.rar.html И еве имам за шах ама од C e ќе смениш нешто за C++ да биди не е проблем. http://rapidshare.com/files/190132241/Chess_Game1888205142005.zip.html Изменето од FLipsi - 27.Јануари.2009 во 13:45 |
|
Внеси реплика | страница <1 23456 12> |
Tweet
|
Скок до | Овластувања Вие не може да внесувате нови теми на форумот Вие не може да одговарате на теми на форумот Вие не може да ги бришете вашите пораки од форумот Вие не може да ги менувате вашите пораки од форумот Вие не може да креирате анкета на форумот Вие не може да гласате на форумот |