1 //想了许久 2 #include "../../st.h" 3 4 int f=0; //判断句子是否正确 5 6 void sent(); 7 8 void conj() 9 { 10 string st; 11 cin>>st; 12 if(st=="and"||st=="or"||st=="but") 13 sent(); 14 15 } 16 17 void verb() 18 { 19 string st; 20 cin>>st; 21 char c; 22 if(st=="rules"||st=="fly"||st=="swim") 23 { 24 c=getchar(); 25 if(c=='.') 26 { 27 f=1; 28 return; 29 } 30 else if(c=='\n') 31 { 32 f=0;return; 33 } 34 else 35 { 36 cin.putback(c); 37 conj(); 38 } 39 } 40 41 } 42 43 void noun() 44 { 45 string st; 46 cin>>st; 47 if(st=="birds"||st=="fish"||st=="c++") 48 verb(); 49 } 50 51 void sent() 52 { 53 string st; 54 cin>>st; 55 if(st=="the"||st=="an"||st=="a") 56 noun(); 57 else if(st=="birds"||st=="fish"||st=="c++") 58 verb(); 59 60 } 61 62 int main() 63 { 64 sent(); 65 if(f==1) 66 cout<<"OK"; 67 else 68 cout<<"no ok"; 69 while(1); 70 return 1; 71 }
1 #include "../../st.h" 2 3 double p(int a,int b) 4 { 5 int i; 6 int j=a-b; 7 for(i=a-1;i>0;i--) 8 a*=i; 9 for(i=j-1;i>0;i--) 10 j*=i; 11 return a/j; 12 } 13 14 double c(int a,int b) 15 { 16 int i; 17 int j=b; 18 for(i=j-1;i>0;i--) 19 j*=i; 20 return p(a,b)/j; 21 } 22 23 int main() 24 { 25 int a,b; 26 cin>>a>>b; 27 while(a<b) 28 { 29 cout<<"a should >=b"<<endl; 30 cout<<"enter a and b:"<<endl; 31 cin>>a>>b; 32 } 33 char ch; 34 cout<<"input c or p:"<<endl; 35 cin>>ch; 36 if(ch=='p') 37 cout<<"p "<<p(a,b)<<endl; 38 else 39 cout<<"c "<<c(a,b)<<endl; 40 while(1); 41 return 0; 42 }
1 #include "../../st.h" 2 3 class Token{ 4 public: 5 char kind; 6 double value; 7 Token(char ch) 8 :kind(ch),value(0){} 9 Token(char ch,double val) 10 :kind(ch),value(val){} 11 }; 12 13 class Token_stream{ 14 public: 15 Token_stream(); 16 Token get(); 17 void putback(Token t); 18 private: 19 bool full; 20 Token buffer; 21 }; 22 23 Token_stream::Token_stream() 24 :full(false),buffer(0) 25 { 26 } 27 28 void Token_stream::putback(Token t) 29 { 30 if(full) error("putback() into a full buffer"); 31 buffer=t; 32 full=true; 33 } 34 35 Token Token_stream::get() 36 { 37 if(full){ 38 full=false; 39 return buffer; 40 } 41 char ch; 42 cin>>ch; 43 switch(ch){ 44 case '=': case 'q': case '(': case ')': case '{': 45 case '}': case '+': case '-': case '*': case '/': 46 case '!': 47 return Token(ch); 48 case '.': 49 case '0': case '1': case '2': case '3': case '4': 50 case '5': case '6': case '7': case '8': case '9': 51 { 52 cin.putback(ch); 53 double val; 54 cin>>val; 55 return Token('8',val); 56 } 57 default: 58 error("bad token"); 59 } 60 } 61 62 Token_stream ts; 63 double expression(); 64 65 66 67 double primary() 68 { 69 70 Token t=ts.get(); 71 switch(t.kind){ 72 case '(': 73 { 74 double d=expression(); 75 t=ts.get(); 76 if(t.kind!=')') 77 error("')'expected"); 78 return d; 79 } 80 case '8': 81 return t.value; 82 default: 83 error("primary expected"); 84 } 85 } 86 87 double primary1() 88 { 89 Token t=ts.get(); 90 while(true) 91 { 92 switch(t.kind){ 93 case '{': 94 { 95 double d=expression(); 96 t=ts.get(); 97 if(t.kind!='}') 98 error("'}'expected"); 99 return d; 100 } 101 default: 102 ts.putback(t); 103 return primary(); 104 } 105 } 106 107 108 } 109 110 double primary2() 111 { 112 double left=primary1(); 113 Token t=ts.get(); 114 while(true) 115 { 116 if(t.kind=='!') 117 { 118 if(left==0) 119 left=1; 120 for(int i=left-1;i>0;i--) 121 left*=i; 122 t=ts.get(); 123 } 124 else 125 { 126 ts.putback(t); 127 return left; 128 } 129 } 130 } 131 132 double term() 133 { 134 double left=primary2(); 135 Token t=ts.get(); 136 137 while(true){ 138 switch(t.kind){ 139 140 case '*': 141 left*=primary2(); 142 t=ts.get(); 143 break; 144 case '/': 145 { 146 double d=primary2(); 147 if(d==0) 148 error ("divide by 0"); 149 left /=d; 150 t=ts.get(); 151 break; 152 } 153 default: 154 ts.putback(t); 155 return left; 156 } 157 } 158 } 159 160 double expression() 161 { 162 double left=term(); 163 Token t=ts.get(); 164 while(true){ 165 switch(t.kind){ 166 case '+': 167 left+=term(); 168 t=ts.get(); 169 break; 170 case '-': 171 left-=term(); 172 t=ts.get(); 173 break; 174 default: 175 ts.putback(t); 176 return left; 177 } 178 } 179 } 180 181 int main() 182 { 183 try{ 184 double val=0; 185 while(cin){ 186 Token t=ts.get(); 187 if(t.kind=='q') break; 188 if(t.kind=='=') 189 cout<<val<<'\n'; 190 else 191 ts.putback(t); 192 val=expression(); 193 } 194 195 } 196 197 catch(exception&e){ 198 cerr<<e.what()<<endl; 199 while(1); 200 return 1; 201 } 202 203 catch(...){ 204 cerr<<"exception\n"; 205 while(1); 206 return 2; 207 } 208 209 }
1 #include "../../st.h" 2 3 class Token{ 4 public: 5 char kind; 6 int value; 7 Token(char ch) 8 :kind(ch),value(0){} 9 Token(char ch,int val) 10 :kind(ch),value(val){} 11 }; 12 13 class Token_stream{ 14 public: 15 Token_stream(); 16 Token get(); 17 void putback(Token t); 18 private: 19 bool full; 20 Token buffer; 21 }; 22 23 Token_stream::Token_stream() 24 :full(false),buffer(0) 25 { 26 } 27 28 void Token_stream::putback(Token t) 29 { 30 if(full) error("putback() into a full buffer"); 31 buffer=t; 32 full=true; 33 } 34 35 Token Token_stream::get() 36 { 37 if(full){ 38 full=false; 39 return buffer; 40 } 41 char ch; 42 cin>>ch; 43 switch(ch){ 44 case '=': case 'q': case '(': case ')': case '{': 45 case '}': case '&': case '^': case '|': case '~': 46 case '!': 47 return Token(ch); 48 case '-': 49 case '0': case '1': case '2': case '3': case '4': 50 case '5': case '6': case '7': case '8': case '9': 51 { 52 cin.putback(ch); 53 int val; 54 cin>>val; 55 return Token('8',val); 56 } 57 default: 58 error("bad token"); 59 } 60 } 61 62 Token_stream ts; 63 int term2(); 64 65 66 int primary() 67 { 68 69 Token t=ts.get(); 70 switch(t.kind){ 71 case '(': 72 { 73 int d=term2(); 74 t=ts.get(); 75 if(t.kind!=')') 76 error("')'expected"); 77 return d; 78 } 79 case '8': 80 return t.value; 81 default: 82 error("primary expected"); 83 } 84 } 85 86 int primary1() 87 { 88 Token t=ts.get(); 89 while(true) 90 { 91 switch(t.kind){ 92 case '{': 93 { 94 int d=term2(); 95 t=ts.get(); 96 if(t.kind!='}') 97 error("'}'expected"); 98 return d; 99 } 100 default: 101 ts.putback(t); 102 return primary(); 103 } 104 } 105 106 107 } 108 109 int primary2() 110 { 111 112 Token t=ts.get(); 113 if(t.kind!='!'&&t.kind!='~'){ 114 ts.putback(t); 115 int left=primary1(); 116 return left; 117 } 118 int left=primary1(); 119 while(true) 120 { 121 if(t.kind=='!') 122 { 123 left=!left; 124 t=ts.get(); 125 } 126 else if(t.kind=='~') 127 { 128 left=~left; 129 t=ts.get(); 130 } 131 else 132 { 133 ts.putback(t); 134 return left; 135 } 136 } 137 } 138 139 int term() 140 { 141 int left=primary2(); 142 Token t=ts.get(); 143 144 while(true){ 145 switch(t.kind){ 146 147 case '&': 148 left&=primary2(); 149 t=ts.get(); 150 break; 151 default: 152 ts.putback(t); 153 return left; 154 } 155 } 156 } 157 158 int term1() 159 { 160 int left=term(); 161 Token t=ts.get(); 162 163 while(true){ 164 switch(t.kind){ 165 166 case '^': 167 left^=term(); 168 t=ts.get(); 169 break; 170 default: 171 ts.putback(t); 172 return left; 173 } 174 } 175 } 176 177 int term2() 178 { 179 int left=term1(); 180 Token t=ts.get(); 181 182 while(true){ 183 switch(t.kind){ 184 185 case '|': 186 left|=term1(); 187 t=ts.get(); 188 break; 189 default: 190 ts.putback(t); 191 return left; 192 } 193 } 194 } 195 196 197 int main() 198 { 199 try{ 200 int val=0; 201 while(cin){ 202 Token t=ts.get(); 203 if(t.kind=='q') break; 204 if(t.kind=='=') 205 cout<<val<<'\n'; 206 else 207 ts.putback(t); 208 val=term2(); 209 } 210 211 } 212 213 catch(exception&e){ 214 cerr<<e.what()<<endl; 215 while(1); 216 return 1; 217 } 218 219 catch(...){ 220 cerr<<"exception\n"; 221 while(1); 222 return 2; 223 } 224 225 }