C_6 (1115139)
Текст из файла
- 128 - 6. ��������. ������� - �� ����� �� ����� ��� ����� ��६�����, �������� ࠧ����� ⨯��, ��㯯������ ��� ����� ������ ��� 㤮��⢠ ��ࠡ�⪨. (� �������� �몠�, ᠬ� ������� �� ������ ��᪠��, �������� ���뢠���� "�����ﬨ"). �ࠤ�樮��� �ਬ� �������� ���� ��⭠� �����- �� ࠡ���饣�: "�㦠騩" ����뢠���� ���� ��ਡ�⮢ �- ���, ��� 䠬����, ���, ����⢮ (�.�.�.), ����, ��� ��- ��쭮�� ���ᯥ祭��, ��௫�� � �.�. ������� �� ��� ���- ��⮢ ᠬ� ����� ��������� ������ࠬ�: �.�.�. ����� ���- ���쪮 ���������, ��� � ����, � ���� ��௫��. �������� ����뢠���� ������묨 �� �࣠����樨 ���� ������ �ᮡ���� � ������ �ணࠬ���, ����� �� ������ ������ ��� ��������� ��㯯���� �易��� ����� ⠪�� ��ࠧ��, �� � ���� ����� ��������, ��� � ����� 楫�, � �� ��� � �⤥��묨 ��ꥪ⠬�. � �⮩ ����� �� ����ࠥ��� �த���������� �, ��� �ᯮ������� ��������. �ணࠬ- ��, ����� �� ��� �⮣� �㤥� �ᯮ�짮����, �����, 祬 ������ ��㣨� � �⮩ �����, �� �� �� �����筮 㬥७��� ࠧ��. 6.1. �᭮��� ᢥ�����. ������ ᭮�� ���⨬�� � ��楤�ࠬ �८�ࠧ������ ���� �� ����� 5. ��� ��⮨� �� ���쪨� ��⥩ ⠪��, ��� ����, �����, � ���, �, ��������, ���� ���� � ��� �����. �� ���� ��६����� ����� ��ꥤ����� � ���� �������� ����: STRUCT DATE \( INT DAY; INT MONTH; INT YEAR; INT YEARDAY; CHAR MON_NAME[4]; \); ���ᠭ�� ��������, ����饥 �� �����祭���� � 䨣��� ��� ᯨ᪠ ���ᠭ��, ��稭����� � ���祢��� �� STRUCT. �� ��� STRUCT ����� ������ ����易⥫쭮� ���, ���뢠- ���� ��몮� �������� (����� �� DAT�). ����� ��� ������ �������� �⮣� ���� � ����� �ᯮ�짮������ � ���쭥�襬 ��� ᮪�饭��� ������ ������� ���ᠭ��. �������� ��� ��६����, 㯮����� � �������, ���뢠- ���� 童����. ��모 � 童�� ������� ����� ����� ⠪�� �� �����, �� � ����� ��६���� (�.�. �� ��騥�� 童���� �������), ����� �� ����� �ᥣ�� ����� ࠧ����� �� ���- ⥪���. ����筮, ���筮 ��������� ����� ��ᢠ����� ⮫쪮 �᭮ �易��� ��ꥪ⠬. - 129 - ��筮 ⠪ ��, ��� � ��砥 ��� ��㣮�� ����᭮�� �- ��, �� �ࠢ�� 䨣�୮� ����, ����뢠�饩 ᯨ᮪ 童���, ����� ������ ᯨ᮪ ��६�����. ������ STRUCT \( ...\) X,Y,Z; ᨭ⠪��᪨ �������祭 INT X,Y,Z; � ⮬ ��, �� ����� �� ����� ����뢠�� X , Y � Z � ����⢥ ��६����� ᮮ⢥������ ⨯�� � �ਢ���� � �뤥- ����� ��� ��� �����. ���ᠭ�� ��������, �� ����� �� ��� ᯨ᪠ ���- ������, �� �ਢ���� � �뤥����� �����-���� �����; ��� ⮫�- �� ��।���� 蠡��� ��� ��� ��������. ������, � ⠪�� ���ᠭ�� ᭠����� ��몮�, � ��� ��� ����� ���� �ᯮ��- ����� ������� �� ��।������ 䠪��᪨� ����� ����- ���. ���ਬ��, � ���� �ਢ������� ��� ���ᠭ�� DATE, � STRUCT DATE D; ��।���� ��६����� D � ����⢥ �������� ⨯� DATE. ������ ��� ������� �������� ����� ���樠�������, �����⨢ �� �� �� ��।������� ᯨ᮪ ���樠����� ��� �� ���������: STRUCT DATE D=\( 4, 7, 1776, 186, "JUL"\); ���� ��।������� �������� ����� ���� 㪠��� � ��ࠦ�- ��� � ������� �������樨 ���� ��� �������� . ���� -------------------- ������ 㪠����� 童�� �������� "." ��뢠�� ��� ������- �� � ��� 童��. � ����⢥ �ਬ�� ��।���� LEAP (�ਧ��� ��᮪�᭮�� ����) �� �᭮�� ����, ��室�饩�� � ������� D, LEAP = D.YEAR % 4 == 0 && D.YEAR % 100 != 0 \!\! D.YEAR % 400 == 0; ��� ��ਬ ��� ����� IF (STRCMP(D.MON_NAME, "AUG") == 0) ... ��� �८�ࠧ㥬 ���� ᨬ��� ����� ����� ⠪, �⮡� ��� ��稭����� � ���筮� �㪢� D.MON_NAME[0] = LOWER(D.MON_NAME[0]); - 130 - �������� ����� ���� �������묨; ��⭠� ����窠 �㦠- 饣� ����� 䠪��᪨ �룫拉�� ⠪: STRUCT PERSON \( CHAR NAME[NAMESIZE]; CHAR ADDRESS[ADRSIZE]; LONG ZIPCODE; /* ���⮢� ������ */ LONG SS_NUMBER; /* ��� ��. ���ᯥ祭�� */ DOUBLE SALARY; /* ��௫�� */ STRUCT DATE BIRTHDATE; /* ��� ����� */ STRUCT DATE HIREDATE; /* ��� ����㯫���� �� ࠡ��� */ \); ������� PERSON ᮤ�ন� ��� �������� ⨯� DATE . � �� ��।���� EMP ��� STRUCT PERSON EMP; � EMP.BIRTHDATE.MONTH �㤥� ��뫠���� �� ����� �����. ������ 㪠����� 童�� �������� "." ���樨����� �� ���ࠢ�. 6.2. �������� � �㭪樨. � �몥 "C" ������� �� ��࠭�祭�� �� �ᯮ�짮����� �������. ��易⥫�� �ࠢ��� ���������� � ⮬, �� �����- ⢥��� ����樨, ����� �� ����� ������ � �������- ��, ����� � ��।������ �� ���� � ������� ����樨 & � ����㯥 � ������ �� �� 童���. �� ����� �� ᮡ�� �, �� �������� ����� ��ᢠ����� ��� ������� ��� 楫��, � �� ��� �� ����� ���� ��।��� �㭪�� ��� �����饭� ���. (� ������� ������ �� ��࠭�祭�� ���� ����). �� 㪠��- ⥫� ������� �� ��࠭�祭�� ������ �� ������뢠����, ⠪ �� �������� � �㭪樨 �� �� ����� � 㤮��⢮� ࠡ���� ᮢ���⭮. � �������, ��⮬���᪨� ��������, ��� � ���- ����᪨� ���ᨢ�, �� ����� ���� ���樠�������; ���樠- ������ �������� ⮫쪮 � ��砥 ���譨� ��� ����᪨� �������. ������ ࠧ��६ ������� �� ��� ����ᮢ, ��९�ᠢ � �⮩ 楫�� �㭪樨 ��ࠧ������ ���� �� �।��饩 ����� ⠪, �⮡� ��� �ᯮ�짮���� ��������. ��� ��� �ࠢ��� ���- ���� �����।�⢥���� ��।��� �������� �㭪樨, � �� ������ ���� ��।����� �⤥�쭮 ����������, ���� ��।��� 㪠��⥫� �ᥩ ��������. ��ࢠ� ����������� ������������� �� �ਬ�� �㭪樨 DAY_OF_YEAR, ��� �� �� ����ᠫ� � ����� 5: D.YEARDAY = DAY_OF_YEAR(D.YEAR, D.MONTH, D.DAY); - 131 - ��㣮� ᯮᮡ ��⮨� � ��।�� 㪠��⥫�. � �� ���襬 HIREDATE ��� STRUCT DATE HIREDATE; � ��९�襬 DAY_OF_YEAR �㦭� ��ࠧ��, �� ᬮ��� ⮣�� ��- ����� HIREDATE YEARDAY = DAY_OF_YEAR(&HIREDATE); ��।���� 㪠��⥫� �� HIREDATE �㭪樨 DAY_OF_YEAR . �㭪- �� ������ ���� ���������, ��⮬� �� �� ��㬥�� �- ���� ���� 㪠��⥫��, � �� ᯨ� ��६�����. DAY_OF_YEAR(PD) /* SET DAY OF YEAR FROM MONTH, DAY */ STRUCT DATE *PD; \( INT I, DAY, LEAP; DAY = PD->DAY; LEAP = PD->YEAR % 4 == 0 && PD->YEAR % 100 != 0 \!\! PD->YEAR % 400 == 0; FOR (I =1; I < PD->MONTH; I++) DAY += DAY_TAB[LEAP][I]; RETURN(DAY); \) ���ᠭ�� STRUCT DATE *PD; ������, �� PD ���� 㪠��⥫�� �������� ⨯� DATE. ������, ���������� �� �ਬ�� PD->YEAR ���� �����. � P - 㪠��⥫� �� ��������, � P-> 童� �������� ------------------ ���頥��� � �����⭮�� 童��. (������ -> - �� ���� ��- ���, �� ����� ��� ���� ">".) ��� ��� PD 㪠�뢠�� �� ��������, � � 童�� YEAR ����� �������� � ���騬 ��ࠧ�� (*PD).YEAR �� 㪠��⥫� ������� �ᯮ������� ���⮫쪮 ���, �� ��- ���� -> ����뢠���� 㤮��� ᮪�饭���. ��㣫� ��� � (*PD).YEAR ����室���, ��⮬� �� ������ 㪠����� 童�� - 132 - ������� ���� , 祬 * . ��� ����樨, "->" � ".", ���樨- ������ �� ���ࠢ�, ⠪ �� �������樨 �� � �ࠢ� ����������� P->Q->MEMB (P->Q)->MEMB EMP.BIRTHDATE.MONTH (EMP.BIRTHDATE).MONTH ��� ������� ���� �ਢ������ ��㣠� �㭪��, MONTH_DAY, ���- ��ᠭ��� � �ᯮ�짮������ �������. MONTH_DAY(PD) /* SET MONTH AND DAY FROM DAY OF YEAR */ STRUCT DATE *PD; \( INT I, LEAP; LEAP = PD->YEAR % 4 == 0 && PD->YEAR % 100 != 0 \!\! PD->YEAR % 400 == 0; PD->DAY = PD->YEARDAY; FOR (I = 1; PD->DAY > DAY_TAB[LEAP][I]; I++) PD->DAY -= DAY_TAB[LEAP][I]; PD->MONTH = I; \) ����樨 ࠡ��� � ������ࠬ� "->" � "." ����� � () ��� ᯨ᪠ ��㬥�⮢ � [] ��� �����ᮢ ��室���� �� ᠬ�� ����� ����娨 ���設�⢠ ����権 �, ����⥫쭮, ���- ������ �祭� �९��. �, ���ਬ��, ������� ���ᠭ�� STRUCT \( INT X; INT *Y; \) *P; � ��ࠦ���� ++P->X 㢥��稢��� �, � �� �, ⠪ ��� ��� ������⭮ ��ࠦ���� ++(P->�). ��� ��������� ���浪� �믮������ ����権 ����� �ᯮ�짮���� ��㣫� ���: (++P)->� 㢥��稢��� P �� ���- �㯠 � �, � (P++)->X 㢥��稢��� P ��. (��㣫� ��� � ������ ��砥 ����易⥫��. ��祬� ?) �����襭�� �������筮 *P->Y ��������� �, �� �� 㪠��- ���� Y; *P->Y++ 㢥��稢��� Y �� ��ࠡ�⪨ ⮣�, �� �� �� 㪠�뢠�� (�筮 ⠪ ��, ��� � *S++); (*P->Y)++ 㢥���- ���� �, �� �� 㪠�뢠�� Y; *P++->Y 㢥��稢��� P �� ��- ��ન ⮣�, �� �� 㪠�뢠�� Y. - 133 - 6.3. ���ᨢ� ������. �������� �ᮡ���� ���室�� ��� �ࠢ����� ���ᨢ��� �易���� ��६�����. ���ᬮ�ਬ, ���ਬ��, �ணࠬ�� ����- �� � �宦����� ������� ���祢��� �� �몠 "C". ��� �㦥� ���ᨢ ᨬ������ ��ப ��� �࠭���� ���� � ���ᨢ �- ��� ��� ������. ���� �� ���������⥩ ��⮨� � �ᯮ�짮��- ��� ���� ��ࠫ������ ���ᨢ�� KEYWORD � KEYCOUNT: CHAR *KEYWORD [NKEYS]; INT KEYCOUNT [NKEYS]; �� ᠬ 䠪�, �� ���ᨢ� ��ࠫ�����, 㪠�뢠�� �� ������- ����� ��㣮� �࣠����樨. ������ ���祢�� �� ����� �� ��- ���� ���� ��ன: CHAR *KEYWORD; INT KEYCOUNT; �, ����⥫쭮, ������� ���ᨢ ���. ���ᠭ�� �������� STRUCT KEY \( CHAR *KEYWORD; INT KEYCOUNT; \) KEYTAB [NKEYS]; ���थ��� ���ᨢ KEYTAB ������� ⠪��� ⨯� � �⢮��� ��� ��� ������. ����� ���� ���ᨢ� ���� ������ன. �� ����� �뫮 �� ������� � ⠪: STRUCT KEY \( CHAR *KEYWORD; INT KEYCOUNT; \); STRUCT KEY KEYTAB [NKEYS]; ��� ��� ������� KEYTAB 䠪��᪨ ᮤ�ন� ����ﭭ� ����� ����, � ���� �ᥣ� ���樠������� �� ���� ࠧ � ��� ��� 童��� �� ��।������. ���樠������ ������� ������ �������筠 �।��騬 ���樠������ - �� ��।�����- �� ��� �����祭�� � 䨣��� ��� ᯨ᮪ ���樠����- �: STRUCT KEY \( CHAR *KEYWORD; INT KEYCOUNT; \) KEYTAB[] =\( "BREAK", 0, "CASE", 0, "CHAR", 0, "CONTINUE", 0, "DEFAULT", 0, /* ... */ "UNSIGNED", 0, "WHILE", 0 \); ���樠������� ���������� ��ࠬ� ᮮ⢥��⢥��� 童��� ��������. �뫮 �� ����� �筮 �������� � 䨣��� ��� ���樠������� ��� ������ "��ப�" ��� �������� ���騬 ��ࠧ��: \( "BREAK", 0 \), \( "CASE", 0 \), . . . - 134 - �� ����� ���樠������� ����� ����묨 ��६���묨 ��� ᨬ����묨 ��ப��� � �� ��� ����������, � �� ����७- ��� 䨣���� ���� ��� ����室�����. ��� ���筮, �������- �� ᠬ ���� � ���⮢ ���ᨢ� KEYTAB, � ����- �������� ����������, � ��� [] ��⠢���� ����묨. �ணࠬ�� ������ ���祢�� � ��稭����� � ��।���- ��� ���ᨢ� KEYTAB. ������ �ணࠬ�� �⠥� � 䠩� ���- ��, ������⥫쭮 ������� � �㭪樨 GETWORD, ����� ��- ������� �� ����� �� ������ �� �� ���饭��. ������ �� ����� � ���ᨢ� KEYTAB � ������� ��ਠ�� �㭪樨 ����୮�� ���᪠, ����ᠭ��� ���� � ����� 3. (����筮, �⮡� �� �㭪- �� ࠡ�⠫�, ᯨ᮪ ���祢�� � ������ ���� �ᯮ����� � ���浪� �����⠭��). #DEFINE MAXWORD 20 MAIN() /* COUNT "C" KEYWORDS */ \( INT N, T; CHAR WORD[MAXWORD]; WHILE ((T = GETWORD(WORD,MAXWORD)) != EOF) IF (T == LETTER) IF((N = BINARY(WORD,KEYTAB,NKEYS)) >= 0) KEYTAB[N].KEYCOUNT++; FOR (N =0; N < NKEYS; N++) IF (KEYTAB[N].KEYCOUNT > 0) PRINTF("%4D %S\N", KEYTAB[N].KEYCOUNT, KEYTAB[N].KEYWORD); \) BINARY(WORD, TAB, N) /* FIND WORD IN TAB[0]...TAB[N-1] */ CHAR *WORD; STRUCT KEY TAB[]; INT N; \( INT LOW, HIGH, MID, COND; LOW = 0; HIGH = N - 1; WHILE (LOW <= HIGH) \( MID = (LOW+HIGH) / 2; IF((COND = STRCMP(WORD, TAB[MID].KEYWORD)) < 0) HIGH = MID - 1; ELSE IF (COND > 0) LOW = MID + 1; ELSE RETURN (MID); \) RETURN(-1); \) �� �� �ਢ���� �㭪�� GETWORD; ���� �����筮 ᪠����, �� ��� �����頥� LETTER ����� ࠧ, ��� ��� ��室�� ��, � ������� �� �� � � ���� ��㬥��. - 135 - ����稭� NKEYS - �� ������⢮ ���祢�� � � ���ᨢ� KEYTAB . ���� �� ����� ������ �� � ������, ��ࠧ�� ���� � �������� ������� �� ��設�, �ᮡ���� � ⮬ ��砥, � ᯨ᮪ ���祢�� � �����থ� ���������. ����� �� ���������⥩ �뫮 �� �������� ᯨ᮪ ���樠����� 㪠��- ���� �� ��� � ��⥬ �ன� � 横�� ᪢��� ���ᨢ KEYTAB, ���� �� �������� �����. ��, ����� ࠧ��� �⮣� ���ᨢ� ��������� ��।���� � ������� �������樨, ����� ������� ����� ����� �����������. �� ���⮢ ���� ���� SIZE OF KEYTAB / SIZE OF STRUCT KEY ���� � ⮬, �� � �몥 "C" �।�ᬮ�७� 㭠ୠ� ������ SIZEOF, �믮��塞�� �� �६� �������樨, ����� �������� ����� ࠧ��� ��� ��ꥪ�. ��ࠦ���� SIZEOF(OBJECT) �뤠�� 楫��, ࠢ��� ࠧ���� 㪠������� ��ꥪ�. (������ ��- ।������ � ��ᯥ�������� �������, ���뢠���� "���- ⠬�", ����� ����� �� �� ࠧ���, �� � ��६���� ⨯� CHAR). ��ꥪ� ����� ���� 䠪��� ��६�����, ���ᨢ�� � ������ன, ��� ������ �᭮����� ⨯�, ��� INT ��� DOUBLE, ��� ������ �ந�������� ⨯�, ��� �������. � ��襬 ��砥 � ���祢�� � ࠢ�� ࠧ���� ���ᨢ�, ��������� �� ࠧ- ��� ������ ���� ���ᨢ�. �� ������ �ᯮ������ � �⢥ত���� #DEFINE ��� ��⠭������� ���祭�� NKEYS: #DEFINE NKEYS (SIZEOF(KEYTAB) / SIZEOF(STRUCT KEY)) ������ ��३��� � �㭪樨 GETWORD. �� 䠪��᪨ �����- �� ����� ��騩 ��ਠ�� �㭪樨 GETWORD, 祬 ����室��� ��� �⮩ �ணࠬ��, �� �� �� �� ����� ����� ���. �㭪�� GETWORD �����頥� ���饥 "��" �� �����, ��� ��� ��⠥��� ���� ��ப� �㪢 � ���, ��稭������ � �㪢�, ��- �� �⤥��� ᨬ���. ��� ��ꥪ� �����頥��� � ���⢥ ���- 祭�� �㭪樨; �� - LETTER, � ������� ��, EOF ��� ���� 䠩�� � ᠬ ᨬ���, � �� �� �㪢����. GETWORD(W, LIM) /* GET NEXT WORD FROM INPUT */ CHAR *W; INT LIM; \( INT C, T; IF (TYPE(C=*W++=GETCH()) !=LETTER) \( *W='\0'; RETURN(C); \) - 136 - WHILE (--LIM > 0) \( T = TYPE(C = *W++ = GETCH()); IF (T ! = LETTER && T ! = DIGIT) \( UNGETCH(C); BREAK; \) \) *(W-1) - '\0'; RETURN(LETTER); \) �㭪�� GETWORD �ᯮ���� �㭪樨 GETCH � UNGETCH, ����� �� ����ᠫ� � ����� 4: ����� ����� ��䠢���� ᨬ����� ��- �뢠����, �㭪�� GETWORD ����砥� ���� ��譨� ᨬ���. � �- ����� �맮�� UNGETCH ��� ᨬ��� ����頥��� ����� �� ���� ��� ���饣� ���饭��. �㭪�� GETWORD ���頥��� � �㭪樨 TYPE ��� ��।���- ��� ⨯� ������� �⤥�쭮�� ᨬ���� �� 䠩�� �����. ��� ��- ਠ��, �ࠢ������ ⮫쪮 ��� ��䠢�� ASCII. TYPE(C) /* RETURN TYPE OF ASCII CHARACTER */ INT C; \( IF (C>= 'A' && C<= 'Z' \!\! C>= 'A' && C<= 'Z') RETURN(LETTER); ELSE IF (C>= '0' && C<= '9') RETURN(DIGIT); ELSE RETURN(C); \) ��������᪨� ����⠭�� LETTER � DIGIT ����� ����� ��� ���祭��, ���� �� ��� �� ���㯠�� � ���䫨�� � ᨬ������, �⫨�묨 �� �㪢����-����, � � EOF; �祢���� �������� ���騩 �롮� #DEFINE LETTER 'A' #DEFINE DIGIT '0' �㭪�� GETWORD ����� �� ࠡ���� ����॥, � �� ���饭�� � �㭪樨 TYPE �뫨 �������� ���饭�ﬨ � ᮮ⢥�����饬� ���ᨢ� TYPE[ ]. � �⠭���⭮� ������⥪� �몠 "C" �।��- ���७� ������ ISALPHA � ISDIGIT, �������騥 ����室��� ��ࠧ��. ��ࠦ����� 6-1. -------------- ������� ⠪�� ����䨪��� �㭪樨 GETWORD � �業��, ��� ��������� ���� ࠡ��� �ணࠬ��. ��ࠦ����� 6-2. -------------- ������ ��ਠ�� �㭪樨 TYPE, �� ������騩 �� ������- ���� �����ᨬ�����. - 137 - ��ࠦ����� 6-3. -------------- ������ ��ਠ�� �ணࠬ�� ������ ���祢�� �, ���- �� �� �� ���뢠� ������ ��� � � �����祭��� � ��- ��窨 ��ப��. 6.4. �����⥫� �� ��������. �⮡� �ந��������� ������� ᮮ�ࠦ����, �易��� � �ᯮ�짮������ 㪠��⥫�� � ���ᨢ�� �������, ������ ᭮�� ��⠢�� �ணࠬ�� ������ ���祢�� ��ப, �ᯮ���� �� ��� ࠧ 㪠��⥫�, � �� ������� ���ᨢ��. ���譥� ���ᠭ�� ���ᨢ� KEYTAB �� �㦭� ��������, �� �㭪樨 MAIN � BINARY �ॡ��� ����䨪�樨. MAIN() /* COUNT C KEYWORD; POINTER VERSION */ \( INT T; CHAR WORD[MAXWORD]; STRUCT KEY *BINARY(), *P; WHILE ((T = GETWORD(WORD, MAXWORD;) !=EOF) IF (T==LETTER) IF ((P=BINARY(WORD,KEYTAB,NKEYS)) !=NULL) P->KEYCOUNT++; FOR (P=KEYTAB; P>KEYTAB + NKEYS; P++) IF (P->KEYCOUNT > 0) PRINTF("%4D %S/N", P->KEYCOUNT, P->KEYWORD); \) STRUCT KEY *BINARY(WORD, TAB, N) /* FIND WORD */ CHAR *WORD /* IN TAB[0]...TAB[N-1] */ STRUCT KEY TAB []; INT N; \( INT COND; STRUCT KEY *LOW = &TAB[0]; STRUCT KEY *HIGH = &TAB[N-1]; STRUCT KEY *MID; WHILE (LOW <= HIGH) \( MID = LOW + (HIGH-LOW) / 2; IF ((COND = STRCMP(WORD, MID->KEYWORD)) < 0) HIGH = MID - 1; ELSE IF (COND > 0) LOW = MID + 1; ELSE RETURN(MID); \) RETURN(NULL); \) ����� ������� ���쪮 �����⮢, ����� �⮨� �⬥- ���. ��-�����, ���ᠭ�� �㭪樨 BINARI ������ 㪠�뢠��, �� ��� �����頥� 㪠��⥫� �� �������� ⨯� KEY, � �� �� 楫��; �� ������� ��� � �㭪樨 MAIN, ⠪ � � BINARY. � �㭪�� BINARI ��室�� ��, � ��� �����頥� 㪠��- ⥫� �� ����; � �� ���, ��� �����頥� NULL. - 138 - ��-�����, �� ���饭�� � ���⠬ ���ᨢ� KEYTAB ���- ��⢫����� �१ 㪠��⥫�. �� ����� �� ᮡ�� ���� ����- ⢥���� ��������� � �㭪樨 BINARY: �।��� ���� ����� ����� ������� ���� �� ��㫥 MID = (LOW + HIGH) / 2 ��⮬� �� ����� ���� 㪠��⥫�� �� ���� ������-����� ��������� १���� (���� �� ������� �� 2) � � ����⢨- ⥫쭮�� ���� ���������. ��� ���� ���� �������� �� MID = LOW + (HIGH-LOW) / 2 � १���� ���ன MID �⠭������ 㪠��⥫�� �� ����, �ᯮ������� ���।��� ����� LOW � HIGH. ��� ⠪�� ��� ࠧ������� � ���樠����樨 LOW � HIGH. 㪠��⥫� ����� ���樠������� ���ᮬ ࠭�� ��।�- ������� ��ꥪ�; ������ ��� �� ����� � ����㯨��. � �㭪樨 MAIN �� ����ᠫ� FOR (P=KEYTAB; P < KEYTAB + NKEYS; P++) � P ���� 㪠��⥫�� ��������, � �� ��䬥⨪� � P ���뢠�� 䠪��᪨� ࠧ��� ������ ��������, ⠪ �� P++ 㢥��稢��� P �� �㦭�� ����稭�, � १���� 祣� P 㪠��- ���� �� ���騩 ���� ���ᨢ� �������. �� �� ��⠩�, �� ࠧ��� �������� ࠢ�� �㬬� ࠧ�� �� 童���, - ��-�� �ॡ������ ��ࠢ������� ��� ࠧ����� ��ꥪ⮢ � ������� ����� ��������� "����". �, �������, ���쪮 ����⥯���� ����� � �ଥ ��- ��� �ணࠬ��. � �����頥��� �㭪樥� ����稭� ����� ⨯, ���, ���ਬ��, � STRUCT KEY *BINARY(WORD, TAB, N) T� ����� ���������, �� ��� �㭪樨 ��㤭� �뤥���� �।� ⥪��. � �裡 � �⨬ ������ �ᯮ������ ��㣮� �⨫� ��- ���: STRUCT KEY * BINARY(WORD, TAB, N) �� ������ ��ࠧ�� ���� ����; �롥�� �� ���, ����� ��� �ࠢ����, � �ਤ�ন������ ��. 6.5. ��������, ��뫠�騥�� �� ᥡ�. �।�������, �� ��� ���� �ࠢ����� � ����� ��饩 ����- 祩, ����饩 � ������ � ������ ��� � � ����- � 䠩�� �����. ��� ��� ᯨ᮪ � ��࠭�� �� �����⥭, �� �� ����� �� 㯮�冷��� 㤮��� ��ࠧ�� � �ᯮ�짮���� ������ ����. �� ���� �� ����� �����⢫��� ������⥫�- �� ��ᬮ�� �� ����㯫���� ������� ��, � ⥬ �⮡� ��- ⠭�����, �� ����砫��� �� ��� ࠭��; ⠪�� �ணࠬ�� �㤥� ࠡ���� ��筮. (����� �筮, ��������� �६� ࠡ��� ���� ��� ������ � �������� �). ��� �� ��� �࣠�������� �ணࠬ��, �⮡� �ࠢ����� � ᯨ� �ந������� �? - 139 - ���� �� �襭�� ��⮨� � ⮬, �⮡� �� �६� �࠭��� ���ᨢ ����㯠��� �� �� ��� � � 㯮�冷祭��� ����, ��- ���� ������ �� � �㦭�� ���� �� ��� �� ����㯫����. O����� �� �� ��� ������, ��६��� �� � �������� ���ᨢ�, - �� ⠪�� ���ॡ�� 誮� ����� �६���. ����� �⮣� �� �ᯮ��㥬 �������� ������, ���뢠���� ����� ��- ॢ��. ������� ������ �� ᮮ⢥����� ���� "㧥�" ��ॢ�; ����� 㧥� ᮤ�ন�: 㪠��⥫� ⥪�� �� ---------------------- ���稪 � ������ ----------------------- 㪠��⥫� 㧫� ������ ��⮬�� ----------------------------- 㪠��⥫� 㧫� �ࠢ��� ��⮬�� ------------------------------ ������� 㧥� �� ����� ����� ����� ���� ��⥩; �������� ��- ���ᢨ� ��⥩ ��� ����稥 ⮫쪮 ������ ��⮬��. ���� ᮧ������ ⠪�� ��ࠧ��, �� ����� �����ॢ� �����- �� 㧫� ᮤ�ন� ⮫쪮 � ��, ����� ����� �� � �⮬ 㧫�, � �ࠢ�� �����ॢ� ⮫쪮 � ��, ����� ����- �. �⮡� ��।�����, ��室���� �� ����� �� 㦥 � ��ॢ�, ��稭��� � ���� � �ࠢ������ ����� �� � ���, �࠭�- 騬�� � �⮬ 㧫�. � �� ᮢ������, � ����� �蠥��� �⢥न⥫쭮. � ����� �� ����� �� � ��ॢ�, � ���室�� � ��ᬮ�७�� ������ ��⮬��; � ��⨢��� ��砥 ������� �ࠢ� ��⮬��. � � �㦭�� ���ࠢ����� ���- ��� ���������, � ����� ����� �� �� ��室���� � ��ॢ� � ���� �⮣� �������饣� ��⮬�� ��� ࠧ � ���� ���- ⮬, �㤠 ��� �������� ����� ��. ����� ���� �� ��� 㧫� �ਢ���� � ����� ������ �� ��� ��⮬���, � ᠬ ����� ���᪠ �� ������ ���� ४��ᨢ��. � ᮮ⢥��- ⢨� � �⨬ �������� ����⢥��� �ᯮ�짮���� ४��ᨢ�� ��楤��� ����� � �뢮��. ��������� ����� � ���ᠭ�� 㧫�, �᭮, �� �� �㤥� ������� � ������ ��������⠬�: STRUCT TNODE \( /* THE BASIC NODE */ CHAR *WORD; /* POINTS TO THE TEXT */ INT COUNT; /* NUMBER OF OCCURRENCES */ STRUCT TNODE *LEFT; /* LEFT CHILD */ STRUCT TNODE *RIGHT; /* RIGHT CHILD */ \); �� "४��ᨢ���" ���ᠭ�� 㧫� ����� ���������� ����- ��, �� �� ᠬ�� ���� ��� ������ ���४⭮. ������� �� ����� �ࠢ� ᮤ�ঠ�� ��뫪� �� ᠬ� ᥡ�, �� STRUCT TNODE *LEFT; ����뢠�� LEFT ��� 㪠��⥫� �� 㧥�, � �� ��� ᠬ 㧥�. - 140 - ����� ᠬ�� �ணࠬ�� ����뢠���� 㤨��⥫쭮 �����쪨�, �, ����筮, ����� � �ᯮ�殮��� ����� ����ᠭ��� ���� ࠭�� ��楤��, ���ᯥ稢���� �㦭� ����⢨�. �� ����� � ���� �㭪�� GETWORD ��� �����祭�� ������� �� �� 䠩�� ����� � �㭪�� ALLOC ��� �뤥����� ���� ��� �࠭���� �. ������ �ணࠬ�� ���� ���뢠�� �� � ������� �㭪- 樨 GETWORD � ����頥� �� � ��ॢ�, �ᯮ���� �㭪�� TREE. #DEFINE MAXWORD 20 MAIN() /* WORD FREGUENCY COUNT */ \( STRUCT TNODE *ROOT, *TREE(); CHAR WORD[MAXWORD]; INT T; ROOT = NULL; WHILE ((T = GETWORD(WORD, MAXWORD)) \! = EOF) IF (T == LETTER) ROOT = TREE(ROOT, WORD); TREEPRINT(ROOT); \) �㭪�� TREE ᠬ� �� ᥡ� ����. ����� ��।����� �㭪- 樥� MAIN � ���孥�� ��� (����) ��ॢ�. �� ������ �⠯� �� �� �ࠢ�������� � ���, 㦥 �࠭�騬�� � �⮬ �- ��, � � ������� ४��ᨢ���� ���饭�� � TREE ���稢����� ���� ���� � ������, ���� � �ࠢ��� �����ॢ�. � ���� ���殢 �� �� ���� ᮢ������ � �����-� ���, 㦥 ��室�騬�� � ��ॢ� (� �⮬ ��砥 ���稪 㢥��稢����� �� �������), ���� �ணࠬ�� ��⮫������ �� �㫥��� 㪠��⥫�, ᢨ��⥫�- ����騩 � ����室����� ᮧ����� � ���������� � ��ॢ� ��- ���� 㧫�. � ��砥 ᮧ����� ������ 㧫� �㭪�� TREE ����- �頥� 㪠��⥫� �⮣� 㧫�, ����� ����頥��� � த�⥫�- ᪨� 㧥�. STRUCT TNODE *TREE(P, W) /* INSTALL W AT OR BELOW P */ STRUCT TNODE *P; CHAR *W; \( STRUCT TNODE *TALLOC(); CHAR *STRSAVE(); INT COND; IF (P == NULL) \( /* A NEW WORD HAS ARRIVED */ P == TALLOC(); /* MAKE A NEW NODE */ P->WORD = STRSAVE(W); P->COUNT = 1; P->LEFT = P->RIGHT = NULL; \) ELSE IF ((COND = STRCMP(W, P->WORD)) == 0) P->COUNT++; /* REPEATED WORD */ ELSE IF (COND < 0)/* LOWER GOES INTO LEFT SUBTREE */ P->LEFT = TREE(P->LEFT, W); ELSE /* GREATER INTO RIGHT SUBTREE */ P->RIGHT = TREE(P->RIGHT, W); RETURN(P); \) - 141 - ������ ��� ������ 㧫� �뤥����� �㭪樥� TALLOC, �- �饩�� �����樥� ��� ������� ���� �㭪樨 ALLOC, ����ᠭ- ��� ���� ࠭��. ��� �����頥� 㪠��⥫� ������� ����- ࠭�⢠, �ਣ������ ��� �࠭���� ������ 㧫� ��ॢ�. (�� �� ���㤨� �� ������). ����� �� ��������� �㭪- 樥� STRSAVE � ���⮥ ����, ���稪 ���樠��������� ���- ��楩, � 㪠��⥫� ����� ��⮬��� ���������� ࠢ�묨 ���. �� ���� �ணࠬ�� �믮������ ⮫쪮 �� ���������� ������ 㧫� � ॡ�� ��ॢ�. �� ����� ����⨫� ���� �� �訡�� �����頥��� �㭪権 STRSAVE � TALLOC ���祭�� (�� ��ࠧ�- �� ��� �ࠪ��᪨ ࠡ���饩 �ணࠬ��). �㭪�� TREEPRINT ���⠥� ��ॢ�, ��稭�� � ������ ���- ��ॢ�; � ������ 㧫� ᭠砫� ���⠥��� ����� �����ॢ� (�� ��, ����� ����� �⮣� ��), ��⥬ ᠬ� ��, � ��⥬ �ࠢ�� �����ॢ� (�� ��, ����� ����). � �� ��㢥७�� ������� � ४��ᨥ�, ������ ��ॢ� ᠬ� � �����⠩� ��� � ������� �㭪樨 TREEPRINT ; �� ���� �� �������� ���� ४��ᨢ��� ��楤��, ������ ����� ����. TREEPRINT (P) /* PRINT TREE P RECURSIVELY */ STRUCT TNODE *P; \( IF (P != NULL) \( TREEPRINT (P->LEFT); PRINTF("%4D %S\N", P->COUNT, P->WORD); TREEPRINT (P->RIGHT); \) \) �ࠪ��� ����砭��: � ��ॢ� �⠭������ "��ᡠ- ��������" ��-�� ⮣�, �� �� ����㯠�� �� � ��砩- ��� ���浪�, � �६� ࠡ��� �ணࠬ�� ����� ��� 誮� �����. � ��襬 ��砥, ����� ����㯠�騥 �� 㦥 㯮��- ��祭�, ������� �ணࠬ�� �����⢫�� ��ண������� ���- ��� ��������� ���᪠. �������� ࠧ���� ����饭�� ���- �筮�� ��ॢ�, �ᮡ���� 2-3 ��ॢ�� � AVL ��ॢ��, ����� �� ����� ᥡ� ⠪ "� ���� �����", �� �� �� �㤥� ����� �� ��� ��⠭����������. �०�� 祬 �������� � �⨬ �ਬ�, 㬥�⭮ ᤥ���� ������讥 ����㯫���� � �裡 � ����ᮬ � ��।������ ��- ���. �᭮, �� � �ணࠬ�� ����⥫쭮 ����� ⮫쪮 ���� ��।���⥫� �����, ���� � ��� ��室���� ࠧ����� ࠧ���� ���� ��ꥪ⮢. �� � �� �⨬ �ᯮ�짮���� ���� ��।���⥫� ����� ��� ��ࠡ�⪨ ����ᮢ �� �뤥����� ����� ��� 㪠��⥫�� �� ��६���� ⨯� CHAR � ��� 㪠���- ��� �� STRUCT TNODE, � �� �⮬ ��������� ��� �����. ���- ��: ��� �믮����� � �������饥 �� ����設�⢥ ॠ���� ��設 ��࠭�祭��, �� ��ꥪ�� ��।������� ⨯�� ������ 㤮���⢮���� �ॡ������ ��ࠢ������� (���ਬ��, ��� �- �� ������ ࠧ������� � ���� �����)? ��ன: ��� �࣠- �������� ���ᠭ��, �⮡� �ࠢ����� � ⥬, �� �㭪�� ALLOC ������ �������� ࠧ���� ���� 㪠��⥫�� ? - 142 - ����� ������, �ॡ������ ��ࠢ������� ����� �믮����� �� ��� �뤥����� �����ண� ��譥�� ����࠭�⢠, ���� ���ᯥ稢 �, �⮡� ��।���⥫� ����� �ᥣ�� �����頫 㪠��⥫�, 㤮���⢮���騩 �ᥬ ��࠭�祭�� ��ࠢ�������. ���ਬ��, �� PDP-11 �����筮, �⮡� �㭪�� ALLOC �ᥣ�� �����頫� ��� 㪠��⥫�, ����� � ��� ���� ����� �������� �� ⨯ ��ꥪ�. �����⢥��� ��室 �� �⮬ - ��譨� ᨬ��� �� ����� �� ������ �����. ��������� ����⢨� �।�ਭ������� �� ��㣨� ��設��. ����� ��ࠧ��, ॠ������ ALLOC ����� �� ��������� ��७�ᨬ��, �� �� ��- ���짮����� �㤥� ��७�ᨬ�. �㭪�� ALLOC �� ����� 5 �� �।�ᬠ�ਢ��� �������� ��।�������� ��ࠢ�������; � ����� 8 �� �த��������㥬, ��� �ࠢ��쭮 �믮����� ��� ������. ����� ���ᠭ�� ⨯� �㭪樨 ALLOC ���� ���⥫�� ��� ��� �몠, ����� ��쥧�� �⭮���� � ��થ �- ���. ���訩 ᯮᮡ � �몥 "C" - �����, �� ALLOC �����- 頥� 㪠��⥫� �� ��६����� ⨯� CHAR, � ��⥬ � �८�- ࠧ����� ��� 㪠��⥫� � ��������� ⨯� � ������� ����樨 ��ॢ��� ⨯��. ����� ��ࠧ��, � ������ P � ���� CHAR *P; � (STRUCT TNODE *) P �८�ࠧ�� ��� � ��ࠦ����� � 㪠��⥫� �� �������� ⨯� TNODE . �������⥫쭮, �㭪�� TALLOC ����� ������� � ����: STRUCT TNODE *TALLOC() \( CHAR *ALLOC(); RETURN ((STRUCT TNODE *) ALLOC(SIZEOF(STRUCT TNODE))); \) �� ����� 祬 �����筮 ��� ࠡ����� � �����饥 �६� ��������, �� �� � ᠬ� �������� ���� � ��⮬ ����- 饣�. ��ࠦ����� 6-4. ---------------- ������ �ணࠬ��, ����� �⠥� "C"-�ணࠬ�� � ���- ⠥� � ��䠢�⭮� ���浪� ������ ��㯯� ���� ��६�����, ��- ��� ᮢ������ � ����� ᥬ� ᨬ�����, �� �⫨����� ���-� �����. (������� ⠪, �⮡� 7 �뫮 ��ࠬ��). ��ࠦ����� 6-5. ---------------- ������ �ணࠬ�� �뤠� ��४����� ��뫮�, �.�. �ணࠬ��, ����� ���⠥� ᯨ᮪ ��� � ���㬥�� � ��� ������� �� ��� � ���⠥� ᯨ᮪ ���� ��ப, � ���- �� �� �� �室��. ��ࠦ����� 6-6. ---------------- ������ �ணࠬ��, ����� ���⠥� �� �� ��� 䠩�� �����, �ᯮ������� � ���浪� �뢠��� ����� �� ��- ����. ��। ����� ��� �����⠩� � ��� ���- ���. - 143 - 6.6. ���� � ⠡���. ��� �������樨 ���쭥��� �ᯥ�⮢ �ᯮ�짮����� ����- ��� � �⮬ ࠧ���� �� ����襬 �ணࠬ��, �।�⠢������ �- ��� ᮤ�ন��� ����� ���᪠ � ⠡���. �� �ணࠬ�� �- ���� ⨯��� �।�⠢�⥫�� ����ணࠬ� �ࠢ����� ᨬ����- �묨 ⠡��栬� ���ய����� ��� ���������. ���ᬮ�ਬ, ���ਬ��, ������ #DEFINE �몠 "C". ����� ����砥��� ��ப� ���� #DEFINE YES 1 � ��� YES � �������騩 ⥪�� 1 ��������� � ⠡����. ����- ���, ����� ��� YES ������ � ������ ���� INWORD = YES; O�� ������ ���� ����饭� �� 1. ������� ��� �᭮��� ��楤���, ����� �ࠢ���� �����- �� � �������騬� �� ⥪�⠬�. �㭪�� INSTALL(S,T) �����뢠- �� ��� S � �������騩 ⥪�� T � ⠡����; ����� S � T ���� ᨬ����� ��ப�. �㭪�� LOOKUP(S) ��� ��� S � ⠡��� � �����頥� ���� 㪠��⥫� ⮣� ����, ��� �� ��� �������, ���� NULL, � �⮣� ����� � ⠡��� �� ���������. �� �⮬ �ᯮ������ ���� �� ������� ������ - ����㯠�饥 ��� �८�ࠧ���� � �����쪮� ������⥫쭮� ��- ��, ��� ��⥬ �ᯮ������ ��� ������樨 ���ᨢ� 㪠��- ⥫��. ������� ���ᨢ� 㪠�뢠�� �� ��砫� 楯���� ������, ����뢠��� �����, ����� ����� �� ���祭�� ������. � ������� ����� �� ������ �� ������� �⮣� ����- ���, � ���⮬ ���ᨢ� �㤥� NULL. ������ 楯� ���� �������, ᮤ�ঠ�� 㪠��⥫� �� ᮮ⢥�����饥 ���, �� �������騩 ⥪�� � �� ���騩 ���� � 楯�. �㫥��� 㪠��⥫� ���饣� ����� �㦨� �ਧ����� ���� ������ 楯�. STRUCT NLIST \( /* BASIC TABLE ENTRY */ CHAR *NAME; CHAR *DEF; STRUCT NLIST *NEXT; /* NEXT ENTRY IN CHAIN */ \); ���ᨢ 㪠��⥫�� �� ���� DEFINE HASHSIZE 100 TATIC STRUCT NLIST *HASHTAB[HASHSIZE] /* POINTER TABLE */ ���祭�� �㭪樨 ������, �ᯮ��㥬�� ������ �㭪- �ﬨ LOOKUP � INSTALL , ����砥��� ���� ��� ���⮪ �� ������� �㬬� ᨬ������ ���祭�� ��ப� �� ࠧ��� ���ᨢ�. (�� �� ᠬ� ���訩 �������� ������, �� ��� ���⮨��⢮ ��⮨� � �᪫��⥫쭮� �����). - 144 - HASH(S) /* FORM HASH VALUE FOR STRING */ CHAR *S; \( INT HASHVAL; FOR (HASHVAL = 0; *S != '\0'; ) HASHVAL += *S++; RETURN(HASHVAL % HASHSIZE); \) � १���� ����� ������ �뤠���� ��砫�� ��- ���� � ���ᨢ� HASHTAB ; � ������ ��ப� ����� ���� ���-� �������, � ������ � 楯� ������, ��砫� ���ன 㪠- ���� ⠬. ���� �����⢫���� �㭪樥� LOOKUP. � �㭪�� LOOKUP ��室��, �� ����� ���� 㦥 ���������, � ��� �����頥� 㪠��⥫� �� ����; � ���, � ��� �����頥� NULL. STRUCT NLIST *LOOKUP(S) /* LOOK FOR S IN HASHTAB */ CHAR *S; \( STRUCT NLIST *NP; FOR (NP = HASHTAB[HASH(S)]; NP != NULL;NP=NP->NEXT) IF (STRCMP(S, NP->NAME) == 0) RETURN(NP); /* FOUND IT */ RETURN(NULL); /* NOT FOUND */ �㭪�� INSTALL �ᯮ���� �㭪�� LOOKUP ��� ��।���- ���, �� ��������� �� 㦥 �������� � ����� ������ ���; � �� ⠪, � ����� ��।������ ������ ���᭨�� ��. � ��⨢��� ��砥 ᮧ������ ᮢ��襭�� ���� ����. � �� �����-���� ��稭� ��� ������ ���� ����� ��� ����, � �㭪�� INSTALL �����頥� NULL. STRUCT NLIST *INSTALL(NAME, DEF) /* PUT (NAME, DEF) */ CHAR *NAME, *DEF; \( STRUCT NLIST *NP, *LOOKUP(); CHAR *STRSAVE(), *ALLOC(); INT HASHVAL; IF((NP = LOOKUP(NAME)) == NULL) \( /* NOT FOUND */ NP = (STRUCT NLIST *) ALLOC(SIZEOF(*NP)); IF (NP == NULL) RETURN(NULL); IF ((NP->NAME = STRSAVE(NAME)) == NULL) RETURN(NULL); HASHVAL = HASH(NP->NAME); NP->NEXT = HASHTAB[HASHVAL]; HASHTAB[HASHVAL] = NP; \) ELSE /* ALREADY THERE */ FREE((NP->DEF);/* FREE PREVIOUS DEFINITION */ IF ((NP->DEF = STRSAVE(DEF)) == NULL) RETURN (NULL); RETURN(NP); \) - 145 - �㭪�� STRSAVE ���� ������� ��ப�, 㪠������ � ��- ��⢥ ��㬥��, � ���� �࠭����, ����祭��� � १���� ���饭�� � �㭪樨 ALLOC. �� 㦥 �ਢ��� ��� �㭪�� � ���- �� 5. ��� ��� ���饭�� � �㭪樨 ALLOC � FREE ����� �ந�- 室��� � �� ���浪� � � �裡 � ������ ��ࠢ�������, ���⮩ ��ਠ�� �㭪樨 ALLOC �� ����� 5 ��� ����� �� ���- 室��; ᬮ��� ����� 7 � 8. ��ࠦ����� 6-7. --------------- ������ ��楤���, ����� �㤥� 㤠���� ��� � ��।�- ����� �� ⠡����, �ࠢ�塞�� �㭪�ﬨ LOOKUP � INSTALL. ��ࠦ����� 6-8. --------------- ���ࠡ�⠩� ������, �᭮������ �� �㭪��� �⮣� ࠧ- ����, ����� ������ ��� ��ࠡ�⪨ �������権 #DEFINE , �ਣ����� ��� �ᯮ�짮����� � "C"-�ணࠬ����. ��� ����� ⠪�� ��������� ������묨 �㭪樨 GETCHAR � UNGETCH. 6.7. ����. ����� ����� ����� ����� �⠭������ �祭� ����⢥�- ��, � ����� ��������� ����室��� ������� � ���� ��設��� �� ���쪮 ࠧ����� ��ꥪ⮢; ���� �� �ᮡ���� ��- ��࠭����� 㯮�ॡ����� - ����� ������⮢�� �ਧ����� � �ਬ�������, �������� ᨬ����� ⠡��栬 ���������. ����- �� ��������� �ଠ�� ������, ⠪�� ��� ����䥩�� ����- ���� �।�� ⠪�� ������� �।�������� ����������� ����- 祭�� �� �� ����. �।�⠢�� ᥡ� �ࠣ���� ���������, ����� ࠡ�⠥� � ᨬ���쭮� ⠡��楩. � ����� �����䨪�� �ணࠬ�� �易�� ��।������� ���ଠ��, ���ਬ��, ���� �� ��� ��� ���祢� ���, ���� �� �� ��� ��� ���譨� �/��� ����᪨� � �.�. ���� �������� ᯮᮡ ��������� �- ��� ���ଠ�� - �������� ����� ������⮢�� �ਧ����� � ��- ������ ��६����� ⨯� CHAR ��� INT. ����� ᯮᮡ, ����� �� ��������, ��⮨� � ��।�- ����� ����� "��᮪", �⢥���� ᮮ⢥����騬 ��⮢� ��- ����, ��� � #DEFINE KEYWORD 01 #DEFINE EXTERNAL 02 #DEFINE STATIC 04 (� ������ ���� �⥯��ﬨ ������). ����� ��ࠡ�⪠ ��⮢ ᢥ����� � "���������� ��⠬�" � ������� ����権 ᤢ���, ��᪨���� � ����������, ���ᠭ��� ���� � ����� 2. ������� ��� ������騥�� ������: FLAGS \!= EXTERNAL \! STATIC; ����砥� ���� EXTERNAL � STATIC � FLAGS, � � �६� ��� FLAGS &= \^(�XTERNAL \! STATIC); - 146 - �� �몫�砥�, � IF ((FLAGS & (EXTERNAL \! STATIC)) == 0) ... ��⨭��, � ��� ��� �몫�祭�. ���� �⨬� �������� ����� ��������, �� "C" � ����⢥ ����ୠ⨢� �।������ ����������� ��।������ � ��ࠡ�⪨ ����� ����� �� �����।�⢥���, � �� ���।�⢮� �����- ��� �����᪨� ����権. ���� - �� ����� ᬥ���� ��⮢ ����� ����� ��६����� ⨯� INT. ���⠪�� ��।������ � ��ࠡ�⪨ ����� �᭮�뢠���� �� ��������. ���ਬ��, ᨬ- ������ ⠡���� �������権 #DEFINE, �ਢ������� ���, ����� �� �뫮 �������� ��।������� ��� �����: STRUCT \( UNSIGNED IS_KEYWORD : 1; UNSIGNED IS_EXTERN : 1; UNSIGNED IS_STATIC : 1; \) FLAGS; ����� ��।������ ��६����� � ������ FLAGS, ����� ᮤ��- ��� �� 1-��⮢�� ����. ������饥 �� �����稥� � ������ �ਭ� ���� � ����. ���� ���ᠭ� ��� UNSIGNED, �⮡� ���- �ભ���, �� ��� ����⢨⥫쭮 ���� ����稭��� ��� �����. �� �⤥��� ���� ����� ��뫠����, ��� FLAGS.IS_STATIE, FLAGS. IS_EXTERN, FLAGS.IS_KEYWORD � �.�., � ���� �筮 ⠪ ��, ��� �� ��㣨� 童�� ��������. ���� ����� ᥡ� ������� ������訬 楫� ��� ����� � ����� ���⢮���� � ��䬥���- ��� ��ࠦ����� �筮 ⠪ ��, ��� � ��㣨� 楫�. ����� ���- ���, �।��騥 �ਬ��� ����� ����⢥��� ��९���� ⠪: FLAGS.IS_EXTERN = FLAGS.IS_STATIC = 1; ��� ����祭�� ��⮢; FLAGS.IS_EXTERN = FLAGS.IS_STATIC = 0; ��� �몫�祭�� ��⮢; IF (FLAGS.IS_EXTERN == 0 &&FLAGS.IS_STATIC == 0)... ��� �� ��ન. ���� �� ����� ��४�뢠�� �࠭��� INT; � 㪠������ �ਭ� ⠪���, �� �� ������ �������, � ���� ��ࠢ����- ���� �� �࠭�� ���饣� INT. ���� ����� �� ��ᢠ����� �����; ������������ ���� (⮫쪮 �����稥 � �ਭ�) ��- ��������� ��� ���������� ������� ����. �⮡� ��㤨�� ��ࠢ������� �� �࠭��� ���饣� INT, ����� �ᯮ�짮���� ᯥ樠���� �ਭ� 0. - 147 - �� ࠡ�� � ���ﬨ ������� �� �����⮢, �� ����� ��� ������ ��������. ��-�������� �������� ����⢥��� ���� �, �� ��ࠦ�� ��த� ࠧ����� �������� �।- ��, ��।������ ����� �� �������� ��設�� �����⢫���� �� ���ࠢ�, � �� �������� �ࠢ� ������. �� ����砥�, �� ��� ���� �祭� ������� ��� ࠡ��� � ����७�� ��।�- ����묨 ������ࠬ� ������, �� ࠧ������� ���譥 ��।���- ��� ������ ��� ��⥫쭮 ��ᬠ�ਢ��� ����� � ⮬, ��- ��� ����� ����㯠�� ����. ��㣨� ��࠭�祭��, ����� ��� ����� � ����: ���� �� ����� �����; ��� ����� �࠭����� ⮫쪮 � ��६����� ⨯� INT (���, �� ������⭮, ⨯� UNSIGNED); ��� �� ����� ���ᨢ���; ��� �� ����� ���ᮢ, ⠪ �� � ��� �� �ਬ����� ������ &. 6.8. ��ꥤ������. O�ꥤ������ - �� ��६�����, ����� � ࠧ���� �����- �� �६��� ����� ᮤ�ঠ�� ��ꥪ�� ࠧ��� ⨯�� � ࠧ��, ��祬 ��������� ���� �� ᥡ� ��������� ࠧ��� � ��- ������� ��ࠢ�������. ��ꥤ������ �।�⠢���� ����������� ࠡ���� � ࠧ���묨 ������ ������ � ����� ������ �����, �� ����� � �ணࠬ�� ������� ��設��-����ᨬ�� ���ଠ樨. � ����⢥ �ਬ��, ᭮�� �� ᨬ���쭮� ⠡���� �������- ��, �।�������, �� ����⠭�� ����� ���� ⨯� INT , FLOAT ��� ���� 㪠��⥫ﬨ �� ᨬ����. ���祭�� ������ �����⭮� ����⠭�� ������ �࠭����� � ��६����� ᮮ⢥����饣� �- ��, �� �� �� ��� �ࠢ����� ⠡��楩 ᠬ� 㤮��� �뫮 ��, � �� ���祭�� �������� �� ���� � �� �� ��ꥬ ����� � �࠭����� � ⮬ �� ᠬ�� ���� ������ᨬ� �� ��� ⨯�. �� � ���� �����祭��� ��ꥤ������ - �뤥���� �⤥���� ���- ������, � ���ன ����� ������� �࠭��� ���� ���� �� ���- ������ ���쪨� ⨯��. ��� � � ��砥 �����, ᨭ⠪�� ��- ���뢠���� �� ��������. UNION U_TAG \( INT IVAL; FLOAT FVAL; CHAR *PVAL; \) UVAL; ��६����� UVAL �㤥� ����� �����筮 ����让 ࠧ���,�⮡� �࠭��� �������訩 �� ��� ⨯��, ������ᨬ� �� ��設�, �� ���ன �����⢫���� ���������, - �ணࠬ�� �� �㤥� ��- ����� �� �ࠪ���⨪ �������� �।��. �� �� ��� ��� ⨯�� ����� ���� ���� UVAR � ��⥬ �ᯮ�짮��� � ��ࠦ�����, ���� ⠪�� �ᯮ�짮����� ᮢ���⨬�: ���������� ⨯ ������ ᮢ������ � ������ ����饭�� ⨯��. ���� �ணࠬ���� - ���� �� ⥬, ����� ⨯ �࠭���� � ��ꥤ�- ����� � ����� ������; � ��-���� �࠭���� ��� ���� ⨯, � ����������� ��� ��㣮�, � १����� ���� ������� �� �ᯮ��㥬�� ��設�. - 149 - ���⠪��᪨ ����� � 童��� ��ꥤ������ �����⢫���� ���騬 ��ࠧ��: ��� ��ꥤ������.童� -------------------- ��� 㪠��⥫� ��ꥤ������ ->童� ---------------------------- � ���� �筮 ⠪ ��, ��� � � ��砥 �������. � ��� ���- ��������� ⨯�, �࠭����� � ����� ������ � UVAL, �ᯮ���- ���� ��६����� UTYPE, � ����� ������� ⠪�� ���⮪ �ணࠬ��: IF (UTYPE == INT) PRINTF("%D\N", UVAL.IVAL); ELSE IF (UTYPE == FLOAT) PRINTF("%F\N", UVAL.FVAL); ELSE IF (UTYPE == STRING) PRINTF("%S\N", UVAL.PVAL); ELSE PRINTF("BAD TYPE %D IN UTYPE\N", UTYPE); ��ꥤ������ ����� ������� ����� ������� � ���ᨢ�� � �������. ������ ��� ���饭�� � 童�� ��ꥤ������ � ������� (��� �������) ᮢ��襭�� �����筠 ⮩, ����� �ᯮ������ �� ��������� ��������. ���ਬ��, � ���ᨢ� �������, ��।������ ���騬 ��ࠧ�� STRUCT \( CHAR *NAME; INT FLAGS; INT UTYPE; UNION \( INT IVAL; FLOAT FVAL; CHAR *PVAL; \) UVAL; \) SYMTAB[NSYM]; �� ��६����� IVAL ����� ����� ��� SYMTAB[I].UVAL.IVAL � �� ���� ᨬ��� ��ப� PVAL ��� *SYMTAB[I].UVAL.PVAL � ��魮�� ��ꥤ������ ���� ������ன, � ���ன �� 童�� ����� �㫥��� ᬥ饭��. ���� ������� �����筮 ��- ����, �⮡� �࠭��� "ᠬ� �ப��" 童�, � ��ࠢ������� �ਣ���� ��� ��� ⨯��, �室��� � ��ꥤ������. ��� � � ��砥 �������, �����⢥��묨 �����ﬨ, ����� � �����- 饥 �६� ����� ������ � ��ꥤ�����ﬨ, ����� ����� � - 150 - 童�� � �����祭�� ����; ��ꥤ������ �� ����� ���� ��- ���, ��।��� �㭪�� ��� �����饭� ���. 㪠��⥫� ��ꥤ�- ����� ����� �ᯮ�짮���� � �筮 ⠪�� �� �����, ��� � 㪠- ��⥫� �������. �ணࠬ�� ��।������ �����, �ਢ������ � ����� 8 , �����뢠��, ��� ����� �ᯮ�짮���� ��ꥤ������, �⮡� ᤥ- ���� �������� ��६����� �������� �� ��।�������� ���� �࠭��� �����. 6.9. ��।������ ⨯� � �몥 "C" �।�ᬮ�७� �����������, ���뢠���� TYPEDEF ��� �������� ����� ���� ��� ⨯�� ������. ���ਬ��, ���ᠭ�� TYPEDEF INT LENGTH; ������ ��� LENGTH ᨭ������ ��� INT. "���" LENGTH ����� ���� �ᯮ�짮��� � ���ᠭ���, ��ॢ���� ⨯�� � �.�. ��筮 ⠪�� �� ��ࠧ��, ��� � ⨯ INT: LENGTH LEN, MAXLEN; LENGTH *LENGTHS[]; �������筮 ���ᠭ�� TYPEDEF CHAR *STRING; ������ STRING ᨭ������ ��� CHAR*, � ���� ��� 㪠��⥫� �� ᨬ����, �� ��⥬ ����� �ᯮ�짮���� � ���ᠭ��� ���� STRING P, LINEPTR[LINES], ALLOC(); ����� ��������, �� ���塞� � �������樨 TYPEDEF ⨯ ������ � ����樨 ����� ��६�����, � �� �ࠧ� �� ��� TYPEDEF. ���⠪��᪨ ��������� TYPEDEF ������� ���ᠭ�� ����� ����� EXTERN, STATIC � �. �. �� ⠪�� ��- ���짮���� �ய��� �㪢�, �⮡� �᭥� �뤥���� �����. � ����⢥ ����� ����� �ਬ�� �� �ᯮ��㥬 �����- ���� TYPEDEF ��� ���ᠭ�� 㧫�� ��ॢ�, ��ᬮ�७��� �- ��� � �⮩ �����: TYPEDEF STRUCT TNODE \( /* THE BASIC NODE */ CHAR *WORD; /* POINTS TO THE TEXT */ INT COUNT; /* NUMBER OF OCCURRENCES */ STRUCT TNODE *LEFT; /* LEFT CHILD */ STRUCT TNODE *RIGHT; /* RIGHT CHILD */ \) TREENODE, *TREEPTR; � १���� ����砥� ��� ����� ���祢�� ��: TREENODE (�������) � TREEPTR (㪠��⥫� �� ��������). ����� �㭪- �� TALLOC ����� ������� � ���� - 151 - TREEPTR TALLOC() \( CHAR *ALLOC(); RETURN((TREEPTR) ALLOC(SIZEOF(TREENODE))); \) ����室��� ����ભ���, �� ���ᠭ�� TYPEDEF �� �ਢ���� � ᮧ����� ������ � �����-���� �� ⨯�; ��� ⮫쪮 ��- ������ ����� ��� ��� �����ண� �������饣� ⨯�. �� �⮬ �� ��������� � ������� ����� ᥬ��⨪�: ���ᠭ�� ⠪�� ᯮᮡ�� ��६���� �������� �筮 ⥬� �� ��⢠��, �� � ��६����, ���ᠭ�� � ��ࠧ��. �� ������ ��������� TYPEDEF �室�� � #DEFINE �� �᪫�祭��� ⮣�, �� ��� ����- �������� �������� � ��⮬� ����� �����⢫��� �����- ����� ⥪��, ����� ��室�� �� �।��� ���������⥩ ���- ய����� �몠 "C". ���ਬ��, TYPEDEF INT (*PFI) (); ᮧ���� ⨯ PFI ��� "㪠��⥫� �㭪樨, �������饩 ����- ��� ⨯� INT", ����� ��⥬ ����� �뫮 �� �ᯮ�짮���� � �ணࠬ�� ����� �� ����� 5 � ���⥪�� ���� PFI STRCMP, NUMCMP, SWAP; ������� ��� �᭮��� ��稭� �ਬ������ ���ᠭ�� TYPEDEF. ��ࢠ� ��稭� �易�� � ��ࠬ��ਧ�樥� �ணࠬ��, �⮡� �������� �襭�� ����� ��७�ᨬ���. � ��� �- ��� ������, ����� ����� ���� ��設��-����ᨬ묨, �ᯮ�짮- ���� ���ᠭ�� TYPEDEF, � �� ��७�� �ணࠬ�� �� ����� ��設� �ਤ���� �������� ⮫쪮 �� ���ᠭ��. ���� �� ⨯��- ��� ���権 ��⮨� � �ᯮ�짮����� ��।��塞�� � ������� TYPEDEF ���� ��� ࠧ����� 楫�� ����稭 � � �����饬 ���室�饬 �롮� ⨯�� SHORT, INT � LONG ��� ������ ����- 饩�� ��設�. �� �����祭�� TYPEDEF ��⮨� � ���ᯥ祭�� ���襩 ����- ����樨 ��� �ணࠬ�� - ⨯ � ������ TREEPTR ����� �������- �� ����� 㤮��� ��� �������, 祬 ⨯, ����� ���ᠭ ⮫쪮 ��� 㪠��⥫� ���� ��������. � �������, �ᥣ�� ������� ����⭮���, �� � ���饬 ���- ������ ��� ������� ��㣠� �ணࠬ��, ⠪�� ��� LINT, ᬮ- ��� �ᯮ�짮���� ᮤ�ঠ����� � ���ᠭ��� TYPEDEF ���ଠ�� ��� ������� �����ன �������⥫쭮� ��ન �ணࠬ��.
Характеристики
Тип файла документ
Документы такого типа открываются такими программами, как Microsoft Office Word на компьютерах Windows, Apple Pages на компьютерах Mac, Open Office - бесплатная альтернатива на различных платформах, в том числе Linux. Наиболее простым и современным решением будут Google документы, так как открываются онлайн без скачивания прямо в браузере на любой платформе. Существуют российские качественные аналоги, например от Яндекса.
Будьте внимательны на мобильных устройствах, так как там используются упрощённый функционал даже в официальном приложении от Microsoft, поэтому для просмотра скачивайте PDF-версию. А если нужно редактировать файл, то используйте оригинальный файл.
Файлы такого типа обычно разбиты на страницы, а текст может быть форматированным (жирный, курсив, выбор шрифта, таблицы и т.п.), а также в него можно добавлять изображения. Формат идеально подходит для рефератов, докладов и РПЗ курсовых проектов, которые необходимо распечатать. Кстати перед печатью также сохраняйте файл в PDF, так как принтер может начудить со шрифтами.