Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Форматы вывода данных
Обычный (бесформатный) вывод данныхобладает тем недостатком, что данные, выводимые одним оператором WriteLn и перечисленные в скобках этого оператора через запятую, изображаются на экране подряд, без промежутков. Например, после выполнения фрагмента c: ='Ф'; s: ='хорошо'; i: =18; WriteLn(c, s, i) мы увидим в строке экрана
Мы можем приказать Паскалю отводить под каждое данное столько позиций в строке, сколько нам нужно: WriteLn(c: 3, s: 8, i: 4) Вот что мы увидим в строке экрана:
Здесь под c отведено поле в три позиции (с 1 по 3), начиная с левого края экрана. Под s отведено поле в 8 позиций (с 4 по 11). Под i отведено поле в 4 позиции (с 12 по 15). Информацией заполняется правая часть поля, а левая часть может остаться пустой. Еще один недостаток бесформатного вывода: данные типа Real всегда изображаются в неудобочитаемом экспоненциальном виде. Например, после выполнения фрагмента r: =465.28073; WriteLn(r) мы увидим на экране
что означает 4.65280730000231 * 102 или, что то же самое, 465.280730000231. Обратите внимание на откуда-то взявшиеся цифры 231. Их появление связано с неточностью представления вещественных чисел в компьютере. Еще один пример: r: =0.000000308; WriteLn(r)
что означает 3.08000000000079 * 10-7 или, что то же самое, 0.000000308000000000079. Еще пример: r: = -0.000003; WriteLn(r)
что означает -2.99999999999953 * 10-6 или, что то же самое, -0.00000299999999999953, а это практически равно -0.000003. Как избавиться от экспоненциального вида? Формат: 9: 3 прикажет Паскалю изобразить число типа Real в привычном для нас виде, отведя под него 9 позиций в строке, из них 3 позиции под дробную часть числа. Пример: r: =465.28073; WriteLn(r: 9: 3)
Обратите внимание, что дробная часть округлена, так как она целиком не умещается в отведенный формат. Еще пример: r: =465.28073; WriteLn(r: 10: 0) Еще пример: r: = -465.28073; WriteLn(r: 10)
Это у нас получился вывод в " укороченном" экспоненциальном формате. Переполнение ячеек памяти После выполнения программы VAR i: Byte; BEGIN i: =250; WriteLn(i); i: =i+10; WriteLn(i) END. мы увидим на экране числа 250 и 4. А почему не 250 и 260? Потому что тип Byte представляет только числа от 0 до 255. Если в процессе выполнения программы значение переменной вышло за диапазон своего типа, Паскаль не замечает ошибки, а в соответствующей ячейкеоказывается ерунда. Это касается всех типов. Впрочем, ценой некоторой потери скорости Паскаль можно легко настроить на проверку выхода за диапазон (см. приложение).
|