Случайный афоризм
Писатель обречен на понимание. Он не может стать убийцей. Альбер Камю
 
новости
поиск по автору
поиск по тематике
поиск по ключевому слову
проба пера
энциклопедия авторов
словарь терминов
программы
начинающим авторам
ваша помощь
о проекте
Книжный магазин
Главная витрина
Книги компьютерные
Книги по психологии
Книги серии "Для чайников"
Книги по лингвистике
ЧАВо
Разные Статьи
Статьи по литературе

Форма пользователя
Логин:
Пароль:
регистрация
 детектив



 драмма



 животные



 история



 компьютерная документация



 медицина



 научно-популярная



 очередная история



 очерк



 повесть



 политика



 поэзия и лирика



 приключения



 психология



 религия



 студенту



 технические руководства



 фантастика



 философия и мистика



 художественная литература



 энциклопедии, словари



 эротика, любовные романы



в избранноеконтакты

Параметры текста
Шрифт:
Размер шрифта: Высота строки:
Цвет шрифта:
Цвет фона:

сделать  с  именем,  калькулятор  должен  заглянуть  вперед,  чтобы
посмотреть, осуществляется  ли присваивание  ему,  или  оно  просто
используется. В  обоих случаях надо справиться в таблице имен. Сама
таблица описывается  в #3.1.3;  здесь надо  знать только,  что  она
состоит из элементов вида:

  srtuct name {
      char* string;
      char* next;
      double value;
  }

где next используется только функциями, которые поддерживают работу
с таблицей:

  name* look(char*);
  name* insert(char*);

  Обе возвращают  указатель на  name, соответствующее  параметру  -
символьной строке;  look() выражает  недовольство, если имя не было
определено. Это  значит, что  в калькуляторе можно использовать имя
без  предварительного   описания,  но   первый   раз   оно   должно
использоваться в левой части присваивания.

     3.1.2 Функция ввода

  Чтение ввода  - часто самая запутанная часть программы. Причина в
том, что  если программа должна общаться с человеком, то она должна
справляться с  его  причудами,  условностями  и  внешне  случайными
ошибками. Попытки  заставить человека  вести себя более удобным для
машины  образом   часто   (и   справедливо)   рассматриваются   как
оскорбительные. Задача  низкоуровненовой программы  ввода состоит в
том, чтобы читать символы по одному и составлять из них лексические
символы более  высокого уровня. Далее эти лексемы служат вводом для
программ  более   высокого  уровня.   У  нас  ввод  низкого  уровня
осуществляется get_token(). Обнадеживает то, что написание программ
ввода низкого  уровня не  является ежедневной  работой;  в  хорошей
системе для этого будут стандартные функции.
  Для калькулятора  правила ввода  сознательно были выбраны такими,
чтобы функциям  по работе  с потоками  было  неудобно  эти  правила
обрабатывать; незначительные изменения в определении лексем сделали
бы get_token() обманчиво простой.
  Первая сложность  состоит в  том, что  символ новой  строки  '\n'
является для калькулятора существенным, а функции работы с потоками
считают его  символом пропуска.  То есть,  для  этих  функций  '\n'
значим только  как ограничитель лексемы. Чтобы преодолеть это, надо
проверять пропуски (пробел, символы табуляции и т.п.):

  char ch

  do {    // пропускает пропуски за исключением '\n'
      if(!cin.get(ch)) return curr_tok = END;
  } while (ch!='\n' && isspace(ch));

                             - стр 83 -

  Вызов cin.get(ch)  считывает один  символ из  стандартного потока
ввода в ch. Проверка if(!cin.get(ch)) не проходит в случае, если из
cin нельзя  считать ниодного  символа; в  этом случае  возвращается
END,  чтобы   завершить  сеанс  работы  калькулятора.  Используется

1 : 2 : 3 : 4 : 5 : 6 : 7 : 8 : 9 : 10 : 11 : 12 : 13 : 14 : 15 : 16 : 17 : 18 : 19 : 20 : 21 : 22 : 23 : 24 : 25 : 26 : 27 : 28 : 29 : 30 : 31 : 32 : 33 : 34 : 35 : 36 : 37 : 38 : 39 : 40 : 41 : 42 : 43 : 44 : 45 : 46 : 47 : 48 : 49 : 50 : 51 : 52 : 53 : 54 : 55 : 56 : 57 : 58 : 59 : 60 : 61 : 62 : 63 : 64 : 65 : 66 : 67 : 68 : 69 : 70 : 71 : 72 : 73 : 74 : 75 : 76 : 77 : 78 : 79 : 80 : 81 : 82 : 83 : 84 : 85 : 86 : 87 : 88 : 89 : 90 : 91 : 92 : 93 : 94 : 95 : 96 : 97 : 98 : 99 : 100 : 101 : 102 : 103 : 104 : 105 : 106 : 107 : 108 : 109 : 110 : 111 : 112 : 113 : 114 : 115 : 116 : 117 : 118 : 119 : 120 : 121 : 122 : 123 : 124 : 125 : 126 : 127 : 128 : 129 : 130 : 131 : 132 : 133 : 134 : 135 : 136 : 137 : 138 : 139 : 140 : 141 : 142 : 143 : 144 : 145 : 146 : 147 : 148 : 149 : 150 : 151 : 152 : 153 : 154 : 155 : 156 : 157 : 158 : 159 : 160 : 161 : 162 : 163 : 164 : 165 : 166 : 167 : 168 : 169 : 170 : 171 : 172 : 173 : 174 : 175 : 176 : 177 : 178 : 179 : 180 : 181 : 182 : 183 : 184 : 185 : 186 : 187 : 188 : 189 : 190 : 191 : 192 : 193 : 194 : 195 : 196 : 197 : 198 : 199 : 200 : 201 : 202 : 203 : 204 : 205 : 206 : 207 : 208 : 209 : 210 : 211 : 212 : 213 : 214 : 215 : 216 : 217 : 218 : 219 : 220 : 221 : 222 : 223 : 224 : 225 : 226 : 227 : 228 : 229 : 230 : 231 : 232 : 233 : 234 : 235 : 236 : 237 : 238 : 239 : 240 : 241 : 242 : 243 : 244 : 245 : 246 : 247 : 248 : 249 :
главная наверх

(c) 2008 Большая Одесская Библиотека.