Π§ΡΠΎΠ±Ρ ΡΠΏΡΠ°Π²ΠΈΡΡΡΡ Ρ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ, Π±ΡΠ» ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½ Π°ΠΏΠΏΡΠ°Ρ inline-ΡΡΠ½ΠΊΡΠΈΠΉ. Π€ΡΠ½ΠΊΡΠΈΡ, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½Π°Ρ (Π° Π½Π΅ ΠΏΡΠΎΡΡΠΎ ΠΎΠΏΡΠ°Π½Π½Π°Ρ) Π² ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΈ ΠΊΠ»Π°ΡΡΠ°, ΡΡΠΈΡΠ°Π΅ΡΡΡ inline. ΠΡΠΎ Π·Π½Π°ΡΠΈΡ, Π½Π°ΡΠΈΠΌΠ΅Ρ, ΡΡΠΎ Π² ΡΡΠ½ΠΊΡΠΈΡΡ , ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠ΅ Π²ΡΡΠ΅ char_stack, Π½Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΈΡ Π²ΡΠ·ΠΎΠ²ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΉ ΠΊΡΠΎΠΌΠ΅ ΡΠ΅Ρ , ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π²ΡΠ²ΠΎΠ΄Π°! ΠΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, Π½Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΈΡ Π·Π°ΡΡΠ°Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠΎΠΈΡ ΠΏΡΠΈΠ½ΠΌΠ°ΡΡ Π²ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΏΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΊΠ»Π°ΡΡΠ°. ΠΡΠ±ΠΎΠ΅, Π΄Π°ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅ ΠΌΠ»Π΅Π½ΡΠΊΠΎΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅, ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°ΡΡ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ. ΠΡΠΎ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠ΅ ΡΠ½ΠΈΠΌΠ°Π΅Ρ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΡΡ ΡΠ°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ Π² ΠΏΠΎΠ»ΡΠ·Ρ ΠΎΡΠΊΡΡΡΡΡ ΡΠ»Π΅Π½ΠΎΠ² Π΄Π°Π½Π½ΡΡ .
Π€ΡΠ½ΠΊΡΠΈΡ ΡΠ»Π΅Π½ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΎΠΏΠΈΡΠ°ΡΡ ΠΊΠ°ΠΊ inline Π²Π½Π΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠ°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ: char char_stack (* int size; char* top;
char* s; public: char pop(); // ... *);
inline char char_stack::pop() (* return *βtop; *)
5.3 ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ ΠΈ Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ
Π§ΡΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ Ρ ΠΎΡΠΎΡΠΈΠΉ ΠΊΠ»Π°ΡΡ? ΠΠ΅ΡΡΠΎ, ΠΈΠΌΠ΅ΡΡΠ΅Π΅ Π½Π±ΠΎΠ»ΡΡΠΎΠ΅ ΠΈ Ρ ΠΎΡΠΎΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ. ΠΠ΅ΡΡΠΎ, ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΠΊΠ°ΠΊ Β«ΡΠ΅ΡΠ½ΡΠΉ ΡΡΠΈΠΊΒ», ΠΊΠΎΡΠΎΡΡΠΌ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ ΡΡΠΎΠ³ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ. ΠΠ΅ΡΡΠΎ, ΡΡΠ΅ ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π»ΡΠ±ΡΠΌ ΠΌΡΡΠ»ΠΈΠΌΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ ΠΈΠ·ΠΌΠ½ΠΈΡΡ, Π½Π΅ ΠΏΠΎΠ²Π»ΠΈΡΠ² Π½Π° ΡΠΏΠΎΡΠΎΠ± ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ. ΠΠ΅ΡΡΠΎ, ΡΠ΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Ρ ΠΎΡΠ΅ΡΡ ΠΈΠΌΠ΅ΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ.
ΠΠ»Ρ Π²ΡΠ΅Ρ Π²ΠΈΠ΄ΠΎΠ² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠ² ΡΡΡΠ΅ΡΡΠ²ΡΡΡ ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ: ΡΠ°Π±Π»ΠΈΡΡ, ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π°, ΡΠΏΠΈΡΠΊΠΈ, Π²Π΅ΠΊΡΠΎΡΠ°, ΡΠ»ΠΎΠ²Π°ΡΠΈ ΠΈ Ρ.Π΄. Π’Π°ΠΊΠΎΠΉ ΠΊΠ»Π°ΡΡ ΠΈΠΌΠ΅Π΅Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Β«Π²ΡΡΠ°Π²ΠΈΡΡΒ», ΠΎΠ±ΡΡΠ½ΠΎ ΠΎΠ½ ΡΠ°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ ΠΎΠΏΠ΅ΡΡΠΈΠΈ Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠΎΠ³ΠΎ, Π±ΡΠ» Π»ΠΈ Π²ΡΡΠ°Π²Π»Π΅Π½ Π΄Π°Π½Π½ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ. Π Π½Π΅ΠΌ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π΄Π»Ρ ΠΎΡΡΡΠ΅ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π²ΡΠ΅Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅, ΠΈ ΠΊΡΠΎΠΌΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΏΡΠΎΡΠ΅Π³ΠΎ, Π² Π½Π΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠ΅ΡΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π΄Π»Ρ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°. ΠΠ±ΡΡΠ½ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ½ΡΠ΅ (ΡΠΎ Π΅ΡΡΡ, Π²ΠΌΠ΅ΡΠ°ΡΡΠΈΠ΅) ΠΊΠ»Π°ΡΡΡ ΠΈΠΌΠ΅ΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΡ ΠΈ Π΄Π΅ΡΡΡΡΠΊΡΠΎΡΡ.
Π‘ΠΎΠΊΡΡΡΠΈΠ΅ Π΄Π°Π½Π½ΡΡ ΠΈ ΠΏΡΠΎΠ΄ΡΠΌΠ°Π½Π½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΌΠΎΠΆΠ΅Ρ Π΄Π°ΡΡ ΠΊΠΎΡΠ΅ΠΏΡΠΈΡ ΠΌΠΎΠ΄ΡΠ»Ρ (ΡΠΌ. Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ #4.4: ΡΠ°ΠΉΠ»Ρ ΠΊΠ°ΠΊ ΠΌΠΎΠ΄ΡΠ»ΠΈ). ΠΠ»Π°ΡΡ, ΠΎΠ΄Π½Π°ΠΊΠΎ, ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΈΠΏΠΎΠΌ. Π§ΡΠΎΠ±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΡΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°, ΠΈ ΡΠ°ΠΊΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π²Π°ΡΡ ΡΡΠΎΠ»ΡΠΊΠΎ, ΡΠΊΠΎΠ»ΡΠΊΠΎ Π½ΡΠΆΠ½ΠΎ. ΠΠΎΠ΄ΡΠ»Ρ ΠΆΠ΅ ΡΠ°ΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ. Π§ΡΠΎΠ±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ, Π΅Π³ΠΎ Π½Π°Π΄ΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ, ΠΈ ΡΠ°ΠΊΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΡΠΎΠ²Π½ΠΎ ΠΎΠ΄ΠΈΠ½.
5.3.1 ΠΠ»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΡΠ΅ Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ
ΠΠΎΠΊΠ° ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΎΡΠΊΡΡΡΠΎΠΉ ΡΠ°ΡΡΠΈ ΠΊΠ»Π°ΡΡΠ° ΠΈ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΉ ΡΠ»Π΅Π½ΠΎΠ² ΠΎΡΡΠ°ΡΡΡΡ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½ΡΠΌΠΈ, ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΊΠ»Π°ΡΡΠ° ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠΎΠ΄ΠΈΡΡΠΈΡΠΎΠ²Π°ΡΡ Π½Π΅ Π²Π»ΠΈΡΡ Π½Π° Π΅Π΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ. ΠΠ°ΠΊ ΠΏΡΠΈΠΌΠ΅Ρ ΡΡΠΎΠ³ΠΎ ΡΠ°ΡΠΌΠΎΡΡΠΈΠΌ ΡΠ°Π±Π»ΠΈΡΡ ΠΈΠΌΠ΅Π½, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»Π°ΡΡ Π² Π½Π°ΡΡΠΎΠ»ΡΠ½ΠΎΠΌ ΠΊΠ°Π»ΡΠΊΡΠ»ΡΡΠΎΡΠ΅ Π² ΠΠ»Π°Π²Π΅ 3. ΠΡΠΎ ΡΠ°Π±Π»ΠΈΡΠ° ΠΈΠΌΠ΅Π½:
struct name (* char* string; char* next; double value; *);
ΠΠΎΡ Π²Π°ΡΠΈΠ°Π½Ρ ΠΊΠ»Π°ΡΡΠ° table:
// ΡΠ°ΠΉΠ» table.h
class table (* name* tbl; public: table() (* tbl = 0; *)
name* look(char*, int = 0); name* insert(char* s) (* return look(s,1); *) *);
ΠΡΠ° ΡΠ°Π±Π»ΠΈΡΠ° ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ ΡΠΎΠΉ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° Π² ΠΠ»Π²Π΅ 3 ΡΠ΅ΠΌ, ΡΡΠΎ ΡΡΠΎ Π½Π°ΡΡΠΎΡΡΠΈΠΉ ΡΠΈΠΏ. ΠΠΎΠΆΠ½ΠΎ ΠΎΠΏΠΈΡΠ°ΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΠΌ ΠΎΠ΄Π½Ρ
table, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠΌΠ΅ΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° table ΠΈ Ρ.Π΄. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
#include Β«table.hΒ»
table globals; table keywords; table* locals;
main() (* locals = new table; // ... *)
ΠΠΎΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ table::look(), ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π»ΠΈΠ½Π΅Π½ΡΠΉ ΠΏΠΎΠΈΡΠΊ Π² ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠΌ ΡΠΏΠΈΡΠΊΠ΅ ΠΈΠΌΠ΅Π½ name Π² ΡΠ°Π±Π»ΠΈΡΠ΅:
#include Β«string.hΒ»
name* table::look(char* p, int ins) (* for (name* n = tbl; n; n=n-Β»next) if (strcmp(p,n-Β»string) == 0) return n;
if (ins == 0) error(Β«ΠΈΠΌΡ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ΠΎΒ»);
name* nn = new name; nn-Β»string = new char[strlen(p)+1]; strcpy(nn-Β»string,p); nn-Β»value = 1; nn-Β»next = tbl; tbl = nn; return nn; *)
Π’Π΅ΠΏΠ΅ΡΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΊΠ»Π°ΡΡ table, ΡΡΠΎΠ²Π΅ΡΡΠ΅Π½ΡΡΠ²ΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Ρ ΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΏΡΠΎΡΠΌΠΎΡΡ, ΠΊΠ°ΠΊ ΡΡΠΎ Π΄Π΅Π»Π°Π»ΠΎΡΡ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Ρ Π½Π°ΡΡΠΎΠ»ΡΠ½ΡΠΌ ΠΊΠ°Π»ΡΠΊΡΠ»ΡΡΠΎΡΠΎΠΌ. Π‘Π΄Π΅Π»Π°ΡΡ ΡΡΠΎ ΡΡΡΠ΄Π½Π΅Π΅ ΠΈΠ·-Π·Π° ΡΠΎΠ³ΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ, ΡΡΠΎ ΡΠΆΠ΅ Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π² ΠΊΠΎΡΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½Π°Ρ Π²Π΅ΡΡΠΈΡ ΠΊΠ»Π°ΡΠ° table, Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΡΡΠ°Π²Π°ΡΡΡΡ Π²Π΅ΡΠ½ΡΠΌΠΈ Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ:
class table (* name** tbl; int size; public: table(int sz = 15); ~table();
name* look(char*, int = 0); name* insert(char* s) (* return look(s,1); *) *);
Π ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ ΠΈ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ Π²Π½Π΅ΡΠ΅Π½Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ, ΠΎΡΠ°ΠΆΠ°ΡΡΠΈΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Ρ ΡΡΠΈΡΠΎΠ²Π½ΠΈΡ ΡΠ°Π±Π»ΠΈΡΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΠΌΠ΅ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ. ΠΠ°Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ° Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ, ΡΡΠΎ ΡΡΡΠ°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π½Π΅ ΡΠΊΠ°Π·ΡΠ²Π°Π»ΡΡ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠ°Π±Π»ΠΈΡΡ, ΠΎΡΡΠ½Π΅ΡΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΉ. ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΠ»Π΅Π·Π½Ρ Π² ΡΡΡΠ°ΡΠΈΠΈ, ΠΊΠΎΠ³Π΄Π° Π½ΡΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΊΠ»Π°ΡΡ Π½Π΅ ΠΏΠΎΠ²Π»ΠΈΡΠ² Π½Π° ΡΡΠ°ΡΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. Π’Π΅ΠΏΠ΅ΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΠΈ Π΄Π΅ΡΡΡΡΠΊΡΠΎΡ ΡΠΎΠ·Π΄Π°ΡΡ ΠΈ ΡΠ½ΠΈΡΡΠΆΠ°ΡΡ Ρ ΡΡ-ΡΠ°Π±Π»ΠΈΡΡ:
table::table(int sz) (* if (sz Β« 0) error(βΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠ°Π±Π»ΠΈΡΡβ); tbl = new name*[size=sz];
for (int i = 0; iΒ«sz; i++) tbl[i] = 0; *)
table::~table() (* for (int i = 0; iΒ«size; i++) for (name* n = tbl[i]; n; n=n-Β»next) (* delete n-Β»string; delete n; *) delete tbl; *)
ΠΠΏΠΈΡΠ°Π² Π΄Π΅ΡΡΡΡΠΊΡΠΎΡ Π΄Π»Ρ ΠΊΠ»Π°ΡΡΠ° name ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΡΡΠΎΠΉ ΠΈ ΡΡΠ½ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ table::~table(). Π€ΡΠ½ΠΊΡΠΈΡ ΠΏΡΠΎΡΠΌΠΎΡΡΠ° ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½Π° ΡΠΎΠΉ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»Π°ΡΡ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π½Π°ΡΡΠΎΠ»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠ°Π»ΡΠΊΡΠ»ΡΡΠΎΡΠ° (#3.1.3):
#include Β«string.hΒ»
name* table::look(char* p, int ins) (* int ii = 0; char* pp = p; while (*pp) ii = ii««1 ^ *pp++; if (ii « 0) ii = -ii; ii %= size;
for (name* n=tbl[ii]; n; n=n-Β»next) if (strcmp(p,n-Β»string) == 0) return n;
if (ins == 0) error(Β«ΠΈΠΌΡ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ΠΎΒ»);
name* nn = new name; nn-Β»string = new char[strlen(p)+1]; strcpy(nn-Β»string,p); nn-Β»value = 1; nn-Β»next = tbl[ii]; tbl[ii] = nn; return nn;
*)
ΠΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ»Π΅Π½Ρ ΠΊΠ»Π°ΡΡΠ° Π΄ΠΎΠ»ΠΆΠ½Ρ Π·Π°Π½ΠΎΠ²ΠΎ ΠΊΠΎΠΌΠΏΠ»ΠΈΡΠΎΠ²Π°ΡΡΡΡ Π²ΡΠ΅Π³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π²Π½ΠΎΡΠΈΡΡΡ ΠΊΠ°ΠΊΠΎΠ΅-Π»ΠΈΠ±ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π² ΠΎΠΏΡΠ°Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ°. Π ΠΈΠ΄Π΅Π°Π»Π΅ ΡΠ°ΠΊΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΎΡΡΠΆΠ°ΡΡΡΡ Π½Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡ ΠΊΠ»Π°ΡΡΠ°. Π ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, ΡΡΠΎ Π½Π΅ ΡΠ°ΠΊ. ΠΠ»Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΊΠ»Π°ΡΡΠΎΠ²ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π½Π°ΡΡ ΡΠ°Π·ΠΌΠ΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΊΠ»Π°ΡΡΠ°. ΠΡΠ»ΠΈ ΡΠ°Π·ΠΌΠ΅Ρ ΡΡΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΌΠ΅Π½ΡΠ΅ΡΡΡ, ΡΠΎ ΡΠ°ΠΉΠ»Ρ, Π² ΠΊΠΎΡΠΎΡΡΡ ΠΊΠ»Π°ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ, Π½ΡΠΆΠ½ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π·Π½ΠΎΠ²ΠΎ. ΠΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΠ°ΠΊΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ (ΠΈ ΠΎΠ½Π° ΡΠΆΠ΅ Π½Π°ΠΏΠΈΡΠ°Π½Π°), ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ (ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅) ΡΠ°ΠΉΠ»ΠΎΠ², ΠΊΠΎΡΠΎΡΠΎΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π·Π°Π½ΠΎΠ²ΠΎ ΠΏΠΎΡΠ»Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠ°, Π½ΠΎ ΠΏΠΎΠΊΠ° ΡΡΠΎ ΡΠΈΡΠΎΠΊΠΎΠ³ΠΎ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΈΡ ΠΎΠ½Π° Π½Π΅ ΠΏΠΎΠ»ΡΡΠΈΠ»Π°.
ΠΠΎΡΠ΅ΠΌΡ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²Ρ ΡΠΏΡΠΎΡΠΈΡΡ, Π‘++ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½ ΡΠ°ΠΊ, ΡΡΠΎ ΠΏΠΎΠ»Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π·Π°ΠΊΡΡΡΠΎΠΉ ΡΠ°ΡΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ° Π½ΠΎΠ²Π°Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ ΠΏΠΎΠ»Π·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ ΠΊΠ»Π°ΡΡΠ°? Π Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ, ΠΏΠΎΡΠ΅ΠΌΡ Π²ΠΎΠΎΠ±ΡΠ΅ Π·Π°ΠΊΡΡΡΠ°Ρ ΡΠ°ΡΡΡ Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π° Π² ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΈ ΠΊΠ»Π°ΡΡΠ°? ΠΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, ΡΠ°Π· ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌ ΠΊΠ»Π°ΡΡΠ° Π½Π΅ ΡΠ°Π·ΡΠ΅ΡΠ°Π΅ΡΡΡ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ ΠΊ Π·Π°ΠΊΡΡΡΡΠΌ ΡΠ»Π΅Π½Π°ΠΌ, ΠΏΠΎΡΠ΅ΠΌΡ ΠΈΡ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡΡΡ Π² Π·Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΡ ΡΠ°ΠΉΠ»Π°Ρ , ΠΊΠΎΡΠΎΡΡΠ΅, ΠΊΠ°ΠΊ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ, ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΠΈΡΠ°Π΅Ρ? ΠΡΠ²Π΅Ρ β ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ. ΠΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ ΠΈ ΠΏΡΠΎΡΠ΅ΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ, ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠΈΡ Π²ΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΏΡΠΎΡΠ΅, ΠΊΠΎΠ³Π΄Π° ΡΠ°Π·ΠΌΠ΅Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² (ΠΎΠ±ΡΠ΅ΡΠΎΠ² Π² ΡΡΠ΅ΠΊΠ΅) ΠΈΠ·Π²Π΅ΡΡΠ΅Π½ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ.
ΠΡΠΎΠΉ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠ² ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΊΠ»Π°ΡΡΠ° ΠΊΠ°ΠΊ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° Β«Π½Π°ΡΡΠΎΡΡΠΈΠΉΒ» ΠΎΠ±ΡΠ΅ΠΊΡ. Π’Π°ΠΊ ΠΊΠ°ΠΊ Π²ΡΠ΅ ΡΡΠΈ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ Π±ΡΠ΄ΡΡ ΠΈΠΌΠ΅ΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ, Π° ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ Β«Π½Π°ΡΡΡΡΠΈΡ Β» ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Π² ΡΠ°ΠΉΠ»Π΅, Π³Π΄Π΅ Π΄ΠΎΡΡΡΠΏΠ½Π° Π·Π°ΠΊΡΡΠ°Ρ ΡΠ°ΡΡΡ, ΡΠΎ ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΡΠ΅ΡΠΈΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ. ΠΠ΄Π½Π°ΠΊΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡΠ°Π·ΡΠΌΠ΅Π²Π°Π΅Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΡΡΠ»ΠΊΠΈ ΠΏΠΎ ΠΏΠ°ΠΌΡΡΠΈ ΠΏΡΠΈ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠΈ ΠΊ ΡΠ»Π΅Π½Π°ΠΌ ΠΊΠ»Π°ΡΡΠ°, Π° ΡΠ°ΠΊΠΆΠ΅, ΡΡΠΎ Π΅ΡΠ΅ Ρ ΡΠΆΠ΅, ΠΊΠ°ΠΆΠ΄ΡΠΉ Π²ΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ ΠΊΠ»Π°ΡΡΠ° Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ΠΏΠΎ ΠΌΠ΅Π½ΡΡΠ΅ΠΉ ΠΌΠ΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ Π²ΡΠ·ΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΡ ΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ. ΠΡΠΎ ΡΠ΄Π΅Π»Π°Π»ΠΎ Π±Ρ ΡΠ°ΠΊΠΆΠ΅ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΌ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ inline-ΡΡΠ½ΠΊΡΠΈΠΉ ΡΠ»Π½ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ ΠΊ Π΄Π°Π½Π½ΡΠΌ Π·Π°ΠΊΡΡΡΠΎΠΉ ΡΠ°ΡΡΠΈ. ΠΠΎΠ»Π΅Π΅ ΡΠΎΠ³ΠΎ, ΡΠ°ΠΊΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠ΄Π΅Π»Π°Π΅Ρ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΌ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΡ C ΠΈ Π‘++ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ (ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ C ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ struct Π½Π΅ ΡΠ°ΠΊ, ΠΊΠ°ΠΊ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ Π΄Π΅Π»Π°ΡΡ Π‘++ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ). ΠΠ»Ρ Π‘++ ΡΡΠΎ Π±ΡΠ»ΠΎ ΡΠΎΡΡΠ΅Π½ΠΎ Π½Π΅ΠΏΡΠΈΠ΅ΠΌΠ»Π΅ΠΌΡΠΌ.
5.3.2 ΠΠ°ΠΊΠΎΠ½ΡΠ΅Π½Π½ΡΠΉ ΠΠ»Π°ΡΡ
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π±Π΅Π· ΡΠΎΠΊΡΡΡΠΈΡ Π΄Π°Π½Π½ΡΡ (Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΡΡΡΡΠΊΡΡΡ) ΡΡΠ΅Π±ΡΠ΅Ρ ΠΌΠ΅Π½ΡΡΠ΅ΠΉ ΠΏΡΠΎΠ΄ΡΠΌΠ°Π½Π½ΠΎΡΡΠΈ, ΡΠ΅ΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΎ ΡΠΎΠΊΡΡΡΠΈΠ΅ΠΌ Π΄Π°Π½Π½ΡΡ (Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΊΠ»Π°ΡΡΠΎΠ²). Π‘ΡΡΡΠΊΡΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Π½Π΅ ΡΠ»ΠΈΡΠΊΠΎΠΌ Π·Π°Π΄ΡΠΌΡΠ²Π°ΡΡΡ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ Π΅Π΅ ΠΏΡΠ΅Π΄ΠΏΠ»Π°Π³Π°Π΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ. Π ΠΊΠΎΠ³Π΄Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΊΠ»Π°ΡΡ, Π²ΡΠ΅ Π²Π½ΠΈΠΌΠ½ΠΈΠ΅ ΡΠΎΡΡΠ΅Π΄ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΡΡΡ Π½Π° ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΠΈ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΠΏΠΎΠ»Π½ΡΠΌ ΠΌΠ½ΠΆΠ΅ΡΡΠ²ΠΎΠΌ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ; ΡΡΠΎ Π²Π°ΠΆΠ½ΠΎΠ΅ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ Π°ΠΊΡΠ΅Π½ΡΠ°. ΠΡΠ΅ΠΌΡ, ΠΏΠΎΡΡΠ°ΡΠ΅Π½Π½ΠΎΠ΅ Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°, ΠΎΠ±ΡΡΠ½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡΠ°ΡΠ½ΠΎ ΠΎΠΊΡΠΏΠ°Π΅ΡΡΡ ΠΏΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΈ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ Π·Π°ΠΊΠΎΠ½ΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° intset, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΠΏΠΎΠ½ΡΡΠΈΠ΅ Β«ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠ΅Π»ΡΡ Β»:
class intset (* int cursize, maxsize; int *x; public: intset(int m, int n); // ΡΠ°ΠΌΠΎΠ΅ Π±ΠΎΠ»ΡΡΠ΅Π΅, m int'ΠΎΠ² Π² 1..n ~intset();
int member(int t); // ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΈ t ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ? void insert(int t); // Π΄ΠΎΠ±Π°Π²ΠΈΡΡ "t" Π² ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ
void iterate(int amp; i) (* i = 0; *) int ok(int amp; i) (* return iΒ«cursize; *) int next(int amp; i) (* return x[i++]; *) *);
Π§ΡΠΎΠ±Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠΎΡ ΠΊΠ»Π°ΡΡ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΠΈ ΡΠ°ΡΠΏΡΠ°ΡΠ°ΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠ»ΡΡΠ°ΠΉΠ½ΡΡ ΡΠ΅Π»ΡΡ ΡΠΈΡΠ΅Π». Π’Π°ΠΊΠΎΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΌΠΎΠ³Π»ΠΎ Π±Ρ Π±ΡΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ ΡΠΎΠ·ΡΠ³ΡΡΡΠ° Π»ΠΎΡΠ΅ΡΠ΅ΠΈ. ΠΡΠΎ ΠΏΡΠΎΡΡΠΎΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΡΠ»ΡΡ Π½Π° ΠΏΠΎΠ²ΡΠΎΡΡ. ΠΠΎ Π΄Π»Ρ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΡΠΈΠΏ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΡΠ°Π±ΠΎΡΠ°Π½Π½ΡΠΌ. ΠΠ°ΠΊ Π²ΡΠ΅Π³Π΄Π°, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ ΠΎΡΠΈΠ±ΠΊΠΈ:
#include Β«stream.hΒ»
void error(char* s) (* cerr Β«β "set: " «« s «« Β«\nβ; exit(1); *)
ΠΠ»Π°ΡΡ intset ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² main(), ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ Π΄Π²Π° ΡΠ΅Π»ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°. ΠΠ΅ΡΠ²ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Π·Π°Π΄Π°Π΅Ρ ΡΠΈΡΠ»ΠΎ ΡΠ»ΡΡΠ°ΠΉΠ½ΡΡ ΡΠΈΡΠ΅Π», ΠΊΠΎΡΠΎΡΡΠ΅ Π½ΡΠΆΠ½ΠΎ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ. ΠΡΠΎΡΠΎΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π΄ΠΎΠ»ΠΆΠ½Ρ Π»Π΅ΠΆΠ°ΡΡ ΡΠ»ΡΡΠ°ΠΉΠ½ΡΠ΅ ΡΠ΅Π»ΡΠ΅:
main(int argc, char* argv[]) (* if (argc != 3) error(Β«ΠΎΠΆΠΈΠ΄Π°Π΅ΡΡΡ Π΄Π²Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°Β»); int count = 0; int m = atoi(argv[1]); // ΡΠΈΡΠ»ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° int n = atoi(argv[2]); // Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ 1..n intset s(m,n);
while (countΒ«m) (* int t = randint(n); if (s.member(t)==0) (* s.insert(t); count++; *) *)
print_in_order( amp;s); *)
Π ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π΄Π²Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°, ΡΡΠ΅ΡΠΈΠΊ ΡΠΈΡΠ»Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ², argc, Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ°Π²Π½ΡΡΡΡΡ ΡΡΠ΅ΠΌ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΈΠΌΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π²ΡΠ΅Π³Π΄Π° ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΠΊΠ°ΠΊ argv[0]. Π€ΡΠ½ΠΊΡΠΈΡ
extern int atoi(char*);
ΡΡΠ½ΠΊΡΠΈΡ atoi() ΡΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΡΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ Π΄Π»Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ΅Π»ΠΎΠ³ΠΎ Π² Π²ΠΈΠ΄Π΅ ΡΡΡΠΎΠΊΠΈ Π² Π΅Π³ΠΎ Π²Π½ΡΡΠ΅Π½Π½ΡΡ (Π΄Π²ΠΎΠΈΡΠ½ΡΡ) ΡΠΎΡΠΌΡ. Π‘Π»ΡΡΠ°ΠΉΠ½ΡΠ΅ ΡΠΈΡΠ»Π° Π³Π΅Π½Π΅ΡΠΈΡΡΡΡΡΡ Ρ ΠΏΠΌΠΎΡΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ rand():