Персональная страничка
Диканева Тараса
Викторовича

Главная \ Преподавательское \ Программирование для начинающих

11. Процедуры и функции

Предыдущий раздел:

Следующий раздел:

11.13. Модули

Разработка больших программ невозможна без их структурирования. Первым шагом в этом направлении было использование процедур и функций, в которые можно помещать решения отдельных подзадач. При этом часть программы и необходимые для ее работы переменные выделяются в независимый (по крайней мере, к этому следует стремиться) от главной программы блок – подпрограмму. Следующим шагом в структурировании является объединение логически связанных подпрограмм, а также типов, переменных и констант в общую структуру – модуль.

Модуль – это отдельный файл, содержащий описания констант, типов, переменных, процедур и функций. Главная программа может использовать модуль, при этом описанные в модуле константы типы и переменные становятся глобальными для программы, а процедуры и функции доступными для вызова. Чтобы подключить модуль к программе используется ключевое слово uses (использует), после чего идет перечисление имен используемых программой модулей. Это подключение располагается в разделе описаний программы, традиционно в самом его начале. Например:

  program P1;
  uses {Ключевое слово, начинающее подключение модулей}
    Modul1, Modul2; {Перечисление имен модулей}
  var
    <и т.д.>

Модуль создается в отдельном pas-файле и имеет следующую структуру:

  Unit <Имя модуля>;

  interface

  <Интерфейсная часть>

  implementation

  <Реализация или исполняемая часть>

  begin
    <Инициирующая часть>
  end.

Имя модуля произвольное, но должно совпадать с именем pas-файла, где модуль хранится.

В интерфейсной части располагаются описания констант, типов и переменных, которые будут доступны главной программе после подключения модуля. Также здесь располагаются заголовки (только заголовки, без тел) процедур и функций, доступных главной программе. Полностью процедуры и функции прописываются в исполняемой части. Там же могут быть описаны константы, типы и переменные, которые будут глобальными для модуля, но не будут доступны в главной программе. Также в исполняемой части могут располагаться описания процедур и функций, заголовки которых не помещены в интерфейсную часть. Они доступны для вызова другими процедурами и функциями модуля, но не доступны в главной программе.

И интерфейсная и исполняемая часть могут содержать подключения других модулей.

В инициирующей части располагаются операторы, которые будут выполнены при подключении модуля к главной программе, то есть еще до того как начнут выполняться операторы главной программы. Например, в инициирующей части часто располагают присваивания начальных значений переменных. Инициирующая часть может отсутствовать.

Если вы работаете в среде Turbo Pascal, то после того как pas-файл модуля создан, его следует откомпилировать. Это делается нажатием клавиши F9. В результате будет создан файл с расширением tpu (Turbo Pascal Unit), который фактически, и будет подключаться к программе.

Переключаясь с написания модуля на написание основной программы, обязательно сохранитесь. Если этого не сделать к программе будет подключен последний сохраненный вариант модуля, без последних внесенных вами изменений.

Следующий раздел:

Предыдущий раздел:

3 комментария

  1. Роман

    Излазил весь интернет, но ни как не увидел как его запустить
    Может я чего-то не понял… Прошу помочь мне.

    program modul;
    uses crt,RndDmg2;
    var xyz:integer;
    begin
    xyz:=RndDmg2;
    writeln(xyz);
    end.

    Как мне в этой программе запустить модул RndDmg2?

    Модуль RndDmg имеет такое содержание:
    Unit RndDmg2;

    interface
    uses crt;
    var v3,i1,ud_r,ud_r1,atk,atk1,mn,mn1:integer;
    ud1,ud2,ud3:string;
    hp:=100;
    hp1:=100;
    name:=’kellso’;
    name2:=’mellso’;
    dm:=45;
    dm1:=45;
    dmg:integer;
    kl,kl2:string;

    implementation
    begin
    randomize;
    dmg:=random(45);
    hp1:=hp1-dmg;
    end;
    end.

    Заранее благодарю =)

  2. Taras

    В модуле должны быть процедуры и функции. И именно их, а не сам модуль тебе надо запускать. То есть должно быть что-то вроде

    Unit MyUnit;
    
    interface
    
    //uses
      //crt;
    
    function RndDmg2: integer;
      
    implementation
    
    function RndDmg2: integer;
    var
      v3,i1,ud_r,ud_r1,atk,atk1,mn,mn1:integer;
      ud1,ud2,ud3:string;
      dmg, hp, hp1, dm, dm1:integer;
      kl,kl2:string;
      name, name2: string;
    begin
      hp:=100;
      hp1:=100;
      name:='kellso';
      name2:='mellso';
      dm:=45;
      dm1:=45;
      randomize;
      dmg:=random(45);
      hp1:=hp1-dmg;
      
      RndDmg2 := dmg; //Возвращаемое значение
    end;
    
    end.

    Ну и сама программа

    program modul;
    uses 
      MyUnit;
    var
      xyz:integer;
    begin
      xyz:=RndDmg2;
      writeln(xyz);
    end.
  3. Сергей

    Написал небольшой модуль. Хотелось бы узнать, будут какие нибудь замечания, или я пока на верном пути)

    unit Massive;

    interface
    const
    n=25;
    type
    TMass = array [1..n] of integer;
    procedure ZapMass(var a: TMass);
    implementation
    procedure ZapMass(var a: TMass);
    var
    i: integer;
    begin
    for i:=1 to n do
    a[i]:=random(100);
    end;
    begin
    end.
    программа:

    program test_modul_1;
    uses
    Massive;
    var
    x: TMass;
    begin
    ZapMass(x);
    writeln(x);
    end.

Добавить комментарий