Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпаргалка по программированию.DOC
Скачиваний:
50
Добавлен:
01.05.2014
Размер:
1.9 Mб
Скачать

Вычисления с целыми числами

Рассмотрим двоичное представление натурального числа x: x = bm2m + bm – 12m – 1 + … + b121 + b0 , где bi  {0, 1}  i [0;  1], и bm = 1, если не записывать незначащие левые нули. Двоичной записью числа x в этом случае является последовательность < bm , b 1 , …, b1 , b0 >2 , где число двоичных разрядов (бит), необходимых для записи числа x, равно m + 1 = log2 x + 1. Например: а) x = 11 = <1011>2= 123+ 022 +121+ 120, число двоичных разрядов m + 1 = log211 + 1 = 3 + 1 = 4; б) x = 16 = <10000>2= 124+ 023 + 022 +021+ 020, число двоичных разрядов m + 1 = log216 + 1 = 4 + 1 = 5; в) x = 15 = <1111>2 = 123+ 122 +121+ 120, число двоичных разрядов m + 1 = log215 + 1 = 3 + 1 = 4.

Для хранения натурального числа в памяти ЭВМ отводится фиксированное кол-тво бит. При этом двоичная запись числа выравнивается в отведенной ячейке памяти по правому краю (младшие биты числа и ячейки совпадают), а “свободные” биты ячейки слева заполняются нулями. Например, для типа Byte в Турбо Паскале под запись целого числа без знака отводится 8 бит, т. е. 1 байт. Число x = 11 представляется здесь как <00001011>2. Максимальное по значению число типа Byte есть <11111111>= 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

Пусть задана последовательность членов ряда u0u1, …, un … . Рассмотрим последоват. частичных сумм S0S1, …, 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 — кол-во слагаемых, входящих в частичную сумму.