source: liacs/da/opdr2a/testtrie.cc@ 138

Last change on this file since 138 was 2, checked in by Rick van der Zwet, 15 years ago

Initial import of data of old repository ('data') worth keeping (e.g. tracking
means of URL access statistics)

File size: 7.6 KB
Line 
1#include<iostream.h>
2#include<fstream.h>
3#include<string.h>
4#include<iomanip.h>
5#ifndef sc5
6#define sc5 '\0'
7#endif
8#define sv1 30
9#define sc8 -1
10#define sv14 256
11#define sc7 17
12char sv9[sc7][25]={"","AtLeaf","GoRoot","ExistsChild","GoChild",
13"FirstChild","NextChild","AddChild","RemoveChild","PutInfo",
14"GetInfo","GotoNode","GetNode","Show","Show (2)","Opnieuw beginnen","Stoppen"};
15#include "general.h"
16#include "trie.cc"
17#include "showlist.h"
18#include "leestekst.h"
19ifstream sv10;ofstream sv11;int sv12,sv13;
20void sf5(char*sv29,char*sv75,char*sv21,char*sv22){int sv30;
21sv30=strcspn(sv29,".");strncpy(sv75,sv29,sv30);sv75[sv30]=sc2;
22strcat(sv75,"_1.inv");strncpy(sv21,sv29,sv30);sv21[sv30]=sc2;
23strcat(sv21,".uit");strncpy(sv22,sv29,sv30);sv22[sv30]=sc2;strcat(sv22,".con");
24}/*sf5*/void sf18(ofstream&sv76,int sv330,char*sv77,char*sv78){sv76<<sv330;
25sv76<<sv77<<sv78;sv76<<sc1;}char sf6(){char sv17;int sv33;if(sv12)cin>>sv17;else
26{sv10>>sv33;sv17=sv33;sf2(sv10);cout<<sv17<<sc1;sf18(sv11,sv33,"","");}
27return sv17;}int sf7(char sv17){int sv33;sv33=sv17;if(sv33<0)sv33+=sv14;
28return sv33;}void sf8(Trie<int>*T){cout<<sc1;if(T->AtLeaf())
29{cout<<"We bevinden ons in een blad.\n";if(!sv12)sf18(sv11,1,"","");}else
30{cout<<"We bevinden ons niet in een blad.\n";if(!sv12)sf18(sv11,0,"","");}}
31void sf9(Trie<int>*T){char sv17;cout<<sc1;cout<<
32"Van welk karakter wilt u weten of het een kind van de huidige knoop is : ";
33sv17=sf6();cout<<sc1;if(T->ExistsChild(sv17))
34{cout<<"Het karakter `"<<sv17<<"' is een kind van de huidige knoop.\n";if(!sv12)
35sf18(sv11,1,"","");}else
36{cout<<"Het karakter `"<<sv17<<"' is geen kind van de huidige knoop.\n";
37if(!sv12)sf18(sv11,0,"","");}}void sf10(Trie<int>*T){char sv17;cout<<sc1;cout
38<<"Naar welk kind (karakter) van de huidige knoop wilt u heen gaan : ";
39sv17=sf6();if(T->ExistsChild(sv17))T->GoChild(sv17);else{cout<<sc1;
40cout<<"Het karakter `"<<sv17<<"' is geen kind van de huidige knoop.\n";
41cout<<"We kunnen er dus ook niet heengaan.\n";}}void sf11(Trie<int>*T)
42{char sv17;cout<<sc1;sv17=T->FirstChild();if((sv17!=sc5)||(T->ExistsChild(sc5)))
43{cout<<"Het eerste kind van de huidige knoop is `"<<sv17<<"'.\n";if(!sv12)
44sf18(sv11,sf7(sv17),"","");}else
45{cout<<"De huidige knoop heeft geen kinderen.\n";if(!sv12)sf18(sv11,sc8,"","");}
46}bool sf19(Trie<int>*T,char sv17,char sv34){char sv49;if(sv17==sv34)
47return false;else{sv49=T->FirstChild();while((sv49!=sv17)&&(sv49!=sv34))
48sv49=T->NextChild(sv49);if(sv49==sv17)return true;else return false;}}
49bool sf20(Trie<int>*T,char sv17,char sv34){if(sv34!=sc5)return true;else
50if(!(T->ExistsChild(sc5)))return false;else if(sf19(T,sv17,sc5))return true;else
51return false;}void sf12(Trie<int>*T){char sv17,sv34;cout<<sc1;
52cout<<"Ten opzichte van welk kind (karakter) van de huidige knoop wilt u\n";
53cout<<"het volgende kind weten : ";sv17=sf6();cout<<sc1;if(T->ExistsChild(sv17))
54{sv34=T->NextChild(sv17);if(sf20(T,sv17,sv34))
55{cout<<"Het volgende kind van de huidige knoop na het kind `"<<sv17
56<<"' is `"<<sv34<<"'.\n";if(!sv12)sf18(sv11,sf7(sv34),"","");}else
57{cout<<"De huidige knoop heeft geen volgende kinderen na het kind `"
58<<sv17<<"'.\n";if(!sv12)sf18(sv11,sc8,"","");}}else
59{cout<<"De huidige knoop heeft geen kind `"<<sv17<<"',\n";
60cout<<"dus een volgend kind is ook niet gedefinieerd.\n";}}
61void sf13(Trie<int>*T){char sv17;cout<<sc1;
62cout<<"Welk karakter wilt u als kind toevoegen aan de huidige knoop : ";
63sv17=sf6();cout<<sc1;
64cout<<"We roepen nu AddChild met parameter `"<<sv17<<"' aan.\n";
65T->AddChild(sv17);}void sf14(Trie<int>*T,TrieNode<int>*&sv35){char sv17;
66TrieNode<int>*sv36;bool sv50;cout<<sc1;
67cout<<"Welk kind van de huidige knoop wilt u verwijderen : ";sv17=sf6();
68if(T->ExistsChild(sv17)){sv36=T->GetNode();T->GoChild(sv17);
69if(T->GetNode()==sv35)sv50=true;else sv50=false;T->GotoNode(sv36);cout<<sc1;
70cout<<"We roepen nu RemoveChild met parameter `"<<sv17<<"' aan.\n";
71T->RemoveChild(sv17);if(sv50&&(!(T->ExistsChild(sv17))))sv35=sc3;}else
72{cout<<sc1;cout<<"De huidige knoop heeft geen kind `"<<sv17<<"',\n";
73cout<<"dus we kunnen hem ook niet verwijderen.\n";}}void sf15(Trie<int>*T)
74{int sv33;cout<<sc1;
75cout<<"Welk getal wilt u in het info-veld van de huidige knoop plaatsen : ";
76if(sv12)cin>>sv33;else{sv10>>sv33;sf2(sv10);cout<<sv33<<sc1;
77sf18(sv11,sv33,"","");}T->PutInfo(sv33);}void sf16(Trie<int>*T){int sv33;
78sv33=T->GetInfo();cout<<sc1;
79cout<<"Het info-veld van de huidige knoop bevat het getal "<<sv33<<".\n";
80if(!sv12)sf18(sv11,sv33,"","");}void sf17(Trie<int>*T,TrieNode<int>*sv35){
81if(sv35!=sc3)T->GotoNode(sv35);else{cout<<sc1;
82cout<<"We hebben geen adres om naar toe te gaan.\n";}}
83bool sf21(char sv17,int&sv51){if(sv17!=sc5)return true;else if(sv51>0){sv51--;
84return true;}else return false;}template<class st1>
85void sf22(Trie<st1>*T,st6*sv79,char sv44,int&sv52,TrieNode<st1>*sv46){st5*sv81;
86st6*sv80;TrieNode<st1>*sv47;char sv17;int sv51;bool sv53;sv47=T->GetNode();
87if(sv47==sv46)sv81=new st5((int)(T->GetInfo()),sv44,true,sv52);else
88sv81=new st5((int)(T->GetInfo()),sv44,false,sv52);if(sv79->sf30()==sc3)
89{sv79->sf30(sv81);sv79->sf31(sv81);}else{sv79->sf31()->sf29(sv81);
90sv79->sf31(sv81);}if(T->ExistsChild(sc5))sv51=1;else sv51=0;
91sv17=T->FirstChild();sv53=false;while(sf21(sv17,sv51)){sv53=true;
92T->GoChild(sv17);if(sv79->sf29()==sc3){sv80=new st6();sv79->sf29(sv80);}
93sf22(T,sv79->sf29(),sv17,sv52,sv46);T->GotoNode(sv47);sv17=T->NextChild(sv17);
94sv52++;}if(sv53)sv52--;}void sf23(st6*sv54,bool sv55){st6*sv79;st5*sv81;
95int sv52,sv56,sv45;sv79=sv54;sv45=0;do{sv81=sv79->sf30();sv52=0;do
96{sv56=sv81->sf28();while(sv52<sv56-1){cout<<" ";sv52++;}
97cout<<setw(4)<<sv81->sf25();if(sv81->sf27())cout<<'*';else cout<<',';
98cout<<sv81->sf26();if((!sv12)&&(sv55)){sf18(sv11,sv45,"","");
99sf18(sv11,sv52,"","");sf18(sv11,sf7(sv81->sf26()),"","");}sv52++;
100sv81=sv81->sf29();}while(sv81!=sc3);cout<<sc1;sv79=sv79->sf29();sv45++;
101}while(sv79!=sc3);}template<class st1>void sf24(Trie<st1>*T,bool sv55){st6*sv57;
102int sv52;TrieNode<st1>*sv46;cout<<sc1;cout<<"De trie ziet er als volgt uit:\n";
103sv46=T->GetNode();T->GoRoot();sv57=new st6();sv52=1;sf22(T,sv57,' ',sv52,sv46);
104sf23(sv57,sv55);delete sv57;T->GotoNode(sv46);}int main(){int sv39,sv38,i,sv40;
105Trie<int>*T;TrieNode<int>*sv35;ifstream sv41;char sv29[sv1],sv75[sv1],sv21[sv1],
106sv22[sv1];bool sv42;cout.setf(ios::unitbuf);sv41.open("test.dat",ios::in);
107if(sv41){sf3(sv41,"InterActief = ");sv41>>sv12;}else
108{cout<<"We konden `test.dat' niet openen\n";cout<<sc1;sv12=1;}if(!sv12)
109{sf3(sv41,"Invoer = ");sv41>>sv29;sf3(sv41,"Controleren = ");sv41>>sv13;}else
110sv13=0;if(sv41)sv41.close();if(!sv12){sf5(sv29,sv75,sv21,sv22);
111sv10.open(sv29,ios::in);if(sv10){sv11.open(sv21,ios::out);}else
112{cout<<"We konden "<<sv29<<" niet openen\n";cout<<sc1;sv12=1;sv13=0;}}
113sv39=sc7-1;sv38=(sv39+1)/2;T=new Trie<int>;sv35=sc3;do{cout<<sc1;
114for(i=1;i<=sv38;i++){cout<<setw(2)<<i;cout.unsetf(ios::right);cout.setf(ios::left);
115cout<<". "<<setw(20)<<sv9[i];if(i+sv38<=sv39){cout.setf(ios::right);
116cout<<setw(2)<<i+sv38;cout<<". "<<sv9[i+sv38];}cout<<sc1;}cout<<sc1;
117cout<<"Maak een keuze : ";if(sv12)cin>>sv40;else{sv10>>sv40;sf2(sv10);
118cout<<sv40<<sc1;if((sv40>=1)&&(sv40<=sv39)){sf18(sv11,sv40,"","");}else
119{sf18(sv11,sv40,"","");}}switch(sv40){case 1:sf8(T);break;case 2:T->GoRoot();
120break;case 3:sf9(T);break;case 4:sf10(T);break;case 5:sf11(T);break;
121case 6:sf12(T);break;case 7:sf13(T);break;case 8:sf14(T,sv35);break;
122case 9:sf15(T);break;case 10:sf16(T);break;case 11:sf17(T,sv35);break;
123case 12:sv35=T->GetNode();break;case 13:sf24(T,false);break;
124case 14:sf24(T,true);break;case 15:delete T;T=new Trie<int>;sv35=sc3;break;
125case 16:break;default:cout<<sc1;
126cout<<"Verkeerde invoer. Probeer het nog eens.\n";}}while(sv40!=16);delete T;
127if(!sv12){sv11.close();sv10.close();}if(sv13){sv42=sf4(sv21,sv22);if(sv42)
128cout<<"GELIJK\n";else cout<<"NIET GELIJK\n";}return 0;}
Note: See TracBrowser for help on using the repository browser.