Операции многократной точності (операції з довгими числами)

Тип работы:
Реферат
Предмет:
Информатика, программирование


Узнать стоимость

Детальная информация о работе

Выдержка из работы

Задание

Операції многократной точності (тобто. операції з довгими числами).

Конкретизація задания

Спочатку буквах присвоюється значення — наприклад: а=23 850 934, причому всі перемінні - цілі числа, котрі за довжині нічого не винні перевищувати 300 знаків. Потім пишеться вираз, наприклад f=(a+b)/c+(d+a). У цьому розподіл — це ціле від розподілу діленого на дільник. Операції складання, вирахування, множення — звичайні арифметичні операції, саме це операції над довгими числами. Крім складання, вирахування, множення і розподілу ще можуть бути використані скобки.

Формат ввода

Будь-яку рядок на полі введення можна в виде

S={C, V}

Де P. S — константа або вычисляемое значення. Якщо це — константа, то З — число в строковом вигляді, якого стоїть символ «@», і якщо P. S треба знайти то S=V, де V — вираз зі змінними і числами. У рядку повинно бути прогалин і всі перемінні складаються з одою літери. Між рядками на полі введення повинно бути порожніх рядків. Висновок йде аналогічно введення. Приклад введення та виведення можна оцінити рисунке

Інтерфейс программы.

Интерфейс програми — її зовнішній вигляд є наочним і дуже зручним. У верхньому полі введення пишуться відомі розміру й формули, потім тиснеться кнопка «Расчитать» й у нижній полі виводяться в алфавітному терміновому порядку всі перемінні. Програма написана серед програмування Delphi 6. Використовувалися лише стандартні компоненти — TEdit і TButton. Разом на формі розміщено полі введення, полі виведення і кнопка — для запуску процесу розрахунку. Використання візуальних коштів розробки набагато прискорило процес написання программы.

Структура хранения

Усі довгі числа видаються як рядки, кожен елемент якої - цифра. Якщо негативне, то першим символом рядки буде «-». Щоб вважати за такою формулою використовуємо структуру, описану ниже

type dd= record lin: array[1. 300] of string; dl: integer; end;

var mas: array[1. 300] of dd;

У масиві mas зберігається рівняння. Кожен елемент масиву — окреме рівняння. У lin зберігаються окремі елементи рівняння. Наприклад mas[3]. lin=('A','=','3','/','(','B','-','1',')') відповідає рівнянню A=3/(B-1). У першому елементі (mas[i]. lin[1]) завжди зберігається літера, у другому (mas[i]. lin[2]) символ «=». Така форма ведення рівняння потрібна для зручності обчислення довгих формул. У dl зберігається поточне число елементів в уравнении+1. Можна сміливо сказати — якщо dl=4, то даному елементі зберігається не формула, і треба обчислити, а значение.

Кількість рядків введених у полі введення має не більше 300 — це задається размерностью масиву mas.

Використовувані процедури і функции

zapolnenie; - заповнення масиву mas з поля edt1. sum (a, b: string):string; - сума чисел, які у a і b. minus (a, b: string):string; - різницю чисел, які у a і b. minus=a-b umn (a: integer;var xx: string):string; - збільшення кількості хх на цифру а. Використовується у функції umnozen. umnozen (a, b: string):string; - твір чисел, які у a і b. del2(str: string):string; - ділить число str на 2. sravnenie (a, b: string):shortint; - порівнює число a із кількістю b. Повертається результат:

. якщо а> b, то sravnenie =1

. якщо а9 then begin ost: =k divx 10; k: =k mod 10; end; c[j]: =inttostr (k)[1]; j: =j-1; end; if ost>0 then begin tmp2: =inttostr (ost)+tmp2; c: =form1. sum (tmp2,c); end; if bol then з:= «- «+з; sum: =c; end;

function Tform1. minus (a, b: string):string; var i, la, lb, vv, snos: integer; c, tmp: string; pom: boolean; begin if ((b[1]= «- «) and (a[1] «- «)) then begin minus: =form1. sum (a, copy (b, 2,300)); exit; end; if ((a[1]= «- «) and (b[1] «- «)) then begin minus: =form1. sum (a, «- «+b); exit; end; if ((b[1]= «- «) and (a[1]= «- «)) then begin minus: =form1. minus (copy (b, 2,300), copy (a, 2,300)); exit; end; c: =a; pom: =false; la: =length (a); lb: =length (b); if lb> la then begin pom: =true; c: =b; b: =a; a: =c; la: =length (a); lb: =length (b); end; snos: =0; for i: =lb downto 1 do begin vv: =strtoint (a[la-lb+i])-strtoint (b[i])-snos; snos: =0; if vv1)) do c: =copy (c, 2,300); if pom then з:= «- «+з; minus: =c; end;

function umn (a: integer;var xx: string):string; var i, ost, tmp, dl: integer; str: string; begin ost: =0; str:= ««; dl: =length (xx); for i: =dl downto 1 do begin tmp: =a*strtoint (xx[i])+ost; if tmp>9 then begin str: =inttostr ((tmp mod 10))+str; ost: =tmp divx 10; if i=1 then str: =inttostr (ost)+str; end else begin str: =inttostr (tmp)+str; ost: =0; end; end; umn: =str; end;

function umnozen (a, b: string):string; var k, i: integer; tmp, c, r: string; bol: boolean; begin bol: =false; if ((b[1]= «- «) and (a[1] «- «)) then begin bol: =true; b: =copy (b, 2,300); end; if ((a[1]= «- «) and (b[1] «- «)) then begin bol: =true; a: =copy (a, 2,300); end; if ((b[1]= «- «) and (a[1]= «- «)) then begin a: =copy (a, 2,300); b: =copy (b, 2,300) end; if ((a= «0 »)or (b= «0 »)) then begin umnozen:= «0 «; exit; end; k: =length (b); з:= «0 «; tmp:= ««; for i: =k downto 1 do begin r: =umn (strtoint (b[i]), a); r: =r+tmp; tmp: =tmp+ «0 «; c: =form1. sum (c, r); end; if bol then з:= «- «+з; umnozen: =c; end;

function sravnenie (a, b: string):shortint; { якщо а> b, то сравнение=1 якщо а

ПоказатьСвернуть
Заполнить форму текущей работой