|
Деление чисел в нормализованной форме |
Деление чисел в нормализованной форме
14 Министерство образования и науки Российской Федерации Федеральное агентство по образованию Марийский государственный технический университет Кафедра информатики и системного программирования Курсовая работа по дисциплине информатика на тему: Деление чисел в нормализованной форме Выполнила: студент ИВТ-11 Васильев Иван Федорович Проверила: старший преподаватель Кафедры ИиСП Иванова И.Н. Йошкар-Ола 2009 Содержание - 1. Теоретическая часть
- 1.1 Теория
- 1.2 Описание метода решения
- 2. Алгоритм (блок-схема) работы программы
- 2.1 Листинг программы
- 2.2 Тестирование программы
- 3. Вывод
ВведениеПостановка задачи:Ввод: два числа в десятичной СС в естественной форме. Программа переводит числа в нормализованную форму, делит нормализованные числа.Вывод: частное от деления в нормализованной форме в десятичной СС.В данной курсовой работе показан один из алгоритмов деления чисел в нормализованной форме. Такие программы удобны для быстрого получения нормализованного произведения чисел с помощью TP Pascal. Для реализации поставленной задачи я использовала теоретические сведения из курса информатики и ПнаЯВУ, а также полученные ранее знания в области программирования.1. Теоретическая часть1.1 ТеорияПусть имеются два числа X1 = M1·pk1 и X2 = M2·pk2 (здесь индексы у мантиссы и порядка означают не систему счисления, а служат номерами чисел). Умножение должно начинаться с выявления большего из k1 и k2, нахождения модуля их разности k =|k1 - k2| и сдвига вправо на k разрядов мантиссы того числа, у которого k оказался меньше. Операция деления, проводимая как над целыми, так и вещественными числами, приводит в общем случае к появлению вещественного числа, поэтому целые числа предварительно преобразуются в вещественный тип, т.е. переводятся в нормализованную форму. Очевидно, при делении X1X2 мантисса частного M = M1/M2, а порядок k = k1-k2. При этом непосредственно операция деления сводится к сдвигу делителя вправо и последовательному вычитанию его из делителя (т.е. сложения с дополнительным кодом вычитаемого). Как и в предыдущих операциях, результат деления при необходимости нормализуется.1.2 Описание метода решенияМетод решения заключается в считывании из INPUT в файл чисел, переписывании чисел без разделения их на целую и дробную части, подсчитывании количества разрядов чисел, выбора большего разряда, и сдвига вправо на k разрядов меньшего числа, затем деления нормализованных чисел, если возникает необходимость - нормализации результата, и вывода суммы в OUTPUT.2. Алгоритм (блок-схема) работы программы2.1 Листинг программыПрограмма считывает числа в файл, убирает `. ', считает количество разрядов - k умножаем на 10, до тех пор пока не дойдем до дробной части, с помощью IF THEN ELSE находим больший k у одного из чисел, а к меньшему числу добавляем нули, тем самым сдвигая его вправо, в то же время делим больший k на 1 разряд, предварительно присвоив его другому элементу, до тех пор пока k1 не будет равно k2, записываем в файл числа построчно, начиная с “0. ” - для нормализации, затем нули (если таковые имеются), и само число без “. ”. Считываем записанное построчно как числа и выполняем деление. Часто возникают ситуации, когда необходима нормализация результата, его нормализуем таким же образом как и вводимые числа. Выводим результат + “*k”.PROGRAM DELENIEVNORMFORME;USES CRT;CONSTpt='0. ';z='0';x1=10;VARlst1,lst2: INTEGER;j,x,M,k1,k2,k: REAL;st,st1,st2,jst,xst: string;temp,temp1: text;Ch: CHAR;BEGINASSIGN (temp, 'temp. DAT'); { Создаем временные файлы, для промежуточных преобразований над числами }ASSIGN (temp1, 'temp1. DAT');REWRITE (temp);REWRITE (temp1);WRITELN ('Введите первое число: '); {Считываем оба числа в файл}READ (st);WRITELN (temp,st);WRITELN ('Введите второе число: ');READLN;READLN (st);WRITE (temp,st);k1: =1;k2: =1;RESET (temp);WHILE NOT EOF (temp) {Переписываем числа во второй файл, убирая '. '}DOBEGINWHILE NOT EOLN (temp)DOBEGINREAD (temp,Ch);IF (Ch = '. ')THENELSEWRITE (temp1,Ch);END;READLN (temp);WRITELN (temp1)END;RESET (temp);REPEAT {Считаем количество разрядов первого числа}BEGINREAD (temp,Ch);k1: =k1*x1;ENDUNTIL (Ch = '. ') OR (EOLN (temp));READLN (temp);REPEAT {Считаем количество разрядов второго числа}BEGINREAD (temp,Ch);k2: =k2*x1;ENDUNTIL (Ch = '. ') OR (EOLN (temp));RESET (temp1);REWRITE (temp);st1: ='';st2: ='';IF k1>k2 {ищем на сколько разрядов сдвигать вправо меньшее число }THENBEGINk: =k1/k2;READLN (temp1,st);READ (temp1,st);REPEATBEGINst2: =st2 + z;k1: =k1/x1;END;UNTIL k2=k1;ENDELSEIF k1<k2THENBEGINk: =k2/k1;READ (temp1,st);REPEATBEGINst1: =st1 + z;k2: =k2/x1;ENDUNTIL k2=k1;ENDELSEk: =k1;st1: =pt+st1; {Нормализуем числа}st2: =pt+st2;RESET (temp1);REWRITE (temp);READLN (temp1,jst);READ (temp1,xst);WRITE (temp,st1,jst);WRITELN (temp);WRITE (temp,st2,xst);RESET (temp);READLN (temp,j);READ (temp,x);M: = (j/x); {делим}IF M > 1 { при необходимости результат деления нормализуем }THENBEGINREWRITE (temp);REWRITE (temp1);WRITE (temp,M: 1: 10);RESET (temp);WHILE NOT EOLN (temp)DOBEGINREAD (temp,Ch);IF Ch = '. 'THENELSEWRITE (temp1,Ch);END;RESET (temp1);READ (temp1,st);WRITE ('Частное от деления в нормализованной форме: ','0. ',st,'*',k: 1: 0);ENDELSEWRITE ('Частное от деления в нормализованной форме: ', M: 1: 10,'*',k: 1: 0);END.2.2 Тестирование программыДля тестирования введем два числаНа выходе имеем частное от деления в нормализованной форме3. ВыводПри выполнении этой курсовой работы, был составлен наиболее оптимальный алгоритм деления чисел в нормализованной форме. Более глубоко изучена работа со строковыми данными и типами REAL и INTEGER. Эта программа в первую очередь наиболее необходима людям, которые вручную делят числа в нормализованной форме, чтобы заменить ручной труд на машинный.
|
|
|
© 2003-2013
Рефераты бесплатно, курсовые, рефераты биология, большая бибилиотека рефератов, дипломы, научные работы, рефераты право, рефераты, рефераты скачать, рефераты литература, курсовые работы, реферат, доклады, рефераты медицина, рефераты на тему, сочинения, реферат бесплатно, рефераты авиация, рефераты психология, рефераты математика, рефераты кулинария, рефераты логистика, рефераты анатомия, рефераты маркетинг, рефераты релиния, рефераты социология, рефераты менеджемент. |
|
|