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

     

     

     

     

     

         
     
    Підпрограми (процедури і функції )
         

     

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

    Підпрограми (процедури і функції)

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

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

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

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

    Підпрограми можуть бути двох видів: підпрограма без параметрів і підпрограма з параметрами. Звернення до підпрограмі може бути організовано з будь-якого місця основної програми або іншої підпрограми скільки завгодно разів.

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

    Підпрограма з параметрами використовується для запису багаторазово повторюваних дій при різних вихідних даних. Підпрограми з параметрами можна розділити на два типи: підпрограми-функції і просто підпрограми з параметрами (їх називають процедурами).

    При складанні підпрограм з параметрами треба дотримуватися таких правил:

    1) кожна підпрограма має своє ім'я і список формальних параметрів;

    2) процедура з основної програми викликається командою виклику, яка за формою нічим не відрізняється від виклику команди виконавця. Результат присвоюється одній або декільком змінним, які знаходяться в списку формальних параметрів. Але результатом може бути, звичайно, не тільки значення змінних, але будь-яке дію, виконане ЕОМ.

    Приклад 1. Використовуємо алгоритм знаходження найбільшого спільного дільника двох натуральних чисел як допоміжний при вирішенні завдання: скласти програму віднімання дробів (a, b, c, d - натуральні числа). Результат представити у вигляді звичайної несократімой дробу.

    Підпрограма.

    1) Ввести натуральні числа M, N.

    2) Якщо M = N, перейти до п. 5, інакше до наступного пункту.

    3) Якщо M> N, то M: = M-N, інакше N: = N-M.

    4) Перейти до п. 2.

    5) Надіслати значення M в основну програму.

    6) Кінець підпрограми.

    Основна програма.

    1) Ввести значення A, B, C, D.

    2) E: = A * D - B * C.

    3) F: = B * D.

    4) Якщо E = 0, вивести значення E і перейти до п. 9, інакше перейти до наступного пункту.

    5) M: = | E |, N: = F, перейти до підпрограмі обчислення НОД.

    6) G: = M.

    7) E і F нацело розділити на G.

    8) Вивести значення E і F на друк.

    9) Кінець програми.

    Program Sub;

    Var A, B, C, D, G, E, F: Integer;

    Procedure Nod (M, N: Integer; Var K : Integer);

    Begin

    While M N Do

    If M> N Then M: = M - N Else N: = N - M;

    K: = M

    End;

    Begin

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

    ReadLn (A, B, C, D);

    E: = A * D - B * C;

    F: = B * D;

    If E = 0 Then WriteLn (E)

    Else

    Begin

    Nod (Abs (E), F, G);

    E: = E Div G;

    F: = F Div G;

    WriteLn ( 'Відповідь:', E, '/', F)

    End

    End.

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

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

    ();

    Наприклад,

    Nod (Abs (E), F, G);

    За способу передачі фактичних значень в підпрограму в Turbo Pascal 7.0 виділяють параметри-змінні, параметри-значення, параметри-константи і масиви відкритого типу, рядки відкритого типу, параметри-процедури, параметри-функції (подробиці - в літературі).

    Функція (на відміну від процедури) завжди повертає єдине значення.

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

    Function Nod (M, N: Integer): Integer;

    Begin

    While M N Do

    If M> N Then M: = M - N Else N: = N - M;

    Nod: = M

    End;

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

    Виклик функції буде наступним:

    G: = Nod (Abs (E), F);

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

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

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

    Program Integ;

    Var N: Integer;

    Begin

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

    ReadLn (N);

    If Impossible (N)

    Then WriteLn ( 'Неможливо переставити цифри, виникне переповнення ')

    Else Begin

    Change (N);

    WriteLn ( 'Відповідь:', N)

    End;

    End.

    Можна помітити, що необхідно деталізувати логічну функцію Impossible, яка діагностує, чи можлива перестановка, та процедуру Change, яка цю перестановку (у випадку, якщо вона можлива) виконує.

    Function Impossible (N: Integer): Boolean;

    Begin

    If Number (N) <5

    Then Impossible: = False

    Else Impossible: = (N Mod 10> 3) Or

    (N Mod 10 = 3) And

    (N Mod 10000 Div 10 * 10 + N Div 10000> MaxInt Mod 10000)

    End;

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

    Function Number (N: Integer): Integer;

    Var Vsp: Integer;

    Begin

    Vsp: = 0;

    While N> 0 Do

    Begin

    Vsp: = Vsp + 1; N: = N Div 10

    End;

    Number: = Vsp

    End;

    Нарешті, остання процедура.

    Procedure Change (Var N: Integer);

    Var Kol, P, S, R: Integer;

    Begin

    Kol: = Number (N);

    P: = N Mod 10; (остання цифра)

    If Kol> 1 Then

    S: = N Div Round (Exp ((Kol - 1) * Ln (10 )))

    Else S: = 0; (перша цифра)

    R: = N Mod Round (Exp ((Kol - 1) * Ln (10))) Div 10;

    N: = P * Round (Exp ((Kol - 1) * Ln (10))) + R * 10 + S

    End;

    Можливі також підпрограми, які викликають самі себе. Вони називаються рекурсивними. Створення таких підпрограм є гарним прийомом програмування, але не завжди доцільно через надмірне витрати пам'яті ЕОМ.

    Приклад 3. Знайти максимальну цифру в запису даного натурального числа.

    Program MaxDigit;

    Type NaturLong = 1 .. (High (LongInt ));

    Digit = 0 .. 9;

    Var A: LongInt;

    Function Maximum (N: LongInt): Digit;

    Begin

    If N <10

    Then Maximum: = N

    Else If N Mod 10> Maximum (N Div 10)

    Then Maximum: = N mod 10

    Else Maximum: = Maximum (N Div 10)

    End;

    Begin

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

    ReadLn (A);

    WriteLn ( 'Максимальна цифра дорівнює', Maximum (A))

    End.

    При створення функції Maximum було використане таке міркування: якщо число складається з однієї цифри, то вона є максимальною, інакше якщо остання цифра не є максимальною, то її слід шукати серед інших цифр числа. При написанні рекурсивного алгоритму слід подбати про граничний умови, коли ланцюжок рекурсивних викликів обривається і починається її зворотне «Розкручування». У нашому прикладі ця умова N <10.

    Більше Детальніше про рекурсії йдеться у статті.

    Список літератури

    Для підготовки даної роботи були використані матеріали з сайту http://comp-science.narod.ru

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

     

     

     

     

     

     

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