GeoSELECT.ru



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

Космонавтика
Уфология
Авиация
Административное право
Арбитражный процесс
Архитектура
Астрология
Астрономия
Аудит
Банковское дело
Безопасность жизнедеятельности
Биология
Биржевое дело
Ботаника
Бухгалтерский учет
Валютные отношения
Ветеринария
Военная кафедра
География
Геодезия
Геология
Геополитика
Государство и право
Гражданское право и процесс
Делопроизводство
Деньги и кредит
Естествознание
Журналистика
Зоология
Инвестиции
Иностранные языки
Информатика
Искусство и культура
Исторические личности
История
Кибернетика
Коммуникации и связь
Компьютеры
Косметология
Криминалистика
Криминология
Криптология
Кулинария
Культурология
Литература
Литература : зарубежная
Литература : русская
Логика
Логистика
Маркетинг
Масс-медиа и реклама
Математика
Международное публичное право
Международное частное право
Международные отношения
Менеджмент
Металлургия
Мифология
Москвоведение
Музыка
Муниципальное право
Налоги
Начертательная геометрия
Оккультизм
Педагогика
Полиграфия
Политология
Право
Предпринимательство
Программирование
Психология
Радиоэлектроника
Религия
Риторика
Сельское хозяйство
Социология
Спорт
Статистика
Страхование
Строительство
Схемотехника
Таможенная система
Теория государства и права
Теория организации
Теплотехника
Технология
Товароведение
Транспорт
Трудовое право
Туризм
Уголовное право и процесс
Управление
Физика
Физкультура
Философия
Финансы
Фотография
Химия
Хозяйственное право
Цифровые устройства
Экологическое право
   

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


Задание

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


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

Сначала буквам присваивается значение – например: а=23850934, причем все
переменные – целые числа, которые по длине не должны превышать 300 знаков.
Потом пишется выражение, например f=(a+b)/c+(d+a). При этом деление – это
целое от деления делимого на делитель. Операции сложения, вычитания,
умножения – обычные арифметические операции, только это операции над
длинными числами. Кроме сложения, вычитания, умножения и деления еще могут
быть использованы скобки.


Формат ввода


Любую строку в поле ввода можно представить в виде

S={C,V}
Где S – константа либо вычисляемое значение. Если это – константа, то С –
число в строковом виде, перед которым стоит символ «@», а если 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 div 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 vv1)) do c:=copy(c,2,300);
if pom then c:='-'+c;
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 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
если а

Новинки рефератов ::

Реферат: Личные неимущественные права (Гражданское право и процесс)


Реферат: Нравы русского народа XIV – XVII век (История)


Реферат: Педагогика: развитие, воспитание, образование, обучение (Педагогика)


Реферат: Экологическое воспитание в этнопедагогике (Педагогика)


Реферат: Комплексный дипломный проект: Проект участка по производству технологических приспособлений для электромеханического восстановления и укрепления поверхностного слоя деталей машин. Плоские поверхности. (Технология)


Реферат: Monopolistic competition and economic efficiency (Монополистическая конкуренция и экономическая) (Иностранные языки)


Реферат: Сигары (Ботаника)


Реферат: Второй Закон Термодинамики (Физика)


Реферат: Демографические проблемы современной Японии (Социология)


Реферат: Россия и страны Латинской Америки (Международные отношения)


Реферат: Повесть Распутина "живи и помни" (Литература : русская)


Реферат: Современный этап развития инженерной деятельности и проектирования (Безопасность жизнедеятельности)


Реферат: "Чайка" А.П. Чехова (Литература : русская)


Реферат: Россия в 1825-1855 гг. Царствование Николая I (История)


Реферат: Проблема эмансипации в русской и европейской литературе 19 века (Литература : русская)


Реферат: Консульские должностные лица. Их привилегии и иммунитеты (Международное публичное право)


Реферат: Попытки либерализации советского общества в 50-е – первой половине 60-х гг. Хрущевская оттепель: пределы десталинизации (История)


Реферат: Сердобский район (География)


Реферат: Дмирий Донской (исторический портрет) (История)


Реферат: Бюджетный процесс в Украине (Право)



Copyright © GeoRUS, Геологические сайты альтруист