
- •ПРЕДИСЛОВИЕ
- •1.1. История и классификация языков программирования высокого уровня
- •1.2. Первое (знакомство с Паскалем
- •Задания
- •Лекция 2
- •2.1. Некоторые сведения о системе ТУрбо-Паскаль
- •2.2. Способы описания языка программирования
- •Лекция 3
- •3.2. Типы данных
- •4.1. Структура Паскаль-программы
- •4.2. Арифметические операции, функции, выражения Арифметический оператор присваивания
- •Форматы процедуры write
- •Задания
- •1. Что будет напечатано программой
- •если последовательно вводятся три числа: 36, -6, 2345?
- •5.2. Функции, связывающие различные типы данных
- •Задания
- •Теперь посмотрим, как это программируется наТЛаскале.
- •Здесь
- •<параметр цикла>::= <имя простой переменной порядкового типа>
- •Задания
- •7.1. Подпрограммы-процедуры
- •7.2. Подпрограммы-функции
- •7.4. Рекурсивные подпрограммы
- •8.1. Что такое рекуррентная последовательность
- •8.2. Программирование вычислений рекуррентных последовательностей
- •Задания
- •Задания
- •6. Вывод результата.
- •Теперь будем составлять подпрограммы.
- •Задания
- •12.2. Операции над множествами
- •12.3. Примеры использования множеств
- •Красивая программа! К сожалению, ею нельзя воспользоваться для
- •В этой программе использована функция определений размера файла:
- •.Fiiesize(<HMH файловой переменной>);
- •Задания
- •14.2. Работа с файлами записей
- •Задания
- •15.2. Связанные списки
- •Лекция 16
- •16.1. Организация внешних подпрограмм
- •16,2. Создание и использование модулей
- •распечаткой текста программы с подробными комментариями.
- •выполнения следующих операции над обыкновенными дробями вида -q
- •(Р — целое, Q — натуральное):
- •1) сложение;
- •2) вычитание;
- •3) умножение;
- •4) деление;
- •5) сокращение дроби;
- •7) функции, реализующие операции отношения (равно, не равно,
- •Используя этот модуль, решить задачи:
- •При разработке модуля рекомендуется такая последовательность
- •Задания
- •Приведем текст программы целиком.
- •ЗАДАНИЯ ПО ТЕМЕ “ЛИНЕЙНЫЕ АЛГОРИТМЫ”
- •ЦЕЛОЧИСЛЕННАЯ АРИФМЕТИКА
- •Сортировка массивов
- •ЗАДАЧИ ПО ТЕМЕ “ОБРАБОТКА СТРОК”
- •ЗАДАНИЯ ПО ТЕМЕ “МОДУЛИ”
- •ЗАДАНИЯ ПО ТЕМЕ “ДИНАМИЧЕСКИЕ ПЕРЕМЕННЫЕ”
- •Задачи, предлагавшиеся на школьных олимпиадах по программированию (Пермская область)
- •Учебное издание
|
^ нач |
^ |
Суммирование; |
|
|
|
алг |
||
|
|
дел |
I, М, N, |
Summa; |
|
|
нал |
ввод(М, |
N); |
|
> |
|
||
|
! |
|
Summa := 0; |
|
|
S u m m a := 0 |
|||
|
|
|
для I := М до N |
|
_______51 |
до N ) ------ |
нц |
|
|
----- ►< |
I := М |
Summa := Summa + I |
||
|
1f |
|
кд |
|
|
|
вывод(Summa) |
||
S u m m a := S u m m a + 1 |
||||
|
|
кон |
|
|
/ |
вьгоодбитта ] |
|
|
|
|
__х__ |
|
|
|
|
кон |
|
|
Теперь посмотрим, как это программируется наТЛаскале.
Program Summering_2; {Example8.pas}
Var |
I, М» N, Summa Integer; |
Begin |
Write^M88*) ; |
|
ReadLn(M); |
|
Write(,N=)); |
|
ReadLn(N); |
|
Summa := 0; |
|
For I :s M To N Do |
|
Summa := Summa + I; |
End. |
WriteLnC*Сумма равна ’, Summa) |
|
В программе используется оператор цикла for, синтаксическая ди аграмма которого следующая:
Соператор цикла с параметром> |
>■for — > <параметр цикла> — |
-- |
------------------------------- |
:=J-- 1 |
|
U <выражение 1> - i— to ------- |
т-> < выражение 2> — do — >><оператор> |
|
'— >■ downto -- |
' |
|
Здесь
<параметр цикла>::= <имя простой переменной порядкового типа>
Выполнение оператора for в первом варианте (to) происходит по следующей схеме:
1.Вычисляются значения <выражения 1> и <выражения 2>. Это делается только один раз при входе в цикл.
2.Параметру цикла присваивается значение <выражения 1>.
3.Значение параметра цикла сравнивается со значением в ы р а ж е ния 2>. Если параметр цикла меньше или равен этому значению, то выполняется тело цикла, в противном случае выполнение цикла закан чивается.
4.Значение параметра цикла изменяется на следующее значение в его типе (для целых чисел — увеличивается на единицу); происходит возврат к пункту 3.
Оператор цикла-for объединяет в себе действия, которые при ис пользовании цикла-while выполняют различные операторы: присваи вание параметру начального значения, сравнение с конечным значе нием, изменение на следующее.
Как известно, результат суммирования целых чисел не зависит от порядка суммирования. Например, в рассматриваемой задаче числа можно складывать и в обратном порядке, т.е. от N до М (N > М ). Для этого можно использовать второй вариант оператора цикла-for:
Summa :■ 0;
For I :* N DovnTo M Do
Summa := Summa + I;
Слово “dow nto” буквально можно перевести — “вниз до” В та ком случае параметр цикла изменяется по убыванию, т.е. при каждом повторении цикла параметр изменяет свое значение на предыдущее (равносильно г := pred(i)). Тогда ясно, что цикл не выполняется ни разу, если N < М.
Работая с оператором for, учитывайте следующие правила:
—параметр цикла не может иметь тип real]
—в теле цикла нельзя изменять переменную-параметр цикла;
—при выходе из цикла значение переменной-параметра является не определенным.
Вследующем примере в качестве параметра цикла-for используется символьная переменная. Пусть требуется получить на экране десятич ные коды букв латинского алфавита. Как известно, латинские буквы в таблице кодировки упорядочены по алфавиту. Вот фрагмент такой программы:
For С := »а» То 'z* Do
Write (С, * \ Ord(c));
Здесь переменная с имеет тип char.
А теперь подумайте сами, как вывести кодировку латинского алфа вита в обратном порядке (от V до V )?
Задания
1.Используя операторы цикла while, repeat и for, составить три варианта программы вычисления N\.
2.Составить программу, по которой будет вводиться последова тельность символов до тех пор, пока не встретится маленькая или большая латинская буква “z” Подсчитать, сколько раз среди вводи
мых символов встречалась буква “W ”
3.Вычислить сумму квадратов всех целых чисел, попадающих в интервал (lnx, е*), х\> 1.
4.Вычислить количество точек с целочисленными координатами, попадающих в круг радиуса R (Л > 0) с центром в начале координат.
5.Напечатать таблицу значении функции sinx и cosx на отрезке [0,1] с шагом 0.1 в следующем виде:
X |
smx |
COSX |
0.0000 |
0.0000 |
1.0000 |
0.1000 |
0.0998 |
0.9950 |
1.0000 0.8415 0.5403
6.Напечатать в возрастающем порядке все трехзначные числа, в десятичной записи которых нет одинаковых цифр.
7.Дано целое п > 2. Напечатать все простые числа из диапазона
[2,п].
6.3. О собен н ости целочисленной и вещ ественной арифметики
Числовые расчеты могут производиться на множестве целых чисел или на множестве вещественных чисел. С математической точки зре ния целые числа являются подмножеством из множества веществен ных чисел. Поэтому, казалось бы, можно было и не разделять числа на

