Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по программированию..pdf
Скачиваний:
10
Добавлен:
15.11.2022
Размер:
12.2 Mб
Скачать

 

^ нач

^

Суммирование;

 

 

алг

 

 

дел

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;