Реферат по предмету "Программирование"


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

Задание Операции многократной точности т.е. операции с длинными числами. Конкретизация задания Сначала буквам присваивается значение например а23850934, причем все переменные целые числа, которые по длине не должны превышать 300 знаков. Потом пишется выражение, например fabcda. При этом деление это целое от деления делимого на делитель. Операции сложения, вычитания, умножения обычные арифметические операции, только это операции над длинными

числами. Кроме сложения, вычитания, умножения и деления еще могут быть использованы скобки. Формат ввода Любую строку в поле ввода можно представить в виде SC,V Где S константа либо вычисляемое значение. Если это константа, то С число в строковом виде, перед которым стоит символ , а если S надо найти то SV, где V выражение с переменными и числами.

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

Расчитать и в нижнем поле выводятся в алфавитном порядке все переменные. Программа написана в среде программирования Delphi 6. Использовались только стандартные компоненты TEdit и TButton. Итого на форме размещено поле ввода, поле вывода и кнопка для запуска процесса расчета. Использование визуаль ных средств разработки на много ускорило процесс написания программы.

Структура хранения Все длинные числа представляются в виде строки, каждый элемент которой цифра. Если число отрицательное, то первым символом строки будет Чтобы считать по формуле используем структуру, описанную ниже type dd record linarray1 300 of string dlinteger end var masarray1 300 of dd В массиве mas хранится уравнение. Каждый элемент массива отдельное уравнение. В lin хранятся отдельные элементы уравнения.

Например mas3.lin A 3 B 1 , соответствует уравнению A3B-1. В первом элементе masi.lin1 всегда хранится буква, во втором masi.lin2 символ . Такая форма ведения уравнения нужна для удобства вычисления длинных формул. В dl хранится текущее число элементов в уравнении1. Можно сказать если dl4, то в данном элементе хранится не формула, которую надо вычислить, а значение.

Количество строк введенных в поле ввода должно быть не более 300 это задается размерностью массива mas. Используемые процедуры и функции zapolnenie - заполнение массива mas из поля edt1. suma,bstringstring - сумма чисел, хранящихся в a и b. minusa,bstringstring - разность чисел, хранящихся в a и b. minusa-b umnaintegervar xxstringstring - умножение числа хх на цифру а. Используется в функции umnozen. umnozena,bstringstring - произведение чисел, хранящихся в a и b. del2strstringstring

- делит число str на 2. sravneniea,bstringshortint - сравнивает число a с числом b. Возвращается результат если а b, то sravnenie 1 если а b, то sravnenie -1 если а b, то sravnenie 0 delena,bstringstring - частное от деления a на b. Берется целая часть. pochnumchstringvar znachstringboolean - ищет значение буквы в массиве mas. Если значение найдено то возвращается значение Истина, в противном случае Ложь. Функция используется для подстановки чисел в выражения.

Аргументы ch буква, значение которой мы ищем, znach найденное значение. sislochcharboolean - проверяет является ли символ ch цифрой. Если да то возвращается Истина. Функция используется для определения константа или выражения соответствует заданной букве. poiskzinteger - процедура для вычисления значения выражения. Она опирается на все предыдущие процедуры и функции. Z номер вычисляемого значения в массиве mas. Алгоритм ее работы таков считаем количество открывающихся

скобок и если они есть, то начинаем считать с самой вложенной, потом идет умножение и деление, потом сумма и разность. После каждой операции длина уравнения уменьшается и обращение идет опять к процедуре poisk с тем же параметром z. vivod - вывод найденных значений в поле вывода memo3. TForm1.Button1ClickSender TObject - процедура нажатия на кнопку Расчет. TForm1.Button2ClickSender TObject - процедура нажатия на кнопку

Задание. Все функции используют глобальную переменную mas и все процедуры и функции между собой тесно связаны. Рассмотрим алгоритм работы процедуры umnozen Листинг программы unit Unit1 interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids type dd record linarray1 300 of string dlinteger end

TForm1 classTForm Button1 TButton Memo1 TMemo Label1 TLabel Label3 TLabel Memo3 TMemo Button2 TButton procedure Button1ClickSender TObject function minusa,bstringstring function suma,bstringstring procedure Button2ClickSender TObject private Private declarations public Public declarations end var Form1 TForm1 masarray1 300 of dd vs1integerelementov v zn yinteger elementov

