Программирование простых типов данных и работа с файлами в системе Pascal

Рассмотрение сведений о языке программирования Pascal. Описание структуры программы на языке Pascal, операторов ввода-вывода данных, стандартных математических функций языка, условного оператора и оператора выбора, сведения о работе с файлами и строками.

Рубрика Программирование, компьютеры и кибернетика
Вид учебное пособие
Язык русский
Дата добавления 12.08.2015
Размер файла 144,4 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

федеральное государственное образовательное

учреждение Высшего профессионального образования

«Южный федеральный университет»

ПРОГРАММИРОВАНИЕ ПРОСТЫХ ТИПОВ ДАННЫХ И РАБОТА С ФАЙЛАМИ В СИСТЕМЕ PASCAL

(учебное пособие)

Т. П. Шестакова

Ростов-на-Дону

2008

Рецензенты:

профессор кафедры физики полупроводников ЮФУ

доктор физико-математических наук Тополов В. Ю.

профессор кафедры "Физика" РГУПС

доктор физико-математических наук Лагутин Б. М. Шестакова Т.П.

Программирование простых типов данных и работа с файлами в системе Pascal: Учебное пособие. Ростов-на-Дону, 2008. 82 с.

Учебное пособие содержит вводные сведения о языке программирования Pascal. В нем описываются структура программы на языке Pascal, операторы ввода-вывода данных, стандартные математические функции языка Pascal, условный оператор и оператор выбора, различные формы операторов циклов, простые типы данных (целочисленные, вещественные, перечисляемые, тип-диапазон), сведения о работе с файлами (типизированными, текстовыми, нетипизированными) и строками (которые представляют собой основной тип данных, используемых в текстовых файлах). В каждом разделе приводятся варианты заданий для самостоятельной работы. Учебное пособие предназначено для студентов физического факультета, изучающих курс "Программирование и вычислительная физика".

программирование pascal оператор язык

Содержание

Введение

1. Структура программы на языке Pascal

1.1 Заголовок программы

1.2 Раздел описаний

1.2.1 Описание констант

1.2.2 Описание переменных и простейшие типы данных

1.3 Раздел операторов. Операторы ввода-вывода и оператор присваивания

1.4 Задания по теме 1

2. Арифметические и логические операции и стандартные функции

2.1 Арифметические операции в языке Pascal

2.2 Операции сравнения и логические операции

2.3 Стандартные математические функции языка Pascal

2.4 Приоритет операций в языке Pascal

2.5 Функции преобразования типов

2.6 Задания по теме 2

3. Условный оператор

3.1 Полный вариант условного оператора

3.2 Краткий вариант условного оператора

3.3 Операторные скобки begin ... end

3.4 Задания по теме 3

4. Операторы циклов

4.1 Оператор цикла for .. do

4.2 Оператор цикла while .. do

4.3 Оператор цикла repeat .. until

4.4 Задания по теме 4

5. Целочисленные типы данных

5.1 Типы данных и диапазон значений

5.2 Ошибки, связанные с неправильным выбором типа данных

5.3 Стандартные функции, применимые к целочисленным типам данных

5.4 Пример: вычисление суммы цифр числа

5.5 Задания по теме 5

6. Вещественные типы данных

6.1 Типы данных и диапазон значений

6.2 Пример вычислений с заданной точностью

6.3 Задания по теме 6

7. Перечисляемый тип, тип-диапазон и оператор case

7.1 Оператор выбора

7.2 Перечисляемый тип

7.3 Тип-диапазон

7.4 Пример использования перечисляемого типа данных и оператора выбора case

7.5 Задания по теме 7

8. Файлы

8.1 Общие сведения о работе с файлами

8.1.1 Открытие файла

8.1.2 Стандартные имена логических устройств

8.1.3 Открытие файла для чтения

8.1.4 Открытие файла для записи

8.1.5 Стандартные процедуры для работы с файлами любого типа

8.1.6 Стандартные функции для работы с файлами любого типа

8.2 Типизированные файлы

8.2.1 Стандартные процедуры для работы с типизированными файлами

8.2.2 Стандартные функции для работы с типизированными файлами

8.2.3 Пример работы с типизированным файлом

8.3 Текстовые файлы

8.3.1 Стандартные процедуры для работы с текстовыми файлами

8.3.2 Стандартные функции для работы с текстовыми файлами

8.3.3 Пример работы с текстовым файлом

8.4 Нетипизированные файлы

8.5 Задания по теме 8

9. Строки (тип данных string)

9.1 Описание строкового типа данных

9.2 Операции над строками в языке Pascal

9.3 Стандартные процедуры для работы со строками

9.4 Стандартные функции для работы со строками

9.5 Пример: редактирование текстового файла

9.6 Задания по теме 9

Литература

Введение

Настоящее учебное пособие имеет целью познакомить студентов с простейшими типами данных, используемых в системе программирования Pascal, структурой программы и основными операторами языка Pascal, что включает операторы ввода-вывода, условный оператор и оператор выбора, операторы циклов. Поскольку ввод-вывод данных может осуществляться не только с клавиатуры и на экран компьютера, но и в файлы, сохраняемые на различных носителях информации, значительная часть данного учебного пособия посвящена работе с файлами в системе программирования Pascal. Описываются текстовые, типизированные и нетипизированные файлы, а также операторы, необходимые для работы с ними, и строковый тип данных, используемый в текстовых файлах.

