федеральное государственное образовательное
учреждение Высшего профессионального образования
«Южный федеральный университет»
Т. П. шЕСТАКОВА
ПРОГРАММИРОВАНИЕ ПРОСТЫХ ТИПОВ ДАННЫХ
И РАБОТА С ФАЙЛАМИ В СИСТЕМЕ PASCAL
Ростов-на-Дону
2008
Рецензенты:
профессор кафедры физики полупроводников ЮФУ
доктор физико-математических наук
профессор кафедры "Физика" РГУПС
доктор физико-математических наук
П. | |
Программирование простых типов данных и работа с файлами в системе Pascal: Учебное пособие. - Ростов-на-Дону, 20с. |
Учебное пособие содержит вводные сведения о языке программирования Pascal. В нем описываются структура программы на языке Pascal, операторы ввода-вывода данных, стандартные математические функции языка Pascal, условный оператор и оператор выбора, различные формы операторов циклов, простые типы данных (целочисленные, вещественные, перечисляемые, тип-диапазон), сведения о работе с файлами (типизированными, текстовыми, нетипизированными) и строками (которые представляют собой основной тип данных, используемых в текстовых файлах). В каждом разделе приводятся варианты заданий для самостоятельной работы. Учебное пособие предназначено для студентов физического факультета, изучающих курс "Программирование и вычислительная физика".
Содержание
Введение ………………………………………………………………………………..6
1. Структура программы на языке Pascal …………………………………………….7
1.1. Заголовок программы ………………………………………………………7
1.2. Раздел описаний ……………………………………………………………8
1.2.1. Описание констант ………………………………………………...8
1.2.2. Описание переменных и простейшие типы данных …………….9
1.3. Раздел операторов. Операторы ввода-вывода и оператор
присваивания……………………………………………………………..11
1.4. Задания по теме 1………………………………………………………….15
2. Арифметические и логические операции и стандартные функции…………….15
2.1. Арифметические операции в языке Pascal……………………………….15
2.2. Операции сравнения и логические операции……………………………16
2.3. Стандартные математические функции языка Pascal…………………...16
2.4. Приоритет операций в языке Pascal………………………………………17
2.5. Функции преобразования типов………………………………………….18
2.6. Задания по теме 2………………………………………………………….19
3. Условный оператор………………………………………………………………...20
3.1. Полный вариант условного оператора………………………...…………20
3.2. Краткий вариант условного оператора………………………...…………21
3.3. Операторные скобки begin ... end…………………………………..22
3.4. Задания по теме 3………………………………………………………….23
4. Операторы циклов………………………………………………………………….24
4.1. Оператор цикла for .. do……………………………………………..24
4.2. Оператор цикла while .. do………………………………………….27
4.3. Оператор цикла repeat .. until……………………………………28
4.4. Задания по теме 4………………………………………………………….29
5. Целочисленные типы данных……………………………………………………..30
5.1. Типы данных и диапазон значений………………………………………30
5.2. Ошибки, связанные с неправильным выбором типа данных…………...32
5.3. Стандартные функции, применимые к целочисленным типам данных.32
5.4. Пример: вычисление суммы цифр числа……………………...…………33
5.5. Задания по теме 5………………………………………………………….34
6. Вещественные типы данных……………………………………………………….36
6.1. Типы данных и диапазон значений………………………………………36
6.2. Пример вычислений с заданной точностью……………………………..37
6.3 Задания по теме 6………………………………………………………..…42
7. Перечисляемый тип, тип-диапазон и оператор case……………………………43
7.1. Оператор выбора…………………………………………………………..43
7.2. Перечисляемый тип………………………………………………………..45
7.3. Тип-диапазон……………………………………………………………....45
7.4. Пример использования перечисляемого типа данных и оператора
выбора case..............................................................................................46
7.5 Задания по теме 7…………………………………………………………..50
8. Файлы……………..………………………………………………………………...52
8.1. Общие сведения о работе с файлами……………………………………..52
8.1.1. Открытие файла…………...………………………………………53
8.1.2. Стандартные имена логических устройств…………...…………54
8.1.3. Открытие файла для чтения……………...……………………....54
8.1.4. Открытие файла для записи………………...…………………....55
8.1.5. Стандартные процедуры для работы с файлами любого типа...56
8.1.6. Стандартные функции для работы с файлами любого типа…...57
8.2. Типизированные файлы…………………………………………………...58
8.2.1. Стандартные процедуры для работы с типизированными
файлами……………………………………………………………58
8.2.2. Стандартные функции для работы с типизированными
файлами……………………………………………………………60
8.2.3. Пример работы с типизированным файлом…...………………...60
8.3. Текстовые файлы…………………………………………………………..62
8.3.1. Стандартные процедуры для работы с текстовыми файлами.63
8.3.2. Стандартные функции для работы с текстовыми файлами…65
8.3.3. Пример работы с текстовым файлом………………………….66
8.4. Нетипизированные файлы………………………………………………68
8.5 Задания по теме 8………………………………………………………...68
9. Строки (тип данных string)………………………………………………….…69
9.1. Описание строкового типа данных………………………………………69
9.2. Операции над строками в языке Pascal………………………………..71
9.3. Стандартные процедуры для работы со строками………………………72
9.4. Стандартные функции для работы со строками………………………..73
9.5. Пример: редактирование текстового файла……………………………...75
9.6 Задания по теме 9…………………………………………………………..81
Литература…………………………………………………………………………….82
Введение
Настоящее учебное пособие имеет целью познакомить студентов с простейшими типами данных, используемых в системе программирования Pascal, структурой программы и основными операторами языка Pascal, что включает операторы ввода-вывода, условный оператор и оператор выбора, операторы циклов. Поскольку ввод-вывод данных может осуществляться не только с клавиатуры и на экран компьютера, но и в файлы, сохраняемые на различных носителях информации, значительная часть данного учебного пособия посвящена работе с файлами в системе программирования Pascal. Описываются текстовые, типизированные и нетипизированные файлы, а также операторы, необходимые для работы с ними, и строковый тип данных, используемый в текстовых файлах.
В настоящее время имеется большое количество книг по программированию на языке Pascal. В качестве примера можно привести книги [1 - 6], содержащие исчерпывающие сведения о структурах этого языка программирования. При подготовке учебного пособия ставилась цель дать краткое изложение, которое может быть использовано студентами как при овладении основными приемами программирования на языке Pascal, так и в дальнейшей работе в качестве справочного материала. В каждом разделе приводятся небольшие учебные программы, демонстрирующие использование конструкций языка, а также варианты заданий по программированию для самостоятельной работы студентов, направленные на закрепление материала по каждой теме.
Предполагается, что читатели имеют некоторые навыки работы на компьютере, знакомы с системой Windows и различными типами файлов, имеют представление о принципах функционирования компьютера, алгоритмах и программах, системах счисления и хранении информации в памяти компьютера.
1. Структура программы на языке Pascal
Отличительной особенностью языка Pascal по сравнению с языками более низкого уровня является необходимость описания всех используемых в программе констант и переменных. В связи с этим каждая программа, помимо исполняемой части, которая называется разделом операторов, или телом программы, содержит также раздел описаний. Этот раздел, помимо перечисления всех констант и переменных с указанием их типов, может включать описание введенных программистом типов данных, процедур и функций. Таким образом, структуру программы на языке Pascal можно представить следующей схемой:
Заголовок программы Program <имя программы>; |
Раздел описаний · Описание констант · Описание типов данных · Описание переменных · Описание функций · Описание процедур |
Раздел операторов begin <операторы> end. |
Рис. 1. Структура программы на языке Pascal
1.1. Заголовок программы.
Заголовок программы содержит зарезервированное, служебное слово program, которое используется только для объявления имени программы:
Program <имя программы>;
Имя программы, так же как имена используемых в программе констант, переменных, процедур, функций и т. д., называется идентификатором (по-английски - identifier). Идентификаторы задаются программистом, при этом используются следующие правила:
· идентификатор может состоять из букв латинского алфавита, цифр, знака подчеркивания; никакие другие символы в идентификаторе недопустимы;
· идентификатор не может начинаться с цифры;
· идентификатор не может совпадать ни с одним из зарезервированных слов;
· длина идентификатора может быть произвольной, но значащими считаются первые 63 символа.
Заметим, что в языке Pascal нет различия между прописными и строчными (большими и маленькими) буквами при написании служебных слов, операторов и идентификаторов.
Как и любой оператор в языке Pascal, заголовок оканчивается точкой с запятой. Заметим, что заголовок программы является необязательным, и его можно опускать. Примеры:
Program First;
Program P12_v3;
1.2. Раздел описаний.
В рамках данного учебном пособии нас будут интересовать в основном описание констант и переменных; при рассмотрении оператора выбора мы познакомимся с описанием перечисляемого типа данных и типа-диапазона. Процедуры и функции относятся к более сложным конструкциям языка Pascal и в данном пособии не рассматриваются.
1.2.1. Описание констант:
const <имя константы> = <значение константы>;
Здесь используется служебное слово const – сокращение от английского constant – постоянная. Примеры описания констант:
const
c=; {скорость света}
e=1.6021892E-19; (*заряд электрона*)
В последнем случае использован стандартный формат представления действительных чисел, при котором вместо десятичной запятой ставится точка, а символ “E” отделяет порядок числа (степень десяти), соответственно, заряд электрона равен 1,6021892·10-19 Кл.
В данном примере были использованы комментарии – это часть программы, заключенная в фигурные скобки. Она игнорируется компилятором и никак не отражается на работе программы. Альтернативно, комментарий можно ограничивать парой символов круглая скобка + звездочка.
1.2.2. Описание переменных и простейшие типы данных.
var <имя переменной>: <тип переменной>;
Служебное слово var – сокращение от английского variable – переменная. Для того, чтобы описывать переменные, нам необходимо получить представление о типах данных в языке Pascal.
Выделим наиболее часто употребляемые из простейших типов данных.
integer | целочисленные данные от -32768 до +32767; занимают 2 байта; |
real | действительные данные, диапазон значений модуля от 2.9E-39 до 1.7E+38; точность представления данных - 11..12 значащих цифр; |
char | символ, занимает 1 байт; |
string | строка символов; |
boolean | логический тип, занимает 1 байт и имеет два значения: false - ложь; true - истина. |
Все пять целочисленных типов данных будут рассмотрены в разделе 6, пять действительных типов данных – в разделе 7, в разделе 8 – перечисляемый тип и тип-диапазон. Примеры описания переменных:
var
a1,a2,a3:integer;
b1,b2,b3:real;
c1:char;
s1:string;
Переменные одного типа могут быть перечислены через запятую.
|
Рис. 2. Типы данных в языке Pascal
1.3. Раздел операторов. Операторы ввода-вывода и оператор присваивания.
Раздел операторов – это основная часть программы, она ограничивается служебными словами begin и end. В конце программы ставится точка. Все, что вы напишете после точки, будет проигнорировано компилятором.
Любая программа предназначена для обработки данных, вводимых пользователем, и вывода результатов этой обработки. Работу пользователя с программой облегчает вывод на экран сообщений о том, для чего предназначена данная программа, какие действия в данный момент она выполняет или ожидает от пользователя. Появление таких сообщений свидетельствует о культуре программирования. Вывод сообщений можно организовать с помощью оператора write/writeln, который, кроме того, позволяет вывести на экран значение констант, переменных или выражений. Действие оператора writeln отличается от оператора write тем, что оператор writeln после вывода информации переводит курсор на следующую строку. Оператор writeln без аргументов просто переводит курсор на следующую строку.
Предположим, что начинающий программист решил вывести на экран радостное сообщение: “Это моя первая программа!”. Для этого можно использовать оператор
writeln('Это моя первая программа!');
Здесь в скобках стоит строковая константа (она заключается в апострофы). Этот оператор выведет на экран строку “Это моя первая программа!”, уже без апострофов, после чего курсор будет установлен в строке, следующей за текстом сообщения. Той же цели можно достичь иначе, определив строковую константу
const
s='Это моя первая программа!';
begin
writeln(s);
. . .
end.
Также можно определить строковую переменную. Для этой цели нам понадобится оператор присваивания, который имеет вид:
<имя переменной> := <значение переменной /
результат вычисления выражения>;
В данном случае мы можем использовать операторы
s1:='Это моя первая программа!';
writeln(s1);
Другие примеры оператора присваивания:
a1:=5;
b1:=2.1;
c1:='A';
Выведем на экран значения этих переменных.
write(a1,b1,c1);
На экране увидим
5 2.E+00A
Значение переменной b1 выведено в стандартном формате с плавающей точкой, принятом по умолчанию. Численные значения отделяются друг от друга пробелом, однако значение символьной переменной c1 не отделяется от значения переменной b1. Для того, чтобы значения переменных было легче воспринимать, можно задать формат вывода действительных чисел:
<имя переменной>:<общее количество позиций>:<количество десятичных знаков после запятой>
Иными словами, после имени действительной переменной ставится двоеточие, после которого указывается общее количество позиций для вывода числа, включая десятичную точку и знак числа, затем снова ставится двоеточие, после которого указывается количество десятичных знаков после запятой. После имени целой или символьной переменной также можно указать количество позиций для вывода их значений:
<имя переменной>:<количество позиций>
Полезно также использовать строковые константы для сообщений о том, значения каких переменных выводятся на экран. Оператор
write(‘a1=’,a1:2,‘ b1=’,b1:5:2,‘ c1=’,c1:3);
выведет на экран сообщение “a1=”, затем значение переменной a1, на которое будет отведено 2 позиции, сообщение “ b1=”, затем значение переменной b1, на которое будет отведено 5 позиций, в том числе две – на десятичные знаки после запятой, наконец, сообщение “ c1=” и значение переменной c1, на которое будет отведено 3 позиции. Знаки пробелов перед “b1=” и “c1=” отделяют эти сообщения от предшествующих численных значений:
a1= 5 b1= 2.10 c1= A
Для ввода информации с клавиатуры используется оператор read/readln. Когда в программе встречается этот оператор, ее работа прерывается, и компьютер переходит в режим ожидания до тех пор, пока пользователь не введет на клавиатуре значения переменных, указанных в операторе read/readln, и не нажмет клавишу ENTER. Например, оператор
read(a2,a3);
считывает значения переменных a2 и a3 (значения должны вводиться через пробел), оператор
readln(s1);
считывает строку символов s1. Как и в случае оператора writeln, оператор readln после ввода информации переводит курсор на следующую строку. Разница между операторами read и readln проявляется при работе с файлами (заметим, что ввод-вывод данных можно осуществлять не только с клавиатуры и на экран, но также их файла и в файл, при этом используются те же самые операторы ввода-вывода). Оператор readln без аргументов переводит систему в состояние ожидания, - работа программы прерывается и компьютер ждет нажатия клавиши ENTER. После этого программа продолжает работу.
Далее следует пример программы, которая осуществляет ввод двух чисел с клавиатуры с последующим вычислением их суммы и выводом суммы на экран.
Program First;
{Комментарий: это заголовок программы}
(* Далее начинается раздел описаний *)
var
a1,a2,a3: integer;
{Конец раздела описаний}
{Начало раздела операторов}
begin
writeln('Введите два числа: a1 и a2');
write('a1 = ');
readln(a1);
write('a2 = ');
readln(a2);
a3:= a1+a2;
writeln('Сумма чисел a1 и a2: ',a3);
readln;
end.
1.4. Задания по теме 1: Структура программы на языке Pascal. Простейшие типы данных. Операторы ввода-вывода.
Написать простейшую программу на языке Pascal, которая программа должна выполнять следующие действия:
a) выводить на экран сообщение о том, для чего предназначена данная программа, например, "Программа находит сумму двух целых чисел";
b) считать данные с клавиатуры;
c)
|
В программе необходимо вычислить:
1) сумму двух действительных чисел;
2) сумму целого и действительного чисел;
3) произведение двух целых чисел;
4) произведение целого и действительного чисел;
5) разность двух целых чисел;
6) разность двух действительных чисел;
7) разность целого и действительного чисел;
8) частное от деления двух целых чисел;
9) частное от деления двух действительных чисел;
10) частное от деления целого и действительного чисел.
2. Арифметические и логические операции
и стандартные функции
2.1. Арифметические операции в языке Pascal:
+ | сложение; |
- | вычитание; |
* | умножение; |
/ | деление; |
div | целочисленное деление; |
mod | получение остатка от целочисленного деления. |
Подчеркнем, что div и mod являются операциями (а не функциями) языка Pascal, такими же, как умножение или вычитание. В тексте программы они с обеих сторон отделяются пробелами. Проиллюстрируем их использование несколькими примерами.
x:=22/5;
writeln(x:4:2);
(На экране появится результат 4.40.)
a:=22 div 5;
writeln(a:1);
(На экран будет выведено 4 – целая часть числа 4.40.)
x:=22 mod 5;
writeln(x:4:2);
(На экран выводится 2.00 – остаток от деления 22 на 5.)
2.2. Операции сравнения и логические операции. Помимо арифметических операции, в языке Pascal имеются операции сравнения:
= | равно; |
<> | не равно; |
< | меньше; |
> | больше; |
<= | меньше или равно; |
>= | больше или равно. |
Используются следующие логические операции:
not | логическое не; |
and | логическое и; |
or | логическое или; |
xor | исключающее или. |
2.3. Стандартные математические функции языка Pascal:
abs(x) | абсолютное значение (модуль) числа; |
arctan(x) | арктангенс; |
cos(x) | косинус; |
exp(x) | экспонента; |
frac(x) | дробная часть аргумента; |
int(x) | целая часть аргумента; |
ln(x) | натуральный логарифм; |
pi | значение числа p = 3,1415926...; |
sin(x) | синус; |
sqr(x) | квадрат аргумента; |
sqrt(x) | квадратный корень. |
Аргументами всех функций (кроме функции pi, не имеющей аргумента) могут быть действительные и целые числа. Значениями всех перечисленных функций являются действительные числа. Заметим, что в языке Pascal не существует операции возведения в степень. Выражение типа
в общем случае может быть вычислено по формуле
, используя экспоненциальную функцию и логарифм. В частных случаях, когда n =2, 3, 4, можно использовать функцию sqr(x) и операцию умножения. Подобным образом, в языке Pascal отсутствует стандартная функция
, и ее следует вычислять как отношение синуса к косинусу.
Следующий фрагмент программы иллюстрирует тот факт, что сумма квадратов синуса и косинуса любого аргумента равна 1.
write('Введите любое действительное число: ');
readln(x);
x:=sqr(sin(x))+sqr(cos(x));
writeln('Сумма квадратов синуса и косинуса равна ', x:4:2);
2.4. Приоритет операций в языке Pascal. При написании математических выражений в языке Pascal необходимо соблюдать приоритет операций: в первую очередь выполняются действия в скобках, затем – умножение и деление, в том числе – целочисленное, и, наконец, сложение и вычитание. При записи сложных выражений очень важно следить за правильной расстановкой скобок. Приоритет операций всех типов представлен в следующей таблице:
1 | not; |
2 | *, /, div, mod, and; |
3 | +, -, or, xor; |
4 | =, <>, <, >, <=, >=. |
2.5. Функции преобразования типов:
round(x) | округляет действительное число до ближайшего целого; |
trunc(x) | преобразует действительное число в целое путем отбрасывания дробной части. |
Аргументами этих функций являются действительные числа, значениями - целые. Различие в этих функциях демонстрируется следующим примером: оператор
writeln(round(7.5):3,trunc(7.5):3);
выведет на экран значения “ 8 7”.
ord(x) | возвращает код символа; аргументом является любой символ, значением - целое. |
chr(x) | возвращает символ по заданному коду; аргументом является целое число от 0 до 255, значением - символ. |
Прописные буквы латинского алфавита (A – Z) имеют коды 65 –букв), строчные буквы латинского алфавита (a – z) – 97 – 122. Коды букв русского алфавита зависят от того, какая система кодировки символов используется. В кодировке Windows большие буквы русского алфавита (А – Я) имеют коды 192 – буквы, кроме буквы Ё, которая имеет код 168), а маленькие буквы (а – я) – 224 – 255 (буква ё имеет код 184). В кодировке DOS большие буквы русского алфавита (А – Я) имеют коды 128 – 159, а маленькие буквы – 160 – 175 (а – п) и 224 – 239 (р – я), буквы Ё и ё в этой кодировке отсутствуют.
Операторы
writeln(ord('A'));
writeln(ord('b'));
выведут на экран коды латинских букв A и b, соответственно, 65 и 98. Функции ord(x) и chr(x) являются обратными друг другу; оператор
writeln(chr(ord('A')));
выведет на экран латинскую букву A.
2.6. Задания по теме 2: Стандартные математические функции языка Pascal.
В следующих заданиях x, y, z - заданные действительные числа. Написать программу, которая вычисляет a, b, если
1)
;
2)
;
3)
;
4)
;
5)
;
6)
;
7)
;
8)
;
9)
;
10)
.
3. Условный оператор
3.1. Полный вариант условного оператора. Условный оператор в языке Pascal имеет следующий вид:
if <условие>
then <оператор 1, который нужно выполнить
в случае, если условие справедливо>
else <оператор 2, который нужно выполнить
в случае, если условие нарушено>;
В следующей небольшой программе использование условного оператора иллюстрируется на примере нахождения максимального из двух чисел.
Program If_operator_1;
var
a, b,max:real;
begin
write('Эта программа находит максимальное ');
writeln('из двух действительных чисел.');
writeln('Введите два числа:');
write('a= ');
readln(a);
write('b= ');
readln(b);
if a>b
then max:=a
else max:=b;
writeln('max= ', max);
writeln;
end.
3.2. Краткий вариант условного оператора. В условном операторе может отсутствовать ветвь else. В этом случае оператор выглядит следующим образом:
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 |



