То же замечание касается и возведения тройки в целую степень. Заметим, что при 1 < k £ 100 log2k принимает значения от 1 до 6. Следовательно, сто обыкновенных дробей, которые требуется сложить, имеют всего 6 различных знаменателей: 3, 32, 33, … 36,причем наименьшим общим знаменателем этих дробей является 36 (это число “короткое”). Поэтому несложно привести все 100 дробей к общему знаменателю и, используя лишь целочисленную арифметику, получить значение числителя и знаменателя результирующей дроби. Для перехода от обыкновенной дроби к десятичной можно воспользоваться алгоритмом деления “короткого” числа на “короткое” и определить точное значение искомой суммы.

ПРИМЕР РЕШЕНИЯ И КОММЕНТАРИИ

Задание. По введенному натуральному числу n < 30000 найти значение выражения 2n.

Известно, что существует эффективный по количеству выполняемых действий умножения алгоритм возведения произвольного числа в натуральную степень. Однако при его реализации для больших значений степени n придется выполнять операцию умножения “длинного” числа на “длинное”, которая требует порядка L2 умножений, где L – количество цифр в каждом из “длинных” множителей.

Второй возможный подход к решению данной задачи – это перевод двоичного числа, состоящего из одной единицы и n нулей (а именно так в двоичной системе выглядит 2n), в десятичную систему счисления методом деления в двоичной системе на 10 = 10102. Но деление в двоичной системе придется организовывать самостоятельно (аналогично алгоритму деления “длинного” числа на “короткое”).

НЕ нашли? Не то? Что вы ищете?

Наиболее простым с точки зрения понимания и отладки программы является алгоритм простого последовательного умножения на некоторую степень двойки, являющуюся “коротким” числом.

Приведем такое решение задачи: умножение производится, пока это возможно, на 217 (произведение 217 на максимальную цифру 10000-й системы счисления – 9999, еще меньше, чем максимальное число, представимое в целом типе). Затем результат домножается на оставшееся 2k, где k<17.

Решение на языке Turbo-Pascal:

Var s alоng

L, n,i, k : integer;

Begin

readln (n); {вводим значение степени}

s [1] :=1;{результат для нулевой степени }

L :=1;{длина результата}

while n>16 do

{умножаем на 1 shl 17=2^17}

begin

mult (s, L,1 shl 17);

n := n-17

end;

if n > 0 then {умножаем на оставшуюся степень}

mult (s, L, 1 shl n);

assign (output, ‘ output. txt’);}

rewrite (s[L]); {старший разряд просто печатаем}

for i : = L-1 downto l do

begin

k : = 1000;

while s [i]<k do {недостающие цифры заменим 0}

begin

write (0);

k : = k div 10

end ;

write ( s [ i ] );

end;

Close (Output)

End.

Решение на языке С:

voidmain ()

