﻿<?php
echo "<p class=bmenu><span class=MsoHyperlink><a href=\"#_Toc219967950\">Глава 3\n";
echo "Выражения и Операторы<span style='color:windowtext;display:none;text-decoration:\n";
echo "none'>__ </span><span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>78</span></a></span></p>\n";
echo "\n";
echo "<p class=menu><span class=MsoHyperlink><span style='font-variant:normal !important;\n";
echo "text-transform:uppercase'><a href=\"#_Toc219967951\">3.1 Настольный калькулятор<span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>_ </span><span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>78</span></a></span></span></p>\n";
echo "\n";
echo "<p class=menu><span class=MsoHyperlink><a href=\"#_Toc219967952\">3.1.1\n";
echo "Программа синтаксического разбора<span style='color:windowtext;display:none;\n";
echo "text-decoration:none'>_ </span><span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>78</span></a></span></p>\n";
echo "\n";
echo "<p class=menu><span class=MsoHyperlink><a href=\"#_Toc219967953\">3.1.2\n";
echo "Функция ввода<span style='color:windowtext;display:none;text-decoration:none'>_ </span><span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>83</span></a></span></p>\n";
echo "\n";
echo "<p class=menu><span class=MsoHyperlink><a href=\"#_Toc219967954\">3.1.3\n";
echo "Таблица имен<span style='color:windowtext;display:none;text-decoration:none'>_ </span><span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>86</span></a></span></p>\n";
echo "\n";
echo "<p class=menu><span class=MsoHyperlink><a href=\"#_Toc219967955\">3.1.4\n";
echo "Обработка ошибок<span style='color:windowtext;display:none;text-decoration:\n";
echo "none'> </span><span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>88</span></a></span></p>\n";
echo "\n";
echo "<p class=menu><span class=MsoHyperlink><a href=\"#_Toc219967956\">3.1.5\n";
echo "Драйвер<span style='color:windowtext;display:none;text-decoration:none'>_ </span><span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>88</span></a></span></p>\n";
echo "\n";
echo "<p class=menu><span class=MsoHyperlink><a href=\"#_Toc219967957\">3.1.6\n";
echo "Параметры командной строки<span style='color:windowtext;display:none;\n";
echo "text-decoration:none'>_ </span><span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>89</span></a></span></p>\n";
echo "\n";
echo "<p class=menu><span class=MsoHyperlink><span style='font-variant:normal !important;\n";
echo "text-transform:uppercase'><a href=\"#_Toc219967958\">3.2 Краткая сводка операций<span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>_ </span><span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>90</span></a></span></span></p>\n";
echo "\n";
echo "<p class=menu><span class=MsoHyperlink><a href=\"#_Toc219967959\">3.2.1\n";
echo "Круглые скобки<span style='color:windowtext;display:none;text-decoration:none'>_ </span><span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>92</span></a></span></p>\n";
echo "\n";
echo "<p class=menu><span class=MsoHyperlink><a href=\"#_Toc219967960\">3.2.2\n";
echo "Порядок вычисления<span style='color:windowtext;display:none;text-decoration:\n";
echo "none'> </span><span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>93</span></a></span></p>\n";
echo "\n";
echo "<p class=menu><span class=MsoHyperlink><a href=\"#_Toc219967961\">3.2.3\n";
echo "Увеличение и уменьшение*<span style='color:windowtext;display:none;text-decoration:\n";
echo "none'>_ </span><span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>93</span></a></span></p>\n";
echo "\n";
echo "<p class=menu><span class=MsoHyperlink><a href=\"#_Toc219967962\">3.2.4 Побитовые\n";
echo "логические операции<span style='color:windowtext;display:none;text-decoration:\n";
echo "none'>_ </span><span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>94</span></a></span></p>\n";
echo "\n";
echo "<p class=menu><span class=MsoHyperlink><a href=\"#_Toc219967963\">3.2.5\n";
echo "Преобразование типа<span style='color:windowtext;display:none;text-decoration:\n";
echo "none'>_ </span><span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>95</span></a></span></p>\n";
echo "\n";
echo "<p class=menu><span class=MsoHyperlink><a href=\"#_Toc219967964\">3.2.6\n";
echo "Свободная память<span style='color:windowtext;display:none;text-decoration:\n";
echo "none'> </span><span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>97</span></a></span></p>\n";
echo "\n";
echo "<p class=menu><span class=MsoHyperlink><span style='font-variant:normal !important;\n";
echo "text-transform:uppercase'><a href=\"#_Toc219967965\">3.3 Сводка операторов<span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>_ </span><span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>100</span></a></span></span></p>\n";
echo "\n";
echo "<p class=menu><span class=MsoHyperlink><a href=\"#_Toc219967966\">3.3.1\n";
echo "Проверки<span style='color:windowtext;display:none;text-decoration:none'>_ </span><span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>101</span></a></span></p>\n";
echo "\n";
echo "<p class=menu><span class=MsoHyperlink><a href=\"#_Toc219967967\">3.3.2 Goto<span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>_ </span><span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>103</span></a></span></p>\n";
echo "\n";
echo "<p class=menu><span class=MsoHyperlink><span style='font-variant:normal !important;\n";
echo "text-transform:uppercase'><a href=\"#_Toc219967968\">3.4 Комментарии и\n";
echo "Выравнивание<span style='color:windowtext;display:none;text-decoration:none'>_ </span><span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>104</span></a></span></span></p>\n";
echo "\n";
echo "<p class=menu><span class=MsoHyperlink><span style='font-variant:normal !important;\n";
echo "text-transform:uppercase'><a href=\"#_Toc219967969\">3.5 Упражнения<span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>_ </span><span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>106</span></a></span></span></p>\n";
echo "\n";
echo "<h1><a name=\"_Toc219967950\">Глава 3 Выражения и Операторы</a></h1>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:151.8pt;margin-bottom:.0001pt;text-indent:138.6pt;text-autospace:\n";
echo "none'>С другой стороны, мы не можем игнорировать эффективность</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:316.8pt;text-autospace:none'>- Джон Бентли</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>С++ имеет небольшой, но гибкий набор различных\n";
echo "видов операторов для контроля потока управления в программе и бога­тый набор\n";
echo "операций для манипуляции данными. С наиболее общеп­ринятыми средствами вас\n";
echo "познакомит один законченный пример. После него приводится резюмирующий обзор\n";
echo "выражений и с до­вольно подробно описываются явное описание типа и работа со\n";
echo "свободной памятью. Потом представлена краткая сводка опера­ций, а в конце\n";
echo "обсуждаются стиль выравнивания* и комментарии.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-autospace:none'>--------------------</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>* Нам неизвестен русскоязычный термин,\n";
echo "эквивалентный ан­глийскому indentation. Иногда это называется отступами. (прим.\n";
echo "перев.)</p>\n";
echo "\n";
echo "<h2><a name=\"_Toc219967951\">3.1 Настольный калькулятор</a></h2>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>С операторами и выражениями вас познакомит\n";
echo "приведенная здесь программа настольного калькулятора, предоставляющего четыре\n";
echo "стандартные арифметические операции над числами с пла­вающей точкой.\n";
echo "Пользователь может также определять перемен­ные. Например, если вводится</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>r=2.5</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>area=pi*r*r</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:0cm;text-autospace:none'>(pi определено заранее), то\n";
echo "программа калькулятора напишет:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>2.5</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>19.635</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>где 2.5 - результат первой введенной строки, а\n";
echo "19.635 - результат второй.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>Калькулятор состоит из четырех основных частей: програм­мы\n";
echo "синтаксического разбора (parser'а), функции ввода, таблицы имен и управляющей\n";
echo "программы (драйвера). Фактически, это ми­ниатюрный компилятор, в котором\n";
echo "программа синтаксического разбора производит синтаксический анализ, функция\n";
echo "ввода осу­ществляет ввод и лексический анализ, в таблице имен хранится\n";
echo "долговременная информация, а драйвер распоряжается инициали­зацией, выводом и\n";
echo "обработкой ошибок. Можно было бы многое до­бавить в этот калькулятор, чтобы\n";
echo "сделать его более полезным, но в существующем виде эта программа и так\n";
echo "достаточно длинна (200 строк), и большая часть дополнительных возможностей\n";
echo "просто увеличит текст программы не давая дополнительного по­нимания применения\n";
echo "С++.</p>\n";
echo "\n";
echo "<h3><a name=\"_Toc219967952\">3.1.1 Программа синтаксического разбора</a></h3>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>Вот грамматика языка,\n";
echo "допускаемого калькулятором:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>program:</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>END                                        // END - </span>это конец\n";
echo "ввода</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:39.6pt;text-autospace:none'><span lang=EN-US>expr_list END</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>expr_list:</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>expression PRINT                    // PRINT - </span>это или<span\n";
echo "lang=EN-US> '\n' </span>или<span lang=EN-US> ';'</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:39.6pt;text-autospace:none'><span lang=EN-US>expression\n";
echo "PRINT expr_list</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>expression:</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>expression + term</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>expression - term</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:39.6pt;text-autospace:none'><span lang=EN-US>term</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>term:</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>term / primary</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>term * primary</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:39.6pt;text-autospace:none'><span lang=EN-US>primary</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>primary:</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'>NUMBER                                //\n";
echo "число с плавающей точкой в С++</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'>NAME                                     //\n";
echo "имя С++ за исключением '_'</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>NAME = expression</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>- primary</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:39.6pt;text-autospace:none'><span lang=EN-US>( expression )</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:33.0pt;margin-bottom:.0001pt;text-autospace:none'>Другими\n";
echo "словами,                 программа   есть  последовательность</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-autospace:none'>строк.\n";
echo "Каждая  строка состоит из одного или более  выражений,</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-autospace:none'>разделенных\n";
echo "запятой.  Основными элементами выражения являются</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-autospace:none'>числа,\n";
echo "имена  и операции *, /, +, - (унарный и бинарный) и =.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:0cm;text-autospace:none'>Имена не обязательно должны\n";
echo "описываться до использования.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Используемый метод обычно называется рекурсивным\n";
echo "спуском это популярный и простой нисходящий метод. В таком языке, как С++, в\n";
echo "котором вызовы функций относительно дешевы, этот метод к тому же и эффективен.\n";
echo "Для каждого правила вывода грамматики имеется функция, вызывающая другие\n";
echo "функции. Терминальные сим­волы (например, END, NUMBER, + и -) распознаются\n";
echo "лексическим анализатором get_token(), а нетерминальные символы распозна­ются\n";
echo "функциями синтаксического анализа expr(), term() и prim(). Как только оба операнда\n";
echo "(под)выражения известны, оно вычисляется; в настоящем компиляторе в этой точке\n";
echo "производит­ся генерация кода.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>Программа разбора для получения ввода использует функцию\n";
echo "get_token(). Значение последнего вызова get_token() находится в переменной\n";
echo "curr_tok; curr_tok имеет одно из значений пере­числения token_value:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>enum token_value (*</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>NAME NUMBER END</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>PLUS='+' MINUS='-' MUL='*' DIV='/'</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>PRINT=';' ASSIGN='=' LP='(' RP=')'</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>*);</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>token_value\n";
echo "curr_tok;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>В каждой функции разбора предполагается, что было\n";
echo "обра­щение к get_token(), и в curr_tok находится очередной символ, подлежащий\n";
echo "анализу. Это позволяет программе разбора загляды­вать на один лексический\n";
echo "символ (лексему) вперед и заставляет функцию разбора всегда читать на одну\n";
echo "лексему больше, чем ис­пользуется правилом, для обработки которого она была\n";
echo "вызвана. Каждая функция разбора вычисляет &quot;свое&quot; выражение и возвраща­ет\n";
echo "значение. Функция expr() обрабатывает сложение и вычита­ние; она состоит из\n";
echo "простого цикла, который ищет термы для сложения или вычитания:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>double expr()                                        //\n";
echo "складывает и вычитает</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>(*</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:39.6pt;text-autospace:none'><span lang=EN-US>double left =\n";
echo "term();</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>for(;;)                                          // ``</span>навсегда<span\n";
echo "lang=EN-US>``</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:66.0pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>switch(curr_tok) (*</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:66.0pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>case PLUS:</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:92.4pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>get_token(); // </span>ест<span lang=EN-US> '+'</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:92.4pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>left += term();</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:92.4pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>break;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:66.0pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>case MINUS:</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:92.4pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>get_token(); // </span>ест<span lang=EN-US> '-'</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:92.4pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>left -= term();</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:92.4pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>break;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:66.0pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>default:</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:92.4pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>return left;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:19.8pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>     </span>*)</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>*)</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Фактически сама функция делает не очень много. В\n";
echo "манере, достаточно типичной для функций более высокого уровня в боль­ших\n";
echo "программах, она вызывает для выполнения работы другие функции. Заметьте, что\n";
echo "выражение 2-3+4 вычисляется как (2-3)+ 4, как указано грамматикой.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:0cm;text-align:justify;text-indent:33.0pt;text-autospace:\n";
echo "none'>Странная запись for(;;) - это стандартный способ задать бесконечный цикл.\n";
echo "Можно произносить это как &quot;навсегда&quot;*. Это вырожденная форма\n";
echo "оператора for, альтернатива - while(1). Вы­полнение оператора switch\n";
echo "повторяется до тех пор, пока не бу­дет найдено ни + ни -, и тогда выполняется\n";
echo "оператор return в случае default.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-autospace:none'>--------------------</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:0cm;text-autospace:none'>* игра слов: &quot;for&quot; -\n";
echo "&quot;forever&quot; (навсегда). (прим. перев.)</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Операции +=, -= используются для осуществления\n";
echo "сложения и вычитания. Можно было бы не изменяя смысла программы ис­пользовать\n";
echo "left=left+term() и left=left-term(). Однако left+= term() и left-=term() не\n";
echo "только короче, но к тому же явно вы­ражают подразумеваемое действие. Для\n";
echo "бинарной операции @ вы­ражение x@=y означает x=x@y за исключением того, что x\n";
echo "вычис­ляется только один раз. Это применимо к бинарным операциям</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>+ - * / % &amp; ! ^ &lt;&lt;\n";
echo "&gt;&gt;</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:0cm;text-autospace:none'>поэтому возможны следующие операции\n";
echo "присваивания:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>+= -= *= /= %= &amp;= != ^=\n";
echo "&lt;&lt;= &gt;&gt;=</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Каждая является отдельной лексемой, поэтому a+ =1\n";
echo "является синтаксической ошибкой из-за пробела между + и =. (% является\n";
echo "операцией взятия по модулю; &amp;,! и ^ являются побито­выми операциями И, ИЛИ\n";
echo "и исключающее ИЛИ; &lt;&lt; и &gt;&gt; являются операциями левого и правого\n";
echo "сдвига). Функции term() и get_token() должны быть описаны до expr().</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>Как организовать программу в виде набора файлов, обсуж­дается\n";
echo "в Главе 4. За одним исключением все описания в данной программе настольного\n";
echo "калькулятора можно упорядочить так, чтобы все описывалось ровно один раз и до\n";
echo "использования. Иск­лючением является expr(), которая обращается к term(), кото­рая\n";
echo "обращается к prim(), которая в свою очередь обращается к expr(). Этот круг надо\n";
echo "как-то разорвать;</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:0cm;text-autospace:none'>Описание</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>double expr(); // без этого\n";
echo "нельзя</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:0cm;text-autospace:none'>перед prim() прекрасно справляется\n";
echo "с этим.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Функция term() аналогичным образом обрабатывает\n";
echo "умноже­ние и сложение:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>double term()\n";
echo "// умножает и складывает</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>(*</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>double left = prim();</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>for(;;)</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:66.0pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>switch(curr_tok) (*</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:66.0pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>case MUL:</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:92.4pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>get_token(); // </span>ест<span lang=EN-US> '*'</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:92.4pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>left *= prim();</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:92.4pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>break;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:66.0pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>case DIV:</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:92.4pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>get_token(); // </span>ест<span lang=EN-US> '/'</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:92.4pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>double d = prim();</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:92.4pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>if (d == 0) return error(&quot;</span>деление на<span lang=EN-US>\n";
echo "0&quot;);</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:92.4pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>left /= d;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:92.4pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>break;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:66.0pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>default:</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:92.4pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>return left;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:19.8pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>     </span>*)</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>*)</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Проверка, которая делается, чтобы удостовериться в\n";
echo "том, что нет деления на ноль, необходима, поскольку результат де­ления на ноль\n";
echo "неопределен и как правило является роковым. Функция error(char*) будет описана\n";
echo "позже. Переменная d вво­дится в программе там, где она нужна, и сразу же\n";
echo "инициализи­руется. Во многих языках описание может располагаться только в\n";
echo "голове блока. Это ограничение может приводить к довольно скверному искажению\n";
echo "стиля программирования и/или излишним ошибкам. Чаще всего неинициализированные\n";
echo "локальные переменные являются просто признаком плохого стиля; исключением\n";
echo "являются переменные, подлежащие инициализации посредством ввода, и пе­ременные\n";
echo "векторного или структурного типа, которые нельзя удобно инициализировать одними\n";
echo "присваиваниями*. Заметьте, что = является операцией присваивания, а ==\n";
echo "операцией сравнения.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-autospace:none'>--------------------</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-autospace:none'>* В  языке\n";
echo "немного лучше этого с этими исключениями тоже надо</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:0cm;text-autospace:none'>бы справляться. (прим. автора)</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Функция prim, обрабатывающая primary, написана в\n";
echo "основ­ном в том же духе, не считая того, что немного реальной рабо­ты в ней\n";
echo "все-таки выполняется, и нет нужды в цикле, поскольку мы попадаем на более\n";
echo "низкий уровень иерархии вызовов:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>double prim()                         // </span>обрабатывает<span\n";
echo "lang=EN-US> primary (</span>первичные<span lang=EN-US>)</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>(*</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>switch (curr_tok) (*</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'>case NUMBER: \n";
echo "// константа с плавающей точкой</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:66.0pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>get_token();</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:66.0pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>return number_value;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>case NAME:</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:66.0pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>if (get_token() == ASSIGN) (*</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:92.4pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>name* n = insert(name_string);</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:92.4pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>get_token();</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:92.4pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>n-&gt;value = expr();</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:92.4pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>return n-&gt;value;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:19.8pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>     *)</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:66.0pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>return look(name-string)-&gt;value;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'>case MINUS:  \n";
echo "// унарный минус</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:66.0pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>get_token();</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:66.0pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>return -prim();</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>case LP:</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:66.0pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>get_token();</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:66.0pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>double e = expr();</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:66.0pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>if (curr_tok != RP) return error(&quot;</span>должна быть<span\n";
echo "lang=EN-US> )&quot;);</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:66.0pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>get_token();</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:66.0pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>return e;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>case END:</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:66.0pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>return 1;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>default:</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:66.0pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>return error(&quot;</span>должно быть<span lang=EN-US>\n";
echo "primary&quot;);</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'>*)</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>*)</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>При обнаружении NUMBER (то есть, константы с\n";
echo "плавающей точкой), возвращается его значение. Функция ввода get_token()\n";
echo "помещает значение в глобальную переменную number_value. Ис­пользование в\n";
echo "программе глобальных переменных часто указывает на то, что структура не совсем\n";
echo "прозрачна, что применялась не­которого рода оптимизация. Здесь дело обстоит\n";
echo "именно так. Те­оретически лексический символ обычно состоит из двух частей:\n";
echo "значения, определяющего вид лексемы (в данной программе token _value), и (если\n";
echo "необходимо) значения лексемы. У нас имеется только одна простая переменная\n";
echo "curr_tok, поэтому для хранения значения последнего считанного NUMBER\n";
echo "понадобилась глобальная переменная переменная number_value. Это работает только\n";
echo "пото­му, что калькулятор при вычислениях использует только одно число перед\n";
echo "чтением со входа другого.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>Так же, как значение последнего встреченного NUMBER хра­нится\n";
echo "в number_value, в name_string в виде символьной строки хранится представление\n";
echo "последнего прочитанного NAME. Перед тем, как что-либо сделать с именем,\n";
echo "калькулятор должен загля­нуть вперед, чтобы посмотреть, осуществляется ли\n";
echo "присваивание ему, или оно просто используется. В обоих случаях надо спра­виться\n";
echo "в таблице имен. Сама таблица описывается в #3.1.3; здесь надо знать только, что\n";
echo "она состоит из элементов вида:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>srtuct name (*</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>char* string;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>char* next;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>double value;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>*)</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-autospace:none'>где next\n";
echo "используется только функциями, которые поддерживают</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:0cm;text-autospace:none'>работу с таблицей:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>name* look(char*);</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>name*\n";
echo "insert(char*);</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Обе возвращают указатель на name, соответствующее\n";
echo "пара­метру - символьной строке; look() выражает недовольство, если имя не было\n";
echo "определено. Это значит, что в калькуляторе можно использовать имя без\n";
echo "предварительного описания, но первый раз оно должно использоваться в левой\n";
echo "части присваивания.</p>\n";
echo "\n";
echo "<h3><a name=\"_Toc219967953\">3.1.2 Функция ввода</a></h3>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Чтение ввода - часто самая запутанная часть\n";
echo "программы. Причина в том, что если программа должна общаться с челове­ком, то\n";
echo "она должна справляться с его причудами, условностями и внешне случайными\n";
echo "ошибками. Попытки заставить человека вес­ти себя более удобным для машины\n";
echo "образом часто (и справедли­во) рассматриваются как оскорбительные. Задача\n";
echo "низкоуровневой программы ввода состоит в том, чтобы читать символы по одному и\n";
echo "составлять из них лексические символы более высокого уров­ня. Далее эти лексемы\n";
echo "служат вводом для программ более высо­кого уровня. У нас ввод низкого уровня\n";
echo "осуществляется get_token(). Обнадеживает то, что написание программ ввода\n";
echo "низкого уровня не является ежедневной работой; в хорошей сис­теме для этого\n";
echo "будут стандартные функции.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>Для калькулятора правила сознательно были выбраны таки­ми,\n";
echo "чтобы функциям по работе с потоками было неудобно эти правила обрабатывать;\n";
echo "незначительные изменения в определении лексем сделали бы get_token() обманчиво\n";
echo "простой.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Первая сложность состоит в том, что символ новой строки\n";
echo "'\n' является для калькулятора существенным, а функции работы с потоками\n";
echo "считают его символом пропуска. То есть, для этих функций '\n' значим только как\n";
echo "ограничитель лексемы. Чтобы преодолеть это, надо проверять пропуски (пробел,\n";
echo "символы та­буляции и т.п.):</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>char ch</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>do (* //\n";
echo "пропускает пропуски за исключением '\n'</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>if(!cin.get(ch)) return curr_tok = END;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>*) while\n";
echo "(ch!='\n' &amp;&amp; isspace(ch));</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Вызов cin.get(ch) считывает один символ из\n";
echo "стандартного потока ввода в ch. Проверка if(!cin.get(ch)) не проходит в случае,\n";
echo "если из cin нельзя считать ни одного символа. В этом случае возвращается END,\n";
echo "чтобы завершить сеанс работы кальку­лятора. Используется операция ! (НЕ),\n";
echo "поскольку get() возвра­щает в случае успеха ненулевое значение.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>Функция (inline) isspace() из &lt;ctype.h&gt; обеспечивает\n";
echo "стандартную проверку на то, является ли символ пропуском (#8.4.1); isspace(c)\n";
echo "возвращает ненулевое значение, если c является символом пропуска, и ноль в\n";
echo "противном случае. Про­верка реализуется в виде поиска в таблице, поэтому\n";
echo "использо­вание isspace() намного быстрее, чем проверка на отдельные символы\n";
echo "пропуска; это же относится и к функциям isalpha(), isdigit() и isalnum(),\n";
echo "которые используются в get_token().</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>После того, как пустое место пропущено, следующий символ\n";
echo "используется для определения того, какого вида какого вида лексема приходит.\n";
echo "Давайте сначала рассмотрим некоторые случаи отдельно, прежде чем приводить всю\n";
echo "функцию. Ограничители лек­сем '\n' и ';' обрабатываются так:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>switch (ch) (*</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>case ';':</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>case '\n':</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'>cin &gt;&gt;\n";
echo "WS; // пропустить пропуск</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:39.6pt;text-autospace:none'><span lang=EN-US>return\n";
echo "curr_tok=PRINT;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Пропуск пустого места делать необязательно, но он\n";
echo "позво­ляет избежать повторных обращений к get_token(). WS - это стандартный\n";
echo "пропусковый объект, описанный в &lt;stream.h&gt;; он используется только для\n";
echo "сброса пропуска. Ошибка во вводе или конец ввода не будут обнаружены до\n";
echo "следующего обращения к get _token(). Обратите внимание на то, как можно\n";
echo "использовать несколько меток case (случаев) для одной и той же последова­тельности\n";
echo "операторов, обрабатывающих эти случаи. В обоих слу­чаях возвращается лексема\n";
echo "PRINT и помещается в curr_tok.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>Числа обрабатываются так:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>case '0': case '1': case '2': case '3': case '4':</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>case '5': case '6': case '7': case '8': case '9':</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>case '.':</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>cin.putback(ch);</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>cin &gt;&gt; number_value;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:39.6pt;text-autospace:none'><span lang=EN-US>return\n";
echo "curr_tok=NUMBER;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Располагать метки случаев case горизонтально, а не\n";
echo "вер­тикально, не очень хорошая мысль, поскольку читать это гораздо труднее, но\n";
echo "отводить по одной строке на каждую цифру нудно.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>Поскольку операция &gt;&gt; определена также и для чтения\n";
echo "констант с плавающей точкой в double, программирование этого не составляет\n";
echo "труда: сперва начальный символ (цифра или точ­ка) помещается обратно в cin, а\n";
echo "затем можно считывать конс­танту в number_value.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>Имя, то есть лексема NAME, определяется как буква, за\n";
echo "которой возможно следует несколько букв или цифр:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>if (isalpha(ch)) (*</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>char* p = name_string;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>*p++ = ch;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>while (cin.get(ch) &amp;&amp; isalnum(ch)) *p++ = ch;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>cin.putback(ch);</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>*p = 0;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>return curr_tok=NAME;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>*)</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Эта часть строит в name_string строку,\n";
echo "заканчивающуюся нулем. Функции isalpha() и isalnum() заданы в &lt;ctype.h&gt;;\n";
echo "isalnum(c) не ноль, если c буква или цифра, ноль в противном случае.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>Вот, наконец, функция ввода\n";
echo "полностью:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>token_value get_token()</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>(*</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:39.6pt;text-autospace:none'>char ch;</p>\n";
echo "\n";
echo "<p class=MsoNormal align=center style='margin-right:10.55pt;text-align:center;\n";
echo "text-autospace:none'>do (* // пропускает пропуски за исключением '\n'</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:66.0pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>if(!cin.get(ch)) return curr_tok = END;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:39.6pt;text-autospace:none'><span lang=EN-US>*) while\n";
echo "(ch!='\n' &amp;&amp; isspace(ch));</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>switch (ch) (*</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>case ';':</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>case '\n':</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:66.0pt;margin-bottom:.0001pt;text-autospace:none'>cin &gt;&gt;\n";
echo "WS; // пропустить пропуск</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:66.0pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>return curr_tok=PRINT;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>case '*':</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>case '/':</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>case '+':</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>case '-':</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>case '(':</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>case ')':</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>case '=':</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:66.0pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>return curr_tok=ch;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>case '0': case '1': case '2': case '3': case '4':</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>case '5': case '6': case '7': case '8': case '9':</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>case '.':</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:66.0pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>cin.putback(ch);</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:66.0pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>cin &gt;&gt; number_value;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:66.0pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>return curr_tok=NUMBER;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>default: // NAME, NAME= </span>или ошибка</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:66.0pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>if (isalpha(ch)) (*</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:92.4pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>char* p = name_string;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:92.4pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>*p++ = ch;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:92.4pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>while (cin.get(ch) &amp;&amp; isalnum(ch)) *p++ = ch;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:92.4pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>cin.putback(ch);</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:92.4pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>*p = 0;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:92.4pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>return curr_tok=NAME;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:19.8pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>     </span>*)</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:66.0pt;margin-bottom:.0001pt;text-autospace:none'>error(&quot;плохая\n";
echo "лексема&quot;);</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:66.0pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>return curr_tok=PRINT;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'>*)</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>*)</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:0cm;text-align:justify;text-indent:33.0pt;text-autospace:\n";
echo "none'>Поскольку token_value (значение лексемы) операции было определено как\n";
echo "целое значение этой операции*, обработка всех операций тривиальна.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-autospace:none'>--------------------</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:0cm;text-autospace:none'>* знака этой операции. (прим.\n";
echo "перев.)</p>\n";
echo "\n";
echo "<h3><a name=\"_Toc219967954\">3.1.3 Таблица имен</a></h3>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>К таблице имен доступ осуществляется с помощью\n";
echo "одной функции</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>name*\n";
echo "look(char* p, int ins =0);</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Ее второй параметр указывает, нужно ли сначала\n";
echo "поместить строку символов в таблицу. Инициализатор =0 задает параметр, который\n";
echo "надлежит использовать по умолчанию, когда look() вы­зывается с одним\n";
echo "параметром. Это дает удобство записи, когда look(&quot;sqrt2&quot;) означает\n";
echo "look(&quot;sqrt2&quot;,0), то есть просмотр, без помещения в таблицу. Чтобы\n";
echo "получить такое же удобство записи для помещения в таблицу, определяется вторая\n";
echo "функция:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>inline name*\n";
echo "insert(char* s) (* return look(s,1);*)</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>Как уже отмечалось раньше,\n";
echo "элементы этой таблицы имеют тип:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>srtuct name (*</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>char* string;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>char* next;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>double value;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>*)</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-indent:13.2pt;text-autospace:\n";
echo "none'>Член next используется только для сцепления вместе имен в таблице.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-indent:13.2pt;text-autospace:\n";
echo "none'>Сама таблица - это просто вектор указателей на объекты типа name:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>const TBLSZ = 23;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>name*\n";
echo "table[TBLSZ];</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Поскольку все статические объекты инициализируются\n";
echo "ну­лем, это тривиальное описание таблицы table гарантирует также надлежащую\n";
echo "инициализацию.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>Для нахождения элемента в таблице в look() принимается\n";
echo "простой алгоритм хэширования (имена с одним и тем же хэш-ко­дом зацепляются\n";
echo "вместе):</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>int ii = 0;\n";
echo "// хэширование</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>char* pp = p;</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>while (*pp) ii = ii&lt;&lt;1 ^ *pp++;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>if (ii &lt; 0) ii = -ii;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>ii %= TBLSZ;</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>То есть, с помощью исключающего ИЛИ каждый символ\n";
echo "во входной строке &quot;добавляется&quot; к ii (&quot;сумме&quot; предыдущих\n";
echo "симво­лов). Бит в x^y устанавливается единичным тогда и только тог­да, когда\n";
echo "соответствующие биты в x и y различны. Перед приме­нением в символе\n";
echo "исключающего ИЛИ, ii сдвигается на один бит влево, чтобы не использовать в\n";
echo "слове только один байт. Это можно было написать и так:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>ii &lt;&lt;= 1;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>ii ^= *pp++;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-indent:33.0pt;text-autospace:\n";
echo "none'>Кстати, применение ^ лучше и быстрее, чем +. Сдвиг важен для получения\n";
echo "приемлемого хэш-кода в обоих случаях. Операторы</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>if (ii &lt;\n";
echo "0) ii = -ii;</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>ii %= TBLSZ; </p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>обеспечивают, что ii будет лежать в диапазоне\n";
echo "0...TBLSZ- 1; % - это операция взятия по модулю (еще называемая получе­нием\n";
echo "остатка).</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>Вот функция полностью:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>extern int strlen(const char*);</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>extern int strcmp(const char*, const char*);</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>extern int\n";
echo "strcpy(const char*, const char*);</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>name* look(char* p, int ins =0)</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>(*</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>int ii = 0; // </span>хэширование</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>char* pp = p;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>while (*pp) ii = ii&lt;&lt;1 ^ *pp++;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>if (ii &lt; 0) ii = -ii;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:39.6pt;text-autospace:none'><span lang=EN-US>ii %= TBLSZ;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>for (name* n=table[ii]; n; n=n-&gt;next) // </span>поиск</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:66.0pt;text-autospace:none'><span lang=EN-US>if\n";
echo "(strcmp(p,n-&gt;string) == 0) return n;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:39.6pt;text-autospace:none'><span lang=EN-US>if (ins == 0)\n";
echo "error(&quot;</span>имя не найдено<span lang=EN-US>&quot;);</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>name* nn = new name; // </span>вставка</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>nn-&gt;string = new char[strlen(p)+1];</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>strcpy(nn-&gt;string,p);</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>nn-&gt;value = 1;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>nn-&gt;next = table[ii];</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>table[ii] = nn;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'>return nn;</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>*)</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-indent:33.0pt;text-autospace:\n";
echo "none'>После вычисления хэш-кода ii имя находится простым прос­мотром через поля\n";
echo "next.  Проверка каждого name осуществляется с помощью стандартной функции\n";
echo "strcmp().  Если строка найдена, возвращается ее name, иначе добавляется новое\n";
echo "name.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>Добавление нового name включает в себя создание нового\n";
echo "объекта в свободной памяти с помощью операции new (см. #3.2.6), его\n";
echo "инициализацию, и добавление его к списку имен. Последнее осуществляется просто\n";
echo "путем помещения нового имени в голову списка, поскольку это можно делать даже\n";
echo "не проверяя, имеется список, или нет. Символьную строку для имени тоже нужно\n";
echo "сохранить в свободной памяти. Функция strlen() исполь­зуется для определения\n";
echo "того, сколько памяти нужно, new - для выделения этой памяти, и strcpy() - для\n";
echo "копирования строки в память.</p>\n";
echo "\n";
echo "<h3><a name=\"_Toc219967955\">3.1.4 Обработка ошибок</a></h3>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Поскольку программа так проста, обработка ошибок не\n";
echo "сос­тавляет большого труда. Функция обработки ошибок просто счи­тает ошибки,\n";
echo "пишет сообщение об ошибке и возвращает управле­ние обратно:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>int\n";
echo "no_of_errors;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>double error(char* s) (*</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>cerr &lt;&lt; &quot;error: &quot; &lt;&lt; s &lt;&lt;\n";
echo "&quot;\n&quot;;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>no_of_errors++;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'>return 1;</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>*)</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:33.0pt;margin-bottom:.0001pt;text-autospace:none'>Возвращается\n";
echo "значение   потому,                            что   ошибки   обычно</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-autospace:none'>встречаются\n";
echo "в середине вычисления выражения,  и поэтому  надо</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-autospace:\n";
echo "none'>либо полностью прекращать вычисление, либо возвращать значе­ние, которое\n";
echo "по всей видимости не должно вызвать последующих ошибок. Для простого\n";
echo "калькулятора больше подходит последнее. Если бы get_token() отслеживала номера\n";
echo "строк, то error() мог­ла бы сообщать пользователю, где приблизительно\n";
echo "обнаружена ошибка. Это наверняка было бы полезно, если бы калькулятор\n";
echo "использовался неитерактивно.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>Часто бывает так, что после появления ошибки программа\n";
echo "должна завершиться, поскольку нет никакого разумного пути продолжить работу.\n";
echo "Это можно сделать с помощью вызова exit(), которая очищает все вроде потоков\n";
echo "вывода (#8.3.2), а затем завершает программу используя свой параметр в качестве\n";
echo "ее возвращаемого значения. Более радикальный способ завершения программы - это\n";
echo "вызов abort(), которая обрывает выполнение сразу же или сразу после сохранения\n";
echo "где-то информации для от­ладчика (дамп памяти); о подробностях справьтесь,\n";
echo "пожалуйста, в вашем руководстве.</p>\n";
echo "\n";
echo "<h3><a name=\"_Toc219967956\">3.1.5 Драйвер</a></h3>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Когда все части программы на месте, нам нужен\n";
echo "только драйвер для инициализации и всего того, что связано с запус­ком. В этом\n";
echo "простом примере main() может работать так:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>int main()</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>(*</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'>// вставить\n";
echo "предопределенные имена:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>insert(&quot;pi&quot;)-&gt;value = 3.1415926535897932385;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:39.6pt;text-autospace:none'><span lang=EN-US>insert(&quot;e&quot;)-&gt;value\n";
echo "= 2.7182818284590452354;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>while (cin) (*</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:66.0pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>get_token();</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:66.0pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>if (curr_tok == END) break;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:66.0pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>if (curr_tok == PRINT) continue;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:66.0pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>cout &lt;&lt; expr() &lt;&lt; &quot;\n&quot;;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>*)</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>return no_of_errors;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>*)</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Принято обычно, что main() возвращает ноль при\n";
echo "нормаль­ном завершении программы и не ноль в противном случае, поэто­му это\n";
echo "прекрасно может сделать возвращение числа ошибок. В данном случае оказывается,\n";
echo "что инициализация нужна только для введения предопределенных имен в таблицу\n";
echo "имен.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-indent:33.0pt;text-autospace:\n";
echo "none'>Основная работа цикла - читать выражения и писать ответ. Это делает\n";
echo "строка:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>cout &lt;&lt;\n";
echo "expr() &lt;&lt; &quot;\n&quot;;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "79.8pt;margin-left:0cm;text-align:justify;text-indent:33.0pt;text-autospace:\n";
echo "none'>Проверка cin на каждом проходе цикла обеспечивает завер­шение программы в\n";
echo "случае, если с потоком ввода что-то не так, а проверка на END обеспечивает\n";
echo "корректный выход из цикла, когда get_token() встречает конец файла. Оператор\n";
echo "break осу­ществляет выход из ближайшего содержащего его оператора switch или\n";
echo "оператора цикла (то есть, оператора for, оператора while или оператора do).\n";
echo "Проверка на PRINT (то есть, на '\n' или ';') освобождает expr() от обязанности\n";
echo "обрабатывать пус­тые выражения. Оператор continue равносилен переходу к самому\n";
echo "концу цикла, поэтому в данном случае </p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>while (cin) (*</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>// ...</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>if (curr_tok == PRINT) continue;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>cout &lt;&lt; expr() &lt;&lt; &quot;\n&quot;;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>*)</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:0cm;text-autospace:none'>эквивалентно</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>while (cin)\n";
echo "(*</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>// ...</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>if (curr_tok == PRINT) goto end_of_loop;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>cout &lt;&lt; expr() &lt;&lt; &quot;\n&quot;;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>end_of_loop</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>*)</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>Более подробно циклы описываются\n";
echo "в #с.9.</p>\n";
echo "\n";
echo "<h3><a name=\"_Toc219967957\">3.1.6 Параметры командной строки</a></h3>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>После того, как программа была написана и\n";
echo "оттестирована, я заметил, что часто набирать выражения на клавиатуре в стан­дартный\n";
echo "ввод надоедает, поскольку обычно использование прог­раммы состоит в вычислении\n";
echo "одного выражения. Если бы можно было представлять это выражение как параметр\n";
echo "командной стро­ки, не приходилось бы так много нажимать на клавиши.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:33.0pt;margin-bottom:.0001pt;text-autospace:none'>Как уже  \n";
echo "говорилось,                       программа  запускается  вызовом</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-autospace:none'>main().\n";
echo "Когда  это происходит,  main() получает два параметра</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-autospace:none'>указывающий\n";
echo "число параметров, обычно называемый argc и вектор</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-autospace:\n";
echo "none'>параметров, обычно называемый argv. Параметры - это символь­ные строки,\n";
echo "поэтому argv имеет тип char*[argc]. Имя программы (так, как оно стоит в\n";
echo "командной строке) передается в качестве argv[0], поэтому argc всегда не меньше\n";
echo "единицы. Например, в случае команды</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>dc 150/1.1934</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:0cm;text-autospace:none'>параметры имеют значения:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>argc 2</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>argv[0] &quot;dc&quot;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>argv[1] &quot;150/1.1934&quot;</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Научиться пользоваться параметрами командной строки\n";
echo "нес­ложно. Сложность состоит в том, как использовать их без пе­репрограммирования.\n";
echo "В данном случае это оказывается совсем просто, поскольку поток ввода можно\n";
echo "связать с символьной строкой, а не с файлом (#8.5). Например, можно заставить\n";
echo "cin читать символы из стандартного ввода:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>int main(int argc, char* argv[])</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>(*</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'>switch(argc)\n";
echo "(*</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'>case 1: //\n";
echo "читать из стандартного ввода</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:66.0pt;margin-bottom:.0001pt;text-autospace:none'>break;</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'>case 2: //\n";
echo "читать параметр строку</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:66.0pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>cin = *new istream(strlen(argv[1]),argv[1]);</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:66.0pt;margin-bottom:.0001pt;text-autospace:none'>break;</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'>default:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:66.0pt;margin-bottom:.0001pt;text-autospace:none'>error(&quot;слишком\n";
echo "много параметров&quot;);</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:66.0pt;margin-bottom:.0001pt;text-autospace:none'>return 1;</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'>*)</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'>// как раньше</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>*)</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Программа осталась без изменений, за исключением\n";
echo "добав­ления в main() параметров и использования этих параметров в операторе\n";
echo "switch. Можно было бы легко модифицировать main() так, чтобы она получала\n";
echo "несколько параметров командной стро­ки, но это оказывается ненужным, особенно\n";
echo "потому, что нес­колько выражений можно передавать как один параметр:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>dc\n";
echo "&quot;rate=1.1934;150/rate;19.75/rate;217/rate&quot;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Здесь кавычки необходимы, поскольку ; является\n";
echo "раздели­телем команд в системе UNIX.</p>\n";
echo "\n";
echo "<h2><a name=\"_Toc219967958\">3.2 Краткая сводка операций</a></h2>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Операции С++ подробно и систематически описываются\n";
echo "в #с. 7; прочитайте, пожалуйста, этот раздел. Здесь же приводится операция\n";
echo "краткая сводка и некоторые примеры. После каждой операции приведено одно или\n";
echo "более ее общеупотребительных наз­ваний и пример ее использования. В этих\n";
echo "примерах имя_класса - это имя класса, член - имя члена, объект - выражение,\n";
echo "дающее в результате объект класса, указатель - выражение, дающее в результате\n";
echo "указатель, выр - выражение, а lvalue - выражение, денотирующее неконстантный\n";
echo "объект. Тип может быть совершенно произвольным именем типа (со * () и т.п.)\n";
echo "только когда он стоит в скобках, во всех остальных случаях существуют ограни­чения.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>Унарные операции и операции присваивания правоассоциа­тивны,\n";
echo "все остальные левоассоциативны. Это значит, что a=b=c означает a=(b=c), a+b+c\n";
echo "означает (a+b)+c, и *p++ означает *(p ++), а не (*p)++.</p>\n";
echo "\n";
echo "<p class=MsoNormal align=center style='margin-top:13.3pt;margin-right:10.55pt;\n";
echo "margin-bottom:6.65pt;margin-left:0cm;text-align:center;text-autospace:none'><u>Сводка\n";
echo "Операций (часть 1) </u></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:19.8pt;margin-bottom:.0001pt;text-autospace:none'>:: разрешение\n";
echo "области видимости имя_класса :: член</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "6.65pt;margin-left:19.8pt;text-autospace:none'><u>:: глобальное :: имя </u></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:19.8pt;margin-bottom:.0001pt;text-autospace:none'>-&gt; выбор\n";
echo "члена указатель-&gt;член</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:19.8pt;margin-bottom:.0001pt;text-autospace:none'>[] индексация\n";
echo "указатель [ выр ]</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:19.8pt;margin-bottom:.0001pt;text-autospace:none'>() вызов\n";
echo "функции выр (список_выр)</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:19.8pt;margin-bottom:.0001pt;text-autospace:none'>() построение\n";
echo "значения тип (список_выр)</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:19.8pt;margin-bottom:.0001pt;text-autospace:none'>sizeof размер\n";
echo "объекта sizeof выр</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "6.65pt;margin-left:19.8pt;text-autospace:none'><u>sizeof размер типа sizeof (\n";
echo "тип ) </u></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:19.8pt;margin-bottom:.0001pt;text-autospace:none'>++ приращение\n";
echo "после lvalue++</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:19.8pt;margin-bottom:.0001pt;text-autospace:none'>++ приращение\n";
echo "до ++lvalue</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:19.8pt;margin-bottom:.0001pt;text-autospace:none'>-- уменьшение\n";
echo "после lvalue--</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:19.8pt;margin-bottom:.0001pt;text-autospace:none'>-- уменьшение\n";
echo "до --lvalue</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:19.8pt;margin-bottom:.0001pt;text-autospace:none'>~ дополнение\n";
echo "~ выр</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:19.8pt;margin-bottom:.0001pt;text-autospace:none'>! не ! выр</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:19.8pt;margin-bottom:.0001pt;text-autospace:none'>- унарный\n";
echo "минус - выр</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:19.8pt;margin-bottom:.0001pt;text-autospace:none'>+ унарный\n";
echo "плюс + выр</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:19.8pt;margin-bottom:.0001pt;text-autospace:none'>&amp; адрес\n";
echo "объекта &amp; lvalue</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:19.8pt;margin-bottom:.0001pt;text-autospace:none'>*\n";
echo "разыменование * выр</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:19.8pt;margin-bottom:.0001pt;text-autospace:none'>new создание\n";
echo "(размещение) new тип</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:19.8pt;margin-bottom:.0001pt;text-autospace:none'>delete\n";
echo "уничтожение (освобождение) delete указатель</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:19.8pt;margin-bottom:.0001pt;text-autospace:none'>delete[]\n";
echo "уничтожение вектора delete[ выр ] указатель</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "6.65pt;margin-left:19.8pt;text-autospace:none'><u>() приведение (преобразование\n";
echo "типа) ( тип ) выр </u></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:19.8pt;margin-bottom:.0001pt;text-autospace:none'>* умножение\n";
echo "выр * выр</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:19.8pt;margin-bottom:.0001pt;text-autospace:none'>/ деление выр\n";
echo "/ выр</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "6.65pt;margin-left:19.8pt;text-autospace:none'><u>% взятие по модулю (остаток)\n";
echo "выр % выр </u></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:19.8pt;margin-bottom:.0001pt;text-autospace:none'>+ сложение\n";
echo "(плюс) выр + выр</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "6.65pt;margin-left:19.8pt;text-autospace:none'><u>- вычитание (минус) выр - выр\n";
echo "</u></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:19.8pt;margin-bottom:.0001pt;text-autospace:none'>&lt;&lt;\n";
echo "сдвиг влево lvalue &lt;&lt; выр</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "6.65pt;margin-left:19.8pt;text-autospace:none'><u>&gt;&gt; сдвиг вправо lvalue\n";
echo "&gt;&gt; выр </u></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:19.8pt;margin-bottom:.0001pt;text-autospace:none'>&lt; меньше\n";
echo "выр &lt; выр</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:19.8pt;margin-bottom:.0001pt;text-autospace:none'>&lt;= меньше\n";
echo "или равно выр &lt;= выр</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:19.8pt;margin-bottom:.0001pt;text-autospace:none'>&gt; больше\n";
echo "выр &gt; выр</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "6.65pt;margin-left:19.8pt;text-autospace:none'><u>&gt;= больше или равно выр\n";
echo "&gt;= выр </u></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:19.8pt;margin-bottom:.0001pt;text-autospace:none'>== равно выр\n";
echo "== выр</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "6.65pt;margin-left:19.8pt;text-autospace:none'><u>!= не равно выр != выр </u></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "6.65pt;margin-left:19.8pt;text-autospace:none'><u>&amp; побитовое И выр &amp;\n";
echo "выр </u></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "6.65pt;margin-left:19.8pt;text-autospace:none'><u>^ побитовое исключающее ИЛИ\n";
echo "выр ^ выр </u></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "6.65pt;margin-left:19.8pt;text-autospace:none'><u>! побитовое включающее ИЛИ\n";
echo "выр ! выр </u></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "6.65pt;margin-left:19.8pt;text-autospace:none'><u>&amp;&amp; логическое И выр\n";
echo "&amp;&amp; выр </u></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "6.65pt;margin-left:19.8pt;text-autospace:none'><u>!! логическое включающее ИЛИ\n";
echo "выр !! выр </u></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "6.65pt;margin-left:19.8pt;text-autospace:none'><u>? : арифметический if выр ?\n";
echo "выр : выр </u></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:19.8pt;margin-bottom:.0001pt;text-autospace:none'>= простое\n";
echo "присваивание lvalue = выр</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:19.8pt;margin-bottom:.0001pt;text-autospace:none'>*=   умножить\n";
echo "и присвоить lvalue = выр</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:19.8pt;margin-bottom:.0001pt;text-autospace:none'>/=    разделить\n";
echo "и присвоить lvalue /= выр</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:19.8pt;margin-bottom:.0001pt;text-autospace:none'>%=  взять по\n";
echo "модулю и присвоить lvalue %= выр</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:19.8pt;margin-bottom:.0001pt;text-autospace:none'>+=   сложить\n";
echo "и присвоить lvalue += выр</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:19.8pt;margin-bottom:.0001pt;text-autospace:none'>-=    вычесть\n";
echo "и присвоить lvalue -= выр</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:19.8pt;margin-bottom:.0001pt;text-autospace:none'>&lt;&lt;=\n";
echo "сдвинуть влево и присвоить lvalue &lt;&lt;= выр</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:19.8pt;margin-bottom:.0001pt;text-autospace:none'>&gt;&gt;=\n";
echo "сдвинуть вправо и присвоить lvalue &gt;&gt;= выр</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:19.8pt;margin-bottom:.0001pt;text-autospace:none'>&amp;= И и\n";
echo "присвоить lvalue &amp;= выр</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:19.8pt;margin-bottom:.0001pt;text-autospace:none'>!= включающее\n";
echo "ИЛИ и присвоить lvalue != выр</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "6.65pt;margin-left:19.8pt;text-autospace:none'><u>^= исключающее ИЛИ и\n";
echo "присвоить lvalue ^= выр </u></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:19.8pt;text-autospace:none'><u>, запятая (следование) выр ,\n";
echo "выр </u></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>В каждой очерченной части находятся операции с\n";
echo "одинако­вым приоритетом. Операция имеет приоритет больше, чем опера­ции из\n";
echo "частей, расположенных ниже. Например: a+b*c означает a +(b*c), так как * имеет\n";
echo "приоритет выше, чем +, а a+b-c озна­чает (a+b)-c, поскольку + и - имеют\n";
echo "одинаковый приоритет (и поскольку + левоассоциативен).</p>\n";
echo "\n";
echo "<h3><a name=\"_Toc219967959\">3.2.1 Круглые скобки</a></h3>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Скобками синтаксис С++ злоупотребляет; количество\n";
echo "спосо­бов их использования приводит в замешательство: они применя­ются для\n";
echo "заключения в них параметров в вызовах функций, в них заключается тип в\n";
echo "преобразовании типа (приведении к типу), в именах типов для обозначения\n";
echo "функций, а также для разрешения конфликтов приоритетов. К счастью, последнее\n";
echo "требуется не слишком часто, потому что уровни приоритета и правила ассоци­ативности\n";
echo "определены таким образом, чтобы выражения &quot;работали ожидаемым\n";
echo "образом&quot; (то есть, отражали наиболее привычный спо­соб употребления).\n";
echo "Например, значение</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>if (i&lt;=0 !! max&lt;i) // ...</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>очевидно. Тем не менее, всегда, когда программист\n";
echo "сомне­вается относительно этих правил, следует употреблять скобки, и некоторые\n";
echo "программисты предпочитают немного более длинное и менее элегантное</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>if ( (i&lt;=0)\n";
echo "!! (max&lt;i) ) // ...</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>При усложнении подвыражений употребление скобок\n";
echo "стано­вится более обычным явлением, но сложные подвыражения являют­ся\n";
echo "источником ошибок, поэтому если вы чувствуете потребность в скобках, попробуйте\n";
echo "оборвать выражение и использовать до­полнительную переменную. Есть и такие\n";
echo "случаи, когда приорите­ты операций не приводят к &quot;очевидному&quot;\n";
echo "результату. Например в</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>if (i&amp;mask == 0) // ...</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>не происходит применения маски mask к i и\n";
echo "последующей проверки результата на ноль. Поскольку == имеет приоритет вы­ше,\n";
echo "чем &amp;, выражение интерпретируется как i&amp;(mask==0). В этом случае скобки\n";
echo "оказываются важны:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>if\n";
echo "((i&amp;mask) == 0) // ...</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-indent:33.0pt;text-autospace:\n";
echo "none'>Но, с другой стороны, то, что следующее выражение не ра­ботает так, как\n";
echo "может ожидать наивный пользователь, ничего не значит:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>if (0 &lt;= a &lt;= 99) // ...</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Оно допустимо, но интерпретируется оно как\n";
echo "(0&lt;=a)&lt;=99, где результат первого подвыражения или 0 или 1, но не a (если\n";
echo "только a не равно 1). Чтобы проверить, лежит ли a в диапазоне</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:0cm;text-autospace:none'>0...99, можно написать</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>if (0&lt;=a &amp;&amp; a&lt;=99)\n";
echo "// ...</p>\n";
echo "\n";
echo "<h3><a name=\"_Toc219967960\">3.2.2 Порядок вычисления</a></h3>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-indent:33.0pt;text-autospace:\n";
echo "none'>Порядок вычисления подвыражений в выражении неопределен. Например</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>int i = 1;</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>v[i] = i++;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>может вычисляться или как v[1]=1, или как v[2]=1.\n";
echo "При отсутствии ограничений на порядок вычисления выражения может генерироваться\n";
echo "более хороший код. Было бы замечательно, если бы компилятор предупреждал о\n";
echo "подобных неоднозначностях, но большинство компиляторов этого не делают.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-indent:13.2pt;text-autospace:\n";
echo "none'>Относительно операций &amp;&amp; и !! гарантируется, что их левый операнд\n";
echo "вычисляется раньше, чем правый. Например, b=(a=2,a=1) присвоит b 3.В\n";
echo "#3.3.1приводятся примеры использования&amp;&amp; и !!. Заметьте, что операция\n";
echo "следования , (запятая) логически отличается от запятой, которая используется\n";
echo "для разделения параметров в вызове функции. Рассмотрим</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>f1(v[i],i++);\n";
echo "// два параметра</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>f2( (v[i],i++) ) // один\n";
echo "параметр</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>В вызове f1 два параметра, v[i] и i++, и порядок\n";
echo "вычис­ления выражений-параметров неопределен. Зависимость выражения -параметра\n";
echo "от порядка вычисления - это очень плохой стиль, а также непереносимо. В вызове\n";
echo "f2 один параметр, выражение с запятой, которое эквивалентно i++.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>С помощью скобок нельзя задать порядок вычисления. Нап­ример,\n";
echo "a*(b/c) может вычисляться и как (a*b)/c, поскольку * и / имеют одинаковый\n";
echo "приоритет. В тех случаях, когда важен по­рядок вычисления, можно вводить\n";
echo "дополнительную переменную, например, (t=b/c,a*t).</p>\n";
echo "\n";
echo "<h3><a name=\"_Toc219967961\">3.2.3 Увеличение и уменьшение*</a></h3>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-autospace:none'>--------------------</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-indent:33.0pt;text-autospace:\n";
echo "none'>* Следовало бы переводить как &quot;инкремент&quot; и\n";
echo "&quot;декремент&quot;, однако мы следовали терминологии, принятой в переводной\n";
echo "лите­ратуре по C, поскольку эти операции унаследованы от C. (прим. перев.)</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>Операция ++ используется для явного выражения приращения\n";
echo "вместо его неявного выражения с помощью комбинации сложения и присваивания. По\n";
echo "определению ++lvalue означает lvalue+=1, что в свою очередь означает\n";
echo "lvalue=lvalue+1 при условии, что lvalue не вызывает никаких побочных эффектов.\n";
echo "Выражение, обозначающее (денотирующее) объект, который должен быть уве­личен,\n";
echo "вычисляется один раз (только). Аналогично, уменьшение выражается операцией --.\n";
echo "Операции ++ и -- могут применяться и как префиксные, и как постфиксные.\n";
echo "Значением ++x является но­вое (то есть увеличенное) значение x. Например, y=++x\n";
echo "эквива­лентно y=(x+=1). Значение x++, напротив, есть старое значение x.\n";
echo "Например, y=x++ эквивалентно y=(t=x,x+=1,t), где t - пере­менная того же типа,\n";
echo "что и x.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>Операции приращения особенно полезны для увеличения и\n";
echo "уменьшения переменных в циклах. Например, оканчивающуюся ну­лем строку можно\n";
echo "копировать так:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>inline void cpy(char* p, const char* q)</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>(*</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>while (*p++ = *q++) ;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>*)</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Напомню, что увеличение и уменьшение арифметических\n";
echo "ука­зателей, так же как сложение и вычитание указателей, осущест­вляется в\n";
echo "терминах элементов вектора, на которые указывает указатель p++ приводит к тому,\n";
echo "что p указывает на следующий элемент. Для указателя p типа T* по определению\n";
echo "выполняется следующее:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>long(p+1) ==\n";
echo "long(p)+sizeof(T);</span></p>\n";
echo "\n";
echo "<h3><a name=\"_Toc219967962\">3.2.4 Побитовые логические операции</a></h3>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>Побитовые логические операции</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>&amp; ! ^ ~ &gt;&gt; &lt;&lt;</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>применяются к целым, то есть к объектам типа char,\n";
echo "short, int, long и их unsigned аналогам, результаты тоже це­лые.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>Одно из стандартных применений побитовых логических опе­раций\n";
echo "- реализация маленького множества (вектор битов). В этом случае каждый бит\n";
echo "беззнакового целого представляет один член множества, а число членов ограничено\n";
echo "числом битов. Би­нарная операция &amp; интерпретируется как пересечение, ! как\n";
echo "объединение, а ^ как разность. Для наименования членов такого множества можно\n";
echo "использовать перечисление. Вот маленький при­мер, заимствованный из реализации\n";
echo "(не пользовательского ин­терфейса) &lt;stream.h&gt;:</p>\n";
echo "\n";
echo "<p class=MsoNormal align=center style='margin-top:13.3pt;margin-right:10.55pt;\n";
echo "margin-bottom:0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:center;\n";
echo "text-autospace:none'><span lang=EN-US>enum state_value (* _good=0, _eof=1,\n";
echo "_fail=2, _bad=4 *);</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:125.4pt;text-autospace:none'>// хорошо, конец файла, ошибка,\n";
echo "плохо</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Определение _good не является необходимым. Я просто\n";
echo "хо­тел, чтобы состояние, когда все в порядке, имело подходящее имя. Состояние\n";
echo "потока можно установить заново следующим обра­зом:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>cout.state =\n";
echo "_good;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Например, так можно проверить, не был ли испорчен\n";
echo "поток или допущена операционная ошибка:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>if\n";
echo "(cout.state&amp;(_bad!_fail)) // </span>не<span lang=EN-US> good</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Еще одни скобки необходимы, поскольку &amp; имеет\n";
echo "более вы­сокий приоритет, чем !.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-indent:33.0pt;text-autospace:\n";
echo "none'>Функция, достигающая конца ввода, может сообщать об этом так:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>cin.state !=\n";
echo "_eof;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Операция != используется потому, что поток уже\n";
echo "может быть испорчен (то есть, state==_bad), поэтому</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>cin.state =\n";
echo "_eof;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>очистило бы этот признак. Различие двух потоков\n";
echo "можно находить так:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>state_value\n";
echo "diff = cin.state^cout.state;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>В случае типа stream_state (состояние потока) такая\n";
echo "раз­ность не очень нужна, но для других похожих типов она оказы­вается самой\n";
echo "полезной. Например, при сравнении вектора бит, представляющего множество\n";
echo "прерываний, которые обрабатываются, с другим, представляющим прерывания, ждущие\n";
echo "обработки.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>Следует заметить, что использование полей (#2.5.1) в\n";
echo "действительности является сокращенной записью сдвига и маски­рования для\n";
echo "извлечения полей бит из слова. Это, конечно, мож­но сделать и с помощью\n";
echo "побитовых логических операций, Напри­мер, извлечь средние 16 бит из 32-битового\n";
echo "int можно следующим образом:</p>\n";
echo "\n";
echo "<p class=MsoNormal align=center style='margin-top:13.3pt;margin-right:10.55pt;\n";
echo "margin-bottom:13.3pt;margin-left:0cm;text-align:center;text-autospace:none'><span\n";
echo "lang=EN-US>unsigned short middle(int a) (* return (a&gt;&gt;8)&amp;0xffff; *)</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Не путайте побитовые логические операции с\n";
echo "логическими операциями:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:26.4pt;text-autospace:none'>&amp;&amp; !! !</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Последние возвращают 0 или 1, и они главным образом\n";
echo "ис­пользуются для записи проверки в операторах if, while или for (#3.3.1).\n";
echo "Например, !0 (не ноль) есть значение 1, тогда как ~ 0 (дополнение нуля) есть\n";
echo "набор битов все-единицы, который обычно является значением -1.</p>\n";
echo "\n";
echo "<h3><a name=\"_Toc219967963\">3.2.5 Преобразование типа</a></h3>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-indent:33.0pt;text-autospace:\n";
echo "none'>Бывает необходимо явно преобразовать значение одного ти­па в значение\n";
echo "другого.  Явное преобразование типа дает значе­ние одного типа для данного\n";
echo "значения другого типа.  Например:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>float r = float(1);</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>перед присваиванием преобразует целое значение 1 к\n";
echo "зна­чению с плавающей точкой 1.0. Результат преобразования типа не является\n";
echo "lvalue, поэтому ему нельзя присваивать (если только тип не является ссылочным\n";
echo "типом).</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>Есть два способа записи явного преобразования типа: тра­диционная\n";
echo "в C запись приведения к типу (double)a и функцио­нальная запись double(a).\n";
echo "Функциональная запись не может при­меняться для типов, которые не имеют\n";
echo "простого имени. Например, чтобы преобразовать значение к указательному типу\n";
echo "надо или использовать запись преобразования типа</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>char* p =\n";
echo "(char*)0777; </span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:0cm;text-autospace:none'>или определить новое имя типа:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>typedef char* Pchar;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>char* p =\n";
echo "Pchar(0777);</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>По моему мнению, функциональная запись в\n";
echo "нетривиальных случаях предпочтительна. Рассмотрим два эквивалентных примера</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-align:justify;text-autospace:\n";
echo "none'>Pname n2 = Pbase(n1-&gt;tp)-&gt;b_name; //функциональная запись Pname n3\n";
echo "= ((Pbase)n2-&gt;tp)-&gt;b_name; // запись приведения</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:257.4pt;margin-bottom:.0001pt;text-autospace:none'>// к типу</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Поскольку операция -&gt; имеет больший приоритет,\n";
echo "чем при­ведение, последнее выражение интерпретируется как</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>((Pbase)(n2-&gt;tp))-&gt;b_name</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>С помощью явного преобразования типа к указательным\n";
echo "ти­пам можно симитировать, что объект имеет совершенно произ­вольный тип.\n";
echo "Например<span lang=EN-US>:</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>any_type* p =\n";
echo "(any_type*)&amp;some_object;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>позволит работать посредством p с некоторым\n";
echo "объектом some_object как с любым типом any_type.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>Когда преобразование типа не необходимо, его следует из­бегать.\n";
echo "Программы, в которых используется много явных преоб­разований типов, труднее\n";
echo "понимать, чем те, в которых это не делается. Однако такие программы легче\n";
echo "понимать, чем програм­мы, просто не использующие типы для представления понятий\n";
echo "бо­лее высокого уровня (например, программу, которая оперирует регистром\n";
echo "устройства с помощью сдвига и маскирования, вместо того, чтобы определить\n";
echo "подходящую struct и оперировать ею, см. #2.5.2). Кроме того, правильность\n";
echo "явного преобразования типа часто критическим образом зависит от понимания\n";
echo "програм­мистом того, каким образом объекты различных типов обрабаты­ваются в\n";
echo "языке, и очень часто от подробностей реализации. Например:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>int i = 1;</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>char* pc = &quot;asdf&quot;;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>int* pi =\n";
echo "&amp;i;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>i = (int)pc;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>pc =\n";
echo "(char*)i;                      // остерегайтесь! значение pc может изме-</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:132.0pt;margin-bottom:.0001pt;text-autospace:none'>//ниться</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:132.0pt;margin-bottom:.0001pt;text-autospace:none'>// на\n";
echo "некоторых машинах</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:132.0pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>// sizeof(int)&lt;sizeof(char*)</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>pi = (int*)pc;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>pc =\n";
echo "(char*)pi;   // остерегайтесь! значение pc может изме-</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:132.0pt;margin-bottom:.0001pt;text-autospace:none'>// ниться</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:132.0pt;margin-bottom:.0001pt;text-autospace:none'>// на\n";
echo "некоторых машинах char*</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:132.0pt;text-autospace:none'>// представляется иначе, чем\n";
echo "int*</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>На многих машинах ничего плохого не произойдет, но\n";
echo "на других результаты будут катастрофическими. Этот код в лучшем случае непереносим.\n";
echo "Обычно можно без риска предполагать, что указатели на различные структуры имеют\n";
echo "одинаковое представле­ние. Кроме того, любой указатель можно (без явного\n";
echo "преобразо­вания типа) присвоить void*, а void* можно явно преобразовать к\n";
echo "указателю любого типа.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>В С++ явное преобразование типа оказывается ненужным во\n";
echo "многих случаях, когда C (и другие языки) требуют его. Во мно­гих программах\n";
echo "явного преобразования типа можно совсем избе­жать, а во многих других его\n";
echo "применение можно локализовать в небольшом числе подпрограмм.</p>\n";
echo "\n";
echo "<h3><a name=\"_Toc219967964\">3.2.6 Свободная память</a></h3>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Именованный объект является либо статическим, либо\n";
echo "авто­матическим (см. #2.1.3). Статический объект размещается во время запуска\n";
echo "программы и существует в течение всего выполне­ния программы. Автоматический\n";
echo "объект размещается каждый раз при входе в его блок и существует только до тех\n";
echo "пор, пока из этого блока не вышли. Однако часто бывает полезно создать но­вый\n";
echo "объект, существующий до тех пор, пока он не станет больше не нужен. В\n";
echo "частности, часто полезно создать объект, который можно использовать после\n";
echo "возврата из функции, где он создает­ся. Такие объекты создает операция new, а\n";
echo "впоследствии унич­тожать их можно операцией delete. Про объекты, выделенные с\n";
echo "помощью операции new, говорят, что они в свободной памяти. Такими объектами\n";
echo "обычно являются вершины деревьев или элемен­ты связанных списков, являющиеся\n";
echo "частью большей структуры данных, размер которой не может быть известен на\n";
echo "стадии ком­пиляции. Рассмотрим, как можно было бы написать компилятор в духе\n";
echo "написанного настольного калькулятора. Функции синтакси­ческого анализа могут\n";
echo "строить древовидное представление выра­жений, которое будет использоваться при\n";
echo "генерации кода. Нап<span lang=EN-US>­</span>ример<span lang=EN-US>:</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>struct enode (*</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>token_value oper;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>enode* left;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>enode* right;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>*);</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>enode* expr()</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>(*</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>enode* left =\n";
echo "term();</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>for(;;)</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>switch(curr_tok) (*</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>case PLUS:</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>case MINUS:</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:66.0pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>get_token();</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:66.0pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>enode* n = new enode;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:66.0pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>n-&gt;oper = curr_tok;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:66.0pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>n-&gt;left = left;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:66.0pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>n-&gt;right = term();</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:66.0pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>left = n;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:66.0pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>break;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>default:</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:66.0pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>return left;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'>*)</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>*)</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Получающееся дерево генератор кода может\n";
echo "использовать например так:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>void generate(enode* n)</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>(*</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>switch (n-&gt;oper) (*</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'>case PLUS:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:66.0pt;margin-bottom:.0001pt;text-autospace:none'>// делает\n";
echo "нечто соответствующее</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:66.0pt;margin-bottom:.0001pt;text-autospace:none'>delete n;</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'>*)</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>*)</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Объект, созданный с помощью new, существует, пока\n";
echo "он не будет явно уничтожен delete, после чего пространство, которое он занимал,\n";
echo "опять может использоваться new. Никакого &quot;сборщи­ка мусора&quot;, который\n";
echo "ищет объекты, на которые нет ссылок, и предоставляет их в распоряжение new,\n";
echo "нет. Операция delete мо­жет применяться только к указателю, который был\n";
echo "возвращен операцией new, или к нулю. Применение delete к нулю не вызы­вает\n";
echo "никаких действий.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>С помощью new можно также создавать вектора объектов.\n";
echo "Например<span lang=EN-US>:</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>char* save_string(char* p)</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>(*</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>char* s = new char[strlen(p)+1];</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>strcpy(s,p);</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'>return s;</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>*)</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-indent:33.0pt;text-autospace:\n";
echo "none'>Следует заметить, что чтобы освободить пространство, вы­деленное new,\n";
echo "delete должна иметь возможность определить раз­мер выделенного объекта.\n";
echo "Например<span lang=EN-US>:</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>int main(int argc, char* argv[])</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>(*</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>if (argc &lt; 2) exit(1);</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>char* p = save_string(argv[1]);</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'>delete p;</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>*)</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Это приводит к тому, что объект, выделенный\n";
echo "стандартной реализацией new, будет занимать больше места, чем статический\n";
echo "объект (обычно, больше на одно слово).</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>Можно также явно указывать размер вектора в операции\n";
echo "уничтожения delete. Например<span lang=EN-US>:</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>int main(int argc, char* argv[])</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>(*</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>if (argc &lt; 2) exit(1);</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>int size = strlen(argv[1])+1;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>char* p = save_string(argv[1]);</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>delete[size] p;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>*)</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Заданный пользователем размер вектора игнорируется\n";
echo "за исключением некоторых типов, определяемых пользователем (#5.5.5).</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>Операции свободной памяти\n";
echo "реализуются функциями (#с.7.2.3):</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>void operator new(long);</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>void operator\n";
echo "delete(void*);</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Стандартная реализация new не инициализирует\n";
echo "возвращае­мый объект.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>Что происходит, когда new не находит памяти для выделе­ния?\n";
echo "Поскольку даже виртуальная память конечна, это иногда должно происходить.\n";
echo "Запрос вроде</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>char* p = new\n";
echo "char[100000000];</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>как правило, приводит к каким-то неприятностям.\n";
echo "Когда у new ничего не получается, она вызывает функцию, указываемую указателем\n";
echo "_new_handler (указатели на функции обсуждаются в #</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-autospace:\n";
echo "none'>4.6.9). Вы можете задать указатель явно или использовать функцию\n";
echo "set_new_handler(). Например<span lang=EN-US>:</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>#include\n";
echo "&lt;stream.h&gt;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>void out_of_store()</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>(*</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:26.4pt;margin-bottom:.0001pt;text-autospace:none'>cerr &lt;&lt;\n";
echo "&quot;операция new не прошла: за пределами памяти\n&quot;; exit(1);</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>*)</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>typedef void (*PF)(); // тип\n";
echo "указатель на функцию</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>extern PF\n";
echo "set_new_handler(PF);</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>main()</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>(*</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>set_new_handler(out_of_store);</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>char* p = new char[100000000];</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>cout &lt;&lt; &quot;</span>сделано<span lang=EN-US>, p = &quot;\n";
echo "&lt;&lt; long(p) &lt;&lt; &quot;\n&quot;;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>*)</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>как правило, не будет писать &quot;сделано&quot;, а\n";
echo "будет вместо этого выдавать</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:26.4pt;text-autospace:none'>операция new не прошла: за\n";
echo "пределами памяти</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Функция _new_handler может делать и кое-что\n";
echo "поумней, чем просто завершать выполнение программы. Если вы знаете, как\n";
echo "работают new и delete, например, потому, что вы задали свои собственные\n";
echo "operator new() и operator delete(), программа об­работки может попытаться найти\n";
echo "некоторое количество памяти, которое возвратит new. Другими словами,\n";
echo "пользователь может сделать сборщик мусора, сделав, таким образом, использование\n";
echo "delete необязательным. Но это, конечно, все-таки задача не для начинающего.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-indent:33.0pt;text-autospace:\n";
echo "none'>По историческим причинам new просто возвращает указатель 0, если она не\n";
echo "может найти достаточное количество памяти и не был задан никакой _new_handler.\n";
echo "Например</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>include\n";
echo "&lt;stream.h&gt;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>main()</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>(*</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>char* p = new char[100000000];</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>cout &lt;&lt; &quot;</span>сделано<span lang=EN-US>, p = &quot;\n";
echo "&lt;&lt; long(p) &lt;&lt; &quot;\n&quot;;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>*)</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:0cm;text-autospace:none'>выдаст</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>сделано, p = 0</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Вам сделали предупреждение! Заметьте, что тот, кто\n";
echo "зада­ет _new_handler, берет на себя заботу по проверке истощения памяти при\n";
echo "каждом использовании new в программе (за исключе­нием случая, когда\n";
echo "пользователь задал отдельные подпрограммы для размещения объектов заданных\n";
echo "типов, определяемых пользо­вателем, см. #5.5.6).</p>\n";
echo "\n";
echo "<h2><a name=\"_Toc219967965\">3.3 Сводка операторов</a></h2>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Операторы С++ систематически и полностью изложены в\n";
echo "#с.9, прочитайте, пожалуйста, этот раздел. А здесь приводится краткая сводка и\n";
echo "некоторые примеры.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "6.65pt;margin-left:178.2pt;text-autospace:none'><u>Синтаксис оператора </u></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:19.8pt;margin-bottom:.0001pt;text-autospace:none'>оператор:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:46.2pt;margin-bottom:.0001pt;text-autospace:none'>описание</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:46.2pt;margin-bottom:.0001pt;text-autospace:none'>(*список_операторов\n";
echo "opt*)</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:46.2pt;text-autospace:none'>выражение opt</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:46.2pt;margin-bottom:.0001pt;text-autospace:none'>if оператор</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:19.8pt;margin-bottom:.0001pt;text-autospace:none'>if (\n";
echo "выражение ) оператор</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:46.2pt;margin-bottom:.0001pt;text-autospace:none'>if (\n";
echo "выражение ) оператор else оператор</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:46.2pt;margin-bottom:.0001pt;text-autospace:none'>switch\n";
echo "оператор</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:19.8pt;text-autospace:none'>switch ( выражение ) оператор</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:46.2pt;margin-bottom:.0001pt;text-autospace:none'>while (\n";
echo "выражение ) оператор</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:46.2pt;margin-bottom:.0001pt;text-autospace:none'>do оператор\n";
echo "while (выражение)</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:46.2pt;text-autospace:none'>for ( оператор выражение opt;\n";
echo "выражение opt ) оператор</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:46.2pt;margin-bottom:.0001pt;text-autospace:none'>case\n";
echo "константное_выражение : оператор</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:46.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>default : </span>оператор</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:46.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>break ;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:46.2pt;text-autospace:none'><span lang=EN-US>continue ;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:46.2pt;text-autospace:none'>return выражение opt ;</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:46.2pt;margin-bottom:.0001pt;text-autospace:none'>goto\n";
echo "идентификатор ;</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:46.2pt;text-autospace:none'>идентификатор : оператор</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:46.2pt;margin-bottom:.0001pt;text-autospace:none'>список_операторов:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:72.6pt;margin-bottom:.0001pt;text-autospace:none'>оператор</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:72.6pt;text-autospace:none'>оператор список_операторов</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Заметьте, что описание является оператором, и что\n";
echo "нет операторов присваивания и вызова процедуры. Присваивание и вызов функции\n";
echo "обрабатываются как выражения.</p>\n";
echo "\n";
echo "<h3><a name=\"_Toc219967966\">3.3.1 Проверки</a></h3>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Проверка значения может осуществляться или\n";
echo "оператором if, или оператором switch:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>if (\n";
echo "выражение ) оператор</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>if (\n";
echo "выражение ) оператор else оператор</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>switch ( выражение ) оператор</p>\n";
echo "\n";
echo "<p class=MsoNormal align=center style='margin-top:0cm;margin-right:10.55pt;\n";
echo "margin-bottom:13.3pt;margin-left:0cm;text-align:center;text-autospace:none'>В\n";
echo "С++ нет отдельного булевского типа. Операции сравнения</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>== != &lt; &lt;= &gt; &gt;=</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>возвращают целое 1, если сравнение истинно, иначе\n";
echo "возв­ращают 0. Не так уж непривычно видеть, что ИСТИНА определена как 1, а ЛОЖЬ\n";
echo "определена как 0.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>В операторе if первый (или единственный) оператор выпол­няется\n";
echo "в том случае, если выражение ненулевое, иначе выполня­ется второй оператор\n";
echo "(если он задан). Отсюда следует, что в качестве условия может использоваться\n";
echo "любое целое выражение. В частности, если a целое, то</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>if (a) // ...</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:0cm;text-autospace:none'>эквивалентно</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>if (a != 0) //\n";
echo "...</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Логические операции &amp;&amp; !! ! наиболее часто\n";
echo "используются в условиях. Операции &amp;&amp; и !! не будут вычислять второй\n";
echo "аргу­мент, если это ненужно. Например<span lang=EN-US>:</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>if (p\n";
echo "&amp;&amp; 1&lt;p-&gt;count) // ...</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-indent:33.0pt;text-autospace:\n";
echo "none'>вначале проверяет, является ли p не нулем, и только если это так, то\n";
echo "проверяет 1&lt;p-&gt;count.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>Некоторые простые операторы if могут быть с удобством\n";
echo "заменены выражениями арифметического if. Например<span lang=EN-US>:</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>if (a &lt;= d)</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>max = b;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>else</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:39.6pt;text-autospace:none'><span lang=EN-US>max = a;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:0cm;text-autospace:none'>лучше выражается так:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>max = (a&lt;=b)\n";
echo "? b : a;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Скобки вокруг условия необязательны, но я считаю,\n";
echo "что когда они используются, программу легче читать.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>Некоторые простые операторы switch можно по-другому за­писать\n";
echo "в виде набора операторов if. Например:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>switch (val)\n";
echo "(*</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>case 1:</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>f();</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>break;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>case 2;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>g();</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>break;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>default:</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>h();</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>break;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>*)</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:0cm;text-autospace:none'>иначе можно было бы записать так:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>if (val == 1)</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>f();</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>else if (val == 2)</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>g();</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>else</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:39.6pt;text-autospace:none'><span lang=EN-US>h();</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Смысл тот же, однако первый вариант (switch)\n";
echo "предпочти­тельнее, поскольку в этом случае явно выражается сущность действия (сопоставление\n";
echo "значения с рядом констант). Поэтому в нетривиальных случаях оператор switch\n";
echo "читается легче.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>Заботьтесь о том, что switch должен как-то завершаться,\n";
echo "если только вы не хотите, чтобы выполнялся следующий case. Например:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>switch (val)\n";
echo "(* // осторожно</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>case 1:</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>cout &lt;&lt; &quot;case 1\n&quot;;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>case 2;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>cout &lt;&lt; &quot;case 2\n&quot;;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>default:</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>cout &lt;&lt; &quot;default: case </span>не найден<span lang=EN-US>\n&quot;;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>*)</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:0cm;text-autospace:none'>при val==1 напечатает</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>case 1</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>case 2</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>default: case </span>не\n";
echo "найден</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-indent:33.0pt;text-autospace:\n";
echo "none'>к великому изумлению непосвященного.  Самый обычный спо­соб завершить\n";
echo "случай - это break, иногда можно даже использо­вать goto. Например:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>switch (val)\n";
echo "(* // осторожно</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>case 0:</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>cout &lt;&lt; &quot;case 0\n&quot;;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>case1:</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>case 1:</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>cout &lt;&lt; &quot;case 1\n&quot;;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>return;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>case 2;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>cout &lt;&lt; &quot;case 2\n&quot;;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>goto case1;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>default:</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>cout &lt;&lt; &quot;default: case </span>не найден<span lang=EN-US>\n&quot;;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'>return;</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>*)</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>При обращении к нему с val==2\n";
echo "выдаст</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>case 2</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>case 1</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-indent:33.0pt;text-autospace:\n";
echo "none'>Заметьте, что метка case не подходит как метка для упот­ребления в\n";
echo "операторе goto:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>goto case 1;                           //\n";
echo "синтаксическая ошибка</p>\n";
echo "\n";
echo "<h3><a name=\"_Toc219967967\">3.3.2 Goto</a></h3>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>С++ снабжен имеющим дурную\n";
echo "репутацию оператором goto.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>goto\n";
echo "идентификатор;</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>идентификатор : оператор</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>В общем, в программировании высокого уровня он\n";
echo "имеет очень мало применений, но он может быть очень полезен, когда С++\n";
echo "программа генерируется программой, а не пишется непос­редственно человеком.\n";
echo "Например, операторы goto можно исполь­зовать в синтаксическом анализаторе,\n";
echo "порождаемом генератором синтаксических анализаторов. Оператор goto может быть\n";
echo "также важен в тех редких случаях, когда важна наилучшая эффектив­ность,\n";
echo "например, во внутреннем цикле какой-нибудь программы, работающей в реальном времени.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>Одно из немногих разумных применений состоит в выходе из\n";
echo "вложенного цикла или переключателя (break лишь прекращает вы­полнение самого\n";
echo "внутреннего охватывающего его цикла или пе­реключателя). Например<span\n";
echo "lang=EN-US>:</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>for (int i = 0; i&lt;n; i++)</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>for (int j = 0; j&lt;m; j++)</span></p>\n";
echo "\n";
echo "<p class=MsoNormal align=center style='margin-right:10.55pt;text-align:center;\n";
echo "text-autospace:none'><span lang=EN-US>if (nm[i][j] == a) goto found // </span>найдено</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:264.0pt;margin-bottom:.0001pt;text-autospace:none'>// не\n";
echo "найдено</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>// ...</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>found:                                                                                  //\n";
echo "найдено</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>// nm[i][j] ==\n";
echo "a</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Имеется также оператор continue, который по сути\n";
echo "делает переход на конец оператора цикла, как объясняется в #3.1.5.</p>\n";
echo "\n";
echo "<h2><a name=\"_Toc219967968\">3.4 Комментарии и Выравнивание</a></h2>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Продуманное использование комментариев и\n";
echo "согласованное использование отступов может сделать чтение и понимание прог­раммы\n";
echo "намного более приятным. Существует несколько различных стилей согласованного\n";
echo "использования отступов. Автор не видит никаких серьезных оснований предпочесть\n";
echo "один другому (хотя как и у большинства, у меня есть свои предпочтения). Сказан­ное\n";
echo "относится также и к стилю комментариев.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>Неправильное использование комментариев может серьезно\n";
echo "повлиять на удобочитаемость программы, Компилятор не понимает содержание\n";
echo "комментария, поэтому он никаким способом не может убедиться в том, что\n";
echo "комментарий</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>[1] осмыслен,</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>[2] описывает программу и</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>[3] не устарел.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Непонятные, двусмысленные и просто неправильные\n";
echo "коммен­тарии содержатся в большинстве программ. Плохой комментарий может быть\n";
echo "хуже, чем никакой.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>Если что-то можно сформулировать средствами самого язы­ка,\n";
echo "следует это сделать, а не просто отметить в комментарии. Данное замечание\n";
echo "относится к комментариям вроде:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>// переменная &quot;v&quot;\n";
echo "должна быть инициализирована.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>//переменная&quot;v&quot;должна\n";
echo "использоваться только функцией &quot;f()&quot;.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>// вызвать\n";
echo "функцию init() перед вызовом</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>// любой другой функции в этом\n";
echo "файле.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>// вызовите\n";
echo "функцию очистки &quot;cleanup()&quot; в конце вашей</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>// программы.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>// не используйте функцию\n";
echo "&quot;wierd()&quot;.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>// функция &quot;f()&quot; получает\n";
echo "два параметра.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>При правильном использовании С++ подобные\n";
echo "комментарии как правило становятся ненужными. Чтобы предыдущие коммента­рии\n";
echo "стали излишними, можно, например, использовать правила компоновки (#4.2) и\n";
echo "видимость, инициализацию и правила очист­ки для классов (см. #5.5.2).</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>Если что-то было ясно сформулировано на языке, второй раз\n";
echo "упоминать это в комментарии не следует. Например:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>a = b+c; // a\n";
echo "становится b+c</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>count++; // увеличить счетчик</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Такие комментарии хуже чем просто излишни, они\n";
echo "увеличи­вают объем текста, который надо прочитать, они часто затума­нивают\n";
echo "структуру программы, и они могут быть неправильными.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>Автор предпочитает:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>[1] Комментарий для каждого исходного файла,\n";
echo "сообщающий, для чего в целом предназначены находящиеся в нем комментарии, дающий\n";
echo "ссылки на справочники и руководства, общие рекоменда­ции по использованию и\n";
echo "т.д.,</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>[2] Комментарий для каждой нетривиальной функции, в ко­тором\n";
echo "сформулировано ее назначение, используемый алгоритм (если он неочевиден) и,\n";
echo "быть может, что-то о принимаемых в ней предположениях относительно среды\n";
echo "выполнения,</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-indent:33.0pt;text-autospace:\n";
echo "none'>[3] Небольшое число комментариев в тех местах, где прог­рамма неочевидна\n";
echo "и/или непереносима и</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:33.0pt;text-autospace:none'>[4] Очень мало что еще.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>Например:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>// tbl.c:\n";
echo "Реализация таблицы имен</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>/*</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'>Гауссовское\n";
echo "исключение с частичным</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'>См<span\n";
echo "lang=EN-US>. Ralston: &quot;A first course ...&quot; </span>стр<span\n";
echo "lang=EN-US>. 411.</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>*/</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>// swap() предполагает\n";
echo "размещение стека AT&amp;T sB20.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>/**************************************</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>Copyright (c) 1984 AT&amp;T, Inc.</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:39.6pt;text-autospace:none'><span lang=EN-US>All rights\n";
echo "reserved</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>****************************************/</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Удачно подобранные и хорошо написанные комментарии\n";
echo "- су­щественная часть программы. Написание хороших комментариев может быть\n";
echo "столь же сложным, сколь и написание самой програм­мы.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>Заметьте также, что если в функции используются исключи­тельно\n";
echo "комментарии //, то любую часть этой функции можно за­комментировать с помощью\n";
echo "комментариев /* */, и наоборот.</p>\n";
echo "\n";
echo "<h2><a name=\"_Toc219967969\">3.5 Упражнения</a></h2>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:33.0pt;margin-bottom:.0001pt;text-autospace:none'>1. (*1)                Перепишите \n";
echo "следующий  оператор  for  в  виде</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:0cm;text-autospace:none'>эквивалентного оператора while:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:46.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>for (i=0; i&lt;max_length; i++)</span></p>\n";
echo "\n";
echo "<p class=MsoNormal align=center style='margin-top:0cm;margin-right:10.55pt;\n";
echo "margin-bottom:13.3pt;margin-left:0cm;text-align:center;text-autospace:none'><span\n";
echo "lang=EN-US>if (input_line[i] == '?') quest_count++;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>2. (*1) Полностью расставьте скобки в следующих\n";
echo "выраже­ниях:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:46.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>a   = b + c * d &lt;&lt; 2 &amp; 8</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:46.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>a   &amp; 077 != 3</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:46.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>a   == b !! a == c &amp;&amp; c &lt; 5</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:46.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>c   = x != 0</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:46.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>0   &lt;= i &lt; 7</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:46.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>f(1,2)+3</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:46.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>a = -1 + + b -- - 5</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:46.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>a = b == c ++</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:46.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>a = b = c = 0</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:46.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>a[4][2] *= * b ? c : * d * 2</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:46.2pt;text-autospace:none'><span lang=EN-US>a-b,c=d</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-indent:33.0pt;text-autospace:\n";
echo "none'>3. (*2) Найдите пять различных конструкций С++, значение которых\n";
echo "неопределено.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>4. (*2) Найдите десять различных примеров непереносимой\n";
echo "С++ программы.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>5. (*1) Что происходит в вашей системе, если вы делите на\n";
echo "ноль? Что происходит при переполнении и потере значимости?</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>6. (*1) Полностью расставьте скобки в следующих\n";
echo "выраже­ниях:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:46.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>*p++</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:46.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>*--p</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:46.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>++a--</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:46.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>(int*)p-&gt;m</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:46.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>*p.m</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:46.2pt;text-autospace:none'>*a[i] </p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>7. (*2) Напишите функции: strlen(), которая\n";
echo "возвращает длину строки, strcpy(), которая копирует одну строку в дру­гую, и\n";
echo "strcmp(), которая сравнивает две строки. Разберитесь, какие должны быть типы\n";
echo "параметров и типы возвращаемых значе­ний, а потом сравните их со стандартными\n";
echo "версиями, которые описаны в &lt;string.h&gt; и в вашем руководстве.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>8. (*1) Посмотрите, как ваш компилятор реагирует на\n";
echo "ошибки:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:46.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>a := b+1;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:46.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>if (a = 3) // ...</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:46.2pt;text-autospace:none'>if (a&amp;077 == 0) // ...</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Придумайте ошибки попроще, и посмотрите, как\n";
echo "компилятор на них реагирует.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>9. (*2) Напишите функцию cat(), получающую два строковых\n";
echo "параметра и возвращающую строку, которая является конкатена­цией параметров.\n";
echo "Используйте new, чтобы найти память для ре­зультата. Напишите функцию rev(),\n";
echo "которая получает строку и переставляет в ней символы в обратном порядке. То\n";
echo "есть, после вызова rev(p) последний символ p становится первым.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:33.0pt;text-autospace:none'>10. (*2) Что делает следующая\n";
echo "программа?</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:33.0pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>void send(register* to, register* from, register count)</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:33.0pt;margin-bottom:.0001pt;text-autospace:none'>// Полезные\n";
echo "комментарии несомненно уничтожены.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:46.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>(*</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:72.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>register n=(count+7)/8;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:72.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>switch (count%8) (*</span></p>\n";
echo "\n";
echo "<p class=MsoNormal align=center style='margin-right:10.55pt;text-align:center;\n";
echo "text-autospace:none'><span lang=EN-US>case 0: do (* *to++ = *from++;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal align=center style='margin-right:10.55pt;text-align:center;\n";
echo "text-autospace:none'><span lang=EN-US>case 7: do (* *to++ = *from++;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal align=center style='margin-right:10.55pt;text-align:center;\n";
echo "text-autospace:none'><span lang=EN-US>case 6: do (* *to++ = *from++;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal align=center style='margin-right:10.55pt;text-align:center;\n";
echo "text-autospace:none'><span lang=EN-US>case 5: do (* *to++ = *from++;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal align=center style='margin-right:10.55pt;text-align:center;\n";
echo "text-autospace:none'><span lang=EN-US>case 4: do (* *to++ = *from++;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal align=center style='margin-right:10.55pt;text-align:center;\n";
echo "text-autospace:none'><span lang=EN-US>case 3: do (* *to++ = *from++;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal align=center style='margin-right:10.55pt;text-align:center;\n";
echo "text-autospace:none'><span lang=EN-US>case 2: do (* *to++ = *from++;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal align=center style='margin-right:10.55pt;text-align:center;\n";
echo "text-autospace:none'><span lang=EN-US>case 1: do (* *to++ = *from++;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:125.4pt;margin-bottom:.0001pt;text-autospace:none'>while\n";
echo "(--n&gt;0);</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:72.6pt;margin-bottom:.0001pt;text-autospace:none'>*)</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:46.2pt;text-autospace:none'>*)</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:33.0pt;text-autospace:none'>Зачем кто-то мог написать нечто\n";
echo "похожее?</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>11. (*2) Напишите функцию atoi(), которая получает\n";
echo "стро­ку, содержащую цифры, и возвращает соответствующее int. Нап­ример,\n";
echo "atoi(&quot;123&quot;) - это 123. Модифицируйте atoi() так, чтобы помимо обычной\n";
echo "десятичной она обрабатывала еще восьмеричную и шестнадцатиричную записи С++.\n";
echo "Модифицируйте atoi() так, чтобы обрабатывать запись символьной константы.\n";
echo "Напишите функцию itoa(), которая строит представление целого параметра в виде\n";
echo "строки.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>12. (*2) Перепишите get_token() (#3.1.2), чтобы она за\n";
echo "один раз читала строку в буфер, а затем составляла лексемы, читая символы из\n";
echo "буфера.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>13. (*2) Добавьте в настольный калькулятор из #3.1 такие\n";
echo "функции, как sqrt(), log() и sin(). Подсказка: предопределите имена и вызывайте\n";
echo "функции с помощью вектора указателей на функции. Не забывайте проверять\n";
echo "параметры в вызове функции.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>14. (*3) Дайте пользователю возможность определять функ­ции\n";
echo "в настольном калькуляторе. Подсказка: определяйте функции как\n";
echo "последовательность действий, прямо так, как их набрал пользователь. Такую\n";
echo "последовательность можно хранить или как символьную строку, или как список\n";
echo "лексем. После этого, когда функция вызывается, читайте и выполняйте эти\n";
echo "действия. Если вы хотите, чтобы пользовательская функция получала параметры, вы\n";
echo "должны придумать форму записи этого.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>15. (*1.5) Преобразуйте настольный калькулятор так, что­бы\n";
echo "вместо статических переменных name_string и number_value использовалась\n";
echo "структура символа symbol:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:46.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>struct symbol (*</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:72.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>token_value tok;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:72.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>union (*</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:99.0pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>double number_value;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:99.0pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>char* name_string;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:72.6pt;margin-bottom:.0001pt;text-autospace:none'>*);</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:46.2pt;text-autospace:none'>*);</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>16. (*2.5) Напишите программу, которая выбрасывает\n";
echo "ком­ментарии из С++ программы. То есть, читает из cin, удаляет // и /* */\n";
echo "комментарии и пишет результат в cout. Не заботьтесь о приятном виде выходного\n";
echo "текста (это могло бы быть другим, бо­лее сложным упражнением). Не беспокойтесь\n";
echo "о правильности программ. Остерегайтесь // и /* и */ внутри комментариев, строк\n";
echo "и символьных констант.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>17. (*2) Посмотрите какие-нибудь программы, чтобы понять\n";
echo "принцип различных стилей комментирования и выравнивания, ко­торые используются\n";
echo "на практике.</p>\n";
echo "\n";
?>