В настоящее время имеется большое количество книг по программированию на языке Pascal. В качестве примера можно привести книги [1 6], содержащие исчерпывающие сведения о структурах этого языка программирования. При подготовке учебного пособия ставилась цель дать краткое изложение, которое может быть использовано студентами как при овладении основными приемами программирования на языке Pascal, так и в дальнейшей работе в качестве справочного материала. В каждом разделе приводятся небольшие учебные программы, демонстрирующие использование конструкций языка, а также варианты заданий по программированию для самостоятельной работы студентов, направленные на закрепление материала по каждой теме.

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

1. Структура программы на языке Pascal

Отличительной особенностью языка Pascal по сравнению с языками более низкого уровня является необходимость описания всех используемых в программе констант и переменных. В связи с этим каждая программа, помимо исполняемой части, которая называется разделом операторов, или телом программы, содержит также раздел описаний. Этот раздел, помимо перечисления всех констант и переменных с указанием их типов, может включать описание введенных программистом типов данных, процедур и функций. Таким образом, структуру программы на языке Pascal можно представить следующей схемой:

Рис. 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=300000000; {скорость света}

e=1.6021892E-19; (*заряд электрона*)

В последнем случае использован стандартный формат представления действительных чисел, при котором вместо десятичной запятой ставится точка, а символ “E” отделяет порядок числа (степень десяти), соответственно, заряд электрона равен 1,6021892·10-19 Кл.

В данном примере были использованы комментарии - это часть программы, заключенная в фигурные скобки. Она игнорируется компилятором и никак не отражается на работе программы. Альтернативно, комментарий можно ограничивать парой символов круглая скобка + звездочка.

1.2.2 Описание переменных и простейшие типы данных

var <имя переменной>: <тип переменной>;

Служебное слово var - сокращение от английского variable - переменная. Для того, чтобы описывать переменные, нам необходимо получить представление о типах данных в языке Pascal.

Выделим наиболее часто употребляемые из простейших типов данных.

integer

целочисленные данные от 32768 до +32767; занимают 2 байта;

real

действительные данные, диапазон значений модуля от 2.9E39 до 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.1000000000E+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, которая программа должна выполнять следующие действия:

выводить на экран сообщение о том, для чего предназначена данная программа, например, "Программа находит сумму двух целых чисел";

b) считать данные с клавиатуры;

по заданным значениям переменных произвести вычисления и вывести результат на экран.

В программе необходимо вычислить:

сумму двух действительных чисел;

сумму целого и действительного чисел;

произведение двух целых чисел;

произведение целого и действительного чисел;

разность двух целых чисел;

разность двух действительных чисел;

разность целого и действительного чисел;

частное от деления двух целых чисел;

частное от деления двух действительных чисел;

частное от деления целого и действительного чисел.

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

значение числа = 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 - 90 (26 букв), строчные буквы латинского алфавита (a - z) - 97 - 122. Коды букв русского алфавита зависят от того, какая система кодировки символов используется. В кодировке Windows большие буквы русского алфавита (А - Я) имеют коды 192 - 223 (32 буквы, кроме буквы Ё, которая имеет код 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. В этом случае оператор выглядит следующим образом:

if <условие>

then <оператор, который нужно выполнить,

если условие справедливо>;

Найдем максимальное из двух чисел, используя краткий вариант условного оператора:

Program If_operator_2;

var

a,b,max:real;

begin

write('Эта программа находит максимальное ');

writeln('из двух действительных чисел.');

writeln('Введите два числа:');

write('a= ');

readln(a);

write('b= ');

readln(b);

max:=a;

if a<b

then max:=b;

writeln('max= ', max);

writeln;

end.

3.3 Операторные скобки begin ... end

Если ветви then или else должны содержать более одного оператора, в качестве <оператор 1> и/или <оператор 2> следует использовать составной оператор

begin

<операторы>

end

Служебные слова begin и end выполняют функцию операторных скобок, ограничивающих группу операторов.

Немного усложним задачу: найдем максимальное из двух чисел a и b, при этом, если максимальным окажется число a, его следует возвести в квадрат, если же максимальным окажется число b, его следует возвести в куб.

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 begin

writeln('Максимальное число: ',a:5:2);

writeln('Результат: ',sqr(a):5:2);

end

else begin

writeln('Максимальное число: ',b:5:2);

writeln('Результат: ',b*sqr(b):5:2);

end

writeln;

end.

3.4 Задания по теме 3

Условный оператор

В следующих заданиях x, y, z заданные действительные числа. Написать программу, которая вычисляет f, если

1) ;

2) ;

3) ;

4) ;

5)

6)

7)

8) 9)

10)

4. Операторы циклов

4.1 Оператор цикла for .. do. Общий вид оператора

for <параметр цикла> := <начальное значение> to

<конечное значение> do <оператор>;

Здесь <параметр цикла> переменная целого или порядкового типа; <оператор> любой оператор, в том числе составной, т. е. группа операторов, заключенных в "операторные скобки" begin .. end. Начальное и конечное значения могут быть вычисляемыми выражениями.

