Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
У_П_Инф1.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
1.88 Mб
Скачать
  1. Основы программирования на turbo pascal

Алгоритмический язык Паскаль был разработан в 1968-71 гг. профессором Цюрихского института информатики (Швейцария) Никлаусом Виртом. Язык создавался как средство обучения ‘правильному’ программированию, т. к. отражал все основные концепции структурного программирования. Он быстро завоевал популярность, поэтому были созданы версии языка для работы на персональном компьютере. Они носят название Turbo Pascal. Каждая версия сопровождалась определенными изменениями как в языке, так и в интегрированной среде программирования. Далее будут рассмотрены возможности версии 7.0 Turbo Pascal, работающей под управлением MS DOS.

Алфавит языка составляют прописные и строчные (они не различаются) буквы латинского алфавита, символ подчеркивания на правах буквы, арабские цифры от 0 до 9 и 22 специальных знака: ( ) [ ] { } + - * / = > < . , : ; @ ‘ # $ ^. Из названных символов строятся все конструкции языка. Среди них следует выделить зарезервированные (служебные) слова, которых насчитывается несколько десятков и с которыми мы будем знакомиться по мере освоения материала. Служебные слова нельзя использовать в качестве имен объектов программы (констант, переменных, типов и др.).

Идентификаторы (имена) объектов программы должны начинаться с буквы, могут состоять из букв и цифр. Длина имени произвольная, но для компилятора значимыми являются первые 63 символа. Принято использовать длинные имена, несущие смысловую нагрузку, например: my_file; rezultat; koren_urav и т.п.

Знаки арифметических операций: + (сложение), - (вычитание), * (умножение), / (деление). Если в программе требуется изменить порядок выполнения операций, то для этих целей используют только круглые скобки. Другие виды скобок имеют свое назначение, о котором будет сказано позднее.

Знаки операций отношения: = (равно), < > (не равно), > (больше), < (меньше), >= (больше или равно), <= (меньше или равно).

Разделители: пробел, любой управляющий символ (т.е. символ с номером от 0 по 31 по таблице кодировки), комментарий. Комментарий - это пояснения в программе, заключаемые в скобки {…} или (*…*). Комментарий может быть и на русском языке, т.к. компилятор его не обрабатывает. Комментарий в фигурных скобках может входить в состав комментария второго вида. Если ‘комментарий’ начинается символом $ - {$…}, то это директива компилятора.

Числа в программе могут быть целыми и вещественными (действительными). Целые числа записывают как в десятичной форме, так и в шестнадцатеричной. В последнем случае число должно быть положительным и начинаться символом $, например $f3 = 1516 + 3 = 243. Вещественные числа записываются либо в естественной форме (с фиксированной точкой), либо с использованием порядка (с плавающей точкой). В форме с плавающей точкой разделителем мантиссы и порядка выступает символ Е (е):

<знак> <мантисса>Е<знак><порядок>.

Примеры записи: -0.125 4.77е-3 -0.13Е4.

Типы данных

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

Turbo Pascal имеет развитую систему типов, основу которой составляют стандартные для языка простые типы данных: целые типы; вещественные типы; логический тип; символьный тип.

Простые типы часто называют скалярными, поскольку объекты простого типа могут принимать только одно значение. Значения простых типов, за исключением вещественных, упорядочены и поэтому целые, логический и символьный типы называют порядковыми типами. Охарактеризуем некоторые простые типы данных более подробно. Целые типы объединяют множества целых чисел в различных диапазонах и представлены в табл.1.

Таблица 1

Тип

Диапазон значений

Размер памяти

byte

0 … 255

1 байт

word

0 … 65535

2 байта

shortint

-128 … 127

1 байт

integer

-32768 … 32767

2 байта

longint

-2147483648 … 2147483647

4 байта

Наличие различных целых (и вещественных - тоже) типов позволяет рационально использовать память и процессорное время. Операции с целыми числами выполняются наиболее быстро, но диапазон их значений ограничен.

Работая с целыми типами, следует помнить о типе получаемого результата. Только операция обычного деления / дает результат вещественного типа, а остальные - целого. К целым числам применимы также специфические операции, результатом выполнения которых становятся целые числа. Это операции целочисленного деления div и вычисления остатка от такого деления mod. Например, 5 div 2 = 2, 5 mod 2 = 1, 4 div 5 = 0 .

Максимальные значения в диапазонах integer и longint представлены в языке константами MaxInt и MaxLongInt соответственно. А вообще максимальное или минимальное значения, доступные для переменной целого типа, можно установить с помощью функций High и Low, использующих в качестве аргумента имя переменной. А функции Lo и Hi возвращают младший и старший байт целого числа, которые можно поменять местами функцией Swap.

Вещественные типы объединяют множества вещественных чисел в различных диапазонах. Вещественные типы представлены в табл. 2.

Лишь один тип real доступен всегда, прочие типы требуют использования арифметического сопроцессора. Для подключения последнего в работу следует в начале программы указать директиву {$N+}. Особняком стоит тип comp, т.к. его значениями являются только целые числа.

Таблица 2

Тип

Диапазон значений

Значащих цифр

Размер памяти

real

11 – 12

6 байтов

single

7 – 8

4 байта

double

15 – 16

8 байтов

extended

19 – 20

