ПЕРЕЛІК ДИСЦИПЛІН:
  • Адміністративне право
  • Арбітражний процес
  • Архітектура
  • Астрологія
  • Астрономія
  • Банківська справа
  • Безпека життєдіяльності
  • Біографії
  • Біологія
  • Біологія і хімія
  • Ботаніка та сільське гос-во
  • Бухгалтерський облік і аудит
  • Валютні відносини
  • Ветеринарія
  • Військова кафедра
  • Географія
  • Геодезія
  • Геологія
  • Етика
  • Держава і право
  • Цивільне право і процес
  • Діловодство
  • Гроші та кредит
  • Природничі науки
  • Журналістика
  • Екологія
  • Видавнича справа та поліграфія
  • Інвестиції
  • Іноземна мова
  • Інформатика
  • Інформатика, програмування
  • Юрист по наследству
  • Історичні особистості
  • Історія
  • Історія техніки
  • Кибернетика
  • Комунікації і зв'язок
  • Комп'ютерні науки
  • Косметологія
  • Короткий зміст творів
  • Криміналістика
  • Кримінологія
  • Криптология
  • Кулінарія
  • Культура і мистецтво
  • Культурологія
  • Російська література
  • Література і російська мова
  • Логіка
  • Логістика
  • Маркетинг
  • Математика
  • Медицина, здоров'я
  • Медичні науки
  • Міжнародне публічне право
  • Міжнародне приватне право
  • Міжнародні відносини
  • Менеджмент
  • Металургія
  • Москвоведение
  • Мовознавство
  • Музика
  • Муніципальне право
  • Податки, оподаткування
  •  
    Бесплатные рефераты
     

     

     

     

     

     

         
     
    Операції багаторазової точності (операції з довгими числами )
         

     

    Інформатика, програмування

    Завдання

    Операції багаторазової точності (тобто операції з довгими числами).

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

    Спочатку буквах присвоюється значення - наприклад: а = 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-bumn (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;beginost: = 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 якщо а

         
     
         
    Реферат Банк
     
    Рефераты
     
    Бесплатные рефераты
     

     

     

     

     

     

     

     
     
     
      Все права защищены. Reff.net.ua - українські реферати ! DMCA.com Protection Status