Курсовая: Операции многократной точности (операции с длинными числами) - текст курсовой. Скачать бесплатно.
Банк рефератов, курсовых и дипломных работ. Много и бесплатно. # | Правила оформления работ | Добавить в избранное
 
 
   
Меню Меню Меню Меню Меню
   
Napishem.com Napishem.com Napishem.com

Курсовая

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

Банк рефератов / Программирование

Рубрики  Рубрики реферат банка

закрыть
Категория: Курсовая работа
Язык курсовой: Русский
Дата добавления:   
 
Скачать
Microsoft Word, 1181 kb, скачать бесплатно
Заказать
Узнать стоимость написания уникальной курсовой работы

Узнайте стоимость написания уникальной работы

4 Задание Операции многократной точности (т.е . операции с длинными чис лами ). Конкретизация задания Сначала буквам присваивается значение – например : а =23850934, причем все переменные – целые числа , которые по длине не должны превышать 300 знаков . Потом пишется выражение , например f =( a + b )/ c +( d + a ). При этом деление – это ц е л ое от деления делимого на делитель . Операции сложения , вычитания , умножения – обычные арифметические операции , только это операции над длинными числ а ми . Кроме сложения , вычитания , умножения и деления еще могут быть использ о ваны скобки. Формат ввода Любую строку в поле ввода можно представить в виде S = C , V Где S – константа либо вычисляемое значение . Если это – константа , то С – число в строковом виде , перед которым стоит символ « @» , а если S надо найти то S = V , где V – выражение с переменными и числами . В строке не должно быть пробелов и все переменные состоят из одой буквы . Между строками в поле ввода не должно быть пустых строк . Вывод идет аналогично вводу . Пример ввода и в ы вода можно посмотреть на рисунке Интерфейс программы. Интерфейс программы – ее вн ешний вид является наглядным и удобным . В вер х нем поле ввода пишутся известные величины и формулы , потом жмется кнопка «Расчитать» и в нижнем поле выводятся в алфавитном порядке все переменные . Программа написана в среде программирования Delphi 6. Использо вались только стандартные компоненты – TEdit и TButton . Итого на форме размещено поле вв о да , поле вывода и кнопка – для запуска процесса расчета . Использование виз у аль ных средств разработки на много ускорило процесс написан ия программы. Структура хранения Все длинные числа представляются в виде строки , каждый элемент которой – цифра . Если число отрицательное , то первым символом строки будет “-“ . Чтобы считать по формуле используем структуру , описанную ниже type dd= reco rd 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 из поля edt 1. 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 · если а '-')) then begin sum:=form1.minus(a,copy(b,2,300)); exit; end; if ((a[1]='-') and (b[1]<>'-')) then begin sum:=form1.minus(b,copy(a,2,300)); exit; end; bol:=false; if ((b[1]='-') and (a[1]='-')) then begin bol:=true; a:=copy(a,2,300); b:=copy(b,2,300) end; if length(b)>length(a) then begin tmp:=b; b:=a; a:=tmp; end; ost:=0; if length(b)<>length(a) then b:='0'+b; c:=a; j:=length(a); tmp2:=''; for i:=length(b) downto 1 do begin tmp2:=tmp2+'0'; k:=strtoint(c[j])+strtoint(b[i]); k:=k+ost; ost:=0; if k>9 then begin ost:=k di v 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 c:='-'+c; 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 vv<0 then begin snos:=1; vv:=vv+10; end; c[la-lb+i]:=inttostr(vv)[1]; end; if snos=1 then begin tmp:=''; for i:=1 to lb do tmp:=tmp+'0'; tmp:='1'+tmp; c:=minus(c,tmp); end; while ((c[1]='0')and(length(c)>1)) do c:=copy(c,2,300); if pom then c:='-'+c; minus:=c; end; function umn(a:integer;var xx:string):stri ng; 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 div 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); c:='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 c:= '-'+c; umnozen:=c; end; function sravnenie(a,b:string):shortint; если а > b , то сравнение =1 если а < b , то сравнение =-1 если а < b , то сравнение =0 var la,lb,i:integer; begin la:=length(a); lb:=length(b); if a[1]='-' then begin if b[1]='-' then sravnenie:=sravnenie(b,a) else sravnenie:=-1; exit; end; if b[1]='-' then begin if a[1]='-' then sravnenie:=sravnenie(b,a) else sravnenie:=1; exit; end; if lb>la then sravnenie:=-1; if lbb[i] then begin sravnenie:=1; exit; end; if a[i]'-')) then begin zzz:=true; b:=copy(b,2,300); end; if ((a[1]='-') and (b[1]<>'-')) then begin zzz:=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; bol:=true; lev:='0'; prav:=a; pr:='0'; rab:=a; if b<>'1' then while (bol) do begin tmp:=form1.minus(a,pr); if tmp[1]='-' then tmp:=copy(tmp,2,300); if (sravnenie(tmp,del2(b))<>1) th en break;//bol:=false; tmp:=form1.minus(prav,lev); rab:=''; rab:=form1.sum(lev,del2(tmp)); pr:=umnozen(b,rab); if sravnenie(a,pr)=1 then begin lev:=rab; end else begin prav:=rab; end; end; if zzz then rab:='- '+rab; delen:=rab; if ((rab='-')or(rab=''))then delen:='0'; end; function po_ch_num(ch:string;var znach:string):boolean; var bol:boolean; i:integer; begin bol:=false; for i:=1 to y do begin if ((mas[i].dl=4)and(mas[i].lin[1]=ch)) then begin bol:=true; znach:=mas[i].lin[3]; end; end; po_ch_num:=bol; end; function sislo(ch:char):boolean; begin if ((ch>='0')and(ch<='9')or(ch='-')) then sislo:=true else sislo:=false; en d; procedure poisk(z:integer); var i,k,j,m,k2,zz:integer; tmp:string; zn:char; begin snachala ubiraem skobki, potom *, potom /, potom +, potom - k:=0; for i:=1 to mas[z].dl-1 do if mas[z].lin[i]='(' then k:=k+1; if k>0 then begin k2:=0; for i:=1 to mas[z].dl-1 do begin if mas[z].lin[i]='(' then k2:=k2+1; if k2=k then begin if mas[z].lin[i+2]=')' then begin mas[z].lin[i]:=mas[z].lin[i+1]; for m:=i+1 to mas[z].dl-2 do mas[z].lin[m]:=mas[z] .lin[m+2]; mas[z].dl:=mas[z].dl-2; poisk(z); exit; end else begin zz:=i+1; while mas[z].lin[zz]<>')' 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 zn: =mas[z].lin[zz][1]; 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]:=ma s[z].lin[m+2]; mas[z].dl:=mas[z].dl-2; poisk(z); exit; end; end; zz:=zz+1; end; //////// snachala / i *, potom + i - zz:=i+1; while mas[z].lin[zz]<>')' 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].l in[zz+1]:=tmp; if ((sislo(mas[z].lin[zz-1][1]))and(sislo(mas[z].lin[zz+1][1]))) then begin zn:=mas[z].lin[zz][1]; if zn='+' then mas[z].lin[zz-1]:=form1.sum(mas[z].lin[zz-1],mas[z].lin[zz+1]) el se 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]; mas[z].dl:=mas[z].dl-2; poisk(z); exit; e nd; end; zz:=zz+1; end; //////// end; end; end; end else begin esli skobok net 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 zn:=mas[z].lin[zz][1]; 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]; mas[z].dl:=mas[z].dl-2; poisk(z); exit; end; end; end; for zz:=1 to mas[z].dl-1 do begin //////// if ((mas[z].lin[zz]='+')or(ma s[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 zn:=mas[z].lin[zz][1]; 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]; mas[z].dl:=mas[z].dl-2; poisk(z); exit; end; end; /////// end; end; end; procedure vivod; var i:integer; begin form1.Memo3.Clear; for i:=1 to y do if mas[i].dl=4 then begin form1.Memo3.Lines.Add(mas[i].lin[1]+'='+mas[i].lin[3]); end; end; procedure TForm1.Button1Click(Sender: TObject); var i,j:integer; begin zapolnenie; for j:=1 to y do for i:=1 to y do poisk(i); vivod; end; procedure TForm1.Button2Click(Sender: TObject); begin messagedlg('Операции многократной точности ',mtinformation,[mbok],0); end; end.
1Архитектура и строительство
2Астрономия, авиация, космонавтика
 
