C_4 (1115137)
Текст из файла
- 73 - 4. �㭪樨 � ������� �ணࠬ�. �㭪樨 ࠧ������ ����訥 ���⥫�� ����� �� ��- ���쪨� �������� � ��������� �ᯮ�짮���� � ࠡ�� �, �� 㦥 ᤥ���� ��㣨��, � �� ��稭��� ����� ࠧ � ���⮣� ���- �. ���⢥�����騥 �㭪樨 ��� ����� ��뢠�� � ᥡ� ��- ⠫� ������� � ࠧ��� ����� �ணࠬ�� ����権, ����� ����� ��� ����室�����, ������ ⥬ ᠬ� ��� �ணࠬ��, ��� 楫��, � ������� ��祭�� �� ���ᥭ�� ���������. ��� "C" ࠧࠡ��뢠��� � ��६������ ᤥ���� �㭪樨 ��䥪⨢�묨 � 㤮��묨 ��� �ᯮ�짮�����; "C"-�ணࠬ�� ���筮 ����� �� ����讣� � �����쪨� �㭪権, � �� �� ���쪨� ������. �ணࠬ�� ����� ࠧ������� � ����� ��� ���쪨� ��室��� 䠩��� ��� 㤮��� ��ࠧ��; ��室�� 䠩�� ����� ������������ �⤥�쭮 � ����㦠���� ����� ����� � ��������묨 ࠭�� �㭪�ﬨ �� ������⥪. �� ����� �� �㤥� ��������� � ��⠫� �⮣� �����, ����� ��� ������� �� �ᯮ��㥬�� ��⥬�. ����設�⢮ �ணࠬ���⮢ ��� ������� � "���������- ��" �㭪�ﬨ ��� ����� � �뢮�� /GETCHAR , PUTCHAR/ � ��� ����� ���⮢ /SIN, COS, SQRT/. � �⮩ ����� �� ᮮ�騬 ����� � ����ᠭ�� ����� �㭪権. 4.1. �᭮��� ᢥ�����. ��� ��砫� ������ ࠧࠡ�⠥� � ��⠢�� �ணࠬ�� ��- �� ������ ��ப� �����, ����� ᮤ�ন� ��।������� ���- ������ ᨬ�����. /�� - ᯥ樠��� ��砩 �⨫��� GREP ��⥬� "UNIX"/. ���ਬ��, �� ���᪥ �������樨 "THE" � ��- ��� ��ப NOW IS THE TIME FOR ALL GOOD MEN TO COME TO THE AID OF THEIR PARTY � ����⢥ ��室� ����稬 NOW IS THE TIME MEN TO COME TO THE AID OF THEIR PARTY �᭮���� �奬� �믮������ ������� �⪮ ࠧ������� �� �� ���: WHILE (������� �� ��ப�) IF (��ப� ᮤ�ন� �㦭�� ���������) �뢮� �⮩ ��ப� - 74 - ����筮, �������� ���ணࠬ����� �� ����⢨� � ���� ����� �᭮���� ��楤���, �� ���� �ᯮ�짮���� ����⢥���� �������� ����� � �।�⠢��� ������ ���� � ���� �⤥�쭮� �㭪樨. � �६� �����쪨�� ��᪠�� ���� ����� ����, 祬 � ����� ����訬, ��⮬� �� �⤥��� �� �⭮��騥�� � �����- �� ���� ��⠫� ����� ������� � �㭪樨 � 㬥����� ������- ����� ������⥫��� ����������⢨�. �� ⮣�, �� ��᪨ ����� ��������� ������묨 ᠬ� �� ᥡ�. "���� ������� �� ��ப�" - �� GETLINE, �㭪��, ���- ��� �� ���ணࠬ����� � ����� 1, � "�뢮� �⮩ ��ப�" - �� �㭪�� PRINTF, ������ 㦥 ��-� �����⮢�� ��� ���. �� �����, �� ��� ��⠫��� ⮫쪮 ������� ��楤��� ��� ��।������, ᮤ�ন� �� ��ப� ������ ��������� ᨬ����� ��� ���. �� ����� ���� ��� �����, �������⢮��� ࠧ�- ���� �� PL/1: �㭪�� INDEX(S,�) �����頥� ������, ��� ������, ��ப� S, ��� ��稭����� ��ப� T, � -1, � S �� ᮤ�ন� � . � ����⢥ ��砫쭮� ����樨 �� �ᯮ��㥬 0, � �� 1, ��⮬� �� � �몥 "C" ���ᨢ� ��稭����� � ����樨 ���. ����� ��� � ���쭥�襬 ����������� ������ �� ᮢ��- ����� ����� ��� �������樨, ��� �ਤ���� �������� ⮫�- �� �㭪�� INDEX; ��⠫쭠� ���� �ணࠬ�� ��⠭���� ⮩ �� ᠬ��. �� ⮣�, ��� �� ����⨫� �⮫쪮 �ᨫ�� �� ࠧࠡ��- ��, ����ᠭ�� �ணࠬ�� � ��⠫�� �� �।�⠢��� ����㤭�- ���. ���� �ਢ������ 楫���� ��� �ணࠬ��, ⠪ �� �� ����- � ������, ��� ᮥ�������� ����� �⤥��� ���. �������- �� ᨬ�����, �� ���ன �ந�������� ����, ����㯠�� ���� � ����⢥ ᨬ���쭮� ��ப� � ��㬥�� �㭪樨 INDEX, �� �� ���� ᠬ� ��騬 ��堭�����. �� � ����� � ��- �㦤���� ����� �� ���樠����樨 ᨬ������ ���ᨢ�� � � ����� 5 �������, ��� ᤥ���� ��������� ᨬ����� ��ࠬ��, ���� ��ᢠ������� ���祭�� � 室� �믮������ �ணࠬ��. �ணࠬ�� ⠪�� ᮤ�ন� ���� ��ਠ�� �㭪樨 GETLINE; ��� ����� ��������� ������� �ࠢ���� ��� � ��ਠ�⮬ �� ����� 1. #DEFINE MAXLINE 1000 MAIN() /* FIND ALL LINES MATCHING A PATTERN */ { CHAR LINE[MAXLINE]; WHILE (GETLINE(LINE, MAXLINE) > 0) IF (INDEX(LINE, "THE") >= 0) PRINTF("%S", LINE); } - 75 - GETLINE(S, LIM) /* GET LINE INTO S, RETURN LENGTH * CHAR S[]; INT LIM; { INT C, I; I = 0; WHILE(--LIM>0 && (C=GETCHAR()) != EOF && C != '\N') S[I++] = C; IF (C == '\N') S[I++] = C; S[I] = '\0'; RETURN(I); } INDEX(S,T) /* RETURN INDEX OF T IN S,-1 IF NONE */ CHAR S[], T[]; { INT I, J, K; FOR (I = 0; S[I] != '\0'; I++) { FOR(J=I, K=0; T[K] !='\0' && S[J] == T[K]; J++; K++) ; IF (T[K] == '\0') RETURN(I); } RETURN(-1); } ������ �㭪�� ����� ��� ��� (ᯨ᮪ ��㬥�⮢, � ��� �������) ���ᠭ�� ��㬥�⮢, � ��� ������� { ���ᠭ�� � ������� , � ��� ������� } ��� � 㪠�뢠����, ������� ��� ����� ������⢮- ����; �������쭮� �㭪樥� ���� DUMMY () { } ����� �� ᮢ��蠥� ������� ����⢨�. /����� ��祣� �� ������� �㭪�� ������ ����뢠���� 㤮���� ��� ��࠭���� ���� ��� ���쭥�襣� ࠧ���� �ண- ࠬ��/. � �㭪�� �����頥� ��-���� �⫨筮� �� 楫��� ���祭��, � ��। �� ������ ����� ����� 㪠��⥫� ⨯�; ��� ����� ���㦤����� � ���饬 ࠧ����. - 76 - �ணࠬ��� ���� ���� ����� ��।������ �⤥���� �㭪権. ���� ����� �㭪�ﬨ �����⢫���� �१ ��㬥�- �� � �����頥�� �㭪�ﬨ ���祭�� /� �⮬ ��砥/; �� ����� ⠪�� �����⢫��� �१ ���譨� ��६����. �㭪樨 ����� �ᯮ�������� � ��室��� 䠩�� � �� ���浪�, � ᠬ� ��室��� �ணࠬ�� ����� ࠧ������� �� ���쪨� 䠩���, �� ⠪, �⮡� �� ���� �㭪�� �� ��饯���. ������ RETURN �㦨� ��堭����� ��� �����饭�� ���- 祭�� �� �맢����� �㭪樨 � �㭪��, ����� � ��� ����- ����. �� RETURN ����� ������ �� ��ࠦ����: RETURN (��ࠦ����) ��뢠��� �㭪�� ����� �������� �����頥��� ���祭��, � ��� �⮣� ��������. ����� ⮣�, �� RETURN ����� �� ���� ����� �������� ��ࠦ����; � �⮬ ��砥 � ��- �뢠���� �ணࠬ�� �� ��।����� �������� ���祭��. ��ࠢ��- ��� ⠪�� ��������� � ��뢠���� �ணࠬ�� ��� ��।�� ������-���� ���祭�� � � ⮬ ��砥, ����� �� �믮������ �� "����������" �� ����� �㭪樨, ���⨣�� ����뢠�饩�� �ࠢ�� 䨣�୮� ���. E��� �㭪�� �����頥� ���祭�� �� ������ ���� � �� �����頥� �������� ���祭�� �� ��㣮�� ����, �� �� ���� ���������, �� ����� ���� �ਧ����� �����-� �����⭮�⥩. � �� ��砥 "���祭���" �㭪樨, ����� �� �����頥� ���祭��, ��ᮬ����� �㤥� ����. ��- ����筠� �ணࠬ�� LINT ����� ⠪�� �訡��. ��堭��� �������樨 � ����㧪� "C"-�ணࠬ�, �ᯮ��- ������ � ���쪨� ��室��� 䠩���, ������� �� ��⥬� � ��⥬�. � ��⥬� "UNIX", ���ਬ��, ��� ࠡ��� �믮���� ������� 'CC', 㯮����� � ����� 1. �।�������, �� �� �㭪樨 ��室���� � ��� ࠧ����� 䠩��� � ������� MAIN.�, GETLINE.C � INDEX.� . ����� ������� CC MAIN.C GETLINE.C INDEX.C ���������� �� �� 䠩��, ����頥� ����祭�� ����ࠨ����� ��ꥪ�� ��� � 䠩�� MAIN.O, GETLINE.O � INDEX.O � ����㦠- �� �� ��� � �믮��塞� 䠩�, ���뢠��� A.OUT . � ������� �����-� �訡��, ᪠��� � MAIN.C, � ��� 䠩� ����� ��४��������� �⤥�쭮 � ����㧨�� ����� � �।��騬� ��ꥪ�묨 䠩���� �� ������� CC MAIN.C GETLIN.O INDEX.O ������� 'CC' �ᯮ���� ᮣ��襭�� � ������������ � ".�" � ".�" ��� ⮣�, �⮡� �⫨��� ��室�� 䠩�� �� ��ꥪ���. ��ࠦ����� 4-1. ---------------- ���⠢�� �ணࠬ�� ��� �㭪樨 RINDEX(S,T), ����� �����頥� ������ ᠬ��� �ࠢ��� �宦����� � � S � -1, � S �� ᮤ�ন� T. - 77 - 4.2. �㭪樨, �������騥 ��楫� ���祭��. �� �� ��� �� ���� �� ���� �ணࠬ� �� ᮤ�ঠ�� ����- ��-���� ���ᠭ�� ⨯� �㭪樨. ���� � ⮬, �� �� 㬮�砭�� �㭪�� ��� ����뢠���� �� ������� � ��ࠦ���� ��� ������, ���, ���ਬ��, � WHILE (GETLINE(LINE, MAXLINE) > 0) � ����� ���, ��� �� �뫮 ���ᠭ� ࠭��, ���- ����� � ��ࠦ���� � �� ��� ��� ����� ��㣫�� ���, � ��� �� ���⥪��� ��⠥��� ������ �����ன �㭪樨. �� ⮣�, �� 㬮�砭�� �।����������, �� �� �㭪�� ������- �� ���祭�� ⨯� INT. ��� ��� � ��ࠦ����� CHAR �८�ࠧ��- �� � INT, � ��� ����室����� ����뢠�� �㭪樨, �������- 騥 CHAR. �� �।��������� ����뢠�� ����設�⢮ ��砥�, ������ �� �ਢ������ �� �� ��� �ਬ���. �� �� �ந�室��, � �㭪�� ������ �������� ����- ��� ������-� ��㣮�� ⨯� ? ������ ���� �㭪樨, ⠪�� ��� SQRT, SIN � COS �������� DOUBLE; ��㣨� ᯥ樠��� �㭪樨 �������� ���祭�� ��㣨� ⨯��. �⮡� ��������, ��� ����㯠�� � �⮬ ��砥, ������ ����襬 � �ᯮ��㥬 �㭪�� AT�F(S), ����� �८�ࠧ�� ��ப� S � �������- ��� �� ������饥 � ������� �筮��. �㭪�� AT�F �- ���� ���७��� ��I, ��ਠ��� ���ன �� ����ᠫ� � ������ 2 � 3; ��� ��ࠡ��뢠�� ����易⥫쭮 ���� � �������� ��- ��, � ⠪�� 楫�� � ���� ����, ������ �� ������ ����� ��� ������⢮����, ⠪ � ������⢮����./�� ��楤�� ��- ��ࠧ������ ����� �� �祭� ��᮪��� ����⢠; ���� ��� �� ��� ����� ����, 祬 ��� �⥫��� ��/. ��-�����, ᠬ� AT�F ������ ����뢠�� ⨯ �����頥���� �� ���祭��, ����� �� �⫨祭 �� INT. ��� ��� � ��ࠦ�- ���� ⨯ FLOAT �८�ࠧ���� � DOUBLE, � ��� �������� ���- �� � ⮬, �⮡� ATOF �����頫� FLOAT; �� ����� � ࠢ�� ��- ��宬 ��ᯮ�짮������ �������⥫쭮� �筮����, ⠪ �� �� ��������, �� �����頥��� ���祭�� ⨯� DOUBLE. ��� ⨯� ������ ����� ��। ������ �㭪樨, ��� �����뢠���� ����: DOUBLE ATOF(S) /* CONVERT STRING S TO DOUBLE */ CHAR S[]; { DOUBLE VAL, POWER; INT I, SIGN; - 78 - FOR(I=0; S[I]==' ' \!\! S[I]=='\N' \!\! S[I]=='\T'; I++) ; /* SKIP WHITE SPACE */ SIGN = 1; IF (S[I] == '+' \!\! S[I] == '-') /* SIGN */ SIGN = (S[I++] == '+') ? 1 : -1; FOR (VAL = 0; S[I] >= '0' && S[I] <= '9'; I++) VAL = 10 * VAL + S[I] - '0'; IF (S[I] == '.') I++; FOR (POWER = 1; S[I] >= '0' && S[I] <= '9'; I++) { VAL = 10 * VAL + S[I] - '0'; POWER *= 10; } RETURN(SIGN * VAL / POWER); } ����, �� �⮫� �� �����, ���� �, �� ��뢠��� �㭪�� ������ ����� � ⮬, �� ATOF �����頥� ���祭��, �⫨筮� �� INT ⨯�. ����� ������� ������������� �� �ਬ�� ���饣� �ਬ�⨢���� ���⮫쭮�� �������� /���� �ਣ������ ��� ���������� ������ � 祪���� ������/, ����� ���뢠�� �� ������ ��� �� ��ப�, ��祬 �� ��- �� ����� ����� ����, � ᪫��뢠�� �� �, ����� �㬬� �� ������� �����. #DEFINE MAXLINE 100 MAIN() /* RUDIMENTARY DESK CALKULATOR */ { DOUBLE SUM, ATOF(); CHAR LINE[MAXLINE]; SUM = 0; WHILE (GETLINE(LINE, MAXLINE) > 0) PRINTF("\T%.2F\N",SUM+=ATOF(LINE)); ��ᠭ�� DOUBLE SUM, ATOF(); ������, �� SUM ���� ��६����� ⨯� DOUBLE , � �� ATOF ���� �㭪樥�, �������饩 ���祭�� ⨯� DOUBLE . �� ��������� ����砥�, �� ���祭�ﬨ ��� SUM, ⠪ � ATOF(...) ����� ������騥 � ������� �筮��. - 79 - � �㭪�� ATOF �� �㤥� ���ᠭ� � � ����� �����, � � "C" �।����������, �� ��� �����頥� 楫�� ���祭��, � �� ������ �������� �⢥�. � ᠬ� ATOF � ����- ��� � ��� � MAIN ����� ��ᮢ���⨬� ⨯� � ��室���� � ��- ��� � ⮬ �� 䠩��, � �� �㤥� �����㦥�� ��������. �� � ATOF �뫠 �������� �⤥�쭮 /�� ����� ����⭮/, � �� ��ᮮ⢥��⢨� �� �㤥� ��䨪����, ⠪ �� ATOF �㤥� �������� ���祭�� ⨯� DOUBLE, � ����� MAIN �㤥� ��������, ��� � INT , �� �ਢ���� � �������� १��- �⠬. /�ணࠬ�� LINT �뫠������� ��� �訡��/. ���� ATOF, ��, � �ਭ樯�, ����� �� � �� ������� ����- ��� ATOI (�८�ࠧ������ ��ப� � INT): ATOI(S) /* CONVERT STRING S TO INTEGER */ CHAR S[]; { DOUBLE ATOF(); RETURN(ATOF(S)); } ����� �������� �� �������� ���ᠭ�� � ������ RETURN. ���祭�� ��ࠦ���� � RETURN (��ࠦ����) �ᥣ�� �८�ࠧ���� � ⨯� �㭪樨 ��। �믮������� ᠬ��� �����饭��. ���⮬� �� ������ � ������ RETURN ����- ��� �㭪樨 ��F, ����饥 ⨯ DOUBLE, ��⮬���᪨ �८��- ����� � INT, ����� �㭪�� ATOI �����頥� INT. (��� ���㦤����� � ����� 2, �८�ࠧ������ ���祭�� � ������饩 �窮� � ⨯� INT �����⢫���� ���।�⢮� ����뢠��� ���� ���). ��ࠦ����� 4-2. ---------------- ������� ATOF ⠪�� ��ࠧ��, �⮡� ��� ����� ࠡ���� � ��� ���� 123.45�-6 ��� �� �� � ������饩 �窮� ����� ������ 'E' � ����- ��⥫� �ᯮ�����, �������� � ������. 4.3. �� �� ��㬥��� �㭪権. � ����� 1 �� 㦥 ���㦤��� �� 䠪� , �� ��㬥��� ��- �権 ��।����� �� ���祭��, �.�. �맢����� �㭪�� ����砥� � �६����� ����� ������� ��㬥��, � �� ��� ����. �� ����砥�, �� �맢����� �㭪�� �� ����� �������⢮���� �� ��室�� ��㬥�� � ��뢠�饩 �㭪樨. ����� �㭪樨 ���- �� ��㬥�� �� ������ ���� �����쭮� ��६�����, ��- ��� ���樠��������� ⥬ ���祭���, � ����� � �⮩ �㭪- 樨 ���⨫���. - 80 - � � ����⢥ ��㬥�� �㭪樨 ����㯠�� ��� ���ᨢ�, � ��।����� ���� ��砫� �⮣� ���ᨢ�; ᠬ� ����� �� ����������. �㭪�� ����� �������� ����� ���ᨢ�, �ᯮ��- ��� �������� � ���� ��砫�. ����� ��ࠧ��, ���ᨢ ��।�- ���� �� ��뫪�. � ����� 5 �� ���㤨�, ��� �ᯮ�짮����� 㪠- ��⥫�� �������� �㭪�� �������⢮���� �� �⫨�� �� ���ᨢ�� ��६���� � ��뢠��� �㭪���. ����� ��稬, ��������� ��������� 㤮���⢮�⥫쭮�� ᯮᮡ� ����ᠭ�� ��७�ᨬ�� �㭪樨 � ��६���� �� ��㬥�⮢. ���� � ⮬, �� ��� ��७�ᨬ��� ᯮᮡ�, � ��- ����� ���ண� �맢����� �㭪�� ����� �� ��।�����, ��- �� ��㬥�⮢ �뫮 䠪��᪨ ��।��� �� � ������ ����- ���. ����� ��ࠧ��, ��, ���ਬ��, �� ����� ������� �����- ��⥫쭮 ��७�ᨬ�� �㭪��, ����� �㤥� ������� ����- �� �� �ந����쭮�� � ��㬥�⮢, ��� ������ ������ �㭪樨 MAX � ���࠭� � PL/1. ���筮 � ��砥� ��६������ � ��㬥�⮢ ������᭮ ����� ����, � �맢����� �㭪�� �� �ᯮ���� ��㬥�⮢, ����� �� �� ᠬ�� ���� �� �뫨 ��।���, � � ⨯� ᮣ- ��������. ����� �����࠭����� � �몥 "C" �㭪�� � ���- ����� �� - PRINTF . ��� ����砥� �� ��ࢮ�� ��㬥�� ���ଠ��, ����������� ��।����� ������⢮ ��⠫��� ��- �㬥�⮢ � �� ⨯�. �㭪�� PRINTF ࠡ�⠥� ᮢ��襭�� ���- ࠢ��쭮, � ��뢠��� �㭪�� ��।��� �� �������筮� ������⢮ ��㬥�⮢, ��� � �� ⨯� �� ᮣ�������� � �- ����, 㪠����묨 � ��ࢮ� ��㬥��. �� �㭪�� �� ���� ��७�ᨬ�� � ������ ����������� �� �ᯮ�짮����� � ࠧ����� �����. � �� ⨯� ��㬥�⮢ �������, � ����� ᯨ᪠ ���- ���⮢ ����� �⬥���, �ᯮ���� �����-� ᮣ��襭��; ����- ���, ����, �� ����� ᯥ樠�쭮� ���祭�� ��㬥�� (��� ���) ���� �ਧ����� ���� ��㬥�⮢. 4.4. ���譨� ��६����. �ணࠬ�� �� �몥 "C" ��⮨� �� ����� ���譨� ��ꥪ- ⮢, ����� ����� ���� ��६���묨, ���� �㭪�ﬨ. ���- ��� "���譨�" �ᯮ������ ������ ��ࠧ�� � ��⨢����⠢- ����� �ନ�� "����७���", ����� ����뢠���� ��㬥��� � ��⮬���᪨� ��६����, ��।������ ����� �㭪権. ���譨� ��६���� ��।����� ��� �����-���� �㭪樨 �, �- ��� ��ࠧ��, ��⥭樠�쭮 ����㯭� ��� ������ �㭪権. ���� �㭪樨 �ᥣ�� ����� ���譨��, ��⮬� �� �ࠢ��� �몠 "C" �� ࠧ���� ��।����� ���� �㭪樨 ����� ��㣨�. �� 㬮�砭�� ���譨� ��६���� ����� ⠪�� � "�������묨", ⠪ �� �� ��뫪� �� ⠪�� ��६�����, �ᯮ����騥 ���� � � �� ��� (���� �� �㭪権, ���������� ������ᨬ�), ���� ��뫪��� �� ���� � � ��. � �⮬ �� ���譨� ���- ����� ��������� ��६���� CO�MON � ���࠭� � EXTERNAL � PL/1. ������� �� �������, ��� ��।����� ���譨� ��६���� � �㭪樨 ⠪�� ��ࠧ��, �⮡� ��� �뫨 ����㯭� �� �������- ��, � ⮫쪮 � �।���� ������ ��室���� 䠩��. - 81 - � ᨫ� �� ������쭮� ����㯭��� ���譨� ��६���� �।��⠢���� �����, �⫨��� �� ��㬥�⮢ � �����頥��� ���祭��, ����������� ��� ������ ����묨 ����� �㭪�ﬨ. � ��� ���譥� ��६����� �����-���� ��ࠧ�� ���ᠭ�, � �� �㭪�� ����� ����� � �⮩ ��६�����, ��뫠��� � ��� �� �⮬� �����. � �����, ����� ��� ����� �㭪�ﬨ �����⢫���� � ������� ����讣� � ��६�����, ���譨� ��६���� �����- ������ ����� 㤮��묨 � ��䥪⨢�묨, 祬 �ᯮ�짮����� ������� ᯨ� ��㬥�⮢. ���, ������, �⬥砫��� � ����� 1, �� ᮮ�ࠦ���� ��� �ᯮ�짮���� � ��।������� ���- ������, ⠪ ��� ��� ����� ���� ��ࠧ����� �� ������� �ணࠬ� � �ਢ����� � �ணࠬ��� � ����訬 �� �痢� �� ����� ����� �㭪�ﬨ. ���� ��稭� �ᯮ�짮����� ���譨� ��६����� �易�� � ���樠����樥�. � ��⭮��, ���譨� ���ᨢ� ����� ���� ���樠������� � ��⮬���᪨� ���. �� ��ᬮ�ਬ ����� �� ���樠����樨 � ���� �⮩ �����. ����� ��稭� �ᯮ�짮����� ���譨� ��६����� ����- ���� �� �������� ����⢨� � �६���� ����⢮�����. ��⮬�- ��᪨� ��६���� ����� ����७���� �� �⭮襭�� � ��- ���; ��� ��������� �� �室� � �㭪�� � ��祧��� �� ��- 室� �� ���. ���譨� ��६����, ����⨢, �������� ����- ﭭ�. ��� �� ������ � �� ��祧���, ⠪ �� ����� ���- ���� � ���祭�� � ��ਮ� �� ������ ���饭�� � �㭪樨 �� ��㣮��. � ᨫ� �⮣�, � ��� �㭪樨 �ᯮ����� ������� ��騥 �����, ��祬 �� ���� �� ��� �� ���頥��� � ��㣮� , � ��� �������� 㤮��� ����뢠���� �࠭��� �� ��騥 ���- �� � ���� ���譨� ��६�����, � �� ��।����� �� � �㭪�� � ���⭮ � ������� ��㬥�⮢. ������ �த����� ���㦤���� �⮣� ����� �� ����讬 �ਬ��. ����� �㤥� ������ � ����ᠭ�� ��㣮� �ணࠬ�� ��� ��������, ���襩,祬 �।����. ����� ����᪠���� ����樨 +,-,*,/ � ���� = (��� �뤠� �⢥�).����� ��䨪�- ���� �।�⠢����� �������� �㤥� �ᯮ�짮���� ������ ������� �����,����� �� ���쪮 ���� ॠ��������.� ���⭮� ����� ���樨 ���� ��� �� ���࠭����; ��䨪- ᭮� ��ࠦ���� ⨯� (1-2)*(4+5)= �����뢠���� � ���� 12-45+*= ��㣫� ��� �� �⮬ �� �㦭� - 82 - ��������� ����뢠���� ���쬠 ���⮩.����� ���࠭� ��- ��頥��� � �⥪; ����� ����㯠�� ���� ����樨,�㦭�� � ���࠭��� (��� ��� ������� ����権) �뭨������,� ��� ��- ������� ������ � १���� ���ࠢ����� ���⭮ � �⥪.⠪ � �ਢ������� ��� �ਬ�� 1 � 2 ��������� � �⥪ � ��⥬ ���������� �� ࠧ������, -1.�� �⮣� 4 � 5 ���- ����� � �⥪ � ��⥬ ���������� �� �㬬��,9.����� � -1 � 9 ���������� � �⥪� �� �� �ந��������,ࠢ��� -9.���- ��� = ���⠥� ���孨� ���� �⥪�, �� 㤠��� ��� (⠪ �� ������� ������ ����� ���� ��७�). ���� ����樨 ����饭�� �ᥫ � �⥪ � �� �����祭�� �祭� �����,��, � �裡 � ����祭��� � �������� �ணࠬ�� �����㦥��� �訡�� � ����⠭�������,��� ����뢠���� ����- �筮 �����묨. ���⮬� ���� ��ନ�� �� � ���� �⤥���� �㭪権,祬 �������� ᮮ⢥�����騩 ⥪�� ������ � �ண- ࠬ��. �� ⮣�, �㦭� �⤥�쭠� �㭪�� ��� �롮ન �� ����� ���饩 ����樨 ��� ���࠭��. ����� ��ࠧ��, ����- ��� �ணࠬ�� ����� ���: WHILE( ����㯠�� ������ ��� ���࠭�, � �� ����� IF ( � ) �������� ��� � �⥪ �LSE IF ( ������ ) ����� ���࠭�� �� �⥪� �믮����� ������ �������� १���� � �⥪ ELSE �訡�� �᭮���� �����, ����� �� �� �� ���㦤��, �����砥�- �� � ⮬,��� �������� �⥪, �. �. ����� ��楤��� ᬮ��� �������� � ���� �����।�⢥���. ���� �� ⠪�� ���������- ⥩ ��⮨� � ����饭�� �⥪� � MAIN � ��।�� ᠬ��� �⥪� � ⥪�饩 ����樨 � �⥪� �㭪��, ࠡ���騬 � �⥪��. �� �㭪樨 MAIN ��� ����室����� ����� ���� � ��६���묨, �- ࠢ���騬� �⥪��; �� ����⢥��� ���㦤��� � �ନ��� ��- ��饭�� �ᥫ � �⥪ � �����祭�� �� ���㤠. � ᨫ� �⮣� �� �訫� ᤥ���� �⥪ � �易���� � ��� ���ଠ�� ���譨�� ��६���묨 , ����㯭묨 �㭪�� PUSH (����饭�� � �⥪) � POP (�����祭�� �� �⥪�), �� �� MAIN. ��ॢ�� �⮩ �奬� � �ணࠬ�� �����筮 ����. ������ �ணࠬ�� ���� �� ������ ����訬 ��४���⥫�� �� �- �� ����樨 ��� ���࠭��; ��, ��-��������, ����� �ࠪ��- ��� �ਬ����� ��४���⥫�, 祬 �, ��� �뫮 �த�����- ����� � ����� 3. #DEFINE MAXOP 20 /* MAX SIZE OF OPERAND, OPER�TOR * #DEFINE NUMBER '0' /* SIGNAL THAT NUMBER FOUND */ #DEFINE TOOBIG '9' /* SIGNAL THAT STRING IS TOO BIG * - 83 - MAIN() /* REVERSE POLISH DESK CALCULATOR */ /( INT TUPE; CHAR S[MAXOP]; DOUBLE OP2,ATOF(),POP(),PUSH(); WHILE ((TUPE=GETOP(S,MAXOP)) !=EOF); SWITCH(TUPE) /( CASE NUMBER: PUSH(ATOF(S)); BREAK; CASE '+': PUSH(POP()+POP()); BREAK; CASE '*': PUSH(POP()*POP()); BREAK; CASE '-': OP2=POP(); PUSH(POP()-OP2); BREAK; CASE '/': OP2=POP(); IF (OP2 != 0.0) PUSH(POP()/OP2); ELSE PRINTF("ZERO DIVISOR POPPED\N"); BREAK; CASE '=': PRINTF("\T%F\N",PUSH(POP())); BREAK; CASE 'C': CLEAR(); BREAK; CASE TOOBIG: PRINTF("%.20S ... IS TOO LONG\N",S) BREAK; /) /) #DEFINE MAXVAL 100 /* MAXIMUM DEPTH OF VAL STACK */ - 84 - INT SP = 0; /* STACK POINTER */ DOUBLE VAL[MAXVAL]; /*VALUE STACK */ DOUBLE PUSH(F) /* PUSH F ONTO VALUE STACK */ DOUBLE F; /( IF (SP < MAXVAL) RETURN(VAL[SP++] =F); ELSE /( PRINTF("ERROR: STACK FULL\N"); CLEAR(); RETURN(0); /) /) DOUBLE POP() /* POP TOP VALUE FROM STEACK */ /( IF (SP > 0) RETURN(VAL[--SP]); ELSE /( PRINTF("ERROR: STACK EMPTY\N"); CLEAR(); RETURN(0); /) /) CLEAR() /* CLEAR STACK */ /( SP=0; /) ������� C ��頥� �⥪ � ������� �㭪樨 CLEAR, ����� ⠪�� �ᯮ������ � ��砥 �訡�� �㭪�ﬨ PUSH � POP. � �㭪樨 GETOP �� �祭� � �����. ��� 㦥 ����ਫ��� � ����� 1, ��६����� ���� ����- ���, � ��� ��।����� ��� ⥫� ����� �� � �� �뫮 �㭪- 樨. ���⮬� �⥪ � 㪠��⥫� �⥪�, ����� ������ �ᯮ��- �������� �㭪�ﬨ PUSH, POP � CLEAR, ��।����� ��� ��� ��� �㭪権. �� ᠬ� �㭪�� MAIN �� ��뫠���� �� � �⥪�, �� � 㪠��⥫� �⥪� - �� ���⨥ ��⥫쭮 ����᪨���. � ᨫ� �⮣� ���� �ணࠬ��, ᮮ⢥������� ����樨 = , ��- ������ ��������� PUSH(POP()); ��� ⮣�, �⮡� ���������� ���孨� ���� �⥪�, �� ������� ���. �⬥⨬ ⠪��, �� ⠪ ��� ����樨 + � * ������⨢��, ���冷�, � ��� ��ꥤ������� �����祭�� ���࠭��, ����- ��⢥���, �� � ��砥 ����権 - � / ����室��� ࠧ����� ���� � �ࠢ� ���࠭��. - 85 - ��ࠦ����� 4-3. --------------- �ਢ������� �᭮���� �奬� ����᪠�� �����।�⢥���� ���७�� ���������⥩ ��������. ������ ������ ��- ����� �� ����� /%/ � 㭠�� �����. ������ ������� "��- ���", ����� 㤠��� ���孨� ���� �⥪�. ������ �����- �� ��� ࠡ��� � ��६���묨. /�� ����, � ����� ���- ������ ���� ������ �� ����� �㪢� �� �������� ������ ��� �㪢/. 4.5. �ࠢ���, ��।����騥 ������� ����⢨�. �㭪樨 � ���譨� ��६����, �室�騥 � ��⠢ "C"-�ணࠬ��, �� ��易�� ������������ �����६����; �ணࠬ�� �� ��室��� �몥 ����� �ᯮ�������� � ���쪨� 䠩���, � ࠭�� ��������� ��楤��� ����� ����㦠���� �� ������⥪. ��� ����� �।�⠢���� �����: ��� ��� ��⠢���� ���ᠭ��, �⮡� ��६���� ��- ���쭮 ���ਭ������� �� �६� �������樨 ? ��� ��� ��⠢���� ���ᠭ��, �⮡� ���ᯥ��� ��- ������ ��� ��⥩ �ணࠬ�� �� ����㧪� ? 4.5.1. ������� ����⢨�. �������� ����⢨� ����� ���� � ���� �ணࠬ��, � ���ன �� ��� ��।�����. ��� ��⮬���� ��६�����, ���ᠭ��� � ��砫� �㭪樨, �������� ����⢨� ���� � �㭪��, � ���ன ���ᠭ� ��� �⮩ ��६�����, � ��६���� �� ࠧ��� �㭪権, ����騥 ���������� ���, ������� �� ��- ����騬��� ��� � ����. �� �� �ࠢ������ � ��� ��㬥�⮢ �㭪権. ������� ����⢨� ���譥� ��६����� ����ࠥ��� �� ��- ��, � ���ன ��� ������ � ��室��� 䠩��, �� ���� �⮣� 䠩��. ���ਬ��, � VAL, SP, PUSH, POP � CLEAR ��।����� � ����� 䠩�� � ���浪�, 㪠������ ���, � ������: INT SP = 0; DOUBLE VAL[MAXVAL]; DOUBLE PUSH(F) {...} DOUBLE POP() {...} CLEAR() {...} � ��६���� VAL � SP ����� �ᯮ�짮���� � PUSH, POP � CLEAR ��אַ �� �����; ������� �������⥫�� ���ᠭ�� �� �㦭�. � ��㣮� ���, � �㦭� ����� �� ������ ���- ������ �� �� ��।������, ��� � ⠪�� ��६����� ��।�- ���� � 䠩��, �⫨筮� �� ⮣�, � ��� ��� �ᯮ������, � ����室��� ���ᠭ�� EXTERN. - 86 - ����� ࠧ����� ���ᠭ�� ���譥� ��६����� � �� ��।�- �����. ���ᠭ�� 㪠�뢠�� ��⢠ ��६����� /�� ⨯, ࠧ- ��� � �.�./; ��।������ �� ��뢠�� �� � �⢥����� �����. � ��� ����� �� � �� �뫮 �㭪樨 ������� ���窨 INT SP; DOUBLE VAL[MAXVAL]; � ��� ��।����� ���譨� ��६���� SP � VAL, ��뢠�� ��- ������� ����� ��� ��� � �㦠� � ����⢥ ���ᠭ�� ��� ��- ⠫쭮� ��� �⮣� ��室���� 䠩��. � � �� �६� ���窨 EXTERN INT SP; EXTERN DOUBLE VAL[]; ����뢠�� � ��⠫쭮� ��� �⮣� ��室���� 䠩�� ��६����� SP ��� INT, � VAL ��� ���ᨢ ⨯� DOUBLE /ࠧ��� ���ண� 㪠��� � ��㣮� ����/, �� �� ᮧ���� ��६����� � �� �⢮- ��� �� ���� � �����. �� ��� 䠩���, ��⠢����� ��室��� �ணࠬ��, ������ ᮤ�ঠ���� ⮫쪮 ���� ��।������ ���譥� ��६�����; ���- ��� 䠩�� ����� ᮤ�ঠ�� ���ᠭ�� EXTERN ��� ����㯠 � ���. /���ᠭ�� EXTERN ����� ������� � � ⮬ 䠩��, ��� ��室���� ��।������/. �� ���樠������ ���譥� ��६����� ��- ����� ⮫쪮 � ��।������. � ��।������ ������ 㪠�뢠���� ࠧ���� ���ᨢ��, � � ���ᠭ�� EXTERN �⮣� ����� �� ������. ���� �������� �࣠������ �ਢ������� ��� �ணࠬ�� � ��������⭠, �� VAL � SP ����� �� ���� ��।����� � ���樠- ������� � ����� 䠩��, � �㭪�� PUSH, POP � CLEAR ���- ������ � ��㣮�. � �⮬ ��砥 ��� �裡 �뫨 �� ����室��� ���騥 ��।������ � ���ᠭ��: � 䠩�� 1: ---------- INT SP = 0; /* STACK POINTER */ DOUBLE VAL[MAXVAL]; /* VALUE STACK */ � 䠩�� 2: ---------- EXTERN INT SP; EXTERN DOUBLE VAL[]; DOUBLE PUSH(F) {...} DOUBLE POP() {...} CLEAR() {...} ⠪ ��� ���ᠭ�� EXTERN '� 䠩�� 1' ��室���� ��� � ��� ��� 㪠������ �㭪権, ��� �⭮����� �� �ᥬ ���; ������ ����� ���ᠭ�� �����筮 ��� �ᥣ� '䠩�� 2'. - 87 - ��� �ணࠬ� ����讣� ࠧ��� ���㦤����� ����� � �⮩ ����� ����������� ����祭�� 䠩���, #INCLUDE, �������� ����� �� �ᥩ �ணࠬ�� ⮫쪮 ���� ����� ���ᠭ�� EXTERN � ��⠢���� �� � ����� ��室�� 䠩� �� �६� ��� �������樨. ���⨬�� ⥯��� � �㭪樨 GETOP, �롨��饩 �� 䠩�� ����� ������ ������ ��� ���࠭�. �᭮���� ����� ���- �: �ய����� ����, ����� ⠡��樨 � ���� ��ப�. � ���騩 ᨬ��� �⫨祭 �� ���� � �����筮� �窨, � �������� ���. � ��⨢��� ��砥 ᮡ��� ��ப� ��� /��� ����� ������� �������� ���/ � �������� NUMBER ��� ᨣ��� � ⮬, �� ��࠭� �. ��楤�� ����⢥��� �������, � ��६����� ��- ���쭮 ��ࠡ��뢠�� �����, ����� �������� � ����뢠- ���� 誮� ������. �㭪�� GETOP ���뢠�� ���� ����� /�������� � �����筮� �窮�/ � ���������� ��, ���� ��- ����⥫쭮��� �� ���뢠����. � �� �⮬ �� �ந�室�� ��९�������, � �㭪�� �����頥� NUMBER � ��ப� ���. � �� � ����뢠���� 誮� ������, � GETOP �����- ���� ��⠫��� ���� ��ப� �� 䠩�� �����, ⠪ �� ���짮- ��⥫� ����� ���� ��९����� ��� ��ப� � ���� �訡��; �㭪�� �����頥� TOOBIG ��� ᨣ��� � ��९�������. GETOP(S, LIM) /* GET NEXT OPRERATOR OR OPERAND */ CHAR S[]; INT LIM; { INT I, C; WHILE((C=GETCH())==' '\!\! C=='\T' \!\! C=='\N') ; IF (C != '.' && (C < '0' \!\! C > '9')) RETURN(C); S[0] = C; FOR(I=1; (C=GETCHAR()) >='0' && C <= '9'; I++) IF (I < LIM) S[I] = C; IF (C == '.') { /* COLLECT FRACTION */ IF (I < LIM) S[I] = C; FOR(I++;(C=GETCHAR()) >='0' && C<='9';I++) IF (I < LIM) S[I] =C; } IF (I < LIM) { /* NUMBER IS OK */ UNGETCH(C); S[I] = '\0'; RETURN (NUMBER); } ELSE { /* IT'S TOO BIG; SKIP REST OF LINE */ WHILE (C != '\N' && C != EOF) C = GETCHAR(); S[LIM-1] = '\0'; RETURN (TOOBIG); } } - 88 - �� �� �।�⠢���� �� ᥡ� �㭪樨 'GETCH' � 'UNGETCH'? ���� ⠪ �뢠��, �� �ணࠬ��, ���뢠��� �室�� �����, �� ����� ��।�����, �� ��� ��章 㦥 �����筮, ���� ��� �� ����� 誮� �����. ����� �� �ਬ� ���� �롮� ᨬ�����, ��⠢����� �: ���� �� ����� ᨬ���, ��- ���� �� ����, � �� �����祭�. �� �� �⮬ �ணࠬ�� ���뢠�� ���� ��譨� ᨬ���, ᨬ���, ��� ���ண� ��� �� �� �����⮢����. �� ����� �뫠 �� �襭�, � �� �뫮 �� �������� "������ ���⭮" ������⥫�� ᨬ���. ����� ����� ࠧ, ���⠢ ��譨� ᨬ���, �ணࠬ�� ����� �� �������� ��� ��- �⭮ � 䠩� ����� ⠪�� ��ࠧ��, �� ��⠫쭠� ���� �ண- ࠬ�� ����� �� ���� ᥡ� ⠪, ��� ��� ᨬ��� ������� �� ���뢠���. � ������, ⠪�� ������祭�� ᨬ���� ����� ����- ����, ����ᠢ ���� ��������� ᮢ���⭮ �㭪権. �㭪- �� GETCH ���⠢��� ���騩 ᨬ��� �����, �������騩 ��- ᬮ�७��; �㭪�� UNGETCH ����頥� ᨬ��� ����� �� ����, ⠪ �� �� ���饬 ���饭�� � GETCH �� �㤥� �����饭. ��, ��� �� �㭪樨 ᮢ���⭮ ࠡ����, ���쬠 ����. �㭪�� UNGETCH ����頥� �����頥�� ����� ᨬ���� � ᮢ- ���⭮ �ᯮ��㥬� ����, ��騩�� ᨬ����� ���ᨢ��. �㭪�� GETCH �⠥� �� �⮣� ����, � � ��� ��-���� �������; � �� ���� ����, ��� ���頥��� � GETCHAR. �� �⮬ ⠪�� �㦭� ����������� ��६�����, ����� �㤥� 䨪���� ������ ⥪�饣� ᨬ���� � ����. ��� ��� ���� � ��� ������ ᮢ���⭮ �ᯮ������� �㭪- �ﬨ GETCH � UNGETCH � ������ ��࠭��� � ���祭�� � ��- ਮ� ����� ���饭�ﬨ, ��� ������ ���� ���譨�� ��� ����� �㭪権. ����� ��ࠧ��, �� ����� ������� GETCH, UNGETCH � �� ��६���� ���: #DEFINE BUFSIZE 100 CHAR BUF[BUFSIZE]; /* BUFFER FOR UNGETCH */ INT BUFP = 0; /* NEXT FREE POSITION IN BUF */ GETCH() /* GET A (POSSIBLY PUSHED BACK) CHARACTER */ { RETURN((BUFP > 0) ? BUF[--BUFP] : GETCHAR()); } UNGETCH(C) /* PUSH CHARACTER BACK ON INPUT */ INT C; { IF (BUFP > BUFSIZE) PRINTF("UNGETCH: TOO MANY CHARACTERS\N"); ELSE BUF [BUFP++] = C; } �� �ᯮ�짮���� ��� �࠭���� �����頥��� ᨬ����� ���ᨢ, � �� �⤥��� ᨬ���, ��⮬� �� ⠪�� ��魮��� ����� �ਣ�- ������ � ���쭥�襬. - 89 - ��ࠦ����� 4-4. ---------------- ������ �㭪�� UNGETS(S) , ����� �㤥� �������� �� ���� 楫�� ��ப�. ������ �� UNGETS ����� ���� � BUF � BUFP ��� ��� ����� ���� �ᯮ�짮���� UNGETCH ? ��ࠦ����� 4-5. ---------------- �।�������, �� ����� ���������� ⮫쪮 ���� ᨬ���. ��- ����� GETCH � UNGETCH ᮮ⢥�����騬 ��ࠧ��. ��ࠦ����� 4-6. ---------------- ��� �㭪樨 GETCH � UNGETCH �� ���ᯥ稢��� ��ࠡ��� ����- �饭���� ᨬ���� EOF ��७�ᨬ� ��ࠧ��. ����, ����� ��⢮� ������ �������� �� �㭪樨, � �����頥��� EOF, � ॠ����� ��� �뢮��. 4.6. ����᪨� ��६����. ����᪨� ��६���� �।�⠢���� ᮡ�� ��⨩ ����� �����, � ���������� � ��⮬���᪨� ��६���� � EXTERN, � ����묨 �� 㦥 ����砫���. ����᪨� ��६���� ����� ���� ���� ����७����, ���� ���譨��. ����७��� ����᪨� ��६���� �筮 ⠪ ��, ��� � ��⮬���᪨�, ����� ������묨 ��� �����ன ��- �樨, ��, � �⫨稥 �� ��⮬���᪨�, ��� ������� �����- ������, � �� ������� � ��祧��� ����� � ���饭��� � �⮩ �㭪樨. �� ����砥�, �� ����७��� ����᪨� ���- ����� ���ᯥ稢��� ����ﭭ��, ������㯭�� ����� �࠭���� ����� �㭪樨. �������� ��ப�, ����騥�� ����� �㭪- 樨, ���, ���ਬ��, ��㬥��� PRINTF , ����� ����७���� ����᪨��. ���譨� ����᪨� ��६���� ��।����� � ��⠫쭮� ��� ⮣� ��室���� 䠩��, � ��� ��� ���ᠭ�, �� �� � �����-���� ��㣮� 䠩��. ����� ��ࠧ��, ��� ���� ᯮᮡ ��뢠�� �����, ������� BUF � BUFP � �������樨 GETCH-UNGETCH, ����� � ᨫ� �� ᮢ���⭮�� �ᯮ�짮����� ������ ���� ���譨��, �� �� �� �� ����㯭묨 ��� ���짮��- ⥫�� GETCH � UNGETCH , �⮡� �᪫�砫��� ����������� ����- ����. � �� ��� �㭪樨 � ��� ��६���� ��ꥤ����� � ����� 䠩�� ���騬 ��ࠧ�� STATIC CHAR BUF[BUFSIZE]; /* BUFFER FOR UNGETCH */ STATIC INT BUFP=0; /*NEXT FREE POSITION IN BUF */ GETCH() {...} UNGETCH() {...} � ������� ��㣠� �㭪�� �� �㤥� � ���ﭨ� �������� � BUF � BUFP; 䠪��᪨, ��� �� ���� ���㯠�� � ���䫨�� � ⠪��� �� ������� �� ��㣨� 䠩��� ⮩ �� ᠬ�� �ணࠬ��. ����᪠� ������, ��� ����७���, ⠪ � ������, ᯥ- �������� ��� STATIC , ���騬 ��। ����� ���ᠭ�- ��. ��६����� ���� ���譥�, � ��� ���ᠭ� ��� ����� �� � �� �뫮 �㭪樨, � ����७���, � ��� ���ᠭ� ����� �����ன �㭪樨. - 90 - ��ଠ�쭮 �㭪樨 ����� ���譨�� ��ꥪ⠬�; �� ����� ������� ������쭮. ��������, ������, ����� �㭪�� ��� STATIC ; ⮣�� �� ��� �⠭������ ��������� ��� 䠩��, � ��� ��� ���ᠭ�. � �몥 "C" "STATIC" ��ࠦ��� �� ⮫쪮 ������⢮, �� � �⥯��� ⮣�, �� ����� ������� "�ਢ�⭮����". ����७��� ����᪨� ��ꥪ�� ��।����� ⮫쪮 ����� ����� �㭪樨; ���譨� ����᪨� ��ꥪ�� /��६���� ��� �㭪樨/ ��।�- ���� ⮫쪮 ����� ⮣� ��室���� 䠩��, ��� ��� �������, � �� ����� �� ���㯠�� � ���䫨�� � ⠪��� �� ������� ���- ������ � �㭪権 �� ��㣨� 䠩���. ���譨� ����᪨� ��६���� � �㭪樨 �।��⠢���� ᯮᮡ �࣠�����뢠�� ����� � ࠡ���騥 � ���� ����७��� ��楤��� ⠪�� ��ࠧ��, �� ��㣨� ��楤��� � ����� �� ����� �� � ���� � ���䫨�� ���� �� ����ࠧ㬥���. ����- ���, �㭪樨 GETCH � UNGETCH ��ࠧ��� "�����" ��� ����� � �����饭�� ᨬ�����; BUF � BUFP ������ ���� ����᪨��, �⮡� ��� �� �뫨 ����㯭� �����. ��筮 ⠪ �� �㭪樨 PUSH, POP � CLEAR �ନ���� ����� ��ࠡ�⪨ �⥪�; VAR � SP ⮦� ������ ���� ���譨�� ����᪨��. 4.7. ������� ��६����. ��⢥��� � ������ ����� ����� ���뢠���� ॣ����- ��. ���ᠭ�� REGISTER 㪠�뢠�� ����������, �� ������ ��- ६����� �㤥� ��� �ᯮ�짮������. ����� �� ��������, ��- ६����, ���ᠭ�� ��� REGISTER, �ᯮ�������� � ��設��� ॣ�����, �� ����� �ਢ��� � ����訬 �� ࠧ���� � ����� ������ �ணࠬ���. ���ᠭ�� REGISTER �룫廊� ��� REGISTER INT X; REGISTER CHAR C; � �.�.; ���� INT ����� ���� ���饭�. ���ᠭ�� REGISTER ���- �� �ᯮ�짮���� ⮫쪮 ��� ��⮬���᪨� ��६����� � ��- ������ ��ࠬ�� �㭪権. � �⮬ ������ ��砥 ���ᠭ�� �룫��� ���騬 ��ࠧ��: F(C,N) REGISTER INT C,N; { REGISTER INT I; ... } - 91 - �� �ࠪ⨪� ��������� ������� ��࠭�祭�� �� ॣ����- �� ��६����, ��ࠦ��騥 ॠ��� ���������� �������� �������� �।��. � ॣ����� ����� �������� ⮫쪮 ���- ���쪮 ��६����� � ������ �㭪樨, ��祬 ⮫쪮 ��।����- ��� ⨯��. � ��砥 �ॢ�襭�� ���������� � ��� �ᯮ��- ������� ��ࠧ�襭��� ⨯�� �� REGISTER ����������. �� ⮣� ���������� ������� ���� ॣ����� ��६����� (��� ����� ���㦤����� � ����� 5). �� ᯥ���᪨� ���- ��祭�� ���������� �� ��設� � ��設�. ���, ���ਬ��, �� PDP-11 ��䥪⨢�묨 ����� ⮫쪮 ���� �� ���ᠭ�� REGISTER � �㭪樨, � � ����⢥ ⨯�� ����᪠���� INT, CHAR ��� 㪠��⥫�. 4.8. ���筠� �������. ��� "C" �� ���� �몮� � ���筮� ������ன � ���- �� PL/1 ��� ������; � ��� ����� ����뢠�� ���� �㭪樨 ����� ��㣨�. ��६���� ��, � ��㣮� ���, ����� ��।������� �� ��⮤� ���筮�� �����������. ���ᠭ�� ��६����� (����- �� ���樠������) ����� ������ �� ����� 䨣�୮� �- ���,���뢠�饩 �� ������, � �� ⮫쪮 �� ⮩, � ���- ன ��稭����� ⥫� �㭪樨. ��६����, ���ᠭ�� ⠪�� ��- ࠧ��, ������� ��� ��६���� �� ���譨� ������, ����騥 ⠪�� �� �����, � ������� ��।�����묨 �� ᮮ⢥�����饩 �ࠢ�� 䨣�୮� ���. ���ਬ�� � IF (N > 0) { INT I; /* DECLARE A NEW I */ FOR (I = 0; I < N; I++) ... } �������� ����⢨� ��६����� I ���� "��⨭���" ���� IF; �� I ����� �� �易�� �� � ������ ��㣨�� I � �ணࠬ- ��. ���筠� ������� ����� � �� ������� ����⢨� ���譨� ��६�����. � ���� ���ᠭ�� INT X; F() { DOUBLE X; ... } �� ������ X ����� �㭪樨 F �⭮���� � ����७��� ���- ������ ⨯� DOUBLE, � ��� F - � ���譥� 楫�� ��६�����. �� �� �ࠢ������ � �⭮襭�� ���� �ଠ���� ��ࠬ��: INT X; F(X) DOUBLE X; { ... } ����� �㭪樨 F ��� X �⭮���� � �ଠ�쭮�� ��ࠬ����, � �� � ���譥� ��६�����. 4.9. ���樠������. �� �� �� ��� 㦥 ����� ࠧ 㯮������ ���樠������, �� �ᥣ�� ����室�� , �।� ��㣨� ����ᮢ. ������, �� ⮣� ��� �� ���㤨�� ࠧ���� ������ �����, �� � �⮬ ࠧ���� ���㬬��㥬 ������� �ࠢ���, �⭮��騥�� � ���樠����樨. � �� ���樠������ ���������, � ���譨� � ��- ��᪨� ��६���� ��ᢠ������� ���祭�� ���; ��⮬��- �᪨� � ॣ���� ��६���� ����� � �⮬ ��砥 �����- ������� ���祭�� (����). - 92 - ����� ��६���� (�� ���ᨢ� ��� ��������) ����� ���- 樠������� �� �� ���ᠭ��, �������� �� �� ������ ���� ࠢ���⢠ � ����⠭⭮� ��ࠦ����: INT X = 1; CHAR SQUOTE = '\''; LONG DAY = 60 * 24; /* MINUTES IN A DAY */ ��� ���譨� � ����᪨� ��६����� ���樠������ �믮���- ���� ⮫쪮 ���� ࠧ, �� �⠯� �������樨. ��⮬���᪨� � ॣ���� ��६���� ���樠���������� ����� ࠧ �� �室� � �㭪�� ��� ����. � ��砥 ��⮬���᪨� � ॣ����� ��६����� ���樠����- �� �� ��易� ���� ����⠭⮩: �� ᠬ�� ���� �� ����� ���� ��� ���稬� ��ࠦ�����, ��� ����� ������� ��।����- �� ࠭�� ����稭� � ���� ���饭�� � �㭪��. ���ਬ��, ���樠������ � �ணࠬ�� ����୮�� ���᪠ �� ����� 3 ����� �� ���� ����ᠭ� � ���� BINARY(X, V, N) INT X, V[], N; { INT LOW = 0; INT HIGH = N - 1; INT MID; ... } ����� BINARY(X, V, N) INT X, V[], N; { INT LOW, HIGH, MID; LOW = 0; HIGH = N - 1; ... } �� ��� १�����, ���樠����樨 ��⮬���᪨� ��६��- ��� ����� ᮪�饭��� ������� ����� ��ᢠ������. ����� ��� �।������ - � �᭮���� ���� ����. �� ���筮 �ᯮ��㥬 � ��ᢠ������, ��⮬� �� ���樠������ � ���ᠭ��� ����� ����⭠. ��⮬���᪨� ���ᨢ� �� ����� ���� ���樠�������. ����- ��� � ����᪨� ���ᨢ� ����� ���樠�������, ������ �� �� ���ᠭ��� �����祭�� � 䨣��� ��� ᯨ᮪ ��- 砫��� ���祭��, ࠧ�������� �����묨. ���ਬ�� �ணࠬ�� ������ ᨬ����� �� ����� 1, ����� ��稭����� � - 93 - MAIN() /* COUNT DIGITS, WHITE SPACE, OTHERS */ ( INT C, I, NWHITE, NOTHER; INT NDIGIT[10]; NWHITE = NOTHER = 0; FOR (I = 0; I < 10; I++) NDIGIT[I] = 0; ... ) ���� ���� ��९�ᠭ� � ���� INT NWHITE = 0; INT NOTHER = 0; INT NDIGIT[10] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; MAIN() /* COUNT DIGITS, WHITE SPACE, OTHERS */ ( INT C, I; ... ) �� ���樠����樨 䠪��᪨ �� �㦭�, ⠪ ��� �� ��ᢠ�- ����� ���祭�� ࠢ�� ���, �� ��訩 �⨫� - ᤥ���� �� 묨. � ������⢮ ��砫��� ���祭�� �����, 祬 㪠- ����� ࠧ��� ���ᨢ�, � ��⠫�� ����� ����������� ��- �ﬨ. ������� 誮� ����讣� � ��砫��� ���祭�� ���� �訡���. � ᮦ������, �� �।�ᬮ�७� ����������� 㪠�����, �� ����� ��砫쭮� ���祭�� ���������, � ����� ���樠������� ���� � �।��� ���ᨢ� ��� ���- ���� ��� �।����. ��� ᨬ������ ���ᨢ�� ������� ᯥ樠��� ᯮᮡ ���樠����樨; ����� 䨣���� ��� � ������� ����� ��- ���짮���� ��ப�: CHAR PATTERN[] = "THE"; �� ᮪�饭�� ����� �������, �� ������⭮� �����: CHAR PATTERN[] = { 'T', 'H', 'E', '\0' }; � ࠧ��� ���ᨢ� ��� ⨯� ���饭, � ��������� ���- ����� ��� �����, ������뢠� � ��砫��� ���祭��. � �⮬ �����⭮� ��砥 ࠧ��� ࠢ�� ���६ (�� ᨬ���� ���� ����筮� \0). - 94 - 4.10. �������. � �몥 "C" �㭪樨 ����� �ᯮ�짮������ ४��ᨢ��; �� ����砥�, �� �㭪�� ����� ��אַ ��� ��ᢥ��� �������� � ᥡ� ᠬ��. �ࠤ�樮��� �ਬ� ���� ����� � � ���� ��ப� ᨬ�����. ��� �� 㦥 ࠭�� �⬥砫�, ���� ����- ������� �� � ⮬ ���浪�: ���� ������ ࠧ�冷� ������� ࠭�� ��� �� ����� ࠧ�冷�, �� �������� ��� ������ � ���⭮� ���浪�. ��� ����� ����� ���� ���� ᯮᮡ���. ���� ᯮ- ᮡ, ����� �� ��ᯮ�짮������ � ����� 3 � �㭪樨 ITOA, �����砥��� � ����������� ��� � ����� ���ᨢ� �� ��� �� ����㯫���� � �����饬 �� ���⠭�� � ���⭮� ����- ��. ���� ��ਠ�� �㭪樨 PRINTD ��� �⮩ �奬�. PRINTD(N) /* PRINT N IN DECIMAL */ INT N; { CHAR S[10]; INT I; IF (N < 0) { PUTCHAR('-'); N = -N; } I = 0; DO { S[I++] = N % 10 + '0'; /* GET NEXT CHAR */ } WHILE ((N /= 10) > 0); /* DISCARD IT */ WHILE (--I >= 0) PUTCHAR(S[I]); } ����ୠ⨢�� �⮬� ᯮᮡ� ���� ४��ᨢ��� ��- ���, ����� �� ������ �맮�� �㭪�� PRINTD ᭠砫� ᭮�� ���頥��� � ᥡ�, �⮡� ����� �������騥 ����, � ��- ⥬ ���⠥� ������ ����. PRINTD(N) /* PRINT N IN DECIMAL (RECURSIVE)*/ INT N; ( INT I; IF (N < 0) { PUTCHAR('-'); N = -N; } IF ((I = N/10) != 0) PRINTD(I); PUTCHAR(N % 10 + '0'); ) - 95 - ����� �㭪�� ��뢠�� ᥡ� ४��ᨢ��, �� ������ ���- 饭�� ��ࠧ���� ���� ����� ��� ��⮬���᪨� ��६�����, ᮢ��襭�� �� ������騩 �� �।��饣� �����. ����� ���- ���, � PRINTD(123) ��ࢠ� �㭪�� PRINTD ����� N = 123. ��� ��।��� 12 ��ன PRINTD, � ����� � �����頥� �ࠢ����� ��, ���⠥� 3. ��筮 ⠪ �� ���� PRINTD ��।��� 1 ���쥩 (����� ��� ������� ���⠥�), � ��⥬ ���⠥� 2. ������� ���筮 �� ���� ������� ������ �����, ���- ����� ��室���� ���-� ᮧ������ �⥪ ��� ��ࠡ��뢠���� ���祭��. �� �ਢ���� ��� � � ᮧ����� ����� ������� �ண- ࠬ�. �� ४��ᨢ�� �ணࠬ�� ����� ��������, � ��� ����- ��� �⠭������ ����� ������� ��� ��������� � ����ᠭ��. ��- ����� �ᮡ���� 㤮��� �� ࠡ�� � ४��ᨢ�� ��।��塞묨 ������ࠬ� ������, ���ਬ��, � ��ॢ�ﬨ; ��訩 �ਬ�� �㤥� �ਢ���� � ����� 6. ��ࠦ����� 4-7. -------------- ��ᯮᮡ�� ����, �ᯮ�짮����� � PRINTD ��� ४��ᨢ- ���� ����ᠭ�� ITOA; �.�. �८�ࠧ�� 楫�� � ��ப� � ��- ����� ४��ᨢ��� ��楤���. ��ࠦ����� 4-8. -------------- ������ ४��ᨢ�� ��ਠ�� �㭪樨 REVERSE(S), ����� �ᯮ������ � ���⭮� ���浪� ��ப� S. 4.11. �९����� �몠 "C". � �몥 "�" �।�ᬮ�७� ��।������ ���७�� �몠 � ������� ���⮣� ���ய।������. ����� �� ᠬ�� ��- ���࠭����� ⠪�� ���७��, ��� �� 㦥 �ᯮ�짮����, ���� ��������� #DEFINE; ��㣨� ���७��� ���� ����������� ������� �� �६� �������樨 ᮤ�ন��� ��㣨� 䠩���. 4.11.1. ����祭�� 䠩��� ��� �����祭�� ࠡ��� � ����ࠬ� �������権 #DEFINE � ���ᠭ�� (�।� ���� �।��) � �몥 "�" �।�ᬮ�७� ����������� ����祭�� 䠩���. �� ��ப� ���� #INCLUDE "FILENAME" ��������� ᮤ�ন�� 䠩�� � ������ FILENAME. (����窨 ���- ��⥫��). ���� ���� ��� ��� ��ப� ⠪��� ���� ������� � ��砫� ������� ��室���� 䠩��, ��� ⮣� �⮡� ������� ��騥 �������樨 #DEFINE � ���ᠭ�� EXTERN ��� ��������� ��६�����. ����᪠���� ����������� �������権 #INCLUDE. ��������� #INCLUDE ���� �।����⥫�� ᯮᮡ�� �裡 ���ᠭ�� � ������ �ணࠬ���. ��� ᯮᮡ ��࠭���- ��, �� �� ��室�� 䠩�� ���� ᭠����� ��������묨 ���- ������ﬨ � ���ᠭ�ﬨ ��६�����, �, ����⥫쭮, �᪫�- 砥� �ᮡ���� ������� ��� �訡��. ����⢥���, ����� ��- ���-TO ����砥�� 䠩� ���������, �� ������騥 �� ���� 䠩�� ������ ���� ��४���������. - 96 - 4.11.2. ���ய���⠭���� ��।������ ���� #DEFINE TES 1 �ਢ���� � ���ய���⠭���� ᠬ��� ���⮣� ���� - ������ ����� �� ��ப� ᨬ�����. ����� � #DEFINE ����� �� �� ᠬ�� ���, �� � �����䨪���� � "�"; �������騩 ⥪�� ᮢ��- 襭�� �ந������. ��ଠ�쭮 �������騬 ⥪�⮬ ���� ��- ⠫쭠� ���� ��ப�; ������� ��।������ ����� �த������, �����⨢ \ � ����� �த�������� ��ப�. "������� ����⢨�" �����, ��।�������� � #DEFINE, ����ࠥ��� �� �窨 ���- ������� �� ���� ��室���� 䠩��. ����� ����� ���� ��८��- ������, � ��।������ ����� �ᯮ�짮���� ��।������, ᤥ- ����� ࠭��. ����� �����祭��� � ����窨 ��ப ����⠭���� �� �ந��������, ⠪ �� �, ���ਬ��, YES - ��।������� ���, � � PRINTF("YES") �� �㤥� ᤥ���� ������� ����⠭��- ��. ��� ��� ॠ������ #DEFINE ���� ����� ࠡ��� ��Kய।������, � �� ᮡ�⢥��� ���������, ������� �祭� ���� �ࠬ����᪨� ��࠭�祭�� �� �, �� ����� ���� ��।�����. ���, ���ਬ��, �⥫� ������ ����� ����� #DEFINE THEN #DEFINE BEGIN { #DEFINE END ;} � ��⥬ ������� IF (I > 0) THEN BEGIN A = 1; B = 2 END ������� ⠪�� ����������� ��।������ ����� � ��㬥�- ⠬�, ⠪ �� �������騩 ⥪�� �㤥� ������� �� ���� ���- 饭�� � ������. ��।����, ���ਬ��, ����� � ������ MAX ���騬 ��ࠧ��: #DEFINE MAX(A, B) ((A) > (B) ? (A) : (B)) ����� ��ப� X = MAX(P+Q, R+S); �㤥� �������� ��ப�� X = ((P+Q) > (R+S) ? (P+Q) : (R+S)); ����� ����������� ���ᯥ稢��� "�㭪�� ���ᨬ㬠", ����� �������� � ������⥫�� ���, � �� � ���饭�� � �㭪- 樨. �� �ࠢ��쭮� ���饭�� � ��㬥�⠬� ⠪�� ����� ��- ��� ࠡ���� � ��묨 ⨯��� ������; ����� ��� ����室����� � ࠧ����� ����� MAX ��� ������ ࠧ��� ⨯��, ��� �� �뫮 �� � �㭪�ﬨ. - 97 - ����筮, � �� ��⥫쭮 ��ᬮ��� �ਢ������� ��� ���७�� MAX, �� ������ ��।������ ������⪨. ��ࠦ�- ��� ��������� ������; �� ����, � ��� ������ �� ᮡ�� ������ ��䥪��, �맢����, ���ਬ��, ���饭�ﬨ � �㭪�- � ��� �ᯮ�짮������ ����権 㢥��祭��. �㦭� ���������- �� � �ࠢ��쭮� �ᯮ�짮����� ��㣫�� ���, �⮡� ��࠭�- ��� ��࠭���� �ॡ㥬��� ���浪� ������. (���ᬮ��- � ����� #DEFINE SQUARE(X) X * X �� ���饭�� � ���, ��� SQUARE(Z+1)). ����� ��������� ���� ������� ��� �����᪨� �����: ����� ������ ���� � ����� ��㣫�� ����, ���뢠�饩 ᯨ᮪ �� ��㬥�⮢, �� ������ ���� ������� �����. ��� �� ����� ������ ����ᮢ ���� ���쬠 業��. ���� �ࠪ��᪨� �ਬ�� ���� ����뢠���� � ����� 7 �⠭���- ⭠� ������⥪� �����-�뢮��, � ���ன GETCHAR � PUTCHAR ��।����� ��� ������ (�祢���� PUTCHAR ������ ����� ���- ����), �� �������� �������� ����� �� ���饭�� � �㭪樨 �� ��ࠡ�⪥ ������� ᨬ����. ��㣨� ���������� ���ய����� ���ᠭ� � �ਫ������ �. ��ࠦ����� 4-9. --------------- ��।���� ����� SWAP(X, Y), ����� ���������� ����- ��ﬨ ��� �� ��㬥�� ⨯� INT. (� �⮬ ��砥 ������� ���筠� �������).
Характеристики
Тип файла документ
Документы такого типа открываются такими программами, как Microsoft Office Word на компьютерах Windows, Apple Pages на компьютерах Mac, Open Office - бесплатная альтернатива на различных платформах, в том числе Linux. Наиболее простым и современным решением будут Google документы, так как открываются онлайн без скачивания прямо в браузере на любой платформе. Существуют российские качественные аналоги, например от Яндекса.
Будьте внимательны на мобильных устройствах, так как там используются упрощённый функционал даже в официальном приложении от Microsoft, поэтому для просмотра скачивайте PDF-версию. А если нужно редактировать файл, то используйте оригинальный файл.
Файлы такого типа обычно разбиты на страницы, а текст может быть форматированным (жирный, курсив, выбор шрифта, таблицы и т.п.), а также в него можно добавлять изображения. Формат идеально подходит для рефератов, докладов и РПЗ курсовых проектов, которые необходимо распечатать. Кстати перед печатью также сохраняйте файл в PDF, так как принтер может начудить со шрифтами.