При выполнении оператора for .. do переменной параметру цикла присваивается указанное начальное значение, затем проверяется условие, не превосходит ли параметр цикла указанное конечное значение. Если условие не выполняется, оператор for .. do завершает свою работу. В противном случае выполняются указанный оператор, после чего значение параметра цикла увеличивается на единицу, и цикл повторяется. Если начальное значение больше конечного, цикл не выполняется ни разу.

Возможна другая форма оператора for .. do, когда при каждом исполнении цикла параметр цикла уменьшается на единицу:

for <параметр цикла> := <начальное значение> downto

<конечное значение> do <оператор>;

Теперь начальное значение должно быть больше конечного или равно ему, иначе цикл выполняться не будет.

Чтобы проиллюстрировать использование операторов цикла, рассмотрим следующую задачу: нужно вычислить выражение

.

В числителе имеется n слагаемых вида , причем k пробегает значение от 1 до n. В знаменателе имеется n слагаемых вида , k также пробегает значение от 1 до n. Выражение можно переписать следующим образом:

.

Для вычисления этого выражения можно организовать цикл, в качестве параметра которого выберем переменную k, она будет изменяться от начального значения 1 до конечного значения n. Внутри цикла последовательно вычислим числитель и знаменатель дроби, для чего нам понадобятся еще две переменные, скажем, p (числитель) и q (знаменатель). До входа в цикл присвоим этим переменным начальные (нулевые) значения. Вообще говоря, при запуске программы в системе программирования Pascal значения всех переменных зануляются (происходит инициализация), так что, казалось бы, присваивание нулевых значений можно было бы опустить, но с точки зрения логики программирования значения всех переменных, используемых внутри цикла, должны быть определены перед входом в цикл, ведь эти значения могут быть ненулевыми, или эти переменные могли быть использованы ранее в программе и получить другие (ненулевые) значения.

Внутри цикла будем последовательно прибавлять к значениям переменных p и q выражения и , соответственно. После выхода из цикла найдем окончательный результат как отношение p и q.

Внимание! Перед запуском программы, которая содержит циклы, настоятельно рекомендуется ее сохранить! Если в программе есть ошибки, она может "зациклиться" (выполнение цикла никогда не прекратится), и выполнение программы придется завершить средствами Windows, при этом программа не будет сохранен в памяти компьютера, и ее придется набирать заново.

Program Cycles_1;

var

n,k:integer;

p,q,r:real;

begin

writeln('Программа находит значение выражения.');

write('Задайте целое число n: ');

readln(n);

p:=0;

q:=0;

for k:=1 to n

do begin

p:=p+sqrt(2*k+1);

q:=q+sqrt(2*k)

end;

r:=p/q;

writeln('Значение выражения равно ',r:7:4);

end.

Ту же самую программу можно написать, используя вторую форму цикла (for .. do .. downto):

Program Cycles_2;

var

n,k:integer;

p,q,r:real;

begin

writeln('Программа находит значение выражения.');

write('Задайте целое число n: ');

readln(n);

p:=0;

q:=0;

for k:=n downto 1

do begin

p:=p+sqrt(2*k+1);

q:=q+sqrt(2*k)

end;

r:=p/q;

writeln('Значение выражения равно ',r:7:4);

end.

4.2 Оператор цикла while .. do

Общий вид оператора

while <условие> do <оператор>;

Указанный здесь оператор (в том числе составной) циклически выполняется, пока справедливо указанное условие. Условие проверяется до выполнения оператора. Внутри цикла необходимо предусмотреть оператор, изменяющий значение переменной цикла, так как, в отличие от цикла for .. do, в данном случае параметр цикла не меняется автоматически. Шаг изменения параметра цикла не обязательно равен 1. До входа в цикл переменной цикла необходимо присвоить начальное значение.

Приведем вариант рассмотренной выше программы с использованием оператора цикла while .. do:

Program Cycles_3;

var

n,k:integer;

p,q,r:real;

begin

writeln('Программа находит значение выражения.');

write('Задайте целое число n: ');

readln(n);

p:=0;

q:=0;

k:=1;

while k<=n

do begin

p:=p+sqrt(2*k+1);

q:=q+sqrt(2*k);

k:=k+1

end;

r:=p/q;

writeln('Значение выражения равно ',r:7:4);

end.

4.3 Оператор цикла repeat .. until. Общий вид оператора

repeat <операторы> until <условие>;

Указанные здесь операторы выполняются, после чего проверяется указанное условие. Операторы повторяются до тех пор, пока не выполнено условие. При необходимости циклического повторения нескольких операторов, оператор repeat .. until не требует использования составного оператора (т. е. "операторные скобки" begin .. end можно не писать). Так же, как и в случае цикла while .. do, внутри цикла необходимо предусмотреть оператор, изменяющий значение переменной цикла, а до входа в цикл - присвоить переменной цикла начальное значение.

Приведем вариант рассмотренной выше программы с использованием оператора цикла repeat .. until:

Program Cycles_3;

var

n,k:integer;

p,q,r:real;

begin

writeln('Программа находит значение выражения.');

write('Задайте целое число n: ');

readln(n);

p:=0;

q:=0;

k:=1;

repeat

