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
если а

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

Реферат: Идеалистическая философия (Философия)


Реферат: Продукты пчеловодства и их применение в косметике (Физкультура)


Реферат: Обучение и воспитание детей с ФФНР в старшей группе детского сада (Педагогика)


Реферат: Алгоритмы сортировки (Программирование)


Реферат: Блок (Литература : русская)


Реферат: Сравнительный анализ портретов Ф.И Шаляпина. Работы Б.М Кустодиева и К.А Коровина (Искусство и культура)


Реферат: Переоценка основных средств в РФ (Бухгалтерский учет)


Реферат: Нидерланды (География)


Реферат: Билеты по аграрному праву (Ботаника)


Реферат: Витаутас Великий (Исторические личности)


Реферат: Владимир Сергеевич Соловьев (Исторические личности)


Реферат: Модели и методы принятия решения (Менеджмент)


Реферат: Банк как субъект привлечения иностранных инвестиций в регион (на примере КБ "Центр-Инвест") (Инвестиции)


Реферат: Гражданское право (экзаменационная шпаргалка) (Гражданское право и процесс)


Реферат: Логика составления бизнес-плана (Менеджмент)


Реферат: Федор Рокотов (1735-1808гг.) (Искусство и культура)


Реферат: Автоматизация горно-шахтного оборудования (Технология)


Реферат: Радиация и радиационная обстановка в Ростовской области (Биология)


Реферат: Автоматизация учета продажи товаров в ООО "Мастер-СД" (Компьютеры)


Реферат: Изучение теории и технологии выплавки шарикоподшипниковой стали марки ШХ4 (Металлургия)



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