целые и вещественные и иметь дело только с вещественным числовым типом данных.
Однако целочисленная арифметика на ЭВМ имеет три очень суще ственных преимущества по сравнению с вещественной арифметикой:
1)целые числа всегда представимы своими точными значениями;
2)операции целочисленной арифметики дают точные результаты;
3)операции целочисленной арифметики выполняются быстрее, чем операции вещественной ( “плавающей” ) арифметики.
Недостатком целого типа данных является сравнительно узкий ди апазон допустимых значений (для типа integer от -32768 до 32767). При исполнении программы автоматически не контролируется выход значения целой величины за эти границы. В таком случае получается ошибочный результат. Если такая опасность есть, то программист должен сам предусматривать в своей программе предупреждение це лочисленного переполнения.
Чаще всего целый тип используется для представления счетчиков, номеров, индексов и других целочисленных величин.
Вам уже известно, что целый тип данных является порядковым. Вспомнцм, что это значит:
а) величины этого типа принимают конечное множество значений, которые могут быть пронумерованы;
б) на множестве значений данного типа работают понятия: “предыдущий элемент” , “последующий элемент” .
Почему же вещественный тип данных не является упорядоченным?
Втретьей лекции мы уже касались вопроса представления веществен ных чисел в памяти ЭВМ. Было показано, что множество веществен ных чисел в машинном представлении есть дискретное, конечное мно жество, хотя оно и является отражением континуума действительных чисел.
Г0 |
Г \ |
Г 2 |
г 3 |
Г{ |
r t+ i |
Г;V—1 |
Гту |
|
I |
I____1- - |
I_____________I |
I |
I |
I |
► |
||
0 |
--1 |
„ |
|
|
|
|
I |
|
1 |
|
|
|
|
плавающее |
|
||
машинный |
|
|
Рис. 6.1 |
|
переполнение |
|
||
ноль |
|
|
|
|
|
|
На рис. 6.1 изображена положительная часть действительной чи словой оси, на которой штрихами отмечены значения, точно предста вимые в вещественном типе данных. Эта картина симметрично отра жается на отрицательную полуось.
С ростом абсолютного значения интервал между соседними точ ками растет. Он равен (при двоично-нормализованной форме с пла вающей точкой) 2” * •2р = 2р~*, где р — порядок числа, a t — ко личество двоичных разрядов в мантиссе. Ясно, что с ростом аб солютной величины числа его порядок (р) растет и, следовательно, растет шаг между двумя соседними значениями. Минимальный шаг
Дгщш = |
\гх - г01= 2Pmin_<; максимальный шаг: Дгтах = |
\rN - rN-\\ = |
2Ртах“ *. |
Например, если р ^ = -64; ртах = 63; t = |
24, то имеем |
Akinin = 2_®^; Дгтах = 2^9.
Казалось бы, значения множества точно представимых веществен ных чисел можно пронумеровать и, таким образом, определить на нем понятия “следующий” , “предыдущий” Однако расстояние между двумя последовательными значениями на этом множестве оказывается величиной “субъективной” , в частности, зависящей от размера ячейки памяти, в которой хранится число. Например, если под мантиссу вы деляется 3 байта, то “следующее” значение получается путем приба вления к мантиссе единицы в 24-м разряде; если 5 байт, то — единицы в 40-м разряде.
Бесконечное количество действительных чисел вообще не предста вимо точно в памяти ЭВМ. Если вещественное значение X попа дает между двумя точно представимыми значениями г,- и г,+1, то оно заменяется на значение меньшего по модулю из этой пары чисел (некоторые типы процессоров выполняют “правильное” округление). Следовательно, в общем случае, вещественные числа хранятся в па мяти приближенно, т.е. несут в себе погрешность, которая называется погрешностью машинного округления.
Из сказанного следует, что если два числа X и У удовлетворяют условиям r{ < X < ri+i; г,- < Y < г|+1, но X ^ У, то в машинном пред ставлении они неразличимы.
Разность между вещественной единицей и ближайшим к ней числом, представимым в памяти машины, называется машинным эпсилон ( =). Иначе говоря, если rt= 1, то rt+1 = 1 + £. Легко понять, что величина машинного е связана только с разрядностью мантиссы в представле нии вещественных чисел на данной ЭВМ.
Для определения величины машинного е можно использовать следу ющую программу:
Program Epsilon;
Var Eps Real;