Реферат: Операции многократной точности операции с длинными числами

Реферат: Операции многократной точности операции с длинными числами




👉🏻👉🏻👉🏻 ВСЯ ИНФОРМАЦИЯ ДОСТУПНА ЗДЕСЬ ЖМИТЕ 👈🏻👈🏻👈🏻




























































Операции многократной точности (т.е. операции с длинными числами).
Сначала буквам присваивается значение – например: а=23850934, причем все переменные – целые числа, которые по длине не должны превышать 300 знаков. Потом пишется выражение, например f=(a+b)/c+(d+a). При этом деление – это целое от деления делимого на делитель. Операции сложения, вычитания, умножения – обычные арифметические операции, только это операции над длинными числами. Кроме сложения, вычитания, умножения и деления еще могут быть использованы скобки.
Любую строку в поле ввода можно представить в виде
Где S – константа либо вычисляемое значение. Если это – константа, то С – число в строковом виде, перед которым стоит символ «@», а если S надо найти то S=V, где V – выражение с переменными и числами. В строке не должно быть пробелов и все переменные состоят из одой буквы. Между строками в поле ввода не должно быть пустых строк. Вывод идет аналогично вводу. Пример ввода и вывода можно посмотреть на рисунке
Интерфейс программы – ее внешний вид является наглядным и удобным. В верхнем поле ввода пишутся известные величины и формулы, потом жмется кнопка «Расчитать» и в нижнем поле выводятся в алфавитном порядке все переменные. Программа написана в среде программирования Delphi 6. Использовались только стандартные компоненты – TEdit и TButton. Итого на форме размещено поле ввода, поле вывода и кнопка – для запуска процесса расчета. Использование визуаль
Все длинные числа представляются в виде строки, каждый элемент которой – цифра. Если число отрицательное, то первым символом строки будет “-“. Чтобы считать по формуле используем структуру, описанную ниже
В массиве 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. Возвращается результат:
delen
(a,b:string):string; - частное от деления a на b. Берется целая часть.
po
_
ch
_
num
(ch:string;varznach:string):boolean; - ищет значение буквы в массиве mas. Если значение найдено то возвращается значение «Истина», в противном случае «Ложь». Функция используется для подстановки чисел в выражения. Аргументы: ch – буква, значение которой мы ищем, znach – найденное значение.
sislo
(ch:char):boolean; - проверяет – является ли символ ch цифрой. Если да – то возвращается «Истина». Функция используется для определения константа или выражения соответствует заданной букве.
poisk
(z:integer); - процедура для вычисления значения выражения. Она опирается на все предыдущие процедуры и функции. Z – номер вычисляемого значения в массиве mas. Алгоритм ее работы таков: считаем количество открывающихся скобок и если они есть, то начинаем считать с самой вложенной, потом идет умножение и деление, потом сумма и разность. После каждой операции длина уравнения уменьшается и обращение идет опять к процедуре poisk с тем же параметром z.
vivod
; - вывод найденных значений в поле вывода memo3.
TForm
1.
Button
1
Click
(Sender: TObject); - процедура нажатия на кнопку «Расчет».
TForm
1.
Button
2
Click
(Sender: TObject); - процедура нажатия на кнопку «Задание».
Все функции используют глобальную переменную mas и все процедуры и функции между собой тесно связаны.
Рассмотрим алгоритм работы процедуры umnozen

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
for ll:=0 to form1.Memo1.Lines.Count do begin
mas[y].lin[mas[y].dl]:=copy(tmp,nn+1,j-nn);
function
TForm1.sum(a,b:string):string;
if ((b[1]='-') and (a[1]<>'-')) then begin
sum:=form1.minus(a,copy(b,2,300)); exit;
if ((a[1]='-') and (b[1]<>'-')) then begin
sum:=form1.minus(b,copy(a,2,300)); exit;
if ((b[1]='-') and (a[1]='-')) then begin
bol:=true; a:=copy(a,2,300); b:=copy(b,2,300)
if length(b)<>length(a) then b:='0'+b;
function
Tform1.minus(a,b:string):string;
if ((b[1]='-') and (a[1]<>'-')) then begin
minus:=form1.sum(a,copy(b,2,300)); exit;
if ((a[1]='-') and (b[1]<>'-')) then begin
if ((b[1]='-') and (a[1]='-')) then begin
minus:=form1.minus(copy(b,2,300),copy(a,2,300)); exit;
vv:=strtoint(a[la-lb+i])-strtoint(b[i])-snos;
while ((c[1]='0')and(length(c)>1)) do c:=copy(c,2,300);
function
umn(a:integer;var xx:string):string;
if i=1 then str:=inttostr(ost)+str;
function
umnozen(a,b:string):string;
if ((b[1]='-') and (a[1]<>'-')) then begin
if ((a[1]='-') and (b[1]<>'-')) then begin
if ((b[1]='-') and (a[1]='-')) then begin
function
sravnenie(a,b:string):shortint;
if b[1]='-' then sravnenie:=sravnenie(b,a)
if a[1]='-' then sravnenie:=sravnenie(b,a)
dr:=dr+inttostr((strtoint(str[i])+ost*10) div 2);
ost:=((strtoint(str[i])+ost*10) mod 2);
if dr[1]='0' then dr:=copy(dr,2,300);
showmessage('Íà íîëü äåëèòü íåëüçÿ!');
if ((b[1]='-') and (a[1]<>'-')) then begin
if ((a[1]='-') and (b[1]<>'-')) then begin
if ((b[1]='-') and (a[1]='-')) then begin
lev:='0'; prav:=a; pr:='0'; rab:=a;
if tmp[1]='-' then tmp:=copy(tmp,2,300);
if (sravnenie(tmp,del2(b))<>1) then break;//bol:=false;
tmp:=form1.minus(prav,lev); rab:='';
if ((rab='-')or(rab=''))then delen:='0';
function
po_ch_num(ch:string;var znach:string):boolean;
if ((mas[i].dl=4)and(mas[i].lin[1]=ch)) then begin
if ((ch>='0')and(ch<='9')or(ch='-')) then sislo:=true
{snachala ubiraem skobki, potom *, potom /, potom +, potom -}
if mas[z].lin[i]='(' then k2:=k2+1;
for m:=i+1 to mas[z].dl-2 do mas[z].lin[m]:=mas[z].lin[m+2];
if ((mas[z].lin[zz]='*')or(mas[z].lin[zz]='/')) then begin
if po_ch_num(mas[z].lin[zz-1],tmp) then mas[z].lin[zz-1]:=tmp;
if po_ch_num(mas[z].lin[zz+1],tmp) then mas[z].lin[zz+1]:=tmp;
if (((sislo(mas[z].lin[zz-1][1])))and(sislo(mas[z].lin[zz+1][1]))) then begin
if zn='*' then mas[z].lin[zz-1]:=umnozen(mas[z].lin[zz-1],mas[z].lin[zz+1])
else mas[z].lin[zz-1]:=delen(mas[z].lin[zz-1],mas[z].lin[zz+1]);
for m:=zz to mas[z].dl-2 do mas[z].lin[m]:=mas[z].lin[m+2];
//////// {snachala / i *, potom + i -}
if ((mas[z].lin[zz]='+')or(mas[z].lin[zz]='-')) then begin
if po_ch_num(mas[z].lin[zz-1],tmp) then mas[z].lin[zz-1]:=tmp;
if po_ch_num(mas[z].lin[zz+1],tmp) then mas[z].lin[zz+1]:=tmp;
if ((sislo(mas[z].lin[zz-1][1]))and(sislo(mas[z].lin[zz+1][1]))) then begin
if zn='+' then mas[z].lin[zz-1]:=form1.sum(mas[z].lin[zz-1],mas[z].lin[zz+1])
else mas[z].lin[zz-1]:=form1.minus(mas[z].lin[zz-1],mas[z].lin[zz+1]);
for m:=zz to mas[z].dl-2 do mas[z].lin[m]:=mas[z].lin[m+2];
for zz:=1 to mas[z].dl-1 do begin if ((mas[z].lin[zz]='*')or(mas[z].lin[zz]='/')) then begin
if po_ch_num(mas[z].lin[zz-1],tmp) then mas[z].lin[zz-1]:=tmp;
if po_ch_num(mas[z].lin[zz+1],tmp) then mas[z].lin[zz+1]:=tmp;
if ((sislo(mas[z].lin[zz-1][1]))and(sislo(mas[z].lin[zz+1][1]))) then begin
if zn='*' then mas[z].lin[zz-1]:=umnozen(mas[z].lin[zz-1],mas[z].lin[zz+1])
else mas[z].lin[zz-1]:=delen(mas[z].lin[zz-1],mas[z].lin[zz+1]);
for m:=zz to mas[z].dl-2 do mas[z].lin[m]:=mas[z].lin[m+2];
if ((mas[z].lin[zz]='+')or(mas[z].lin[zz]='-')) then begin
if po_ch_num(mas[z].lin[zz-1],tmp) then mas[z].lin[zz-1]:=tmp;
if po_ch_num(mas[z].lin[zz+1],tmp) then mas[z].lin[zz+1]:=tmp;
if ((sislo(mas[z].lin[zz-1][1]))and(sislo(mas[z].lin[zz+1][1]))) then begin
if zn='+' then mas[z].lin[zz-1]:=form1.sum(mas[z].lin[zz-1],mas[z].lin[zz+1])
else mas[z].lin[zz-1]:=form1.minus(mas[z].lin[zz-1],mas[z].lin[zz+1]);
for m:=zz to mas[z].dl-2 do mas[z].lin[m]:=mas[z].lin[m+2];
form1.Memo3.Lines.Add(mas[i].lin[1]+'='+mas[i].lin[3]);
procedure
TForm1.Button1Click(Sender: TObject);
procedure
TForm1.Button2Click(Sender: TObject);
messagedlg('Îïåðàöèè ìíîãîêðàòíîé òî÷íîñòè',mtinformation,[mbok],0);