p:=p+sqrt(2*k+1);

q:=q+sqrt(2*k);

k:=k+1

until k>n;

r:=p/q;

writeln('Значение выражения равно ',r:7:4);

end.

4.4 Задания по теме 4: Операторы циклов

В следующих заданиях n заданное натуральное число, x заданное действительное число. Написать три различных варианта программы, используя, соответственно, операторы циклов for .. do, while .. do, repeat .. until. В программе необходимо вычислить:

1) ;

2) ;

3) ;

4) ;

5) ;

6) ;

7) ;

8) ;

9) ;

10) .

5. Целочисленные типы данных

5.1 Типы данных и диапазон значений

В языке Pascal имеется 5 целочисленных типов данных. В зависимости от типа переменная может принимать тот или иной диапазон значений.

byteбайт длина 8 бит (без знака), диапазон значений 0 .. +255;

shortint короткое целое длина 8 бит (1 бит знак числа + 7 бит двоичные цифры), диапазон значений 128 .. +127;

word слово длина 16 бит (без знака), диапазон значений 0 .. +65 535;

integer целое длина 16 бит (1 бит знак числа + 15 бит двоичные цифры), диапазон значений 32 768 .. +32 767;

longint длинное целое длина 16 бит (1 бит знак числа + 31 бит двоичные цифры), диапазон значений 2 147 483 648 .. +2 147 483 647.

5.2 Ошибки, связанные с неправильным выбором типа данных

В зависимости от того, какой тип данных имеет переменная, ей будет отведена соответствующая область памяти при работе программы. Например, если известно, что целая положительная переменная при работе программы будет принимать значения, не превосходящие 255, нет смысла описывать эту переменную, как имеющею тип integer, более правильно использовать тип byte.

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

var

b:integer;

begin

b:=1000; (* Это значение не превосходит 32767 *)

b:=50*b; (* b=50000, что больше 32767 *)

writeln('b=',b:5)

end.

В результате получим неправильное значение b=-15536. Для того, чтобы объяснить такой результат, нужно вспомнить, что компьютер работает с числами в двоичном представлении. Число 50000 в двоичной системе счисления есть 1100 0011 0101 0000. Поскольку это число типа integer, первый бит 1 указывает на знак числа, это число воспринимается как отрицательное. Отрицательные числа записываются в так называемом дополнительном двоичном коде, в котором 1100 0011 0101 0000 соответствует числу 15536.

Иногда ошибки, вызванные тем, что значение числа превосходит допустимый диапазон, приводят к прерыванию работы программы и сообщению о переполнении, например, в случае вычисления факториала числа n (факториал числа - произведение всех целых чисел от 1 до n), если соответствующая переменная не описана как longint.

5.3 Стандартные функции, применимые к целочисленным типам данных

К данным целых типов применимы все арифметические операции, в частности, целочисленное деление div, получение остатка от деления mod, а также стандартные функции:

abs(i)вычисляет модуль i, i выражение любого целого типа;

chr(i)возвращает символ, соответствующий коду i, i выражение типа byte (имеет значение от 0 до 255), результат имеет тип char;

dec(i)уменьшает значение переменной i на 1, i переменная любого целого типа;

dec(i,j)уменьшает значение переменной i на целое число j, i переменная любого целого типа;

inc(i)увеличивает значение переменной i на 1, i переменная любого целого типа;

inc(i,j)увеличивает значение переменной i на целое число j, i переменная любого целого типа;

hi(i)возвращает старший байт аргумента, i выражение типа integer или word, результат имеет тип byte;

lo(i)возвращает младший байт аргумента, i выражение типа integer или word, результат имеет тип byte;

odd(i)принимает значение true (типа boolean), если i нечетное число, и false в противном случае;

pred(i)возвращает предшествующее значение (i-1), i выражение любого целого типа;

random(i)возвращает псевдослучайное число из диапазона 0 .. (i-1), i выражение типа byte;

sqr(i)возводит в квадрат выражение i любого целого типа;

swap(i)меняет местами байты в значении выражения i, i выражение типа integer или word;

succ(i)возвращает следующее значение (i+1), i выражение любого целого типа.

5.4 Пример: вычисление суммы цифр числа

Как пример работы с данными целого типа, приведем короткую программу, которая вычисляет сумму чисел целого числа n. Чтобы программа могла работать с числами, состоящими из 1 10 цифр, используется тип longint. Сумма цифр числа накапливается в переменной s. Она наверняка не превосходит 255, поэтому используется тип byte. При нахождении суммы чисел используются операции целочисленного деления div и получения остатка от целочисленного деления mod (см. раздел 2). Нахождение остатка от деления целого числа на 10 с помощью операции mod позволяет определить последнюю цифру числа, например,

1234 mod 10 = 4.

Эта последняя цифра добавляется к сумме s. Целочисленное деление числа на 10 с помощью операции div позволяет отбросить последнюю цифру числа, например,

1234 div 10 = 123,

после чего цикл повторяется, пока вспомогательная переменная i не станет равной нулю.

Program Integer_types;

var

n,i:longint;

s:byte;

begin

write('Введите любое целое число, которое ');

writeln('по модулю не превосходит 2 147 483 647');

readln(n);

i:=n;

s:=0;