v mas implementation R .DFM procedure zapolnenie var tmpstring j,nn,llinteger chisloboolean begin y0 for ll0 to form1.Memo1.Count do begin tmpform1.Memo1.Linesll yy1 masy.dl1 nn0 chislofalse tmpansiuppercasetmp for j1 to lengthtmp do begin if tmp1 then begin masy.lin3copytmp,4,300 masy.lin1tmp2 masy.lin2tmp3 masy.dl4 break end else begin masy.linmasy.dlcopytmp,nn1,j-nn masy.dlmasy.dl1 nnj end end end end function TForm1.suma,bstringstring var tmp,c,tmp2string i,k,ost,jinteger bolboolean begin if b1- and a1 - then

begin sumform1.minusa,copyb,2,300 exit end if a1- and b1 - then begin sumform1.minusb,copya,2,300 exit end bolfalse if b1- and a1- then begin boltrue acopya,2,300 bcopyb,2,300 end if lengthb lengtha then begin tmpb ba atmp end ost0 if lengthb lengtha then b0b ca jlengtha tmp2 for ilengthb downto 1 do begin tmp2tmp20 kstrtointcjstrtointbi kkost ost0 if k 9 then begin ostk div 10 kk mod 10 end cjinttostrk1 jj-1 end if ost 0 then begin tmp2inttostrosttmp2 cform1.sumtmp2,c end if bol then c-c sumc end function

Tform1.minusa,bstringstring var i,la,lb,vv,snosinteger c,tmpstring pomboolean begin if b1- and a1 - then begin minusform1.suma,copyb,2,300 exit end if a1- and b1 - then begin minusform1.suma b exit end if b1- and a1- then begin minusform1.minuscopyb,2,300,copya,2,300 exit end ca pomfalse lalengtha lblengthb if lb la then begin pomtrue cb ba ac lalengtha lblengthb end snos0 for ilb downto 1 do begin vvstrtointala-lbi-strtointbi-snos snos0 if vv 0 then begin snos1 vvvv10 end cla-lbiinttostrvv1 end if snos1 then begin

tmp for i1 to lb do tmptmp0 tmp1tmp cminusc,tmp end while c10andlengthc 1 do ccopyc,2,300 if pom then c-c minusc end function umnaintegervar xxstringstring var i,ost,tmp,dlinteger strstring begin ost0 str dllengthxx for idl downto 1 do begin tmpastrtointxxiost if tmp 9 then begin strinttostrtmp mod 10str osttmp div 10 if i1 then strinttostroststr end else begin strinttostrtmpstr ost0 end end umnstr end function umnozena,bstringstring var k,iinteger tmp,c,rstring bolboolean begin bolfalse if b1- and a1

- then begin boltrue bcopyb,2,300 end if a1- and b1 - then begin boltrue acopya,2,300 end if b1- and a1- then begin acopya,2,300 bcopyb,2,300 end if a0orb0 then begin umnozen0 exit end klengthb c0 tmp for ik downto 1 do begin rumnstrtointbi,a rrtmp tmptmp0 cform1.sumc,r end if bol then c-c umnozenc end function sravneniea,bstringshortint если а b, то сравнение1 если а b, то сравнение-1 если а b, то сравнение0 var la,lb,iinteger begin lalengtha lblengthb if a1- then begin if b1- then sravneniesravnenieb,a else

sravnenie-1 exit end if b1- then begin if a1- then sravneniesravnenieb,a else sravnenie1 exit end if lb la then sravnenie-1 if lb la then sravnenie1 if lalb then begin for i1 to la do begin if ai bi then begin sravnenie1 exit end if ai bi then begin sravnenie-1 exit end end sravnenie0 end end function del2strstringstring var ost,iinteger drstring begin ost0 dr for i1 to lengthstr do begin drdrinttostrstrtointstriost10 div 2 oststrtointstriost10 mod 2 end if dr10 then drcopydr,2,300 del2dr end function delena,bstringstring

delenroundab var bol,zzzboolean pr,tmp,lev,prav,rabstring begin if b0 then begin showmessageНа ноль делить нельзя delen exit end zzzfalse if b1- and a1 - then begin zzztrue bcopyb,2,300 end if a1- and b1 - then begin zzztrue acopya,2,300 end if b1- and a1- then begin acopya,2,300 bcopyb,2,300 end boltrue lev0 prava pr0 raba if b 1 then while bol do begin tmpform1.minusa,pr if tmp1- then tmpcopytmp,2,300 if sravnenietmp,del2b 1 then breakbolfalse tmpform1.minusprav,lev rab rabform1.sumlev,del2tmp prumnozenb,

