- •Билет №8 Вычисления с вещественными числами и машинное эпсилон №8
- •Машинное эпсилон может быть вычислено с помощью следующей программы:
- •Билет №9 Общая схема итерации и №9 рекуррентные вычисления
- •Вычисления с целыми числами
- •Билет№10 Схема интерации. Вычисление частичной суммы (вещ числа) №10
- •Общая формулировка задания
- •Пример выполнения задания
- •Вопрос №12 . Основные правила аналитической верификации программ №12
- •Вопрос №14 Ограничивающая ф-ция оператора цикла.Примеры №14
- •Билет№15. Теорема о цикле, его инварианте и ограничивающей функции №15
- •Билет №17 Теорема о цикле repeat- until ,его инварианте и ограничивающей его ф-ции. Аннотирование цикла и понимание аннотации №17
- •Вопрос№18 Алгоритм анализа двоичной записи натурального числа в двоичной сист счисления №18
- •Последовательности и файлы
- •Индуктивные функции
- •Стационарные значения индуктивных функций
- •Индуктивные расширения функций
- •Примеры задач с индуктивными функциями
- •Кванторы и запись утверждений о массивах
- •Правила вывода для цикла с параметром
- •Примеры программ работы с массивами
- •Решение последовательными обменами
- •Задача перестановки сегментов разной длины (второе решение)
- •Задача перестановки сегментов разной длины (третье решение)
- •Билет№35 Задача о равнинах (с испол массива) №35
- •Линейный поиск
- •Оптимизация программы бинарного поиска
- •Билет№44 Массивы в качестве параметров:открытые массивы №44 Сведения о массивах в языке Паскаль
- •Билет№45 Двумерные (многомерные массивы). Индексация. Исполбзование процедур. Задача: о МиниМаксе(матрица как массив строк) №45 обработка двухмерных массивов
Вычисления с целыми числами
Рассмотрим двоичное представление натурального числа x: x = bm2m + bm – 12m – 1 + … + b121 + b0 , где bi {0, 1} i [0; m – 1], и bm = 1, если не записывать незначащие левые нули. Двоичной записью числа x в этом случае является последовательность < bm , bm – 1 , …, b1 , b0 >2 , где число двоичных разрядов (бит), необходимых для записи числа x, равно m + 1 = log2 x + 1. Например: а) x = 11 = <1011>2= 123+ 022 +121+ 120, число двоичных разрядов m + 1 = log211 + 1 = 3 + 1 = 4; б) x = 16 = <10000>2= 124+ 023 + 022 +021+ 020, число двоичных разрядов m + 1 = log216 + 1 = 4 + 1 = 5; в) x = 15 = <1111>2 = 123+ 122 +121+ 120, число двоичных разрядов m + 1 = log215 + 1 = 3 + 1 = 4.
Для хранения натурального числа в памяти ЭВМ отводится фиксированное кол-тво бит. При этом двоичная запись числа выравнивается в отведенной ячейке памяти по правому краю (младшие биты числа и ячейки совпадают), а “свободные” биты ячейки слева заполняются нулями. Например, для типа Byte в Турбо Паскале под запись целого числа без знака отводится 8 бит, т. е. 1 байт. Число x = 11 представляется здесь как <00001011>2. Максимальное по значению число типа Byte есть <11111111>2 = 27 + 26 + 25 + 24 + 23 + 22 + 21 + 20 = 28 – 1 = 255.
| ||
тип |
Диапазон значений |
Длина |
Shortint Integer Longint Byte Word |
–128...127 –32768...32767 –2147483648...2,,47 0...255 0...65535 |
1 байт ( 8 бит со знак) 2 байта (16 бит со знак) 4 байта (32 бита со знак) 1 байт ( 8 бит без знак) 2 байта (16 бит без знак) |
Для работы с целыми числами используются стандартные операции +, –, *, div, mod и функции Abs, Sqr, Odd и некоторые др.
Необходимо учитывать следующие особенности вычислений с целыми числами: 1) вычисления выполняются точно; 2) результаты некоторых операций или функций могут выходить за границы диапазона возможных значений (эффект “переполнения”).
В качестве примера приведём простейшую программу:
var a, b: Integer;
const MinInt=-32768;
begin
a:=MaxInt; b:=MinInt;
Write('a=',a); WriteLn(' b=',b);
a:=a+1; b:=b-1;
Write('a=',a); WriteLn(' b=',b);
end.
Билет№10 Схема интерации. Вычисление частичной суммы (вещ числа) №10
Пусть задана последовательность членов ряда u0, u1, …, un … . Рассмотрим последоват. частичных сумм S0, S1, …, Sn, …, где Si = j = 0...i uj. (3.1)
Если , то говорят, что ряд сходится и записывают это в видеS = j = 0...∞ uj. (3.2)
Рассмотрим задачу приближенного вычисления суммы ряда, т. е. вычисления нек-ой частичной суммы (3.1), где номер последнего слагаемогоn определяется дополнительным требованием. Например, при заданном (обычно малом) числе номерn может быть определен неявно соотношением n = min{i > 0 : |ui| ≤ }.
Иначе говоря, для всех , |ui| > , а n — номер последнего слагаемого в частичной сумме и. Очевидно, что соотношение |ui| > можно использовать как условие продолжения цикла вычисления суммы ряда.
Если слагаемые можно вычислить рекуррентно: , тосхема вычисления частичной суммы ряда может быть такой:
{ i:=0 }
s:=s0; u:=u0;
while B(s,u,)do
{(s=S(i)) & (u=u(i)) & (i<n)}
begin
{ i:=i+1 }
u:=f(u);
s:=s+u
{(s=S(i)) & (u=u(i)) & (i≤n)}
end {s=S(n) & u=u(n) & not B(s, u, )}
Здесь использована общая форма условия продолжения цикла (B(s, u, ) — предикат от переменных s, u, ). Кроме того, вычисление номера слагаемого i “спрятано” в комментарии и в явном виде не производится. В комментариях используется также “переменная-призрак” n — кол-во слагаемых, входящих в частичную сумму.