while i<>0

do begin

s:=s+abs(i mod 10);

i:=i div 10

end;

writeln('Сумма цифр ', n:9, ' равна ', s:3)

end.

5.5 Задания по теме 5

Целочисленные типы данных

В следующих заданиях i, k заданные натуральные числа в диапазоне 0 .. 50 000; l заданное натуральное число в диапазоне 0 .. 1 000 000 000; m, n натуральные числа в диапазоне 1000 .. 9999. При описании переменных i, k, l, m, n выбрать один из целочисленных типов данных (byte, shortint, word, integer, longint), соответствующий заданному диапазону значений. Учесть, что

простым называется целое число, которое делится только на себя и на единицу;

совершенным называется целое число, равное сумме своих делителей (при этом оно само не включается в число делителей). Например, 28 = 1+2+4+7+14.

1) Написать программу, которая находит все простые числа на интервале от i до k.

2) Написать программу, которая находит все совершенные числа на интервале от i до k.

3) Написать программу, которая находит все числа на интервале от i до k, которые делятся на 9.

4) Написать программу, которая проверяет, является ли сумма цифр натурального числа l простым числом.

5) Написать программу, которая проверяет, является ли произведение цифр натурального числа l простым числом.

6) Написать программу, которая находит все числа на интервале от m до n, все цифры которых различны.

7) Написать программу, которая находит все числа на интервале от m до n, которые содержат три одинаковые цифры.

8) Написать программу, которая находит все числа на интервале от m до n, которые содержат две одинаковые цифры.

9) Написать программу, которая находит все числа на интервале от m до n, которые являются перевертышами. Перевертышами называются такие четырехзначные числа, у которых две первые цифры совпадают с двумя последними в обратном порядке, например, 2222, 6116, 8558.

10) Написать программу, которая находит все числа на интервале от m до n, которые делятся на 7.

6. Вещественные типы данных

6.1 Типы данных и диапазон значений

В языке Pascal имеется 5 действительных типов данных

singleдлина 4 байт, 7 .. 8 значащих цифр, диапазон значений 1E45 .. 1E+38;

realдлина 6 байт, 11 .. 12 значащих цифр, диапазон значений 1E39 .. 1E+38;

doubleдлина 8 байт, 15 .. 16 значащих цифр, диапазон значений 1E324 .. 1E+308;

extendedдлина 10 байт, 19 .. 20 значащих цифр, диапазон значений 1E4951 .. 1E+4932;

compдлина 8 байт, 19 .. 20 значащих цифр, диапазон значений 1E(2*1063 + 1) .. 1E(2*1063 1).

Возможность использования типов single, double, extended и comp требует наличия арифметического сопроцессора. Для обращения к арифметическому сопроцессору служит опция 8087/80287 (меню OPTIONS COMPILER NUMERIC PROCESSING 8087/80287). При активной опции 8087/80287 (отмечается крестиком X) компилятор будет обращаться к арифметическому сопроцессору, и в программе можно использовать типы single, double, extended, comp. При неактивной опции 8087/80287 разрешается использовать в программе только тип real.

Если компьютер не имеет сопроцессора, то его работу можно эмулировать (воспроизводить) с помощью специальных подпрограмм. Для подключения этих подпрограмм имеется опция EMULATION (меню OPTIONS COMPILER NUMERIC PROCESSING EMULATION). Когда опция EMULATION активна, программа становится независимой от наличия сопроцессора. Если сопроцессор имеется, будут использоваться все его возможности; если сопроцессора нет, его работа будет воспроизводиться с помощью подпрограмм, и все вещественные типы данных можно использовать. Однако подключение дополнительных подпрограмм увеличивает объем программы. Если опция 8087/80287 неактивна, опция EMULATION игнорируется.

С другой стороны, в текст самой программы можно включить так называемые директивы компилятора, которые могут включать ту или иную опцию или отменять ее действие.

{$N+}директива использовать числовой сопроцессор (включает опцию 8087/80287);

{$N-}директива не использовать числовой сопроцессор (отключает опцию 8087/80287);

{$E+}директива включить режим эмуляции работы сопроцессора (включает опцию EMULATION);

{$E-}директива отключить режим эмуляции работы сопроцессора (отключает опцию EMULATION).

6.2 Пример вычислений с заданной точностью

Рассмотрим небольшую программу, в которой вычисляется значение функции с заданной точностью с помощью бесконечного ряда

.

Будем считать, что требуемая точность достигнута, если вычислена сумма нескольких первых слагаемых, и очередное слагаемое оказалось по модулю меньше, чем . При этом условии (очередное слагаемое оказалось по модулю меньше ) дальнейшие вычисления прекращаются. Если вычислено n первых слагаемых ряда, истинная погрешность вычислений есть разность между истинным значением функции и суммой n первых слагаемых:

.

Величина определяет погрешность (точность) вычислений лишь приближенно. Действительно, условие того, что -ый член ряда по модулю меньше ,

,

не гарантирует того, что сумма членов ряда, начиная с -го, также будет меньше . Тем не менее, значение дает представление о точности вычислений по порядку величины. Поэтому в качестве значений , как правило, выбираются числа 0.01, 0.001, 10-5, 10-8 и т. п. Например, абсурдно задавать значение =3, так как всегда , и требование, чтобы очередной член ряда был меньше 3 по абсолютной величине, не обеспечит даже приблизительной точности вычислений.