rab if sravneniea,pr1 then begin levrab end else begin pravrab end end if zzz then rab-rab delenrab if rab-orrabthen delen0 end function pochnumchstringvar znachstringboolean var bolboolean iinteger begin bolfalse for i1 to y do begin if masi.dl4andmasi.lin1ch then begin boltrue znachmasi.lin3 end end pochnumbol end function sislochcharboolean begin if ch 0andch 9orch- then sislotrue else sislofalse end procedure poiskzinteger var i,k,j,m,k2,zzinteger tmpstring znchar begin snachala ubiraem skobki, potom , potom

, potom , potom - k0 for i1 to masz.dl-1 do if masz.lini then kk1 if k 0 then begin k20 for i1 to masz.dl-1 do begin if masz.lini then k2k21 if k2k then begin if masz.lini2 then begin masz.linimasz.lini1 for mi1 to masz.dl-2 do masz.linmmasz.linm2 masz.dlmasz.dl-2 poiskz exit end else begin zzi1 while masz.linzz do begin if masz.linzzormasz.linzz then begin if pochnummasz.linzz-1,tmp then masz.linzz-1tmp if pochnummasz.linzz1,tmp then masz.linzz1tmp if sislomasz.linzz-11andsislomasz.linzz11 then begin znmasz.

linzz1 if zn then masz.linzz-1umnozenmasz.linzz-1,masz.lin zz1 else masz.linzz-1delenmasz.linzz-1,masz.linzz 1 for mzz to masz.dl-2 do masz.linmmasz.linm2 masz.dlmasz.dl-2 poiskz exit end end zzzz1 end snachala i , potom i - zzi1 while masz.linzz do begin if masz.linzzormasz.linzz- then begin if pochnummasz.linzz-1,tmp then masz.linzz-1tmp if pochnummasz.linzz1,tmp then masz.linzz1tmp if sislomasz.linzz-11andsislomasz.linzz11 then begin znmasz.linzz1 if zn then masz.linzz-1form1.summasz.linzz-1,masz.l inzz1 else masz.

linzz-1form1.minusmasz.linzz-1,masz .linzz1 for mzz to masz.dl-2 do masz.linmmasz.linm2 masz.dlmasz.dl-2 poiskz exit end end zzzz1 end end end end end else begin esli skobok net for zz1 to masz.dl-1 do begin if masz.linzzormasz.linzz then begin if pochnummasz.linzz-1,tmp then masz.linzz-1tmp if pochnummasz.linzz1,tmp then masz.linzz1tmp if sislomasz.linzz-11andsislomasz.linzz11 then begin znmasz.linzz1 if zn then masz.linzz-1umnozenmasz.linzz-1,masz.lin zz1 else masz.linzz-1delenmasz.linzz-1,masz.linzz 1

for mzz to masz.dl-2 do masz.linmmasz.linm2 masz.dlmasz.dl-2 poiskz exit end end end for zz1 to masz.dl-1 do begin if masz.linzzormasz.linzz- then begin if pochnummasz.linzz-1,tmp then masz.linzz-1tmp if pochnummasz.linzz1,tmp then masz.linzz1tmp if sislomasz.linzz-11andsislomasz.linzz11 then begin znmasz.linzz1 if zn then masz.linzz-1form1.summasz.linzz-1,masz.l inzz1 else masz.linzz-1form1.minusmasz.linzz-1,masz .linzz1 for mzz to masz.dl-2 do masz.linmmasz.linm2 masz.dlmasz.dl-2 poiskz exit end end end end end

procedure vivod var iinteger begin form1.Memo3.Clear for i1 to y do if masi.dl4 then begin form1.Memo3.Lines.Addmasi.lin1masi.lin3 end end procedure TForm1.Button1ClickSender TObject var i,jinteger begin zapolnenie for j1 to y do for i1 to y do poiski vivod end procedure TForm1.Button2ClickSender TObject begin messagedlgОперации многократной точности,mtinformation,mbok,0 end end.



Не сдавайте скачаную работу преподавателю!
Данный реферат Вы можете использовать для подготовки курсовых проектов.

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем реферат самостоятельно:
! Как писать рефераты
Практические рекомендации по написанию студенческих рефератов.
! План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом.
! Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач.
! Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты.
! Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ.

Читайте также:
Виды рефератов Какими бывают рефераты по своему назначению и структуре.