C_5 (1115138)
Текст из файла
- 98 - 5.�����⥫� � ���ᨢ� �����⥫� - �� ��६�����, ᮤ�ঠ�� ���� ��㣮� ��- ६�����. 㪠��⥫� �祭� �ப� �ᯮ������� � �몥 "C". �� �ந�室�� ����� ��⮬�, �� ������ ��� ���� ������- ������ ����������� ��ࠧ��� �㦭�� ����⢨�, � ����� ���- ��, �� ��� ���筮 ����� � ����� �������� � ��䥪⨢�� �ணࠬ���, 祬 �, ����� ����� ���� ����祭� ��㣨�� ᯮ- ᮡ���. �����⥫� ���筮 ᬥ訢��� � ���� ���� � �����ࠬ� GOTO, �ࠪ�ਧ�� �� ��� �㤥�� ᯮᮡ ����ᠭ�� �ண- ࠬ�, ����� ���������� ������. �� ������� ��A�������, � 㪠��⥫� �ᯮ������� �������⭮; �祭� ���� ����� 㪠��⥫�, ����� 㪠�뢠�� �� ��-� ᮢ��襭�� ��������- ���. ������, �� ��।������� ���樯����, �ᯮ�짮����� 㪠- ��⥫�� �������� ������ �᭮�� � ������. ������ ��� ��- ���� �� ����⠥��� ����� �ந���������. 5.1. �����⥫� � ���� ��� ��� 㪠��⥫� ᮤ�ন� ���� ��ꥪ�, �� ���� ���- �������� "��ᢥ�����" ����㯠 � �⮬� ��ꥪ�� �१ 㪠��- ⥫�. �।�������, �� � - ��६�����, ���ਬ��, ⨯� INT, � �� - 㪠��⥫�, ᮧ����� ����� �� �� 㪠����� ᯮᮡ��. ���ୠ� ������ & �뤠�� ���� ��ꥪ�, ⠪ �� ������ �� = &�; ��ᢠ����� ���� � ��६����� ��; �������, �� �� "㪠- �뢠��" �� �. ������ & �ਬ����� ⮫쪮 � ��६���� � ���⠬ ���ᨢ�, �������樨 ���� &(�-1) � &3 ����� ��- ������묨. ����� ⠪�� ������� ���� ॣ����� ��६��- ���. ���ୠ� ������ * ��ᬠ�ਢ��� � ���࠭� ��� ���� ����筮� 楫� � ���頥��� �� �⮬� �����, �⮡� ������� ᮤ�ন���. �������⥫쭮, � Y ⮦� ����� ⨯ INT, � Y = *��; ��ᢠ����� Y ᮤ�ন��� ⮣�, �� �� 㪠�뢠�� ��. ��� ���- ������⥫쭮��� �� = &�; Y = *��; ��ᢠ����� Y � �� ᠬ�� ���祭��, �� � ������ Y = X; ��६����, ������騥 �� �ᥬ �⮬ ����室��� ������: INT X, Y; INT *PX; - 99 - � ���ᠭ��� ��� X � Y �� 㦥 ���������⭮ ����砫���. ���ᠭ�� 㪠��⥫� INT *PX; ���� ���� � ������ ��ᬠ�ਢ����� ��� ���������; ��� ������, �� ��������� *PX ����� ⨯ INT. �� ����砥�, �� � PX ������ � ���⥪�� *PX, � �� ������⭮ ��६����� ⨯� INT. �����᪨ ᨭ⠪�� ���ᠭ�� ��६��- ��� ������� ᨭ⠪�� ��ࠦ����, � ������ �� ��६����� ����� �������. �� ����砭�� ������� �� ��� �����, �易���� � ��묨 ���ᠭ�ﬨ. ���ਬ��, DOUBLE ATOF(), *DP; ������, �� ATOF() � *DP ����� � ��ࠦ����� ���祭�� ⨯� DOUBLE. �� ������ ⠪�� �������, �� �� �⮣� ���ᠭ�� ��- ��, �� 㪠��⥫� ����� 㪠�뢠�� ⮫쪮 �� ��।������ ��� ��ꥪ⮢. �����⥫� ����� �室��� � ��ࠦ����. ���ਬ��, � PX 㪠�뢠�� �� 楫�� X, � *PX ����� ������� � �� ���- ⥪��, ��� ����� ��������� X. ��� ������ Y = *PX + 1 ��ᢠ����� Y ���祭��, �� 1 ����襥 ���祭�� X; PRINTF("%D\N", *PX) ���⠥� ⥪�饥 ���祭�� X; D = SQRT((DOUBLE) *PX) ����砥� � D ������� ��७� �� X, ��祬 �� ��।�� ��- �樨 SQRT ���祭�� X �८�ࠧ���� � ⨯� DOUBLE. (����� ����� 2). � ��ࠦ����� ���� Y = *PX + 1 㭠�� ����樨 * � & �易�� � �� ���࠭��� ����� �९��, 祬 ��䬥��᪨� ����樨, ⠪ �� ⠪�� ��ࠦ���� ���� � ���祭��, �� ��� 㪠�뢠�� PX, �ਡ����� 1 � ��ᢠ����� १���� ��६����� Y. �� �� ����� � �- ��, �� ����� ������� ��ࠦ���� Y = *(PX + 1) ��뫪� �� 㪠��⥫� ����� ������� � � ����� ��� ��ᢠ������. � PX 㪠�뢠�� �� X, � *PX = 0 - 100 - �������� X ࠢ�� ���, � *PX += 1 㢥��稢��� ��� �� �������, ��� � ��ࠦ���� (*PX)++ ��㣫� ��� � ������ �ਬ�� ����室���; � �� ����- ���, � ����� 㭠�� ����樨, ������� * � ++, �믮�- ������ �ࠢ� ������, �� ��ࠦ���� 㢥���� PX, � �� �� ��- ६�����, �� ������ �� 㪠�뢠��. � �������, ⠪ ��� 㪠��⥫� ����� ��६���묨, � � ���� ����� ��������, ��� � � ��⠫�묨 ��६���묨. � PY - ��㣮� 㪠��⥫� �� ��६����� ⨯� INT, � PY = PX ������� ᮤ�ন��� PX � PY, � १���� 祣� PY 㪠�뢠�� �� � ��, �� � PX. 5.2. �����⥫� � ��㬥��� �㭪権 ��� ��� � "�" ��।�� ��㬥�⮢ �㭪�� �����⢫��- �� "�� ���祭��", �맢����� ��楤�� �� ����� �����।��- ������ ���������� �������� ��६����� �� ��뢠�饩 �ண- ࠬ��. �� �� ������, � ��� ����⢨⥫쭮 ���� �������� ��㬥��? ���ਬ��, �ணࠬ�� ����� ���⥫� �� ����- ���� ��� �������� ���冷� ���� � ������� �㭪樨 � ������ SWAP. ��� �⮣� �������筮 ������� SWAP(A, B); ��।���� �㭪�� SWAP �� �⮬ ���騬 ��ࠧ��: SWAP(X, Y) /* WRONG */ INT X, Y; { INT TEMP; TEMP = X; X = Y; Y = TEMP; } ��-�� �맮�� �� ���祭�� SWAP �� ����� �������⢮���� �� ��㬥��� A � B � ��뢠�饩 �㭪樨. � ������, �� �� ������� ����������� ������� ������� ��䥪�. ��뢠��� �ணࠬ�� ��।��� 㪠��⥫� ��������� ��������� ���祭��: SWAP(&A, &B); - 101 - ⠪ ��� ������ & �뤠�� ���� ��६�����, � &A ���� 㪠��⥫�� �� A. � ᠬ�� SWAP ��㬥��� ����뢠���� ��� 㪠- ��⥫� � ����� � 䠪��᪨� ���࠭��� �����⢫���� �१ ���. SWAP(PX, PY) /* INTERCHANGE *PX AND *PY */ INT *PX, *PY; { INT TEMP; TEMP = *PX; *PX = *PY; *PY = TEMP; } �����⥫� � ����⢥ ��㬥�⮢ ���筮 �ᯮ������� � �㭪���, ����� ������ �������� ����� ������ ���祭��. (����� ᪠����, �� SWAP �O���頥� ��� ���祭��, ���� ���- 祭�� �� ��㬥�⮢). � ����⢥ �ਬ�� ��ᬮ�ਬ �㭪�� GETINT, ����� �����⢫�� �८�ࠧ������ ����㯠��� � ������ �ଠ� ������, ࠧ����� ��⮪ ᨬ����� �� 楫� ���祭��, �� ������ 楫��� �� ���� ���饭��. �㭪�� GETINT ������ �������� ���� ��������� ���祭��, ���� �ਧ��� ���- � 䠩��, � �室�� ����� ��������� �����. �� ���- 祭�� ������ ���������� ��� �⤥��� ��ꥪ��, ����� �� ���祭�� �� �ᯮ�짮������ ��� EOF, ���� � �� ���祭�� ��������� 楫���. ���� �� �襭��, �᭮�뢠�饥�� �� ����뢠���� � ����� 7 �㭪樨 ����� SCANF, ��⮨� � ⮬, �⮡� �� ��室� �� ��- ��� 䠩�� GETINT �����頫� EOF � ����⢥ ���祭�� �㭪樨; �� ��㣮� �����饭��� ���祭�� ������ � ��宦����� ���- ���쭮�� 楫���. ������ �� ���祭�� ���������� 楫��� �����頥��� �१ ��㬥��, ����� ������ ���� 㪠��⥫�� 楫���. �� �࣠������ ࠧ����� ����� ���� 䠩�� � ��- ����� ���祭��. ������騩 横� �������� ���ᨢ 楫묨 � ������� ����- ��� � �㭪樨 GETINT: INT N, V, ARRAY[SIZE]; FOR (N = 0; N < SIZE && GETINT(&V) != EOF; N++) ARRAY[N] = V; � १���� ������� ���饭�� V �⠭������ ࠢ�� ����- �� 楫��� ���祭��, ���������� �� �室��� ������. ����� ��������, �� � ����⢥ ��㬥�� GETINT ����室��� 㪠���� &V � �� V. �ᯮ�짮����� ���� V ॥ �ᥣ� �ਢ���� � �訡�� ����樨, ����� GETINT ��������, �� ��� ࠡ��- �� ������ � 㪠��⥫��. - 102 - ���� GETINT ���� �祢����� ����䨪�樥� ����ᠭ��� ���� ࠭�� �㭪樨 ATOI: GETINT(PN) /* GET NEXT INTEGER FROM INPUT */ INT *PN; { INT C,SIGN; WHILE ((C = GETCH()) == ' ' \!\! C == '\N' \!\! C == '\T'); /* SKIP WHITE SPACE */ SIGN = 1; IF (C == '+' \!\! C == '-') { /* RECORD SIGN */ SIGN = (C == '+') ? 1 : -1; C = GETCH(); } FOR (*PN = 0; C >= '0' && C <= '9'; C = GETCH()) *PN = 10 * *PN + C - '0'; *PN *= SIGN; IF (C != EOF) UNGETCH(C); RETURN(C); } ��ࠦ���� *PN �ᯮ������ ���� � GETINT ��� ���筠� ���- ������ ⨯� INT. �� ⠪�� �ᯮ�짮���� �㭪樨 GETCH � UNGETCH (���ᠭ�� � ����� 4) , ⠪ �� ���� ��譨� ᨬ���, ������ ��室���� ���뢠��, ����� ���� ����饭 ���⭮ �� ����. ��ࠦ����� 5-1. --------------- ������ �㭪�� GETFLOAT, ������ GETINT ��� �ᥫ � ������饩 �窮�. ����� ⨯ ������ �������� GETFLOAT � ��- ��⢥ ���祭�� �㭪樨? 5.3. �����⥫� � ���ᨢ� � �몥 "C" ������� ᨫ쭠� ��������� ����� 㪠��- ⥫ﬨ � ���ᨢ��� , ���⮫쪮 ᨫ쭠�, �� 㪠��⥫� � ���- ᨢ� ����⢨⥫쭮 ��� ��ᬠ�ਢ��� �����६����. ���� ������, ������ ����� �믮����� � ������� �����ᮢ ����- ��, ����� ᤥ���� � � ������� 㪠��⥫��. ��ਠ�� � 㪠���- �ﬨ ���筮 ����뢠���� ����� ������, �� � ���쪮 ����� ��㤭� ��� �����।�⢥����� ���������, �� �ࠩ��� ��� ��� ��稭��饣�. ���ᠭ�� INT A[10] ��।���� ���ᨢ ࠧ��� 10, �.�. ����� �� 10 ������- ⥫��� ��ꥪ⮢, ���뢠���� A[0], A[1], ..., A[9]. ������ A[I] ᮮ⢥����� ����� ���ᨢ� �१ I ����権 �� ���- ��. � PA - 㪠��⥫� 楫���, ���ᠭ�� ��� - 103 - INT *PA � ��ᢠ������ PA = &A[0] �ਢ���� � ⮬�, �� PA 㪠�뢠�� �� �㫥��� ���� ���ᨢ� A; �� ����砥�, �� PA ᮤ�ন� ���� ���� A[0]. ������ ��ᢠ������ X = *PA �㤥� ������� ᮤ�ন��� A[0] � X. � PA 㪠�뢠�� �� ������� ��।������ ���� ���- ᨢ� A, � �� ��।������ PA+1 㪠�뢠�� �� ���騩 - ����, � ����� PA-I 㪠�뢠�� �� ����, ���騩 �� I ����- 権 �� ����, 㪠�뢠����� PA, � PA+I �� ����, ���騩 �� I ����権 ��. ����� ��ࠧ��, � PA 㪠�뢠�� �� A[0], � *(PA+1) ��뫠���� �� ᮤ�ন��� A[1], PA+I - ���� A[I], � *(PA+I) - ᮤ�ন��� A[I]. �� ����砭�� �ࠢ������ ������ᨬ� �� ⨯� ��६����� � ���ᨢ� A. ���� ��।������ "���������� 1 � 㪠��⥫�", � ⠪�� ��� �����࠭���� �� ��� ��䬥⨪� 㪠��⥫��, ��- ⮨� � ⮬, �� ���饭�� ����⠡������ ࠧ�� �����, ���������� ��ꥪ⮬, �� ����� 㪠�뢠�� 㪠��⥫�. ����� ��ࠧ��, I � PA+I ��। �ਡ�������� 㬭������� �� ࠧ��� ��ꥪ⮢, �� ����� 㪠�뢠�� PA. �祢���� ������� �祭� �᭮� ᮮ⢥��⢨� ����� ��- ����樥� � ��䬥⨪�� 㪠��⥫��. � ����⢨⥫쭮�� ���- ������ �८�ࠧ�� ��뫪� �� ���ᨢ � 㪠��⥫� �� ��砫� ���ᨢ�. � १���� �⮣� ��� ���ᨢ� ���� 㪠��⥫�- �� ��ࠦ�����. ��� ��⥪��� ���쪮 ���쬠 �������� ��⢨�. ��� ��� ��� ���ᨢ� ���� ᨭ������ ���⮯���- ����� ��� �㫥���� ����, � ��ᢠ������ PA=&A[0] ����� ������� ��� PA = A �� ����� 㤨��⥫��, �� �ࠩ��� ��� �� ���� ���- ��, ������� �� 䠪�, �� ��뫪� �� A[I] ����� ������� � ���� *(A+I). �� ����������� ��ࠦ���� A[I] � �몥 "C" ��� ���������� �८�ࠧ���� � ���� *(A+I); �� ��� ��� ᮢ��襭�� ��������. � �ਬ����� ������ & � ����� ���� ⠪��� ᮮ⭮襭�� ������⭮��, � �� ����稬, �� &A[I] � A+I ⮦� �������: A+I - ���� I-�� ���� �� ��砫� A. � ��㣮� ���, � PA ���� 㪠��⥫��, � � ��ࠦ����� ��� ����� �ᯮ�짮���� � �����ᮬ: PA[I] ����- �筮 *(PA+I). ����, �� ��ࠦ����, ������饥 ���ᨢ� � �������, ����� ���� ����ᠭ� �१ 㪠��⥫� � ᬥ饭�� � �������, ��祬 ���� � ����� � ⮬ �� �⢥ত����. - 104 - ������� ���� ࠧ��稥 ����� ������ ���ᨢ� � 㪠��⥫��, ��� ����室��� ����� � ����. 㪠��⥫� ���� ��६��- ���, ⠪ �� ����樨 PA=A � PA++ ����� ���. �� ��� ����- �� ���� ����⠭⮩, � �� ��६�����: �������樨 ⨯� A=PA ��� A++,��� P=&A ���� ��������묨. ����� ��� ���ᨢ� ��।����� �㭪樨, � �� ᠬ�� ���� �� ��।����� ���⮯�������� ��砫� �⮣� ���ᨢ�. ����� �맢����� �㭪樨 ⠪�� ��㬥�� ���� �筮 ⠪�� �� ��- ६�����, ��� � �� ��㣠�, ⠪ �� ��� ���ᨢ� � ����⢥ ��㬥�� ����⢨⥫쭮 ���� 㪠��⥫��, �.�. ��६��- ���, ᮤ�ঠ饩 ����. �� ����� �ᯮ�짮���� �� �����⥫�- �⢮ ��� ����ᠭ�� ������ ��ਠ�� �㭪樨 STRLEN, ������- 饩 ����� ��ப�. STRLEN(S) /* RETURN LENGTH OF STRING S */ CHAR *S; { INT N; FOR (N = 0; *S != '\0'; S++) N++; RETURN(N); } ������ 㢥��祭�� S ᮢ��襭�� �������, ����� �� ��६����� ���� 㪠��⥫��; S++ ����� �� ����� �� ᨬ- ������ ��ப� � ���⨢襩�� � STRLEN �㭪樨, � ⮫쪮 㢥��稢��� �������� ��� �㭪樨 STRLEN ����� ����. ���- ᠭ�� �ଠ���� ��ࠬ�� � ��।������ �㭪樨 � ���� CHAR S[]; CHAR *S; ᮢ��襭�� ��������; ����� ��� ���ᠭ�� ��� �।��- ����, ��।������ � ����⥫쭮� �⥯��� ⥬, ����� ���- ����� ���� �ᯮ�짮���� �� ����ᠭ�� �㭪樨. � �㭪樨 ��।����� ��� ���ᨢ�, � � ����ᨬ��� �� ⮣�, �� 㤮�- ���, ����� ��������, �� �㭪�� ������� ���� � ���ᨢ��, ���� � 㪠��⥫��, � ����⢮���� ����� ᮮ⢥���騬 ���- ���. ����� ���� �ᯮ�짮���� ��� ���� ����権, � �� ��- ����� 㬥��� � ���. ����� ��।��� �㭪樨 ���� ���ᨢ�, � ������ � ��- ��⢥ ��㬥�� 㪠��⥫� ��砫� ������ᨢ�. ���ਬ��, � A - ���ᨢ, � ��� F(&A[2]) ��� � F(A+2) - 105 - ��।��� �㭪樨 F ���� ���� A[2], ��⮬� �� � &A[2], � A+2 ����� 㪠��⥫�묨 ��ࠦ���ﬨ, ��뫠�騬��� �� ��⨩ ���� A. ����� �㭪樨 F ���ᠭ�� ��㬥�⮢ ����� ������⢮���� � ����: F(ARR) INT ARR[]; { ... } ��� F(ARR) INT *ARR; { ... } �� ��ᠥ��� �㭪樨 F, � �� 䠪�, �� �� ��㬥�� � ����- ⢨⥫쭮�� ��뫠���� � ��� ����襣� ���ᨢ�,�� ����� ��� ��� ������� ����⢨�. 5.4. ���᭠� ��䬥⨪� � P ���� 㪠��⥫��, � ����� �� �� �� ��� ��ꥪ�, �� ����� �� 㪠�뢠��, ������ P++ 㢥��稢��� P ⠪, �� �� 㪠�뢠�� �� ���騩 ���� ����� ��� ��ꥪ⮢, � ������ P +=I 㢥��稢��� P ⠪, �⮡� �� 㪠- �뢠� �� ����, �����騩 �� I ���⮢ �� ⥪�饣� - ����.�� � ��������� �������樨 �।�⠢���� ᮡ�� ᠬ� ����� � ᠬ� �����࠭���� ��� ��䬥⨪� 㪠��⥫�� ��� ���᭮� ��䬥⨪�. ��� "C" ������⥫�� � ����ﭥ� � �� ���室� � ���᭮� ��䬥⨪�; ��ꥤ������ � ���� 楫�� 㪠��⥫��, ���ᨢ�� � ���᭮� ��䬥⨪� ���� ����� �� �������� ᨫ��� �� �몠. ������ �ந�������㥬 ������� �� ᮮ⢥������� ���������⥩ �몠 �� �ਬ�� ����୮� (�� ��������, ��ᬮ��� �� � ������) �ணࠬ�� ��।�- ����� �����. ������� ��� �㭪樨: �㭪�� ALLOC(N) �����- 頥� � ����⢥ ��� ���祭�� 㪠��⥫� P, ����� 㪠��- ���� �� ����� �� N ������⥫��� ᨬ������ ����権, ��- ��� ����� ���� �ᯮ�짮���� ��뢠�饩 �㭪�� ALLOC �ண- ࠬ��� ��� �࠭���� ᨬ�����; �㭪�� FREE(P) �������� �ਮ��⥭��� ⠪�� ��ࠧ�� ������, ⠪ �� �� � ���쭥�襬 ����� ᭮�� �ᯮ�짮����. �ணࠬ�� ���� "����୮�", ��⮬� �� ���饭�� � FREE ������ �ந��������� � ���浪�, ���⭮� ⮬�, � ��� �ந��������� ���饭�� � ALLOC. ����� ��ࠧ��, �ࠢ�塞�� �㭪�ﬨ ALLOC � FREE ������ �- ����� �⥪�� ��� ᯨ�, � ��� ������ ������� - ���� ����������� ����. �⠭���⭠� ������⥪� �몠 "C" ᮤ�ন� ��������� �㭪樨, �� ����騥 ⠪�� ��࠭�祭��, - 106 - �, �� ⮣�, � ����� 8 �� �ਢ���� ���襭�� ��ਠ���. ����� ⥬, ������, ��� ������ �ਫ������ �㦭� ⮫쪮 �ਢ�- ��쭠� �㭪�� ALLOC ��� ��।������ �������� ���⪮� ����� ���������� ��࠭�� ࠧ�� � ���।᪠�㥬� �����- �� �६���. ���⥩�� ॠ������ ��⮨� � ⮬, �⮡� �㭪�� ࠧ- ������ ��१�� ����讣� ᨬ���쭮�� ���ᨢ�, ���� �� ����� ��� ALLOCBUF. ��� ���ᨢ ���� ᮡ�⢥������� �㭪権 ALLOC � FREE. ��� ��� ��� ࠡ���� � 㪠��⥫ﬨ, � �� � �����ᠬ� ���ᨢ�, ������� ��㣮� �㭪樨 �� �㦭� ����� ��� �⮣� ���ᨢ�. �� ����� ���� ���ᠭ ��� ���譨� ����᪨�, �.�. �� �㤥� ������� �� �⭮襭�� � ��室��- �� 䠩��, ᮤ�ঠ饬� ALLOC � FREE, � �������� �� ��� ��- ������. �� �ࠪ��� ॠ����樨 ��� ���ᨢ ����� ���� �� ����� �����; ����� �⮣� �� ����� ���� ����祭 � १��- �� ����� � ����樮���� ��⥬� �� 㪠��⥫� �����ண� �������������� ����� �����. ��㣮� ����室���� ���ଠ樥� ���� �, ����� ���� ���ᨢ� ALLOCBUF 㦥 �ᯮ�짮����. �� ����㥬�� 㪠��⥫�� ��ࢮ�� ������� ����, �������� ALLOCP. ����� � �㭪- 樨 ALLOC �������� �� �뤥������ N ᨬ�����, � ��� ��- ���, �����筮 �� ��⠫��� ��� �⮣� ���� � ALLOCBUF. ��- �� �����筮, � ALLOC �����頥� ⥪�饥 ���祭�� ALLOCP (�.�. ��砫� ������� �����), ��⥬ 㢥��稢��� ��� �� N, � ⥬ �⮡� �� 㪠�뢠� �� ������ ������ �������. ��- ��� FREE(P) ���� �������� ALLOCP ࠢ�� P �� ����, �� P 㪠�뢠�� �� ������ ����� ALLOCBUF. DEFINE NULL 0 /* POINTER VALUE FOR ERROR REPORT */ DEFINE ALLOCSIZE 1000 /* SIZE OF AVAILABLE SPACE */ TATIC CHAR ALLOCBUF[ALLOCSIZE];/* STORAGE FOR ALLOC */ TATIC CHAR *ALLOCP = ALLOCBUF; /* NEXT FREE POSITION */ HAR *ALLOC(N) /* RETURN POINTER TO N CHARACTERS */ INT N; ( IF (ALLOCP + N <= ALLOCBUF + ALLOCSIZE) { ALLOCP += N; RETURN(ALLOCP - N); /* OLD P */ } ELSE /* NOT ENOUGH ROOM */ RETURN(NULL); ) REE(P) /* FREE STORAGE POINTED BY P */ HAR *P; ( IF (P >= ALLOCBUF && P < ALLOCBUF + ALLOCSIZE) ALLOCP = P; ) - 107 - ����� ������� ���᭥���. ����� ������, 㪠��⥫� ��- ��� ���� ���樠������ �筮 ⠪ ��, ��� � �� ��㣠� ��६�����, ��� ���筮 �����⢥��묨 �����묨 ���祭��- �� ����� NULL (�� ���㦤����� ����) ��� ��ࠦ����, ����- ��饥 ���� ࠭�� ��।������� ������ ᮮ⢥�����饣� �- ��. ���ᠭ�� STATIC CHAR *ALLOCP = ALLOCBUF; ��।���� ALLOCP ��� 㪠��⥫� �� ᨬ���� � ���樠������� ��� ⠪, �⮡� �� 㪠�뢠� �� ALLOCBUF, �.�. �� ����� - ������ ������ �� ��砫� ࠡ��� �ணࠬ��. ��� ��� ��� ���- ᨢ� ���� ���ᮬ ��� �㫥���� ����, � �� ����� �뫮 �� ������� � ���� STATIC CHAR *ALLOCP = &ALLOCBUF[0]; �ᯮ���� �� ������, ����� ��� ������� ����� ����⢥�- ���. � ������� ��ન IF (ALLOCP + N <= ALLOCBUF + ALLOCSIZE) ��������, ��⠫��� �� �����筮 ����, �⮡� 㤮���⢮- ��� ����� �� N ᨬ�����. � �����筮, � ����� ����- ��� ALLOCP �� �㤥� 㪠�뢠�� �����, 祬 �� ������ ����- �� ALLOCBUF. � ����� ����� ���� 㤮���⢮७, � ALLOC �����頥� ����� 㪠��⥫� (����� �������� �� ���ᠭ�� ᠬ�� �㭪樨). � �� ���, � ALLOC ������ ������ �����- �� �ਧ���, ������騩 � ⮬, �� ����� ���� �� ��⠫���. � �몥 "C" ��࠭������, �� �� ���� �ࠢ���� 㪠��⥫� ������ �� ����� ����� ���祭�� ���, ⠪ �� �����饭�� ��- �� ����� �㦨�� � ����⢥ ᨣ���� � ����ଠ�쭮� ᮡ�⨨, � ������ ��砥 �� ������⢨� ����. ��, ������, ����� ��� ��襬 NULL, � ⥬ �⮡� ����� �᭮ ��������, �� �� ᯥ�- ��쭮� ���祭�� 㪠��⥫�. ����� ������, 楫� �� ����� ��- ����� ��ᢠ������� 㪠��⥫�, � ��� - �� �ᮡ� ��- 砩. ��ન ���� IF (ALLOCP + N <= ALLOCBUF + ALOOCSIZE) � IF (P >= ALLOCBUF && P < ALLOCBUF + ALLOCSIZE) ������������ ���쪮 ������ �ᯥ�⮢ ��䬥⨪� 㪠���- ���. ��-����� , �� ��।������� ����� 㪠��⥫� ����� �ࠢ������. � P � Q 㪠�뢠�� �� ����� ������ � ⮣� �� ���ᨢ�, � ⠪�� �⭮襭��, ��� <, >= � �.�., ࠡ���� �������騬 ��ࠧ��. ���ਬ��, P < Q - 108 - ��⨭��, � P 㪠�뢠�� �� ����� ࠭��� ���� ���ᨢ�, 祬 Q. �⭮襭�� == � != ⮦� ࠡ����. �� 㪠��⥫� ���- �� ������ ��ࠧ�� �ࠢ���� �� ࠢ���⢮ ��� ��ࠢ���⢮ � NULL. �� �� �� �� ����� �������, � �� �ᯮ���� �ࠢ����� �� ࠡ�� � 㪠��⥫ﬨ, 㪠�뢠�騬� �� ࠧ�� ���ᨢ�. � ��� �������, � �� ��� ��設�� �� ������ �祢����� �������. � �� ���, � ��� �ணࠬ�� �㤥� �ࠢ��쭮 ࠡ���� �� ����� ��設� � ������ �����⨦��� �- ������ �� ��㣮�. ��-�����, ��� �� 㦥 ������, 㪠��⥫� � 楫�� ����� ᪫��뢠�� � ������. ��������� P + N ���ࠧ㬥���� N-� ��ꥪ� �� ⥬, �� ����� P 㪠�뢠�� � �����騩 ������. �� �ࠢ������ ������ᨬ� �� ⮣�, �� ��- ��� ��� ��ꥪ⮢ P ������ 㪠�뢠��; ��������� ᠬ �����- ����� N � ᮮ⢥��⢨� � ��।��塞� �� ���ᠭ�� P ࠧ��- ��ꥪ⮢, 㪠�뢠���� � ������� P. ���ਬ��, �� PDP-11 ����⠡����騩 �����⥫� ࠢ�� 1 ��� CHAR, 2 ��� INT � SHORT, 4 ��� LONG � FLOAT � 8 ��� DOUBLE. ���⠭�� 㪠��⥫�� ⮦� ��������: � P � Q 㪠�뢠�� �� ����� ������ � ⮣� �� ���ᨢ�, � P-Q - ������⢮ ���⮢ ����� P � Q. ��� 䠪� ����� �ᯮ�짮���� ��� ��- ��ᠭ�� �� ������ ��ਠ�� �㭪樨 STRLEN: STRLEN(S) /* RETURN LENGTH OF STRING S */ CHAR *S; { CHAR *P = S; WHILE (*P != '\0') P++; RETURN(P-S); } �� ���ᠭ�� 㪠��⥫� P � �⮩ �㭪樨 ���樠������ ���।�⢮� ��ப� S, � १���� 祣� �� 㪠�뢠�� �� ���- �� ᨬ��� ��ப�. � 横�� WHILE �� ��।� ������� ���- �� ᨬ��� �� �� ���, ���� �� ����� ᨬ��� ���� ��ப� \0. ��� ��� ���祭�� \0 ࠢ�� ���, � WHILE ⮫쪮 ������, ����� �� ��ࠦ���� � ��� ���祭�� 0, � � ������ ��砥 �- ��� ���� ����� �������. ����� 横�� ��� �����뢠�� � ���� WHILE (*P) P++; ��� ��� P 㪠�뢠�� �� ᨬ����, � ������ P++ ��।��- ���� P ����� ࠧ ⠪, �⮡� �� 㪠�뢠� �� ���騩 ᨬ- ���. � १���� P-S ���� � ��ᬮ�७��� ᨬ�����, - 108 - �.�. ����� ��ப�. ��䬥⨪� 㪠��⥫�� ������⥫쭠: � �� �� ����� ���� � ��६���묨 ⨯� FLOAT, ����� ��- ������ ����� �����, 祬 ��६���� ⨯� CHAR, � � �� P �� 㪠��⥫�� �� FLOAT, � ������ P++ ��।���� �� P �� ���饥 FLOAT. ⠪�� ��ࠧ��, �� ����� �� ������� ��㣮� ��ਠ�� �㭪樨 ALLOC, ��।����饩 ������ ��� FLOAT, ����� CHAR, ���� ������� ���� � ALLOC � FREE ����⥫� CHAR �� FLOAT. �� ����⢨� � 㪠��⥫ﬨ ��⮬���᪨ ��- �뢠�� ࠧ��� ��ꥪ⮢, �� ����� ��� 㪠�뢠��, ⠪ �� ����� ��祣� ������ �� ����. �� �᪫�祭��� 㯮������ ��� ����権 (����� � ��- �⠭�� 㪠��⥫� � 楫���, ���⠭�� � �ࠢ����� ���� 㪠- ��⥫��), ��� ��⠫쭠� ��䬥⨪� 㪠��⥫�� ���� ����- ������. ����饭� ᪫��뢠�� ��� 㪠��⥫�, 㬭�����, ��- ����, ᤢ����� ��� ��᪨��� ��, � ⠪�� �ਡ������ � ��� ��६���� ⨯� FLOAT ��� DOUBLE. 5.5. �����⥫� ᨬ����� � �㭪樨 ���筠� ����⠭�, ���, ���ਬ��, "I AM A STRING" ���� ���ᨢ�� ᨬ�����. ��������� �����蠥� ����७��� �।�⠢����� ⠪��� ���ᨢ� ᨬ����� \0, ⠪ �� �ணࠬ�� ����� ��室��� ��� �����. ����� ��ࠧ��, ����� ���ᨢ� � ��- ��� ����뢠���� �� ������� ����� � ᨬ����� ����� �����묨 ����窠��. ��-�������� �� �ᥣ� ����� ����⠭�� ������� � ����⢥ ��㬥�⮢ �㭪権, ���, ���ਬ��, � PRINTF ("HELLO, WORLD\N"); ����� ᨬ���쭠� ��ப�, �������� �⮩, ������ � �ண- ࠬ��, � ����� � ��� �����⢫���� � ������� 㪠��⥫� ᨬ�����; �㭪�� PRINTF 䠪��᪨ ����砥� 㪠��⥫� ᨬ- ���쭮�� ���ᨢ�. ����筮, ᨬ����� ���ᨢ� �� ��易�� ���� ⮫쪮 ���- ���⠬� �㭪権. � ������ MESSAGE ��� CHAR *MESSAGE; � � १���� ������ MESSAGE = "NOW IS THE TIME"; ��६����� MESSAGE �⠭�� 㪠��⥫�� �� 䠪��᪨� ���ᨢ ᨬ�����. �� �� �������� ��ப�; ����� ������� ⮫쪮 㪠��⥫�. � �몥 "C" �� �।�ᬮ�७� �����-���� ����樨 ��� ��ࠡ�⪨ �ᥩ ��ப� ᨬ����� ��� 楫���. �� �ந�������㥬 ��㣨� �ᯥ��� 㪠��⥫�� � ���ᨢ��, ࠧ���� ��� ������� �㭪樨 �� �⠭���⭮� ������⥪� ���- ��-�뢮��, ����� �㤥� ��ᬮ�७� � ����� 7. - 109 - ��ࢠ� �㭪�� - �� STRCPY(S,T), ����� ������� ���- �� � � ��ப� S. ��㬥��� ����ᠭ� ������ � �⮬ ���浪� �� �������� � ����樥� ��ᢠ������, ����� ��� ⮣�, �⮡� ����� T � S ���筮 ����� S = T ᭠砫� �ਢ���� ����� � ���ᨢ���: STRCPY(S, T) /* COPY T TO S */ CHAR S[], T[]; { INT I; I = 0; WHILE ((S[I] = T[I]) != '\0') I++; } ��� ᮯ��⠢����� ���� ������ ��ਠ�� STRCPY � 㪠���- �ﬨ. STRCPY(S, T) /* COPY T TO S; POINTER VERSION 1 */ CHAR *S, *T; { WHILE ((*S = *T) != '\0') { S++; T++; } } ��� ��� ��㬥��� ��।����� �� ���祭��, �㭪�� STRCPY ����� �ᯮ�짮���� S � T ⠪, ��� ��� ��������. ����� ��� � 㤮��⢮� ���������� 㪠��⥫ﬨ, ����� ��।�������� ����� ���ᨢ��, �� ������ ᨬ���� �� 蠣, ���� �� �㤥� - ���� � S �������騩 � T ᨬ��� \0. �� �ࠪ⨪� �㭪�� STRCPY �뫠 �� ����ᠭ� �� ⠪, ��� �� �������� ���. ��� ���� �����������: STRCPY(S, T) /* COPY T TO S; POINTER VERSION 2 */ CHAR *S, *T; { WHILE ((*S++ = *T++) != '\0') ; } ����� 㢥��祭�� S � T ���ᥭ� � ������ ����. ���- 祭��� *T++ ���� ᨬ���, �� ����� 㪠�뢠� T �� 㢥��- 祭��; ����䨪᭠� ������ ++ �� ������� T, ���� ��� ᨬ- ��� �� �㤥� �����祭. ��筮 ⠪ �� ��� ᨬ��� ����頥��� � ����� ������ S, �� ⮣� ��� S �㤥� 㢥��祭�. ������ १���� �����砥��� � ⮬, �� �� ᨬ����, ������ �����- ��騩 \0, ���������� �� T � S. - 110 - � ��� ������ ᮪�饭�� �� ����� �⬥⨬, �� �ࠢ��- ��� � \0 ���� ����譨�, ⠪ �� �㭪�� ����� ������� � ���� STRCPY(S, T) /* COPY T TO S; POINTER VERSION 3 */ CHAR *S, *T; { WHILE (*S++ = *T++) ; } ��� � ��ࢮ�� ����鸞 �� ������ ����� ���������� �������- ���, ��� ���� ����⥫쭮� 㤮��⢮. �⮩ ������� ��� �������� 㦥 ��� �� ��⮬�, �� �� � ��� �㤥� ��� ���- ������ � "C"-�ணࠬ���. ���� �㭪�� - STRCMP(S, T), ����� �ࠢ������ ᨬ- ����� ��ப� S � �, ������� ����⥫쭮�, �㫥��� ��� ������⥫쭮� ���祭�� � ᮮ⢥��⢨� � ⥬, �����, ࠢ�� ��� ����� ���ᨪ�����᪨ S, 祬 T. �����頥��� ���祭�� ����砥��� � १���� ���⠭�� ᨬ����� �� ��ࢮ� ����- 樨, � ���ன S � T �� ᮢ������. STRCMP(S, T) /* RETURN <0 IF S<T, 0 IF S==T, >0 IF S>T */ CHAR S[], T[]; { INT I; I = 0; WHILE (S[I] == T[I]) IF (S[I++] == '\0') RETURN(0); RETURN(S[I]-T[I]); } ��� ����� STRCMP � 㪠��⥫ﬨ: STRCMP(S, T) /* RETURN <0 IF S<T, 0 IF S==T, >0 IF S>T */ CHAR *S, *T; { FOR ( ; *S == *T; S++, T++) IF (*S == '\0') RETURN(0); RETURN(*S-*T); } ⠪ ��� ++ � -- ����� ���� ��� ����䨪�묨, ⠪ � ��䨪�묨 �����ﬨ, ��������� ��㣨� �������樨 * � ++ � --, ��� � ����� ���. ���ਬ�� *++P - 111 - 㢥��稢��� P �� �����祭�� ᨬ����, �� ����� 㪠�뢠�� P, � *--P ᭠砫� 㬥��蠥� P. ��ࠦ����� 5-2. --------------- ������ ��ਠ�� � 㪠��⥫ﬨ �㭪樨 STRCAT �� ����� 2: STRCAT(S, T) ������� ��ப� T � ����� S. ��ࠦ����� 5-3. --------------- ������ ����� ��� STRCPY. ��ࠦ����� 5-4. -------------- ��९��� ���室�騥 �ணࠬ�� �� �।���� ���� � �- ࠦ�����, �ᯮ���� 㪠��⥫� ����� ������樨 ���ᨢ��. ���訥 ���������� ��� �⮣� �।��⠢���� �㭪樨 GETLINE /����� 1 � 4/, ATOI, ITOA � �� ��ਠ��� /����� 2, 3 � 4/, REVERSE /����� 3/, INDEX � GETOP /����� 4/. 5.6. �����⥫� - �� 楫�. ��, ��������, ���⨫� �������� � �।���� "�"-�ண- ࠬ��� �� �����쭮 ���ਭ㦤����� �⭮襭�� � �������� 㪠��⥫��. � ��饬 �� ��୮, �� �� ����設�⢥ ��設 㪠- ��⥫� ����� ����� 楫��� � ��।��� ��� ���⭮, �� ��- ����� ���; �� �⮬ �� �ந�室�� �������� ����⠡����� ��� �८�ࠧ������ � �� ���� ��� �� ������. � ᮦ������, �� ����� � ���쭮�� ���饭�� � �㭪�ﬨ, �������騬� 㪠��⥫�, ����� ��⥬ ���� ��।����� ��㣨� �㭪��, - ����室��� ���ᠭ�� 㪠��⥫�� ��� ���᪠����. ���ᬮ�- ਬ, ���ਬ��, �㭪�� STRSAVE(S), ����� ������� ��ப� S � ����� ���� ��� �࠭����, �뤥�塞�� ���।�⢮� ���- 饭�� � �㭪樨 ALLOC, � �����頥� 㪠��⥫� �� �� ����. �ࠢ��쭮 ��� ������ ���� ����ᠭ� ⠪: CHAR *STRSAVE(S) /* SAVE STRING S SOMEWHERE */ CHAR *S; { CHAR *P, *ALLOC(); IF ((P = ALLOC(STRLEN(S)+1)) != NULL) STRCPY(P, S); RETURN(P); } �� �ࠪ⨪� ������� ᨫ쭮� ��६����� ���᪠�� ���ᠭ��: - 112 - *STRSAVE(S) /* SAVE STRING S SOMEWHERE */ { CHAR *P; IF ((P = ALLOC(STRLEN(S)+1)) != NULL) STRCPY(P, S); RETURN(P); } �� �ணࠬ�� �㤥� �ࠢ��쭮 ࠡ���� �� ������ ���- ���, ��⮬� �� �� 㬮�砭�� �㭪樨 � ��㬥��� ����� ⨯ INT, � 㪠��⥫� � 楫�� ���筮 ����� ������᭮ ����뫠�� �㤠 � ���⭮. ������ ⠪�� �⨫� �ணࠬ������ � �� ����⢥ ���� ������, ����� ������ �� ��⠫�� ॠ����樨 � ���⥪���� ��設� � ����� �ਢ��� � ����- ����� १���⠬ �� �����⭮� �ᯮ��㥬�� ���� �������- ��. ���㬭�� ���� �ᯮ�짮���� ����� ���ᠭ��. (�⫠���- ��� �ணࠬ�� LINT �।�।�� � ⠪�� ����������, � ��� �� ��������� �� �� �������). 5.7. ��������� ���ᨢ�. � �몥 "C" �।�ᬮ�७� ��אַ㣮��� ��������� ���- ᨢ�, ��� �� �ࠪ⨪� ������� ⥭����� � �� ����⥫쭮 ����� ।���� �ᯮ�짮����� �� �ࠢ����� � ���ᨢ��� 㪠��- ⥫��. � �⮬ ࠧ���� �� ��ᬮ�ਬ ������� �� ��⢠. ���ᬮ�ਬ ������ �८�ࠧ������ ��� ����� � ���� ���� � �������. ���ਬ��, 1-�� ���� ���� 60-� ���� �����- ��᭮�� ���� � 61-� ���� ��᮪�᭮�� ����. ������ ������ ��� �㭪樨 ��� �믮������ ��� �८�ࠧ������: DAY_OF_YEAR �८�ࠧ�� ����� � ���� � ���� ����, � MONTH_DAY �८�ࠧ�- �� ���� ���� � ����� � ����. ��� ��� �� ������ �㭪�� �����頥� ��� ���祭��, � ��㬥��� ����� � ��� ������ ���� 㪠��⥫ﬨ: MONTH_DAY(1977, 60, &M, &D) �������� M ࠢ�� 3 � D ࠢ�� 1 (1-�� ����). ��� �� �㭪樨 �㦤����� � ����� � ⮩ �� ���ଠ樮�- ��� ⠡���, 㪠�뢠�饩 � ���� � ������ �����. ��� ��� � ���� � ����� � ��᮪�᭮� � � ����᮪�᭮� ���� �⫨- 砥���, � ��� �।�⠢��� �� � ���� ���� ��ப ��㬥୮�� ���ᨢ�, 祬 ������� �������� �� �६� ������, �� ������ �ந�室�� � 䥢ࠫ�. ��� ��� ���ᨢ � �믮����騥 �� �८�ࠧ������ �㭪樨: STATIC INT DAY_TAB[2][13] = { (0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31), (0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31) }; - 113 - DAY_OF_YEAR(YEAR, MONTH, DAY) /* SET DAY OF YEAR */ INT YEAR, MONTH, DAY; /* FROM MONTH & DAY */ { INT I, LEAP; LEAP = YEAR%4 == 0 && YEAR%100 != 0 \!\! YEAR%400 == 0; FOR (I = 1; I < MONTH; I++) DAY += DAY_TAB[LEAP][I]; RETURN(DAY); { MONTH_DAY(YEAR, YEARDAY, PMONTH, PDAY) /*SET MONTH,DAY */ INT YEAR, YEARDAY, *PMONTH, *PDAY; /* FROM DAY OF YEAR */ { LEAP = YEAR%4 == 0 && YEAR%100 != 0 \!\! YEAR%400 == 0; FOR (I = 1; YEARDAY > DAY_TAB[LEAP][I]; I++) YEARDAY -= DAY_TAB[LEAP][I]; *PMONTH = I; *PDAY = YEARDAY; } ���ᨢ DAY_TAB ������ ���� ���譨� ��� ��� DAY_OF_YEAR, ⠪ � ��� MONTH_DAY, ����� �� �ᯮ������ ������ �⨬� ��- ��ﬨ. ���ᨢ DAY_TAB ���� ���� ��㬥�� ���ᨢ��, � ��- ��� �� ����� ����. �� ��।������ � "C" ��㬥�� ���ᨢ �� ������ ���� �������� ���ᨢ��, ����� ���� ��- �ண� ���� ���ᨢ��. ���⮬� ������� �����뢠���� ��� DAY_TAB[I][J] � �� DAY_TAB [I, J] ��� � ����設�⢥ �몮�. � ��⠫쭮� � ��㬥�묨 ���ᨢ��� ����� � �᭮���� �������� ⠪�� �� ��ࠧ��, ��� � ��㣨� �몠�. �������� �࠭���� �� ��ப��, �.�. �� ���饭�� � ���⠬ � ���浪� �� ࠧ��饭�� � ����� ����॥ �ᥣ� ��- ������� ᠬ� �ࠢ� ������. ���ᨢ ���樠��������� � ������� ᯨ᪠ ��砫��� ���- 祭��, �����祭��� � 䨣��� ���; ������ ��ப� ��㬥�- ���� ���ᨢ� ���樠��������� ᮮ⢥�����騬 ���ᯨ�. �� �����⨫� � ��砫� ���ᨢ� DAY_TAB �⮫��� �� �㫥� ��� �- ��, �⮡� ����� ����楢 ������� ����⢥��� ��ࠧ�� �� 1 �� 12, � �� �� 0 �� 11. ��� ��� �� ����� ����� � ��� ���� �� ���ࠦ����, ⠪�� ᯮᮡ ���, 祬 �������� �����- ᮢ. � ��㬥�� ���ᨢ ��।����� �㭪樨, � ���ᠭ�� ᮮ⢥�����饣� ��㬥�� �㭪樨 ������ ᮤ�ঠ�� ������- ⢮ �⮫�殢; ������⢮ ��ப ������⢥���, �����, ��� � �०��, 䠪��᪨ ��।����� 㪠��⥫�. � ��襬 ������- ��� ��砥 �� 㪠��⥫� ��ꥪ⮢, ������ ���ᨢ��� �� - 114 - 13 �ᥫ ⨯� INT. ����� ��ࠧ��, � �� �ॡ������� ���- ���� ���ᨢ DAY_TAB �㭪樨 F, � ���ᠭ�� � F ����� �� ���: F(DAY_TAB) INT DAY_TAB[2][13]; { ... } ��� ��� ������⢮ ��ப ���� ������⢥���, � ����- ��� ��㬥�� � F ����� �� ���� ⠪��: INT DAY_TAB[][13]; ��� ⠪�� INT (*DAY_TAB)[13]; � ���� ��������, �� ��㬥�� ���� 㪠��⥫�� ���ᨢ� �� 13 楫��. ��㣫� ��� ����� ����室���, ��⮬� �� ������� ��� [] ����� ����� ��᮪�� ���� ���設��- ��, 祬 *; ��� �� 㢨��� � ���饬 ࠧ����, ��� ��㣫�� ��� INT *DAY_TAB[13]; ���� ���ᠭ��� ���ᨢ� �� 13 㪠��⥫�� �� 楫�. 5.8. ���ᨢ� 㪠��⥫��; 㪠��⥫� 㪠��⥫�� ��� ��� 㪠��⥫� ᠬ� ����� ��६���묨, � �� ����- �� ����� �� ������� �ᯮ�짮����� ���ᨢ� 㪠��⥫��. �� ����⢨⥫쭮 ⠪. �� �ந�������㥬 �� ����ᠭ��� �ண- ࠬ�� ����� � ��䠢�⭮� ���浪� ����� ⥪�⮢�� ��ப, �।��쭮 ��饭���� ��ਠ�� �⨫��� SORT �����- ����� ��⥬ UNIX. � ����� 3 �� �ਢ��� �㭪�� ����� �� 襫��, ���- �� 㯮�冷稢��� ���ᨢ 楫��. ��� �� ������ �㤥� ࠡ�- ��� � �����, ��� ⥯��� �� �㤥� ����� ���� � ���窠�� ⥪�� ࠧ��筮� �����, �����, � �⫨稥 �� 楫��, ����� �ࠢ������ ��� ��६���� � ������� ����� ����樨. �� ��- ������ � ⠪�� �।�⠢����� ������, ��� �� ������ 㤮��� � ��䥪⨢�� ��ࠡ��뢠�� ��ப� ⥪�� ��६����� �����. ����� � ��������� ���ᨢ� 㪠��⥫��. � �������騥 ����� �ப� �࠭���� ���� �� ��㣮� � ������� ᨬ����- ��� ���ᨢ� (�ࠢ�塞��, ���ਬ��, �㭪樥� ALLOC), � � ������ ��ப� ����� �������� � ������� 㪠��⥫� �� �� ���� ᨬ���. ���� 㪠��⥫� ����� �࠭��� � ���ᨢ�. ��� ��ப� ����� �ࠢ����, ��।�� �� 㪠��⥫� �㭪樨 STRCMP. - 115 - � ��� �ᯮ������� � ���ࠢ��쭮� ���浪� ��ப� ������ ���� ����⠢����, � 䠪��᪨ ����⠢������ 㪠��⥫� � ���ᨢ� 㪠��⥫��, � �� ᠬ� ⥪��� ��ப. �⨬ �᪫������ �ࠧ� ��� �易��� �����: ����� �ࠢ����� ������� � ������ �������⥫��� ����� �� 䠪����� ����⠭���� ��ப. ����� ����� ����砥� �� 蠣�: �⥭�� ��� ��ப ����� �� ����� �뢮� �� � �ࠢ��쭮� ���浪� ��� ���筮, ���� ࠧ������ �ணࠬ�� �� ���쪮 �㭪権 � ᮮ⢥��⢨� � ����⢥��� �������� ����� � �뤥���� ����- ��� �㭪��, �ࠢ������ ࠡ�⮩ �ᥩ �ணࠬ��. ������ �⫮��� �� ����� �६� ��ᬮ�७�� 蠣� ���- �� � ��।��稬�� �� ������� ������ � �����-�뢮��. �㭪��, �����⢫���� ����, ������ ������� ᨬ���� ������ ��ப�, ��������� �� � ����ந�� ���ᨢ 㪠��⥫�� ��ப. ��� ������ ⠪�� �������� � ��ப �� �����, ⠪ ��� �� ���ଠ�� ����室��� �� ����� � �뢮��. ⠪ ��� �㭪�� ����� � ���ﭨ� �ࠢ����� ⮫쪮 � ������ ��- ��� �������� ��ப, � ��砥 誮� ����讣� �� � ��� ����� �������� ����� �, �⫨筮� �� ���������� � ��ப, ���ਬ�� -1. �㭪�� �����⢫���� �뢮�, ���- ��� ������ ��ப� � ⮬ ���浪�, � ����� ��� ������� � ���ᨢ� 㪠��⥫��. #DEFINE NULL 0 #DEFINE LINES 100 /* MAX LINES TO BE SORTED */ MAIN() /* SORT INPUT LINES */ \( CHAR *LINEPTR[LINES]; /*POINTERS TO TEXT LINES */ INT NLINES; /* NUMBER OF INPUT LINES READ */ IF ((NLINES = READLINES(LINEPTR, LINES)) >= 0) \( SORT(LINEPTR, NLINES); WRITELINES(LINEPTR, NLINES); \) ELSE PRINTF("INPUT TOO BIG TO SORT\N"); \) #DEFINE MAXLEN 1000 - 116 - READLINES(LINEPTR, MAXLINES) /* READ INPUT LINES */ CHAR *LINEPTR[]; /* FOR SORTING */ INT MAXLINES; \( INT LEN, NLINES; CHAR *P, *ALLOC(), LINE[MAXLEN]; NLINES = 0; WHILE ((LEN = GETLINE(LINE, MAXLEN)) > 0) IF (NLINES >= MAXLINES) RETURN(-1); ELSE IF ((P = ALLOC(LEN)) == NULL) RETURN (-1); ELSE \( LINE[LEN-1] = '\0'; /* ZAP NEWLINE */ STRCPY(P,LINE); LINEPTR[NLINES++] = P; \) RETURN(NLINES); \) ������ ����� ��ப� � ���� ������ ��ப� 㤠�����, ⠪ �� �� ����� �� �㤥� ������ �� ���冷�, � ��� ��������� ��ப�. WRITELINES(LINEPTR, NLINES) /* WRITE OUTPUT LINES */ CHAR *LINEPTR[]; INT NLINES; \( INT I; FOR (I = 0; I < NLINES; I++) PRINTF("%S\N", LINEPTR[I]); \) ����⢥��� ���� � �⮩ �ணࠬ�� ���� ���ᠭ�� CHAR *LINEPTR[LINES]; ��� ᮮ�頥�, �� LINEPTR ���� ���ᨢ�� �� LINES ���⮢, ����� �� ������ - 㪠��⥫� �� ��६���� ⨯� CHAR. �� ����砥�, �� LINEPTR[I] - 㪠��⥫� �� ᨬ����, � *LINEPTR[I] ��������� ᨬ���. ��� ��� ᠬ LINEPTR ���� ���ᨢ��, ����� ��।���- �� �㭪樨 WRITELINES, � ��� ����� �������� ��� � 㪠���- ��� �筮 ⠪�� �� ��ࠧ��, ��� � ���� ����� ࠭��� �ਬ�- - 117 - ��. ����� ������ �㭪�� ����� ��९���� � ����: WRITELINES(LINEPTR, NLINES) /* WRITE OUTPUT LINES */ CHAR *LINEPTR[]; INT NLINES; \( INT I; WHILE (--NLINES >= 0) PRINTF("%S\N", *LINEPTR++); \) ����� *LINEPTR ᭠砫� 㪠�뢠�� �� ����� ��ப�; ������ 㢥��祭�� ��।������ 㪠��⥫� �� ������ ��ப�, � � �६� ��� NLINES �뢠�� �� ���. ��ࠢ����� � ������ � �뢮���, �� ����� ��३� � ��- ���. �ணࠬ�� ����� �� 襫�� �� ����� 3 �ॡ�� �祭� �������� ���������: ������ ���� ��������� ����- ���, � ������ �ࠢ����� �뤥���� � �⤥���� �㭪��. ��- ������ ������ ��⠥��� ⥬ �� ᠬ�, � �� ���� ��� ���- �������� 㢥७�����, �� �� ��-�०���� �㤥� ࠡ����. SORT(V, N) /* SORT STRINGS V[0] ... V[N-1] */ CHAR *V[]; /* INTO INCREASING ORDER */ INT N; \( INT GAP, I, J; CHAR *TEMP; FOR (GAP = N/2; GAP > 0; GAP /= 2) FOR (I = GAP; I < N; I++) FOR (J = I - GAP; J >= 0; J -= GAP) \( IF (STRCMP(V[J], V[J+GAP]) <= 0) BREAK; TEMP = V[J]; V[J] = V[J+GAP]; V[J+GAP] = TEMP; \) \) ��� ��� ����� �⤥��� ���� ���ᨢ� V (��� �ଠ�쭮�� ��ࠬ���, ᮮ⢥�����饣� LINEPTR) ���� 㪠��⥫�� �� ᨬ����, � � TEMP ������ ���� 㪠��⥫�� �� ᨬ����, �⮡� �� �뫮 ����� ������� ��� � ��㣠. �� ����ᠫ� ��� �ணࠬ�� �� ���������� ����� ���� � ⥬, �⮡� ������॥ ������� ࠡ������ �ணࠬ��. ��� ���- �� �� ࠡ���� ����॥, �, ���ਬ��, ������� ��ப� ��- ���।�⢥��� � ���ᨢ, �ࠢ�塞� �㭪樥� READLINES, � �� ������� �� � LINE, � ��⥬ � ���⮥ ���� � ������� ��- - 118 - �樨 ALLOC. �� �� ��⠥�, �� �㤥� ࠧ㬭�� ��ࢮ��砫�� ��ਠ�� ᤥ���� ����� ����� ��� ���������, � �� "��䥪⨢- ����" ����������� �������. �� ��, ��-��������, ᯮᮡ, ��������騩 �������� ����⭮�� �७�� ࠡ��� �ணࠬ�� ��⮨� �� � �᪫�祭�� ��譥�� �������� �������� ��ப. ����� ����⭮, �� ����⢥���� ࠧ���� ����� ������ �� ��� ������ ����� �� 襫�� �� ���� ���襥, ���ਬ��, �� ��⮤ ����ன �����. � ����� 1 �� �⬥砫�, �� ����� � 横��� WHILE � FOR ��ઠ �����⢫���� �� ⮣�, ��� ⥫� 横�� �믮�- ����� ��� �� ���� ࠧ, �� 横�� ����뢠���� 㤮��묨 ��� ���ᯥ祭�� �ࠢ��쭮� ࠡ��� �ணࠬ�� �� �࠭���� ����- ����, � ��⭮��, ����� ����� ����� ���. �祭� ������� ��ᬮ���� �� �㭪樨 �ணࠬ�� �����, ࠧ������, �� �ந�室��, � ������� ⥪�� ���������. ��ࠦ����� 5-5. -------------- ��९��� �㭪�� READLINES ⠪�� ��ࠧ��, �⮡� ��� ����頫� ��ப� � ���ᨢ, �।��⠢�塞� �㭪樥� MAIN, � �� � ������, �ࠢ�塞�� ���饭�ﬨ � �㭪樨 ALLOC. ��- �쪮 ����॥ �⠫� �ணࠬ��? 5.9. ���樠������ ���ᨢ�� 㪠��⥫��. ���ᬮ�ਬ ������ ����ᠭ�� �㭪樨 MONTH_NAME(N), ���- �� �����頥� 㪠��⥫� �� ᨬ������ ��ப�, ᮤ�ঠ��� ��� N-�� �����. �� �����쭠� ����� ��� �ਬ������ ����- ७���� ������ ���ᨢ�. �㭪�� MONTH_NAME ᮤ�ন� ������� ���ᨢ ᨬ������ ��ப � �� ���饭�� � ��� ���- ��頥� 㪠��⥫� �㦭�� ��ப�. ���� �����饣� ࠧ���� - ��� ���樠������� ��� ���ᨢ ����. CHAR *MONTH_NAME(N) /* RETURN NAME OF N-TH MONTH */ INT N; \( STATIC CHAR *NAME[] = \( "ILLEGAL MONTH", "JANUARY", "FEBRUARY", "MARCH", "APRIL", "MAY", "JUN", "JULY", "AUGUST", "SEPTEMBER", "OCTOBER", "NOVEMBER", "DECEMBER" \); RETURN ((N < 1 \!\! N > 12) ? NAME[0] : NAME[N]); \) - 119 - ���ᠭ�� ���ᨢ� 㪠��⥫�� �� ᨬ���� NAME �筮 ⠪�� ��, ��� �������筮� ���ᠭ�� LINEPTR � �ਬ�� � ������. ���樠����� ���� ���� ᯨ᮪ ᨬ������ ��ப; ������ ��ப� ��ᢠ������� ᮮ⢥�����饩 ����樨 � ����- ��. ����� �筮, ᨬ���� I-�� ��ப� ��������� � �����-� ���� ����, � �� 㪠��⥫� �࠭���� � NAME[I]. ����� ࠧ��� ���ᨢ� NAME �� 㪠���, ��������� ᠬ ������뢠�� ������⢮ ���樠����� � ᮮ⢥��⢥��� ��⠭�������� �ࠢ��쭮� �. 5.10. �����⥫� � ��������� ���ᨢ� ��稭��騥 ������ �� "�" ������ �⠭������ � �㯨� ��। ����ᮬ � ࠧ��稨 ����� ��㬥�� ���ᨢ�� � ����- ��� 㪠��⥫��, ⠪�� ��� NAME � �ਢ������� ��� �ਬ��. � ������� ���ᠭ�� INT A[10][10]; INT *B[10]; � A � B ����� �ᯮ�짮���� �室�� ��ࠧ�� � ⮬ ��, �� ��� A[5][5], ⠪ � B[5][5] ����� ������묨 ��뫪��� �� �⤥�쭮� � ⨯� INT. �� A - �����騩 ���ᨢ: ��� ���� �⢮����� 100 �祥� ����� � ��� ��宦����� ��� 㪠- ������� ���� ������� ����� ������ � ��אַ㣮��- �묨 �����ᠬ�. ��� B, ������, ���ᠭ�� �뤥��� ⮫쪮 10 㪠��⥫��; ����� 㪠��⥫� ������ ���� ��⠭����� ⠪, �⮡� �� 㪠�뢠� �� ���ᨢ 楫��. � �।��������, �� ����� �� ��� 㪠�뢠�� �� ���ᨢ �� 10 ���⮢, � ⮣�� ���-� �㤥� �⢥���� 100 �祥� ����� ���� �� ������ �祥� ��� 㪠��⥫��. ����� ��ࠧ��, ���ᨢ 㪠��⥫�� �ᯮ���� ���쪮 ����訩 ��ꥬ ����� � ����� �ॡ����� ����稥 �- ���� 蠣� ���樠����樨. �� �� �⮬ ��������� ��� �२��- ��⢠: ����� � ����� �����⢫���� ��ᢥ��� �१ 㪠- ��⥫�, � �� ���।�⢮� 㬭������ � �����, � ��ப� ���- ᨢ� ����� ����� ࠧ���� �����. �� ����砥�, �� ����� ���� B �� ������ ��易⥫쭮 㪠�뢠�� �� ����� �� 10 ���⮢; ������� ����� 㪠�뢠�� �� ����� �� ���� - ���⮢, ��㣨� - �� ������, � ���� ����� ����� �� �� �� �� 㪠�뢠��. ���� �� ���� �� ���㦤���� � �ନ��� 楫��, ��ᮬ���- ��, �� �ᥣ� ���ᨢ� 㪠��⥫�� �ᯮ������� ⠪, ��� �� �த���������� �� �㭪樨 MONTH_NAME, - ��� �࠭���� ᨬ������ ��ப ࠧ��筮� �����. ��ࠦ����� 5-6. -------------- ��९��� �㭪樨 DAY_OF_YEAR � MONTH_DAY, �ᯮ���� ����� ������樨 㪠��⥫�. - 120 - 5.11. ��������� ��ப� ��㬥�⮢ ���⥬�� �।�⢠, �� ����� ���ࠥ��� ॠ������ ��- �� "�", ��������� ��।����� ��������� ��ப� ��㬥�⮢ ��� ��ࠬ�� ��稭��饩 �믮������� �ணࠬ��. ����� �㭪�� MAIN ��뢠���� � �ᯮ������, ��� ��뢠���� � ���� ���- ���⠬�. ���� ��㬥�� (���� ���뢠��� ARGC) 㪠�뢠�� � ��㬥�⮢ � ��������� ��ப�, � ����묨 �ந�室�� ���饭�� � �ணࠬ��; ��ன ��㬥�� (ARGV) ���� 㪠- ��⥫�� �� ���ᨢ ᨬ������ ��ப, ᮤ�ঠ�� �� ��㬥�- ��, �� ������ � ��ப�. ����� � ⠪��� ��ப��� - �� ����- ��� �ᯮ�짮����� ����������� 㪠��⥫��. ����� ������ ��������� �⮩ ���������� � ����室���� �� �⮬ ���ᠭ�� ���� �ணࠬ�� ECHO, ����� ���� ���- ⠥� � ���� ��ப� ��㬥��� ��������� ��ப�, ࠧ����� �� ������. ����� ��ࠧ��, � ���� ������� ECHO HELLO, WORLD � ��室�� �㤥� HELLO, WORLD �� ᮣ��襭�� ARGV[0] ���� ������, �� ���� ��뢠��- �� �ணࠬ��, ⠪ �� ARGC �� ����襩 ��� ࠢ�� 1. � �ਢ�- ������ ��� �ਬ�� ARGC ࠢ�� 3, � ARGV[0], ARGV[1] � ARGV[2] ࠢ�� ᮮ⢥��⢥��� "ECHO", "HELLO," � "WORLD". ���� 䠪��᪨� ��㬥�⮬ ���� ARGV[1], � ������ - ARGV[ARGC-1]. � ARGC ࠢ�� 1, � �� ������ �ணࠬ�� �� ��� ������� ��������� ��ப� ��㬥�⮢. �� �� ������- �� � ECHO: MAIN(ARGC, ARGV) /* ECHO ARGUMENTS; 1ST VERSION */ INT ARGC; CHAR *ARGV[]; \( INT I; FOR (I = 1; I < ARGC; I++) PRINTF("%S%C", ARGV[I], (I<ARGC-1) ? ' ' : '\N'); \) ����� ARGV ���� 㪠��⥫�� �� ���ᨢ 㪠��⥫��, � ������� ���쪮 ᯮᮡ�� ����ᠭ�� �⮩ �ணࠬ��, ��- �������� ࠡ��� � 㪠��⥫��, � �� � ������樥� ���ᨢ�. �� �த��������㥬 ��� ��ਠ��. MAIN(ARGC, ARGV) /* ECHO ARGUMENTS; 2ND VERSION */ INT ARGC; CHAR *ARGV[]; \( WHILE (--ARGC > 0) PRINTF("%S%C",*++ARGV, (ARGC > 1) ? ' ' : '\N'); \) - 121 - ��� ��� ARGV ���� 㪠��⥫�� �� ��砫� ���ᨢ� ��ப-��- �㬥�⮢, �, 㢥��稢 ��� �� 1 (++ARGV), �� ��㦤��� ��� 㪠�뢠�� �� �������� ��㬥�� ARGV[1], � �� �� ARGV[0]. ������ �����饥 㢥��祭�� ��।������ ��� �� ���騩 ��㬥��; �� �⮬ *ARGV �⠭������ 㪠��⥫�� �� ��� ���- ����. �����६���� ����稭� ARGC 㬥��蠥���; ����� ��� ��- ����� � ���, �� ��㬥��� ���� 㦥 �����⠭�. ��㣮� ��ਠ��: MAIN(ARGC, ARGV) /* ECHO ARGUMENTS; 3RD VERSION */ INT ARGC; CHAR *ARGV[]; \( WHILE (--ARGC > 0) PRINTF((ARGC > 1) ? "%S" : "%S\N", *++ARGV); \) �� ����� �����뢠��, �� ��㬥�� �ଠ� �㭪樨 PRINTF ����� ���� ��ࠦ�����, �筮 ⠪ ��, ��� � �� ��㣮�. ��- ��� �ᯮ�짮����� ����砥��� �� �祭� ���, �� ��� �� �� �⮨� ���������. ��� ��ன �ਬ��, ������ ���ᥬ ������� �ᮢ��襭��- ������� � �ணࠬ�� ���᪠��� �������� �������樨 ᨬ����� �� ����� 4. � �� ������, �� �����⨫� ���� ��������� ��㡮�� ������ �ணࠬ��, �� �祢���� ���� ᮢ��襭�� ��㤮���⢮�⥫��. ������ �⨫�� GREP ��⥬� UNIX, ��- ���� ������� �ணࠬ�� ⠪, �⮡� �� ��������� 㪠�뢠- ���� � ����⢥ ��ࢮ�� ��㬥�� ��ப�. #DEFINE MAXLINE 1000 MAIN(ARGC, ARGV) /* FIND PATTERN FROM FIRST ARGUMENT */ INT ARGC; CHAR *ARGV[]; \( CHAR LINE[MAXLINE]; IF (ARGC != 2) PRINTF ("USAGE: FIND PATTERN\N"); ELSE WHILE (GETLINE(LINE, MAXLINE) > 0) IF (INDEX(LINE, ARGV[1] >= 0) PRINTF("%S", LINE); \) ������ ����� ���� ࠧ��� �᭮���� ������, ����������- �� ���쭥�襥 �ᯮ�짮����� 㪠��⥫��. �।�������, �� ��� ���� �।�ᬮ���� ��� ����易⥫��� ��㬥��. ���� �⢥ত���: "�������� �� ��ப� �� �᪫�祭��� ��, ���- �� ᮤ�ঠ� ������ ���������", ��ன �����: "��। ���- ��� �뢮����� ��ப�� ������ �������� �� �����". - 122 - ��饯ਭ��� ᮣ��襭��� � "�"-�ணࠬ��� ���� �, �� ��㬥��, ��稭��騩�� � ����� �����, ������ ����易- ⥫�� �ਧ��� ��� ��ࠬ���. � ��, ��� ⮣�, �⮡� ᮮ�- ��� �� �����ᨨ, �롥६ -X, � ��� 㪠����� � �㬥�樨 �㦭�� ��ப �롥६ -N("�����"), � ������� FIND -X -N THE �� �室��� ������ NOW IS THE TIME FOR ALL GOOD MEN TO COME TO THE AID OF THEIR PARTY. ������ �뤠�� 2:FOR ALL GOOD MEN �㦭�, �⮡� ����易⥫�� ��㬥��� ����� �ᯮ������- �� � �ந����쭮� ���浪�, � �⮡� ��⠫쭠� ���� �ணࠬ�� �� ����ᥫ� �� ������⢠ 䠪��᪨ ����������� ��㬥�- ⮢. � ��⭮��, �맮� �㭪樨 INDEX �� ������ ᮤ�ঠ�� ��뫪� �� ARGV[2], ����� ��������� ���� ����易⥫�� ��㬥��, � �� ARGV[1], ����� ��� ���. ����� ⮣�, ��� ����- ����⥫�� 㤮���, �⮡� ����易⥫�� ��㬥��� ����� �뫮 ��ꥤ����� � ����: FIND -NX THE ��� ᠬ� �ணࠬ��: #DEFINE MAXLINE 1000 MAIN(ARGC, ARGV) /* FIND PATTERN FROM FIRST ARGUMENT */ INT ARGC; CHAR *ARGV[]; \( CHAR LINE[MAXLINE], *S; LONG LINENO = 0; INT EXCEPT = 0, NUMBER = 0; WHILE (--ARGC > 0 && (*++ARGV)[0] == '-') FOR (S = ARGV[0]+1; *S != '\0'; S++) SWITCH (*S) \( CASE 'X': EXCEPT = 1; BREAK; - 123 - CASE 'N': NUMBER = 1; BREAK; DEFAULT: PRINTF("FIND: ILLEGAL OPTION %C\N", *S); ARGC = 0; BREAK; \) IF (ARGC != 1) PRINTF("USAGE: FIND -X -N PATTERN\N"); ELSE WHILE (GETLIN�(LINE, MAXLINE) > 0) \( LINENO++; IF ((INDEX(LINE, *ARGV) >= 0) != EXCEPT) \ IF (NUMBER) PRINTF("%LD: ", LINENO); PRINTF("%S", LINE); \) \) \) ��㬥�� ARGV 㢥��稢����� ��। ����� ����易⥫�� ��㬥�⮬, � � �६� ��� ��㬥�� ARGC 㬥��蠥���. � ��� �訡��, � � ���� 横�� ����稭� ARGC ������ ࠢ������ 1, � *ARGV ������ 㪠�뢠�� �� �������� ���������. ����� �������� �� �, �� *++ARGV ���� 㪠��⥫�� ��㬥�⭮� ��ப�; (*++ARGV)[0] - �� ���� ᨬ���. ��㣫� ��� ����� ����室���, ��⮬� �� ��� ��� ��ࠦ���� �� �ਭ ᮢ��襭�� �⫨�� (� ���ࠢ����) ��� *++(ARGV[0]). ���- ��� �ࠢ��쭮� �ମ� �뫠 �� **++ARGV. ��ࠦ����� 5-7. -------------- ������ �ணࠬ�� ADD, ��������� ���⭮� ����� ��ࠦ���� �� ��������� ��ப�. ���ਬ��, ADD 2 3 4 + * ������ 2*(3+4). ��ࠦ����� 5-8. -------------- ��������� �ணࠬ�� ENTAB � DETAB (㪠����� � ��- ��⢥ �ࠦ����� � ����� 1) ⠪, �⮡� ��� ����砫� ᯨ᮪ ⠡��樮���� ��⠭���� � ����⢥ ��㬥�⮢. � ��㬥�- �� ����������, �ᯮ���� �⠭������ ��⠭���� ⠡��権. ��ࠦ����� 5-9. -------------- ������� ENTAB � DETAB ⠪�� ��ࠧ��, �⮡� ��� ����- ������ ᮪�饭��� ����� ENTAB M +N - 124 - ��������� ⠡��樮��� ��⠭���� �१ ����� N �⮫�殢, ��稭�� � �⮫�� M. �롥�� 㤮���� (��� ���짮��⥫�) ��������� �㭪樨 �� 㬮�砭��. ��ࠦ����� 5-10. --------------- ������ �ணࠬ�� ��� �㭪樨 TAIL, �����饩 ���- ��� N ��ப �� ��� 䠩�� �����. ����� �� 㬮�砭�� N ࠢ- �� 10, �� �� � ����� ���� �������� � ������� ����易- ⥫쭮�� ��㬥��, ⠪ �� TAIL -N ���⠥� ������ N ��ப. �ணࠬ�� ������ ����⢮���� �- 樮���쭮, ������ �� ��ࠧ㬭묨 �� �뫨 �� ���� ��� ����- ��� N. ���⠢�� �ணࠬ�� ⠪, �⮡� ��� ��⨬���� ���- ��� �ᯮ�짮���� ����㯭�� ������: ��ப� ������ �࠭�����, ��� � �㭪樨 SORT, � �� � ��㬥୮� ���ᨢ� 䨪������� ࠧ���. 5.12. �����⥫� �� �㭪樨 � �몥 "�" ᠬ� �㭪樨 �� ����� ��६���묨, �� ������� ����������� ��।����� 㪠��⥫� �� �㭪��, ����� ����� ��ࠡ��뢠��, ��।����� ��㣨� �㭪��, ������� � ���ᨢ� � �.�. �� �ந�������㥬 ��, ���� ����䨪��� ����ᠭ��� ࠭�� �ணࠬ�� ����� ⠪, �⮡� �� ������� ����易⥫쭮�� ��㬥�� -N ��� �� ������ ��ப� ����� ����, � �� ���ᨪ�����᪨. ������ ��� ��⮨� �� ��� ��⥩ - �ࠢ�����, ��- � ��।���� 㯮�冷稢���� �� ���� ��ꥪ⮢, ����- ⠭����, �������饩 �� ���冷�, � �����⬠ �����, ���- ��⢫��饣� �ࠢ����� � ����⠭���� �� �� ���, ���� ��ꥪ�� �� �ᯮ������� � �㦭�� ���浪�. ������ ���- �� �� ������ �� ����権 �ࠢ����� � ����⠭����, ⠪ ��, ��।���� � ���� ࠧ���� �㭪樨 �ࠢ����� � ����⠭����, �� ����� �࣠�������� ����� �� ࠧ���� �����. ������ ⠪�� ���室 �ᯮ������ � ��襩 ����� �ணࠬ�� �����. ��� � �०��, ���ᨪ������ �ࠢ����� ���� ��ப �����⢫���� �㭪樥� STRCMP, � ����⠭���� �㭪樥� SWAP; ��� �㦭� �� �㭪�� NUMCMP, �ࠢ������� ��� ��ப� �� �᭮�� ������ ���祭�� � ��������� ����� 㪠��- ��� ⮣� �� ����, �� � STRCMP. �� �� �㭪樨 ����뢠���� � MAIN � 㪠��⥫� �� ��� ��।����� � SORT. � � ��।� �㭪�� SORT ���頥��� � �⨬ �㭪�� �१ �� 㪠��⥫�. �� �१��� ��ࠡ��� �訡�� � ��㬥��� � ⥬, �⮡� ���- �������� �� ������� ������. - 125 - #DEFINE LINES 100 /* MAX NUMBER OF LINES TO BE SORTED */ MAIN(ARGC, ARGV) /* SORT INPUT LINES */ INT ARGC; CHAR *ARGV[]; \( CHAR *LINEPTR[LINES]; /* POINTERS TO TEXT LINES */ INT NLINES; /* NUMBER OF INPUT LINES READ */ INT STRCMP(), NUMCMP(); /* COMPARSION FUNCTIONS */ INT SWAP(); /* EXCHANGE FUNCTION */ INT NUMERIC = 0; /* 1 IF NUMERIC SORT */ IF(ARGC>1 && ARGV[1][0] == '-' && ARGV[1][1]=='N') NUMERIC = 1; IF(NLINES = READLINES(LINEPTR, LINES)) >= 0) \( IF (NUMERIC) SORT(LINEPTR, NLINES, NUMCMP, SWAP); ELSE SORT(LINEPTR, NLINES, STRCMP, SWAP); WRITELINES(LINEPTR, NLINES); \) ELSE PRINTF("INPUT TOO BIG TO SORT\N"); \) ����� STRCMP, NIMCMP � SWAP - ���� �㭪権; ⠪ ��� �����- ⭮, �� �� �㭪樨, ������ & ����� �� �㦭� ᮢ��襭�� �������筮 ⮬�, ��� ��� �� �㦭� � ��। ������ ���ᨢ�. ��।�� ���ᮢ �㭪権 �࣠������� ��������. ��ன 蠣 ��⮨� � ����䨪�樨 SORT: SORT(V, N, COMP, EXCH) /* SORT STRINGS V[0] ... V[N-1] */ CHAR *V[]; /* INTO INCREASING ORDER */ INT N; INT (*COMP)(), (*EXCH)(); \( INT GAP, I, J; FOR(GAP = N/2; GAP > 0; GAP /= 2) FOR(I = GAP; I < N; I++) FOR(J = I-GAP; J >= 0; J -= GAP) \( IF((*COMP)(V[J], V[J+GAP]) <= 0) BREAK; (*EXCH)(&V[J], &V[J+GAP]); \) \) - 126 - ����� ��� ������ ��।������� �������� �� ����- ���. ���ᠭ�� INT (*COMP)() ������, �� COMP ���� 㪠��⥫�� �� �㭪��, ����� �����頥� ���祭�� ⨯� INT. ���� ��㣫� ��� ����� ����室���; ��� ��� ���ᠭ�� INT *COMP() ����ਫ� ��, �� COMP ���� �㭪樥�, �������饩 㪠��- ⥫� �� 楫�, ��, ����筮, ᮢ��襭�� ��㣠� ����. �ᯮ�짮����� COMP � ��ப� IF (*COMP)(V[J], V[J+GAP]) <= 0) ��������� ᮣ������� � ���ᠭ���: COMP - 㪠��⥫� �� �㭪- ��, *COMP - ᠬ� �㭪��, � (*COMP)(V[J], V[J+GAP]) - ���饭�� � ���. ��㣫� ��� ����室��� ��� �ࠢ��쭮�� ��ꥤ������ ��������⮢. �� 㦥 �ਢ����� �㭪�� STRCMP, �ࠢ�������� ��� ��ப� �� ��ࢮ�� ������ ���祭��: NUMCMP(S1, S2) /* COMPARE S1 AND S2 NUMERICALLY */ CHAR *S1, *S2; \( DOUBLE ATOF(), V1, V2; V1 = ATOF(S1); V2 = ATOF(S2); IF(V1 < V2) RETURN(-1); ELSE IF(V1 > V2) RETURN(1); ELSE RETURN (0); \) ������⥫�� 蠣 ��⮨� � ���������� �㭪樨 SWAP, ����⠢���饩 ��� 㪠��⥫�. �� ����� ᤥ����, �����।��- ����� �ᯮ���� �, �� �� �������� ࠭�� � �⮩ �����. - 127 - SWAP(PX, PY) /* INTERCHANGE *PX AND *PY */ CHAR *PX[], *PY[]; \( CHAR *TEMP; TEMP = *PX; *PX = *PY; *PY = TEMP; \) ������� ������⢮ ��㣨� ������⥫��� ��㬥�⮢, ��- ��� ����� ���� ����祭� � �ணࠬ�� �����: ������� �� ��� ��⠢���� ������ �ࠦ�����. ��ࠦ����� 5-11. --------------- ��������� SORT ⠪�� ��ࠧ��, �⮡� ��� ࠡ�⠫� � ��⪮� -R, 㪠�뢠�饩 �� ����� � ���⭮� (�뢠�饬) ���浪�. ����筮, -R ������ ࠡ���� � -N. ��ࠦ����� 5-12. --------------- ������� ����易⥫�� ��㬥�� -F, ��ꥤ����騩 ����� �ய��� � ����� �㪢�, ⠪ �⮡� ࠧ��稥 ॣ��� �� ���뢠���� �� �६� �����: ����� �� ���孥�� � �����- �� ॣ��� ��������� �����, ⠪ �� �㪢� '�' �ய�᭮� � '�' ���筮� ����뢠���� �ᥤ���� , � �� ࠧ������묨 �- �� ��䠢�⮬. ��ࠦ����� 5-13. --------------- ������� ����易⥫�� ��㬥�� -D ("��୮� 㯮�冷- 稢����"), �� ����稨 ���ண� �ࠢ�������� ⮫쪮 �㪢�, � � ����. ����������� � ⮬, �⮡� �� �㭪�� ࠡ�- ⠫� � ����� � -F. ��ࠦ����� 5-14. --------------- ������� ����������� ��ࠡ�⪨ �����, ⠪ �⮡� ����� �뫮 ������ ���� ����� ��ப. ������ ���� ������ ��- ������ � ᮮ⢥��⢨� � ������ᨬ� ���� ����易⥫�- ��� ��㬥�⮢. (�।���� 㪠��⥫� �⮩ ����� �����- �� � ������� ��㬥�⮢ -DF ��� ��⥣�ਨ 㪠��⥫� � � -N ��� ���� ��࠭��).
Характеристики
Тип файла документ
Документы такого типа открываются такими программами, как Microsoft Office Word на компьютерах Windows, Apple Pages на компьютерах Mac, Open Office - бесплатная альтернатива на различных платформах, в том числе Linux. Наиболее простым и современным решением будут Google документы, так как открываются онлайн без скачивания прямо в браузере на любой платформе. Существуют российские качественные аналоги, например от Яндекса.
Будьте внимательны на мобильных устройствах, так как там используются упрощённый функционал даже в официальном приложении от Microsoft, поэтому для просмотра скачивайте PDF-версию. А если нужно редактировать файл, то используйте оригинальный файл.
Файлы такого типа обычно разбиты на страницы, а текст может быть форматированным (жирный, курсив, выбор шрифта, таблицы и т.п.), а также в него можно добавлять изображения. Формат идеально подходит для рефератов, докладов и РПЗ курсовых проектов, которые необходимо распечатать. Кстати перед печатью также сохраняйте файл в PDF, так как принтер может начудить со шрифтами.