В программе на языке Pascal нужно организовать цикл, при каждом исполнении которого очередной член ряда (его значение сохраняется в переменной s) добавляется к сумме ряда (сумма ряда накапливается в переменной sinus), после чего вычисляется следующий член ряда, и его абсолютная величина сравнивается с . Перед входом в цикл выполняются начальные присваивания: s=x (s становится равным первому члену ряда), sinus=0 (сумма ряда первоначально равна 0). Переменная i определяет степень члена ряда и связана с его номером k соотношением . В ходе цикла она каждый раз увеличивается на 2. Очередной член ряда отличается от предшествующего тем, что меняется его знак, числитель умножается на x2, а знаменатель - на (чтобы накопить в знаменателе ). Чтобы при каждом выполнении цикла не возводить x в квадрат, для экономии ресурсов компьютера вводится вспомогательная переменная sqrx.

Результат суммирования ряда сравнивается со значением, полученным с помощью стандартной функции языка Pascal .

Program Real_types;

var

epsilon,x,sqrx,s,sinus:extended;

i:integer;

begin

write('Введите заданную точность: ');

readln(epsilon);

write('Введите аргумент функции: ');

readln(x);

s:=x;

sinus:=0;

i:=1;

sqrx:=sqr(x);

while abs(s)>epsilon

do begin

sinus:=sinus+s;

i:=i+2;

s:=-s*sqrx/((i-1)*i)

end;

write('Значение, вычисленное с помощью ');

writeln('суммирования ряда: ');

writeln(sinus:20:18);

write('Значение, вычисленное с помощью ');

writeln('стандартной функции: ');

writeln(sin(x):20:18)

end.

Приведем некоторые результаты вычислений.

1) Вычисление значения с различной точностью:

Введите заданную точность: 1e-3

Введите аргумент функции: 0.1

Значение, вычисленное с помощью суммирования ряда:

0.100000000000000000

Значение, вычисленное с помощью стандартной функции:

0.099833416646828152

Введите заданную точность: 1e-5

Введите аргумент функции: 0.1

Значение, вычисленное с помощью суммирования ряда:

0.099833333333333333

Значение, вычисленное с помощью стандартной функции:

0.099833416646828152

Введите заданную точность: 1e-9

Введите аргумент функции: 0.1

Значение, вычисленное с помощью суммирования ряда:

0.099833416666666667

Значение, вычисленное с помощью стандартной функции:

0.099833416646828152

Введите заданную точность: 1e-12

Введите аргумент функции: 0.1

Значение, вычисленное с помощью суммирования ряда:

0.099833416646825397

Значение, вычисленное с помощью стандартной функции:

0.099833416646828152

Очевидно, чем меньшее значение мы задаем, тем большая точность будет достигнута - при сравнении с правильным значением, полученном с помощью стандартной функции , мы видим, что все большее число цифр совпадает.

2) Вследствие того, что мы суммируем знакопеременный ряд, может происходить нарастание ошибки вычисления при каждом выполнении цикла для больших значениях аргумента. Это иллюстрируется следующими примерами и говорит о том, что наш алгоритм хорошо работает лишь при малых значениях аргумента (). При достаточно больших значениях x программа выдает абсурдные результаты. Чтобы программа работала при любых значениях x, необходимо ее модифицировать.

Введите заданную точность: 1e-7

Введите аргумент функции: 1

Значение, вычисленное с помощью суммирования ряда:

0.841471009700176367

Значение, вычисленное с помощью стандартной функции:

0.841470984807896507

Введите заданную точность: 1e-7

Введите аргумент функции: 10

Значение, вычисленное с помощью суммирования ряда:

-0.544021064696450892

Значение, вычисленное с помощью стандартной функции:

-0.544021110889369813

Введите заданную точность: 1e-7

Введите аргумент функции: 50

Значение, вычисленное с помощью суммирования ряда:

13.111823886413041800

Значение, вычисленное с помощью стандартной функции:

-0.262374853703928787

Введите заданную точность: 1e-7

Введите аргумент функции: 70

Значение, вычисленное с помощью суммирования ряда:

9860810624.036733900

Значение, вычисленное с помощью стандартной функции:

0.773890681557889097

6.3 Задания по теме 6

Вещественные типы данных

В следующих заданиях x, заданные действительные числа ( > 0). Вычислить бесконечную сумму с точностью . Считать, что требуемая точность достигнута, если вычислена сумма нескольких первых слагаемых, и очередное слагаемое оказалось по модулю меньше, чем , тогда это и все последующие слагаемые можно уже не учитывать. Сравнить результат приближенного вычисления со значениями, полученными с помощью стандартных функций языка Turbo Pascal. Использовать тип данных extended.

1) ;

2) ;

3) ;

4) ;

5) ;

6) ;

7) ;

8) ;

9) ;

10) .

7. Перечисляемый тип, тип-диапазон и оператор case

7.1 Оператор выбора

Помимо условного оператора if, который, в зависимости от выполнения условия, позволяет выбрать ту или иную ветвь алгоритма, в языке Pascal имеется также оператор выбора case оператор, который позволяет выполнить то или иное действие в зависимости от значения специального параметра, называемого ключом выбора.

