Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Паскаль Блеать.docx
Скачиваний:
65
Добавлен:
31.07.2019
Размер:
73.23 Кб
Скачать

Контрольные вопросы: 2

1. Чему равно числовое значение приведенного ниже выражения при e = 4, a = 3? e + sqrt(e) * 1e1 / 2 * a  2. Чему равно значение выражения (a and not b or c), где a, b и с — величины типа boolean, имеющие значения true, false и false соответственно? 3. Укажите допустимые способы записи выражения . 1) 1.6Е–4 * x / k / (a + b) 2) (1.6e–4 * x) / (k * (a + b)) 3) 1.6Е(–4) * x / k * (a + b) 4) 1.6 * 0.0001 * x / (k * (a + b)) 4. Какие выражения не содержат синтаксических ошибок? 1) sin(abs(0.6e3 * y_t)) 2) a div b / c * mod 3) $EF01 * 1.34E–02 /_i7_17 4) 1_2i – exp(y) / 2 * t 5) cos(3 * x) + 0,2 5. Выберите все правильные утверждения. 1) Все числовые величины описываются в разделе описания констант. 2) В разделе описания констант описываются константы, имеющие имя. 3) Величины, описанные в разделе описания констант без указания типа, не могут изменить свои значения. 4) В разделе описания констант можно описать и константы, и переменные. 5) Раздел описания констант должен располагаться перед разделом описания переменных.

Оператор присваивания

Присваивание — это занесение значения в память. В общем виде оператор присваивания записывается так: переменная := выражение Здесь символами := обозначена операция присваивания. Внутри знака операции пробелы не допускаются. Механизм выполнения оператора присваивания такой: вычисляется выражение и его результат заносится в память по адресу, который определяется именем переменной, находящейся слева от знака операции. Схематично это полезно представить себе так: переменная выражение Напомню, что константа и переменная являются частными случаями выражения.  Примеры операторов присваивания: a := b + c / 2; b := a;  a := b; x := 1; x := x + 0.5; Обратите внимание: b := a и a := b — это совершенно разные действия! ПРИМЕЧАНИЕ Чтобы не перепутать, что чему присваивается, запомните мнемоническое правило: присваивание — это передача данных “налево”. Начинающие часто делают ошибку, воспринимая присваивание как аналог равенства в математике. Чтобы избежать этой ошибки, надо понимать механизм работы оператора присваивания. Рассмотрим для этого последний пример (x := x + 0.5). Сначала из ячейки памяти, в которой хранится значение переменной x, выбирается это значение. Затем к нему прибавляется 0,5, после чего получившийся результат записывается в ту же самую ячейку. При этом то, что хранилось там ранее, теряется безвозвратно. Операторы такого вида применяются в программировании очень широко. Правая и левая части оператора присваивания должны быть, как правило, одного типа. Говоря более точно, они должны быть совместимы по присваиванию. Например, выражение целого типа можно присвоить вещественной переменной, потому что целые числа являются подмножеством вещественных, и информация при таком присваивании не теряется: вещественная переменная := целое выражение;  Правила совместимости перечислены в разделе “Совместимость по присваиванию” на с. .

Процедуры ввода-вывода

Любая программа при вводе исходных данных и выводе результатов взаимодействует с внешними устройствами. Совокупность стандартных устройств ввода и вывода, то есть клавиатуры и экрана монитора, называется консолью. Обмен данными с консолью является частным случаем обмена с внешними устройствами, который будет подробно рассмотрен в разделе “Текстовые файлы” (с. ), а кратко — в следующем разделе. Ввод с клавиатуры Для ввода с клавиатуры определены процедуры read и readln. read(список);  readln[(список)];  В скобках указывается список имен переменных через запятую. Квадратные скобки указывают на то, что список может отсутствовать. Например: read(a, b, c); readln(y); readln; ВНИМАНИЕ Вводить можно целые, вещественные, символьные и строковые величины. Вводимые значения должны разделяться любым количеством пробельных символов (пробел, табуляция, перевод строки). Ввод значения каждой переменной выполняется так: 1. Значение переменной выделяется как группа символов, расположенных между разделителями. 2. Эти символы преобразуются во внутреннюю форму представления, соответствующую типу переменной. 3. Значение записывается в ячейку памяти, определяемую именем переменной. Например, при вводе вещественного числа 3.78 в переменную типа real оно преобразуется из четырех символов (3, “точка”, 7 и 8) в шестибайтовое представление в виде мантиссы и порядка. Кроме того, процедура readln после ввода всех значений выполняет переход на следующую строку исходных данных. Иными словами, если в последующей части программы есть ввод, он будет выполняться из следующей строки исходных данных. При использовании процедуры read очередные исходные данные будут взяты из той же строки. Процедура readln без параметров просто ожидает нажатия клавиши Enter. Особенность ввода символов и строк состоит в том, что пробельные символы в них ничем не отличаются от всех остальных, поэтому разделителями являться не могут. Например, пусть определены переменные var a : integer;