{ALONG s;

long L, n, i, k;

FILE *f;

scanf (“%D”, &n);

s [ l ] = l; /*результат для нулевой степени*/

L = l ; /*длина результата*/

while ( n>16) /* умножаем на 1<<17 = 2^17 */

{ Mult ( s, &L, ( long ) l << 17 ) ;

n - = 17;

}

if (n>0) /* умножаем на оставшуюся степень */

Mult ( s, &L, ( long ) l << n);

f = fopen ( “output. txt”, “wt” );

fprintf (f, “%d”, s[L]);

for ( i=L-l; i>=l; i--)

{ k=1000;

while (s [i]<k) /*недостающие цифры заменим 0*/

{ fprintf (f, “%c”, ‘0’);

k/=10;

}

fprintf (f, “%d”, s[i]);

}

fclose (f) ;

КОНТРОЛЬНЫЕ ВОПРОСЫ

1. Какой объем памяти в байтах будет занимать текст данного вопроса?

2. В графическом режиме на экране дисплея пиксель можно отображать одним из 1024 цветов. Сколько бит требуется для описания цвета каждого пикселя, если разрешение экрана составляет 800*600 пикселей?

3. От чего зависят границы диапазона целых чисел, представимых в компьютере с фиксированной запятой?

4. Объясните, как дополнительный код позволяет заменить операцию вычитания операцией сложения.

5. Объясните, что и когда “плавает” в форме представления чисел с плавающей запятой?

6. Перечислите ошибки, возникающие при работе с вещественными числами в конечном числе разрядов.

7. От чего зависят границы диапазона чисел, представимых в том или ином целом типе?

8. Какие ошибки возникают при сложении чисел в ограниченном числе разрядов? Как можно их избежать?

9. Может ли результат умножения двух положительных чисел, представимых в знаковом типе данных, оказаться отрицательным?

10. Назовите области применения битовых операций.

11. Каковы преимущества компьютерного представления чисел с плавающей запятой по сравнению с фиксированной?

12. Почему современные языки программирования поддерживают одновременно несколько вещественных типов данных?

13. Для чего применяется сдвиг при записи порядка нормализованного числа и что такое машинный нуль?

14. Перечислите и объясните все ошибки, которые могут возникнуть при арифметических операциях с нормализованными числами в ограниченном числе разрядов?

15. Как определить, достаточно ли для точного решения задачи стандартных компьютерных типов данных, или вычисления придется организовывать самому, с помощью алгоритмов “длинной” арифметики?

16. Назовите преимущества и недостатки различных способов представления ”длинных“ чисел.

УЧЕБНО-МЕТОДИЧЕСКОЕ И ИНФОРМАЦИОННОЕ ОБЕСПЕЧЕНИЕ

Основная литература

1.  , , Прикладное программирование: Учеб. метод. пособие для самостоятельной работы: В 2ч. Ч.1: Алгоритмизация и программирование. – Пермь: Высш. шк., 2007.– 235 с.

2.  , , Основы программирования и алгоритмические языки. – М.: Энергоатомиздат, 2007.– 400 с.

3.  Учитесь программировать: Pascal 7.0: Задачи методы их решения. – М.: Диалог-МИФИ, 2007. – 256 с.

4.  Программирование в среде Turbo-Pascal 7.0. – М.: Диалог-МИФИ, 2009. – 288 с.

5.  Язык программирования Си: Предварительное описание. // Прикл. информатика. – 2008. – Вып. 1. – С. 68 – 113.

6.  Язык программирования Си: Задачи по языку Си: Пер. с англ. – М.: Финансы и статистика, 2007. – 279с.

7.  Бейз Г. Компьютерная математика. – М.: Наука, , 2009.– 216 с.

8.  Структуры данных и алгоритмы. – М.: Вильямс, 2009 – 384с.

9.  Алгоритмы и структуры данных. – СПб: Невский диалект, 2011 – 272с.

Дополнительная литература

1.  Бодуэн К. Методы программирования: В 2 т. Пер./

с фр. ; Под ред. . – М: Мир, 2002.– 336 с.: ил.

2.  IBM PC и PS/2: Руководство по программированию:Пер. с англ. – М: Радио и связь, 1994. – 336 с.: ил.

3.  , , Техника программирования: Учеб. пособие. – Киев: Выща шк., 2000. – 183 с.: ил.

4.  В. Информация. Алгоритмы. ЭВМ. – М.: Просвещение,1991.

– 225 с.

5.  В. Системы счисления. – М.: Наука, 2007.– 247 с.

6.  Турбо-Паскаль: Практика программирования. – М.: Учеб.

инж. центр “ МВТУ-ФЕСТО-ДИДАКТИК”, 2003. – 256 с.

7.  Кригер М. Введение в программирование на языке Си: Пер. с англ. – М.: Радио и связь, 2006. – 192с.

Задания и методические указания к выполнению

курсовой работы по дисциплине

«Языки и системы программирования»

Подписано в печать _________. Формат 60´84/16. Бумага для множ. аппаратов.

Печать плоская. Усл. печ. л. ___. Уч.-изд. л.____. Тираж ____ экз. Заказ № ____.

ФГАОУ ВПО «Российский государственный профессионально-педагогический университет». Екатеринбург, .

Ризограф ФГАОУ ВПО РГППУ. Екатеринбург, .

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4