case <ключ выбора> of

<значение ключа выбора>: <оператор 1>;

<значение ключа выбора>: <оператор 2>;

...

<значение ключа выбора>: <оператор N>;

else <оператор N+1>

end;

Ключ выбора может принимать значения любого порядкового типа. Данные любого порядкового типа имеют конечное множество возможных значений, которые можно определенным образом упорядочить. Вместе с оператором case удобно использовать перечисляемый тип данных, который задается перечислением тех значений, которые может принимать переменная этого типа.

Оператор выбора работает следующим образом: сначала вычисляется значение параметра ключа выбора, затем выполняются операторы, соответствующие вычисленному значению. Если в списке выбора не будет найдена константа, соответствующая вычисленному значению, будут выполнены операторы, стоящие за служебным словом else. Ветвь else можно опускать. Если ветвь else опушена, а константа, соответствующая вычисленному значению ключа выбора не найдена, оператор case не выполнит никаких действий.

7.2 Перечисляемый тип

Язык Pascal позволяет программисту определять свои собственные типы данных. Перечисляемый тип данных относится к определяемым программистом типам. Такие типы данных должны быть описаны в разделе описаний программы. Описание типов должно предшествовать описанию переменных.

type <имя типа> = (<список значений через запятую>);

Пример: пусть нам необходима переменная, которая должна принимать значения, соответствующие названиям месяцев. Определим тип Month (месяц) и переменную m1 этого типа.

type

Month=(January, February, March, April, May, June,

July, August, September, October, November, December);

var

m1: Month;

Здесь каждое значение переменной типа Month задается идентификатором. Естественно, русские слова в качестве идентификаторов употреблять нельзя!

Альтернативно, переменную перечисляемого типа можно объявлять в программе без предварительного описания самого типа.

var <имя переменной>: (<список принимаемых

значений через запятую>);

Пример:

var m2:(January, February, March, April, May, June, July,

August, September, October, November, December);

Перечислимый тип относится к порядковым типам данных. Каждому значению порядкового типа можно сопоставить порядковый номер значения. Первое значение в списке, определяющем перечисляемый тип, получает порядковый номер 0, следующие значения 1, 2 и т. д. Максимальное число возможных значений 65536.

Ко всем порядковым типам применимы следующие функции:

ord(x)возвращает порядковый номер значения выражения x;

pred(x)возвращает предыдущее значение порядкового типа, соответствующее порядковому номеру ord(x)-1;

succ(x)возвращает следующее значение порядкового типа, соответствующее порядковому номеру ord(x)+1.К порядковым типам относятся также все целые типы, логический (boolean) и символьный (char), а также тип-диапазон.

7.3 Тип-диапазон

это подмножество элементов другого порядкового типа, задаваемое своим первым и последним значениями.

type <имя типа> = <минимальное значение> ..

<максимальное значение>;

Пример: определим тип MonthNumber (номер месяца) как интервал целых значений от 1 до 12.

type

MonthNumber=1..12;

var

n1:MonthNumber;

Альтернативно, переменную типа-диапазона можно объявлять в программе без предварительного описания самого типа.

var <имя переменной> : <минимальное значение> ..

<максимальное значение>;

Пример:

var

n2:1..12;

К переменным типа-диапазона применимы следующие функции:

high(x)возвращает максимальное значение типа-диапазона, к которому принадлежит переменная x;

low(x)возвращает минимальное значение типа-диапазона, к которому принадлежит переменная x.

Использование перечисляемых типов и типов-диапазонов повышает надежность программы благодаря возможности контролировать множество значений, которые могут принимать переменные перечисляемых типов. Для контроля возможного выхода значений переменных за границы допустимого диапазона служит опция RANGE CHECKING (меню OPTIONS COMPILER RUNTIME ERRORS RANGE CHECKING). В активном состоянии она позволяет контролировать выход значений переменных за границы диапазона. Существуют также директивы компилятора, которые позволяют включать (директива {$R+}) и отключать (директива {$R-}) контроль границ диапазона.

Однако, значение переменной перечисляемого типа нельзя ввести с клавиатуры с помощью оператора read или вывести на экран с помощью оператора write, т. е. такие операторы, как

readln(m1);

write(m2);

недопустимы. Для ввода-вывода данных перечисляемого типа необходимо писать специальные процедуры (см. ниже).

7.4 Пример использования перечисляемого типа данных и оператора выбора case

Рассмотрим программу вычисления тригонометрических функций . Пользователь указывает название функции и значение аргумента, результат вычисления выводится на экран.

Введем перечисляемый тип func: Поскольку любое возможное значение переменной типа func - это идентификатор, эти значения (идентификаторы) не должны совпадать со стандартными идентификаторами языка Pascal, например, именами функций. Поэтому мы не можем использовать в качестве значений sin или cos - в противном случае эти значения "закроют" стандартные функции и , и мы не сможем обращаться к этим стандартным функциям в данной программе. В то же время, принятое в русской литературе написание функции не совпадает со стандартными функциями языка Pascal arctan(x), а функция вообще отсутствует, поэтому соответствующие имена могут употребляться без изменений.

