
- •Программирование линейных вычислительных процессов
- •Типы данных
- •Варианты задания.
- •Цель работы
- •Управление выбором действий
- •Контрольные вопросы
- •Варианты задания
- •Программирование циклических процессов с использованием оператора repeat - until
- •Контрольные вопросы
- •Варианты задания
- •Программирование циклических процессов с известным числом повторений цикла
- •Контрольные вопросы
- •Варианты задания
- •Уточнение корня уравнения
- •Контрольные вопросы
- •Варианты задания
- •Программирование вложенных циклических вычислительных процессов
- •Контрольные вопросы
- •Варианты задания
- •Библиографический список
- •Содержание
Типы данных
Величины, представленные в программе, могут не изменять своего значения и выступать в качестве констант. Изменяющие в процессе выполнения программы свое значение величины - это переменные. В 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.
Таблица 2
Тип |
Диапазон значений |
Значащих цифр |
Размер памяти, байт |
real |
|
11 - 12 |
6 |
single |
|
7 - 8 |
4 |
double |
|
15 - 16 |
8 |
extended |
|
19 - 20 |
10 |
comp |
|
19 - 20 |
8 |
Лишь один тип real доступен всегда, прочие типы требуют использования арифметического сопроцессора. Для подключения последнего в работу следует в начале программы указать директиву {$N+}. Особняком стоит тип comp, т.к. его значениями являются только целые числа.
Математические функции
В языке определены стандартные функции, представленные в табл.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
=2t
и составим программу вычисления значения
функции для конкретного значения
аргумента 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.
Контрольные вопросы.
1. Какие из приведенных наборов символов не являются идентификаторами языка: _alf, 1q, @d2, gamma, appa, k_21, r2$q, вd5, b41?
2. Чем характеризуется тип данных?
3. Чем отличается объявление констант от объявления переменных?
4. Запишите выражение
для
.
5. Что больше maxint или 10000?
6. Что дает типизация переменных?
7. Сколько и каких разделов может быть в программе?
8. Назовите операторы ввода/вывода и поясните действия с ними.
9. Как можно образовывать константы?
10. Что можно предпринять для работы с большими целыми числами?