Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

САНКТПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ

Работа добавлена на сайт samzan.net:

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 24.11.2024

СМОЛЕНСКИЙ КОЛЛЕДЖ ТЕЛЕКОММУНИКАЦИЙ

(филиал) ФЕДЕРАЛЬНОГО ГОСУДАРСТВЕНННОГО ОБРАЗОВАТЕЛЬНОГО БЮДЖЕТНОГО УЧРЕЖДЕНИЯ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М.А.  БОНЧ-БРУЕВИЧА»

УТВЕРЖДАЮ

Зам. директора по УПР

_____________ И. В. Ильющенков

«___» ___________ 2013г

РАССМОТРЕНО

на  заседании цикловой комиссии

программно - вычислительных дисциплин

Протокол № _____

«___»___________2013г.

Председатель комиссии __________Мохнач О.А.

ПРАКТИЧЕСКАЯ РАБОТА 5

                        

 

      По дисциплине:  Теория алгоритмов 

                   

Наименование работы:   Умножение больших целых чисел.

    

                 Для специальности: 230115     

        Работа рассчитана на 2 часа

Составлена преподавателем Мохнач О.А.

г. Смоленск

2013 г.

  1.  ЦЕЛЬ РАБОТЫ: научиться реализовывать алгоритм умножения больших целых чисел.

2. ЛИТЕРАТУРА: Голицына О. Л., Попов И. И. Основы алгоритмизации и программирования. М.: ФОРУМ – ИНФРА-М, 2008.

                                        Конспект.

3.  ВОПРОСЫ ДЛЯ ДОМАШНЕЙ ПОДГОТОВКИ:

  1.  Почему нельзя выполнить арифметические действия с большими числами обычными операциями?
    1.  Где применяются алгоритмы работы с большими числами?
    2.  В чем состоит метод умножения больших чисел?

4. ОБОРУДОВАНИЕ: ПЭВМ

5. ЗАДАНИЕ. 

5.1. Разработать программу, выполняющую умножение 2-х больших чисел. Написать комментарии к каждой строчке  программы.

№ варианта

1 число

2 число

1

635

1234567

2

467

1235768

3

1267

234567

4

908

234789

5

5804

345678

6

6705

876543

7

1234

765432

8

6543

65432

9

5876

54321

10

1267

87654

5.2.  Реализовать сложение (*вычитание, *деление чисел)

6. ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ.

    6.1. Повторить правила техники безопасности:

             При работе и техническом обслуживании ПК необходимо соблюдать следующие меры предосторожности:

• Запрещается во время работы ПК размыкать и замыкать разъемные соединения.

• источники света должны быть расположены так, чтобы не засвечивать экран монитора, не создавать резких бликов на экране и не светить из-за монитора в глаза человека, работающего с ПК;

Не кладите на монитор бумагу, ткани и прочее, что может нарушить вентиляцию.

Включение ПК должно производиться в следующей последовательности:

  •  включить принтер (если он нужен);
  •  включить монитор;
  •  включить системный блок.

Перед выключением компьютера завершите все работающие программы и подождите 1-2 сек. (это необходимо, если на вашем ПК предусмотрено кэширование дисков). Далее необходимо:

• выключить системный блок;

• выключить принтер (если он был включен);

• выключить монитор.

    6.2. Задать числа любым способом.

    6.5. Реализовать алгоритм умножения длинных чисел.

    6.6. Вывести на экран произведение.

    6.7. Протестировать программу на различных исходных данных.

    6.8. Оформить отчет.

  1.  СОДЕРЖАНИЕ ОТЧЕТА.
    1.  Цель работы.
    2.  Текст программы с комментариями.
  2.  КОНТРОЛЬНЫЕ ВОПРОСЫ

8.1. Понятие и цель арифметических действий с длинными числами.

           8.2. Алгоритмы работы с длинными целыми числами.

  1.  ПРИЛОЖЕНИЕ

Длинная арифметика.

При решении определенного ряда задач, возникают ситуации, когда результаты или промежуточные вычисления не могут храниться ни в одном из допустимых типов языка программирования. Тогда необходимо обращаться к разделу программирования, который называется длинной арифметикой.

Для решения различных типов задач длинной арифметики применяется один и тот же принцип. Каждая цифра числа хранится в отдельном элементе массива. Для удобства добавления нового разряда числа хранятся в обратном порядке, причем длину числа можно хранить в отдельной переменной или в нулевом элементе массива.

Задача сложения

Задача решается таким же образом, как и при сложении в столбик. Производим сложение по каждому разряду отдельно. Если сумма больше 9, берем остаток от деления числа на 10 и не забываем прибавить количество десятков к следующему по старшинству разряду.

Программный код:

program A+B;

var

s1,s2:string;

a,b:array[1..100] of integer;

len,i,c:integer;

begin

c:=0;

ReadLn(s1);

ReadLn(s2);

len:=length(s1);                      {разбиение строк в элементы массивов}

for i:=1 to len do

a[len-i+1]:=Ord(s1[i])-48;

len:=length(s2);