type func=(sinus, cosin, tg, arctg);

Первое, что должен сделать пользователь - ввести название функции. Для этого нам потребуется вспомогательная строковая переменная name. Ее значение можно ввести с клавиатуры с помощью оператора readln. В зависимости от того, какое значение примет переменная name, можно присвоить соответствующее значение переменной f1 типа func. Заметим, что name не является переменной порядкового типа (строковая переменная может принимать бесконечное множество значений) и не может использоваться в качестве ключа выбора в операторе case, в данном случае приходится четыре раза использовать оператор if.

Эту часть программы, связанную с вводом названия функции, разумно выделить в отдельную процедуру. Хотя в данном учебном пособии мы не рассматриваем подробно использование процедур, нетрудно понять основные правила. Процедуры включаются в раздел описаний (см. раздел 1). Каждая процедура начинается со служебного слова Procedure, за которым следует имя процедуры (выбираемый программистом идентификатор, в данном случае - ReadFunction - чтение функции). Далее в скобках указываются формальные параметры, которые при вызове процедуры из основной программы будут заменяться фактическими. Служебное слово var перед именем параметра указывает на то, что этот параметр изменяется в ходе выполнения процедуры. Если он остается неизменным, служебное слово var опускается. Внутри процедуры могут описываться локальные переменные (в данном случае это - вспомогательная переменная name), память для локальных переменных выделяется только на время вызова процедуры, в отличие от глобальных переменных, для которых память выделяется на все время исполнения программы.

Далее пользователь вводит значение аргумента x, после чего, в зависимости от значения переменной f1, вычисляется соответствующая функция (здесь используется оператор case), и результат (значение переменной r) выводится на экран. Эти действия, представляющие вторую логическую часть программы, можно выделить в следующую процедуру - Calculation - вычисление. Здесь x и r также выступают в роли локальных переменных. Основная часть программы содержит вызовы двух процедур - ReadFunction и Calculation - с фактическим параметром - глобальной переменной f, которая подставляется на место формального параметра f1. Использование процедур делает структуру программы более ясной и отвечает современным правилам программирования на языке высокого уровня. Использование в программе перечисляемого типа дает возможность проверить правильность вводимого имени функции, его принадлежность к определенному множеству значений.


Подобные документы

  • Рассмотрение правил записи, способов ввода и вывода, использования функций обработки символьных данных в Pascal. Описание алгоритмизации и программирования файловых структур данных, проектирования структуры файла. Ознакомление с работой данных массива.

    курсовая работа [336,2 K], добавлен 27.06.2015

  • Изучение функций и возможностей среды разработки языка программирования Pascal. Рассмотрение работы с одномерными и двумерными массивами, со строками и числами. Математическая формулировка задач. Разработка алгоритмов, описание структуры программ.

    курсовая работа [879,8 K], добавлен 11.02.2016

  • Структура и основные элементы языка Turbo Pascal. Алгоритм составления простейших программ на Turbo Pascal. Применение условного оператора и сильноветвящихся алгоритмов. Циклы с предусловием и постусловием, сочетание циклических и условных операторов.

    реферат [64,0 K], добавлен 20.03.2016

  • Строгая типизация и наличие средств структурного (процедурного) программирования императивного языка Pascal. Структура программы, выражения, строки. Правила и описание типов, процедур и функций, операторов ввода - вывода, модулей и подпрограмм.

    курсовая работа [37,3 K], добавлен 28.06.2008

  • Информационные технологии и защиты данных. Методы защиты информации. Виды информационной безопасности и умышленные угрозы. Программирование на языке Turbo Pascal. Типы числовых данных. Функции ввода и вывода. Логические операторы, символьные переменные.

    курсовая работа [1,7 M], добавлен 16.05.2016

  • Характеристика вычислительной системы и инструментов разработки. Программирование на языке Pascal в среде Turbo Pascal и на языке Object Pascal в среде Delphi. Использование процедур, функций, массивов, бинарного поиска. Создание базы данных в виде файла.

    отчет по практике [2,1 M], добавлен 02.05.2014

  • Создание программы для обработки структуры данных. Возможность ввода и записи данных на персональном компьютере. Прикладное программирование на языке Turbo Pascal. Свободное редактирование записанных данных с помощью программы, написанной на Turbo Pascal.

    лабораторная работа [11,4 K], добавлен 13.05.2011

  • Основные сведения о языке программирования Pascal. Листинг программы с комментариями. Диагональ элементов вектора и матрицы. Использование команд ввода-вывода информации. Быстродействие выполнения программы при компиляции. Отражение процессов вычисления.

    курсовая работа [1,9 M], добавлен 05.05.2009

  • Векторная компьютерная графика. Графические примитивы. Графические возможности языка программирования Pascal. Методические рекомендации к изучению графики в языке программирования Pascal. Построение графиков функций.

    курсовая работа [28,3 K], добавлен 13.06.2007

  • Элементы языка Object Pascal: идентификаторы, константы, переменные, выражения. Структура проекта Delphi. Операторы и метки. Типы данных языка OPascal. Статические и динамические массивы. Записи с вариантными полями. Совместимость и преобразование типов.

    курс лекций [385,4 K], добавлен 18.02.2012

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.