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

     

     

     

     

     

         
     
    Створення бібліотек підпрограм у Turbo Pascal
         

     

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

    Створення бібліотек підпрограм у Turbo Pascal

    Стандартний мова Pascal не має коштів розробки та підтримки бібліотек програміста (на відміну, скажімо, від мови Fortran та інших мов програмування високого рівня), які компілюються окремо і в надалі можуть бути використані як самим розробником, так і іншими. Якщо програміст має досить великі напрацювання, і ті або інші підпрограми можуть бути використані при написанні нових додатків, то доводиться ці підпрограми цілком включати в новий текст.

    В Turbo Pascal це обмеження долається за рахунок, по-перше, введення зовнішніх процедур, по-друге, розробки та використання модулів. У цій публікації на прикладах розглянемо роботу з тими і іншими програмними одиницями.

    Почнемо з зовнішніх підпрограм.

    Такий механізм передбачає, що вихідний текст кожної процедури або функції зберігається в окремому файлі і при необхідності за допомогою спеціальної директиви компілятора включається в текст створюваної програми.

    Покажемо це на прикладі задач цілочисельний арифметики, де аргументи, результати та проміжні величини є цілими (Integer, Word, LongInt і т.д.). Ось кілька таких завдань.

    1. Дано натуральне число n. Знайти суму перших та останньої цифри цього числа.

    2. Дано натуральне число n. Переставити місцями першу і останню цифри цього числа.

    3. Дано натуральне число n. Дописати до нього цифру k в кінець і на початок (якщо це можливо, тобто результат не вийде за діапазон допустимих значень), або повідомити про неможливість виконання операції.

    4. Знайти найбільшу цифру в запису даного натурального числа.

    5. Дано натуральне число n. Переставити його цифри так, щоб утворилося Максимальна кількість, записане тими ж цифрами.

    При вирішенні кожної з цих завдань може бути використана функція, що повертає кількість цифр у запису натурального числа.

    Ось можливий варіант такої функції:

    Function Digits (N: LongInt): Byte;

    Var Kol: Byte;

    Begin

    Kol: = 0;

    While N 0 Do Begin Kol: = Kol + 1; N: = N Div 10 End;

    Digits: = Kol

    End;

    Збережемо цей текст у файлі з розширенням. inc (це розширення зовнішніх підпрограм в Turbo Pascal), наприклад, digits.inc.

    Ще необхідна функція зведення натурального числа в натуральну ступінь.

    Function Power (A, N: LongInt): LongInt; (файл power.inc)

    Var I, St: LongInt;

    Begin

    St: = 1;

    For I: = 1 To N Do St: = St * A;

    Power: = St

    End;

    Спробуємо використовувати функції при вирішенні завдання номер один.

    Program Example1;

    Var N, S: LongInt;

    ($ I digits.inc) (підключаємо зовнішню функцію digits.inc, повертає кількість цифр у записі числа)

    ($ I power.inc) (зовнішня функція, що виконує зведення числа A до степеня N)

    Begin

    Write ( 'Введіть натуральне число:');

    ReadLn (N);

    (для визначення останньої цифри числа N беремо залишок від ділення цього числа на 10, а для визначення першого ділимо N на 10 в ступені на одиницю меншу, ніж кількість цифр у записі числа (розрядів нумерація починається з 0))

    S: = N Mod 10 + N Div Power (10, Digits (N) - 1);

    WriteLn ( 'Бажаєма сума:', S)

    End.

    Зовнішні процедури створюються і впроваджуються в використовують їх програми аналогічно функцій, і ми не будемо детально на цьому зупинятися.

    Далі мова піде про модулях: їхній структурі, розробки, компіляції та використанні.

    Модуль - Це набір ресурсів (функцій, процедур, констант, змінних, типів і т.д.), розробляються і зберігаються незалежно від використовують їх програм. На відміну від зовнішніх підпрограм модуль може містити достатньо великий набір процедур і функцій, а також інших ресурсів для розробки програм. Зазвичай кожен модуль містить логічно пов'язані між собою програмні ресурси.

    В основі ідеї модульності лежать принципи структурного програмування. Існують стандартні модулі Turbo Pascal, які зазвичай описуються в літературі по даного мови.

    Модуль має наступну структуру:

    Unit ; (Заголовок модуля)

    Interface

    (інтерфейсна частину)

    Implementation

    (розділ реалізації)

    Begin

    (розділ ініціалізації модуля)

    End.

    Після службового слова Unit записується ім'я модуля, яке (для зручності подальших дій) має збігатися з ім'ям файлу, що містить даний модуль. Тому (як прийнято в MS DOS) ім'я не повинно бути більше ніж 8 символів.

    В розділі Interface оголошуються всі ресурси, які будуть надалі доступні програмісту при підключенні модуля. Для підпрограм тут вказується лише повний заголовок.

    В розділі Implementation реалізуються всі підпрограми, які були раніше оголошені. Крім того, тут можуть міститися свої константи, змінні, типи, підпрограми і т.д., які носять допоміжний характер і використовуються для написання основних підпрограм. На відміну від ресурсів, оголошених у роздiлi Interface, все, що додатково оголошується в Implementation, вже не буде доступно при підключенні модуля. При написанні основних підпрограм достатньо вказати їх ім'я (тобто не потрібно повністю переписувати весь заголовок), а потім записати тіло підпрограми.

    Нарешті, розділ ініціалізації (який часто відсутня) містить оператори, які повинні бути виконані відразу ж після запуску програми, що використовує модуль.

    Наведемо приклад розробки і використання модуля. Оскільки розглянута нижче завдання досить елементарна, обмежимося лістингом програми з докладними коментарями.

    Завдання. Реалізувати у вигляді модуля набір підпрограм для виконання наступних операцій над звичайними дробами виду P/Q (P - ціле, Q - натуральне): 1) складання; 2) віднімання; 3) множення; 4) розподіл; 5) скорочення дробу; 6) зведення дробу до степеня N (N - натуральне); 7) функції, що реалізують операції відносини (так само, не дорівнює, більше або дорівнює, менше або дорівнює, більше, менше).

    Дріб представити таким типом:

    Type Frac = Record

    P: Integer;

    Q: 1 .. High (LongInt)

    End;

    Використовуючи цей модуль, вирішити завдання:

    1. Дано масив A - масив звичайних дробів. Знайти суму всіх дробів, відповідь представити у вигляді несократімой дробу. Обчислити середнє арифметичне всіх дробів, відповідь представити у вигляді несократімой дробу.

    2. Дано масив A - масив звичайних дробів. Відсортувати його в порядку зростання.

    Unit Droby;

    Interface

    Type

    Natur = 1 .. High (LongInt);

    Frac = Record

    P: LongInt; (Чисельник дробу)

    Q: Natur (Чисельник дробу)

    End;

    Procedure Sokr (Var A: Frac);

    Procedure Summa (A, B: Frac; Var C: Frac);

    Procedure Raznost (A, B: Frac; Var C : Frac);

    Procedure Proizvedenie (A, B: Frac; Var C: Frac);

    Procedure Chastnoe (A, B: Frac; Var C: Frac);

    Procedure Stepen (A: Frac; N: Natur; Var C: Frac);

    Function Menshe (A, B: Frac): Boolean;

    Function Bolshe (A, B: Frac): Boolean;

    Function Ravno (A, B: Frac): Boolean;

    Function MensheRavno (A, B: Frac): Boolean;

    Function BolsheRavno (A, B: Frac): Boolean;

    Function NeRavno (A, B: Frac): Boolean;

    (Розділ реалізації модуля)

    Implementation

    (Найбільший спільний дільник двох чисел - допоміжна функція, що раніше не оголошена)

    Function NodEvklid (A, B: Natur): Natur;

    Begin

    While A B Do

    If A> B Then

    If A Mod B 0 Then A: = A Mod B Else A: = B

    Else

    If B Mod A 0 Then B: = B Mod A Else B: = A;

    NodEvklid: = A

    End;

    Procedure Sokr; (Скорочення дробу)

    Var M, N: Natur;

    Begin

    If A.P 0 Then

    Begin

    If A.P <0 Then M: = Abs (A.P)

    Else M: = AP; (Поєднання типів, тому що A.P - LongInt)

    N: = NodEvklid (M, AQ); AP: = AP Div N; AQ: = AQ Div N

    End

    End;

    Procedure Summa; (Сума дробів)

    Begin

    (Чисельник дробу) C.Q: = (A.Q * B.Q) Div NodEvklid (A.Q, B.Q);

    (Чисельник дробу) CP: = AP * CQ Div AQ + BP * CQ Div B.Q;

    Sokr (C)

    End;

    Procedure Raznost; (Різниця дробів)

    Begin

    (Чисельник дробу) CQ: = (AQ * BQ) Div NodEvklid (A.Q, B.Q);

    (Чисельник дробу) C.P: = A.P * C.Q Div A.Q - B.P * C.Q Div B.Q;

    Sokr (C)

    End;

    Procedure Proizvedenie;

    Begin

    (Чисельник дробу) CQ: = AQ * BQ;

    (Чисельник дробу) CP: = AP * BP;

    Sokr (C)

    End;

    Procedure Chastnoe;

    Begin

    (Чисельник дробу) C.Q: = A.Q * B.P;

    (Чисельник дробу) CP: = AP * BQ;

    Sokr (C)

    End;

    Procedure Stepen; (Ступінь)

    Var I: Natur;

    Begin

    C.Q: = 1; C.P: = 1; Sokr (A);

    For I: = 1 To N Do Proizvedenie (A, C, C)

    End;

    Function Menshe;

    Begin Menshe: = A.P * B.Q

    Function Bolshe;

    Begin Bolshe: = AP * BQ> AQ * BP End;

    Function Ravno;

    Begin Ravno: = A.P * B.Q = A.Q * B.P End;

    Function BolsheRavno;

    Begin BolsheRavno: = Bolshe (A, B) Or Ravno (A, B) End;

    Function MensheRavno;

    Begin MensheRavno: = Menshe (A, B) Or Ravno (A, B) End;

    Function NeRavno;

    Begin NeRavno: = Not Ravno (A, B) End;

    (Розділ ініціалізації модуля)

    Begin

    End.

    Дамо деякі рекомендації з розробки модулів:

    1) спроектувати модуль, тобто виділити основні та допоміжні підпрограми, інші ресурси;

    2) кожну підпрограму доцільно налагодити окремо, після чого «вклеїти» в текст модуля.

    Збережемо текст розробленої програми у файлі DROBY.PAS і откомпіліруем наш модуль. Для цього можна скористатися зовнішнім компілятором, що поставляються разом з Turbo Pascal. Команда буде виглядати так: TPC DROBY.PAS. Якщо в тексті немає синтаксичних помилок, отримаємо файл DROBY.TPU, інакше буде відповідне повідомлення із зазначенням рядка, що містить помилку. Інший спосіб компіляції модуля - у середовищі програмування Turbo Pascal вибрати у пункті меню Run підпункти Make або Build (при цьому повинна бути включена компіляція на диск).

    Тепер можна підключити модуль до програми, де планується його використання.

    Для приклад вирішимо завдання підсумовування масиву дробів.

    Program Sum;

    Uses Droby;

    Var A: Array [1 .. 100] Of Frac;

    I, N: Integer;

    S: Frac;

    Begin

    Write ( 'Введіть кількість елементів масиву:');

    ReadLn (N);

    SP: = 0; SQ: = 1; (Спочатку сума дорівнює нулю)

    For I: = 1 To N Do (Вводимо та підсумовуємо дробу)

    Begin

    Write ( 'Введіть чисельник', I, '-й дробу:'); ReadLn (A [I]. P);

    Write ( 'Введіть знаменник', I, '-й дробу:'); ReadLn (A [I]. Q);

    Summa (A [I], S, S);

    End;

    WriteLn ( 'Відповідь: ', S.P,'/', S.Q)

    End.

    Другу завдання пропонуємо вирішити читачеві самостійно.

    Як видно з прикладу, для підключення модуля використовується службове слово USES, після чого вказується ім'я модуля і відбувається це відразу ж після заголовка програми. Якщо необхідно підключити декілька модулів, вони перераховуються через кому.

    При використанні ресурсів модуля зовсім не потрібно знати, як працюють його підпрограми. Достатньо володіти інформацією, як виглядають їх заголовки і яку дію ці підпрограми виконують. За таким принципом здійснюється робота з усіма стандартними модулями. Тому, якщо програміст розробляє модулі не тільки для особистого користування, йому необхідно зробити повне опис всіх доступних при підключенні ресурсів. У такому випадку можлива повноцінна робота з таким продуктом.

    Ще кілька слів про видимості об'єктів модуля. Якщо в програмі, що використовує модуль, є ідентифікатори, що збігаються з точністю до символу з ідентифікаторами модуля, то вони «перекривають» відповідні ресурси модуля. Тим не менше, навіть у такій ситуації доступ до цих ресурсів модуля може бути отриманий таким чином: ..

    В Насамкінець наведемо набір завдань, що дозволяють отримати певні навички в розробці модулів.

    I. Реалізувати у вигляді модуля набір підпрограм для виконання наступних операцій над комплексними числами: 1) складання; 2) віднімання; 3) множення; 4) розподіл; 5) обчислення модуля комплексного числа; 6) зведення комплексного числа в ступінь n (n - натуральне).

    Комплексне число представити таким типом:

    Type Complex = Record

    R, M: Real; (дійсна і уявна частина числа)

    End;

    Використовуючи цей модуль, вирішити завдання:

    1. Дано масив A - масив комплексних чисел. Отримати масив C, елементами якого будуть модулі сум поруч стоять комплексних чисел.

    2. Дано масив A [M] - масив комплексних чисел. Отримати матрицю B [N, M], кожна рядок якої виходить зведенням до степеня, що дорівнює номеру цього рядка, відповідних елементів даного масиву A.

    II. Реалізувати у вигляді модуля набір підпрограм для виконання наступних операцій з квадратними матрицями: 1) складання двох матриць; 2) множення однієї матриці на іншу; 3) знаходження транспонований матриці; 4) обчислення визначника матриці.

    Матрицю описати таким чином:

    Const NMax = 10;

    Type Matrica = Array [1 .. NMax, 1 .. Nmax] Of Real;

    Використовуючи цей модуль, вирішити наступні завдання:

    1. Вирішити систему лінійних рівнянь N-го порядку (2

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

     

     

     

     

     

     

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