for i:=1 to len do

b[len-i+1]:=Ord(s2[i])-48;

if length(s1)>length(s2) then len:=length(s1)

else len:=length(s2);

for i:=1 to len do

begin

c:=c+a[i]+b[i];         {переменная c будет в дальнейшем использоваться для переноса числа в следующий ряд}

a[i]:=c mod 10;         {результат сложения запишем в массив а}

c:=c div 10;

end;

if c>0 then begin

len:=len+1;

a[len]:=c;

end;

for i:=len downto 1 do     {вывод результата}

Write(a[i]);

end.

Задача вычитания

Данная программа осуществляет нахождения разности двух целых чисел, не позволяющих хранить их в переменных допустимых типов какого-либо языка программирования.

В отличии от задачи сложения, мы не можем выбирать по длине какого числа будем двигаться, поэтому прежде требует проверить конечный результат на его знак. Это освобождает от дальнейших трудностей. Непосредственно нахождения разности ничем не отличается от нахождения разности путем "вычитания в столбик".

program A-B;

Function CompLong(s1,s2:string):integer; {функция CompLong сравнивает две строки как большие числа}

var

a,len1,len2,i:integer;

b:boolean;

begin

a:=0;

b:=true;

len1:=length(s1);

len2:=length(s2);

if len1>len2 then begin a:= 1; b:=false; end;

if len1<len2 then begin a:=-1; b:=false; end;

if b then

for i:=1 to len1 do

begin

if Ord(s1[i])-48>Ord(s2[i])-48 then begin a:= 1; break; end;

if s1[i]<s2[i] then begin a:=-1; break; end;

end;

CompLong:=a;

end;

 

var

s1,s2:string;

i,len,c,x:integer;

a,b:array[1..1000] of integer;

begin

ReadLn(s1); c:=0;

ReadLn(s2);

len:=length(s2);

for i:=1 to len do

b[len-i+1]:=Ord(s2[i])-48;

len:=length(s1);

 

for i:=1 to len do

a[len-i+1]:=Ord(s1[i])-48;

if Complong(s1,s2)<0 then begin

Write(f2,'-');

len:=length(s2);

for i:=1 to len do begin

x:=a[i];

a[i]:=b[i];

b[i]:=x;

end;

end;

for i:=1 to len do

begin

c:=c+a[i]-b[i]+10;

a[i]:= c mod 10;                       {результат будет храниться в массиве a}

if c < 10 then c:=-1 else c:=0;

end;

while (a[len]=0) and (len>1) do len:=len-1;

for i:=len downto 1 do {вывод результата}

Write(a[i]);

end.

Задача умножения

program A*B;

 

var

s1:string;

b,i,c: integer;

a:array[0..10] of integer;

begin

c:=0;

ReadLn(s1);

ReadLn(b);

a[0]:=length(s1);

for i:=1 to a[0] do

a[a[0]-i+1]:=Ord(s1[i])-48;

 

for i:=1 to a[0] do

begin

a[i]:=c+a[i]*b;

c:=a[i] div 10;

a[i]:=a[i] mod 10;

end;

While c>0 do

begin

a[0]:=a[0]+1;

a[a[0]]:=c mod 10;

c:=c div 10;

end;

if a[a[0]]=0 then Write(0)

else

for i:=a[0] downto 1 do

Write(a[i]);

end.

 

На основе этих программ могут быть созданы программы нахождения факториала, возведения в степень и т.д. позволяющие работать с большими числами. Следует также учесть, что для экономии памяти в каждой ячейке массива можно хранить больше чем одну цифру числа.




1. Створити нову форму за допомогою Конструктора на основі таблиць Каталог фітопрепаратів Постачальники
2. Курсовая работа- Расчёт годового графика ремонта и обслуживания электрооборудования участка зубофрезерных станков
3. здоровя населення
4. 32. Работа 505
5. 1Божественная природа судебной власти
6.  2 Считаете ли Вы себя верующим человеком 1
7. Тема 2 Загальні положення про договори у господарській діяльності 1
8. Тема 3.3. 8 НАЛОГОВОЕ ПЛАНИРОВАНИЕ В СИСТЕМЕ ФИНАНСОВОГО МЕНЕДЖМЕНТА 1
9. философии бытия будет рассматриваться ветвь современной европейской философии которую можно пожалуй п
10.  БОРЬБА С ВОДОЙ Все суда должны иметь аварийное снабжение в объеме не менее указанного Регистром РФ
11. Калининградский государственный технический университетКафедра- Автоматизация производственных процесс
12. скинув шапки молясь и вздыхая
13. Контрольная работа- Сходства и отличия католиков и православных
14. РЕФЕРАТ дисертації на здобуття наукового ступеня кандидата економічних наук Київ ~1
15. экономические проблемы интеллектуальной собственности
16. на тему- сущность и причины инфляции
17. Понятие об инфекционном процессе
18. Наш дом Вселенная
19. маркетинг der Zust~ndigkeitsbereich Mrketing руководитель подразделения der F
20. Изучение коммуникативных навыков Г