b : real;

d : char; и в программе есть процедура ввода read(a, b, c). Допустим, переменной а надо задать значение, равное 2, переменной b — 3,78, а в d записать символ #. Любой вариант расположения исходных данных приведет к неверному результату, поскольку после второго числа требуется поставить пробельный символ для того, чтобы его можно было распознать, и этот же символ будет воспринят как значение переменной d. 2 3.78# 2      3.78®# 2 3.78 # Символом ® обозначено нажатие клавиши Tab. В первом случае будет выдана ошибка времени выполнения, а в двух оставшихся переменной d будет присвоено значение символа табуляции и символа пробела соответственно. Правильным решением является ввод чисел и символов в разных процедурах и размещение символов в отдельной строке, например: readln(a, b); readln(d); Ввод данных выполняется через буфер — специальную область оперативной памяти. Фактически данные сначала заносятся в буфер, а затем считываются оттуда процедурами ввода. Занесение в буфер выполняется по нажатию клавиши Enter вместе с ее кодом (#13#10). Процедура read, в отличие от readln, не очищает буфер, поэтому следующий за ней ввод будет выполняться с того места, на котором закончился предыдущий, то есть начиная с символа конца строки. read(a);     { считывается целое } write(' Продолжить? (y/n) '); readln(d);      { вместо ожидания ввода символа считывается символ #13 из предыдущего ввода } Чтобы избежать подобной ситуации, следует вместо процедуры read использовать readln. Вывод на экран При выводе выполняется обратное преобразование: из внутреннего представления в символы, выводимые на экран. Для этого в языке определены стандартные процедуры write и writeln. write(список);  writeln[(список)];  Как вы уже, вероятно, догадались, процедура write выводит указанные в списке величины на экран, а процедура writeln вдобавок к этому еще и переводит курсор на следующую строку. Процедура writeln без параметров просто переводит курсор на следующую строку. Выводить можно величины логических, целых, вещественных, символьного и строкового типов. В списке могут присутствовать не только имена переменных, но и выражения, а также их частный случай — константы. Кроме того, для каждого выводимого значения можно задавать его формат, например: writeln('Значение a = ', a:4, ' b = ', b:6:2, sin(a) + b); Рассмотрим этот оператор подробно (переменные a и b описаны выше). В списке вывода пять элементов, разделенных запятыми. В начале записана строковая константа в апострофах, которая выводится без изменений, со всеми пробелами. В непосредственной близости от нее будет выведено значение целой переменной a. После имени переменной через двоеточие указано количество отводимых под нее позиций, внутри которых значение выравнивается по правому краю. Третьим элементом списка является строковая константа, поясняющая расположенное после нее значение переменной b. Для b указаны две форматные спецификации, означающие, что под эту переменную отводится всего шесть позиций, причем две из них — под дробную часть (еще одна позиция будет занята десятичной точкой, итого на целую часть остается три позиции). Последний элемент списка вывода — выражение, значение которого будет выведено в форме по умолчанию (с порядком). Значение a = 2 b = 3.78 4.6892974268E+00 Теперь, когда мы познакомились с примером, можно сформулировать общие правила записи процедур вывода.

 Список вывода разделяется запятыми.

 Список содержит выражения, а также их частные случаи — переменные и константы логических, целых, вещественных, символьного и строкового типов.

 После любого значения можно через двоеточие указать формат, то есть количество отводимых под него позиций. Если значение короче, оно “прижимается” к правому краю отведенного поля; если длиннее, поле “раздвигается” до необходимых размеров.

 Для вещественных чисел можно указать второй формат, сообщающий, сколько позиций из общего количества отводится под дробную часть числа. Необходимо учитывать, что десятичная точка также занимает одну позицию. Если второй или оба формата не указаны, вещественное число выводится в форме с порядком.

 Если форматы не указаны, под целое число, символ и строку отводится минимально необходимое для их представления количество позиций. Под вещественное число всегда отводится 17 позиций, причем 10 из них — под его дробную часть.

 Форматы могут быть выражениями целого типа. СОВЕТ При выводе всегда сопровождайте выводимые значения понятными комментариями и указывайте форматы. Это экономит время осмысления результатов. Теперь наконец-то мы изучили достаточно материала, чтобы с полным пониманием написать первую законченную программу. Пример. Программа, которая переводит температуру в градусах по Фаренгейту в градусы Цельсия по формуле: ,где C — температура по Цельсию, а F — температура по Фаренгейту. program temperature; var fahr, cels : real; { 1 } begin