Название: Операции многократной точности операции с длинными числами
Раздел: Рефераты по информатике
Тип: реферат
Добавлен 16:10:21 29 января 2007 Похожие работы
Просмотров: 5
Комментариев: 18
Оценило: 2 человек
Средний балл: 5
Оценка: неизвестно   Скачать

Срочная помощь учащимся в написании различных работ. Бесплатные корректировки! Круглосуточная поддержка! Узнай стоимость твоей работы на сайте 64362.ru
Если Вам нужна помощь с учебными работами, ну или будет нужна в будущем (курсовая, дипломная, отчет по практике, контрольная, РГР, решение задач, онлайн-помощь на экзамене или "любая другая" учебная работа...) - обращайтесь: https://clck.ru/P8YFs - (просто скопируйте этот адрес и вставьте в браузер) Сделаем все качественно и в самые короткие сроки + бесплатные доработки до самой сдачи/защиты! Предоставим все необходимые гарантии.
Привет студентам) если возникают трудности с любой работой (от реферата и контрольных до диплома), можете обратиться на FAST-REFERAT.RU , я там обычно заказываю, все качественно и в срок) в любом случае попробуйте, за спрос денег не берут)
Да, но только в случае крайней необходимости.

Реферат: Операции многократной точности операции с длинными числами
Реферат: Особливості функціонування локальних інформаційних мереж
Сочинение 9.3 На Тему Страх
Хруцкий Эдуард Собрание Сочинений Торрент
Обязательные Произведения Для Декабрьского Сочинения
Сочинение Моя Школа 7 Класс
Реферат по теме Японо-Китайские экономические отношения в 80-90 годах
Как Пишется Реферат
Реферат: Присоединение Прибалтики к СССР
Скачать Мопассан Сочинения
Контрольная Поточная Работа По Дисциплине Информатика
Контрольная работа: Основні розрахунки щодо роботи автомобільного двигуна
Сочинение По Картине Лесное Озеро
Реферат: Государство, его основные признаки. Формы правления
Сенина Егэ 2022 Подготовка К Сочинению
Реферат: Особенности зрения человека. Скачать бесплатно и без регистрации
Реферат: Десятилетие массовых коммуникаций
Реферат по теме Хронический холецистит
Дипломная работа по теме Агитация молодежи к проявлению активной гражданской позиции
Темы Сочинения По Первому Направлению
Реферат по теме Верования и праздники древних славян
Курсовая работа: Развитие делового туризма в г. Кстово
Реферат: Постановка и разработка алгоритма решения задачи Учёт основных средств
Статья: Современная книга для детей как база для лингвистического анализа разного уровня

Report Page