Термінова допомога студентам
Дипломи, курсові, реферати, контрольні...

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

РефератДопомога в написанніДізнатися вартістьмоєї роботи

Function Tform1. minus (a, b: string):string; var i, la, lb, vv, snos: integer; c, tmp: string; pom: boolean; begin if ((b= «- «) and (a «- «)) then begin minus:=form1.sum (a, copy (b, 2,300)); exit; end; if ((a= «- «) and (b «- «)) then begin minus:=form1.sum (a, «- «+b); exit; end; if ((b= «- «) and (a= «- «)) then begin minus:=form1.minus (copy (b, 2,300), copy (a, 2,300)); exit; end; c:=a… Читати ще >

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

Задание.

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

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

Спочатку буквах присвоюється значення — наприклад: а=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 якщо а.

Показати весь текст
Заповнити форму поточною роботою