3Безопасность жизнедеятельности
4Биология
 
5Военная кафедра, гражданская оборона
 
6География, экономическая география
7Геология и геодезия
8Государственное регулирование и налоги
 
9Естествознание
 
10Журналистика
 
11Законодательство и право
12Адвокатура
13Административное право
14Арбитражное процессуальное право
15Банковское право
16Государство и право
17Гражданское право и процесс
18Жилищное право
19Законодательство зарубежных стран
20Земельное право
21Конституционное право
22Конституционное право зарубежных стран
23Международное право
24Муниципальное право
25Налоговое право
26Римское право
27Семейное право
28Таможенное право
29Трудовое право
30Уголовное право и процесс
31Финансовое право
32Хозяйственное право
33Экологическое право
34Юриспруденция
 
35Иностранные языки
36Информатика, информационные технологии
37Базы данных
38Компьютерные сети
39Программирование
40Искусство и культура
41Краеведение
42Культурология
43Музыка
44История
45Биографии
46Историческая личность
47Литература
 
48Маркетинг и реклама
49Математика
50Медицина и здоровье
51Менеджмент
52Антикризисное управление
53Делопроизводство и документооборот
54Логистика
 
55Педагогика
56Политология
57Правоохранительные органы
58Криминалистика и криминология
59Прочее
60Психология
61Юридическая психология
 
62Радиоэлектроника
63Религия
 
64Сельское хозяйство и землепользование
65Социология
66Страхование
 
67Технологии
68Материаловедение
69Машиностроение
70Металлургия
71Транспорт
72Туризм
 
73Физика
74Физкультура и спорт
75Философия
 
76Химия
 
77Экология, охрана природы
78Экономика и финансы
79Анализ хозяйственной деятельности
80Банковское дело и кредитование
81Биржевое дело
82Бухгалтерский учет и аудит
83История экономических учений
84Международные отношения
85Предпринимательство, бизнес, микроэкономика
86Финансы
87Ценные бумаги и фондовый рынок
88Экономика предприятия
89Экономико-математическое моделирование
90Экономическая теория

 Анекдоты - это почти как рефераты, только короткие и смешные Следующий
На скользком тротуаре количество интеллигентных людей резко сокращается.
Anekdot.ru

Узнайте стоимость курсовой, диплома, реферата на заказ.

Обратите внимание, курсовая по программированию "Операции многократной точности (операции с длинными числами)", также как и все другие рефераты, курсовые, дипломные и другие работы вы можете скачать бесплатно.

Смотрите также:


Банк рефератов - РефератБанк.ру
© РефератБанк, 2002 - 2016
Рейтинг@Mail.ru