10 байтов

comp

19 – 20

8 байтов

Математические функции

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

Таблица 3

Функция

Математическое действие

Примечание

Abs(x)

Абсолютная величина x

Тип результата совпадает с типом x

Sqr(x)

Квадрат числа x

- “ -

Sqrt(x)

Квадратный корень из x

Результат вещественный

Sin(x)

Синус числа x

x - угол в радианах

Cos(x)

Косинус числа x

Exp(x)

Экспонента

е = 2,71828…

Ln(x)

Натуральный логарифм

x не должен быть отрицательным

Arctan(x)

Арктангенс числа x

в радианах

Random(n)

Возвращает случайное целое

из диапазона от 0 до n-1

Random

Возвращает случайное число

вещественное 0  x <1

Pi

Число 

 = 3,14159…

Для преобразования вещественных чисел в целые используют функции округления round(x) и усечения до целой части числа trunc(x). Например, round(4.7) = 5, а trunc(4.7) = 4.

Для задания значения переменной в языке существует оператор присваивания, который обозначается как :=.

Математические процедуры

Для увеличения значения целой переменной k на n единиц используют процедуру inc(k,n). При n = 1 параметр n опускают - inc(k). Процедура dec(k,n) уменьшает значение целой величины k на n единиц (при n = 1 dec(k)). Например, если k = 3, то вызов процедуры inc(k, 2) сделает k = 5.

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

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

Текст программы принято открывать заголовком, начинающимся служебным словом PROGRAM. Он характеризует назначение программы и может отсутствовать, т.к. компилятор воспринимает его как комментарий. Вслед за ним располагаются разделы программы, посвященные описанию (объявлению) объектов программы: меток, констант, типов, переменных, процедур и функций. Каждый из разделов начинается со служебного слова, соответственно: Label, Const, Type, Var, Procedure, Function. Количество разделов зависит от условий (потребностей) решаемой задачи, разделы могут повторяться и следовать в порядке, который вытекает из неписаного закона языка: «Сначала опиши, потом используй». Продолжает текст программы основная ее часть - выполняемая часть программы, тело программы, раздел операторов. Она открывается служебным словом BEGIN, а завершается словом END. с точкой. Все набранное после указанного слова компилятором игнорируется.

Значение константы может быть выражено через ранее определенные константы, например: Const e = 2.71828; cv = 2*e; . С этой же целью можно использовать следующие функции: Abs, Chr, Hi, High, Length, Lo, Low, Odd, Ord, Pi, Pred, Ptr, Round, SizeOf, Succ, Swap, Trunc.

Описание однотипных переменных производят обычно через запятую, например так: Var x,y,q : real; i,j,k : word; .

Ввод и вывод исходных данных

Ввод/вывод данных производят с помощью стандартных процедур. Вывод организуют процедурами Write и Writeln, которые в программе записываются следующим образом:

write(Список элементов вывода);

writeln(Список элементов вывода);

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

writeln(‘Результаты вычислений: ’, x, ’ ‘, sin(x)/x, ’ ‘, k div 5);

Оператор writeln; (без параметров) переводит курсор в начало новой строки.

Ввод данных с клавиатуры производят с помощью процедур Read и Readln, которые записываются в следующем формате:

read(Список элементов ввода);

readln(Список элементов ввода);

Процедуры отличаются способом ввода. Список должен содержать имена объектов простого типа (кроме перечисляемого и логического), которым будет производиться присваивание соответствующего значения с клавиатуры. Числовые значения последовательно вводимых переменных разделяют одним пробелом или более. Оператор процедуры Readln требует обязательного нажатия клавиши ввода (Enter) после ввода значений всех указанных в списке переменных. Лишние значения, набранные с клавиатуры, игнорируются. Это позволяет безошибочно вводить значения символьным переменным, для которых пробел является одним из допустимых значений. Оператор без параметра Readln; требует обязательного нажатия Enter. Этим обстоятельством можно воспользоваться для организации необходимых пауз в работе с программой. При этом не следует забывать о подсказке, которой надо предварять каждый оператор ввода, например:

writeln(‘Для продолжения работы нажмите ENTER’); readln;

writeln(‘Введите через пробел два целых и два вещественных числа’);

readln(i, k, x, s); …

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

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

Задание: проанализировать поведение функции s(t) на отрезке [0, 1]

при k=0,4.

Для упрощения выражения введем обозначения , q =2t и составим программу вычисления значения функции для конкретного значения аргумента t, вводимого с клавиатуры.

program formula;

const k = 0.4; p = 2*pi;

var s, t, d, q: real;

begin

writeln(‘Введите значение аргумента t’); readln(t);

d:=sqrt((1-k*k)/2/k); q:=p*t;

s:=0.5*(q-d*sin(q/d))*exp(-q/sqrt(1+k));

writeln(‘При t = ’,t:3:1,’ функция имеет значение ‘,s:7:5);

writeln(‘Для возвращения в программу нажмите ENTER’);

readln end.

Результаты расчета: t = 0.1 s(t) = 0.01136

t = 0.3 s(t) = 0.09118

t = 0.5 s(t) = 0.10769

t = 0.7 s(t) = 0.06481

t = 0.9 s(t) = 0.02674

Вывод: функция имеет максимум в окрестности t = 0,4.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]