writeln('Введите температуру по Фаренгейту'); { 2 }

readln(fahr); { 3 }

cels := 5 / 9 * (fahr – 32); { 4 }

writeln('По Фаренгейту: ', fahr:6:2,

' в градусах Цельсия: ', cels:6:2); { 5 } end. Для хранения исходных данных и результатов требуется выделить место в памяти. Это сделано в операторе 1. Поскольку температура может принимать не только целые значения, для переменных fahr и cels выбран вещественный тип real. Оператор 2 представляет собой приглашение ко вводу данных. В приглашении обычно поясняют, сколько и каких величин требуется ввести. Ввод выполняется в операторе 3 с помощью процедуры readln, ее использовать предпочтительнее, чем read. В операторе 4 вычисляется выражение, записанное справа от операции присваивания, и результат присваивается переменной cels, то есть заносится в отведенную этой переменной память. При вычислении целые константы преобразуются компилятором в вещественную форму. В пятом операторе выводятся исходное и рассчитанное значение с соответствующими пояснениями. Ввод и вывод для текстовых файлов При отладке даже небольших программ может потребоваться их выполнить не раз, не два и даже не десять. При этом ввод исходных данных может стать утомительным и испортить все удовольствие от процесса. Удобно заранее подготовить исходные данные в текстовом файле и считывать их в программе. Кроме того, это дает возможность не торопясь продумать, какие исходные данные требуется ввести для полной проверки программы, и заранее рассчитать, что должно получиться в результате. Вывод из программы тоже бывает полезно выполнить не на экран, а в текстовый файл для последующего неспешного анализа. Поскольку работа с файлами подробно рассматривается в разделе “Файлы” (с. ), здесь даются лишь самые необходимые сведения. Ниже приведена версия программы из предыдущего раздела, использующая файлы. program temperature; var fahr, cels : real; f_in, f_out : text; { 1 } begin

assign(f_in, 'D:\pascal\input.txt'); { 2 }

reset(f_in); { 3 }

assign(f_out, 'D:\pascal\output.txt'); { 4 }

rewrite(f_out); { 5 }

readln(f_in, fahr); { 6 }

cels := 5 / 9 * (fahr – 32);

writeln(f_out, 'По Фаренгейту: ', fahr:6:2,

' в градусах Цельсия: ', cels:6:2); { 7 }

close(f_out); { 8 } end. Для того чтобы использовать в программе файлы, необходимо:

 объявить файловую переменную (оператор 1);

 связать ее с файлом на диске (операторы 2 и 4);

 открыть файл для чтения или записи (операторы 3 и 5);

 выполнить операции ввода-вывода (операторы 6 и 7);

 закрыть файл (оператор 8). В этой программе объявляются две переменные f_in и f_out стандартного типа “текстовый файл”. Процедура assign связывает эти переменные с файлами на диске, путь к которым задается с помощью строк символов. Если полный путь не указан, файл располагается в текущем каталоге. Процедура reset открывает файл для чтения, а rewrite — для записи. Если файл, который требуется открыть для записи, существует, он стирается и создается заново. При вводе и выводе в файлы используются уже известные нам процедуры read, readln, write и writeln с единственным отличием: первым аргументом в них передается файловая переменная. Файл, в который выполняется запись, обязательно закрывать с помощью процедуры close, иначе информация может быть потеряна. Вот и все, что пока достаточно знать! СОВЕТ При отладке программы бывает удобно выводить одну и ту же информацию и на экран, и в текстовый файл.