Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






  • Сервис онлайн-записи на собственном Telegram-боте
    Тот, кто работает в сфере услуг, знает — без ведения записи клиентов никуда. Мало того, что нужно видеть свое расписание, но и напоминать клиентам о визитах тоже. Нашли самый бюджетный и оптимальный вариант: сервис VisitTime.
    Для новых пользователей первый месяц бесплатно.
    Чат-бот для мастеров и специалистов, который упрощает ведение записей:
    Сам записывает клиентов и напоминает им о визите;
    Персонализирует скидки, чаевые, кэшбэк и предоплаты;
    Увеличивает доходимость и помогает больше зарабатывать;
    Начать пользоваться сервисом
  • Пример выполнения задания. Создать список целочисленных элементов






    Создать список целочисленных элементов. Составить процедуру записи отрицательных нечетных элементов исходного списка в один список, положительных четных – в другой и продемонстрировать ее работу.

    // Лабораторная работа 1.

    // Реализация списков с помощью динамических переменных.

    // Выполнил Сергеев Андрей, группа 999.

    // Формирование двух списков из исходного списка.

    // Исходные данные – элементы основного списка – в файле LW1Dat.txt

    // Результаты работы помещаются в файл LW1Res.txt

    program LW1;

    {$APPTYPE CONSOLE}

    uses SysUtils;

    type

    tValue=Integer; // тип содержательной части элемента списка – целый

    pItem=^tItem; // тип указателя на элемент списка

    tItem=record // тип элемента списка

    Value: tValue; // содержательная часть элемента списка

    Next: pItem; // указатель на следующий элемент списка

    end; // record tItem

    procedure Create(var List: pItem); // Создание пустого списка List

    begin

    List: =nil;

    end; //procedure Create

    procedure InsertFirst(var List: pItem; v: tValue);

    // Включение элемента со значением v в начало списка List

    var NewItem: pItem; // указатель на новый элемент списка

    begin

    New(NewItem); // выделение памяти под новый элемент списка

    NewItem^.Value: =v; // запись v в поле Value нового элемента

    NewItem^.Next: =List; // новый элемент ссылается на первый

    List: =NewItem; // новый элемент становится первым

    end; // procedure InsertFirst

    procedure InsertLast(var List: pItem; v: tValue);

    // Включение элемента со значением v в конец списка List

    var NewItem, LastItem: pItem; // указатели на новый и последний элементы

    begin

    New(NewItem); // выделение памяти под новый элемент списка

    NewItem^.Value: =v; // запись значения v в поле Value нового элемента

    NewItem^.Next: =nil; // новый элемент становится последним в списке

    if List=nil // если список пуст,

    then List: =NewItem // то новый элемент становится первым в списке

    else begin // список не пуст – поиск последнего элемента:

    LastItem: =List; // устанавливаем LastItem на начало списка,

    while LastItem^.Next< > nil do begin // пока не достигнут конец списка,

    LastItem: =LastItem^.Next; // сдвигаем LastItem на следующий элемент

    end;

    LastItem^.Next: =NewItem; // новый элемент следует за последним

    end;

    end; // procedure InsertLast

    procedure WriteList(var f: Text; List: pItem); // Вывод в файл f элементов списка List

    var Item: pItem; // указатель на элемент списка

    begin

    Item: =List; // устанавливаем Item на начало списка

    while Item< > nil do begin // пока не достигнут конец списка:

    Write(f, Item^.Value: 5); Item: =Item^.Next; // вывод элемента и сдвиг Item

    end;

    Writeln(f);

    end; // procedure WriteList

    function Size(List: pItem): Word;

    // Возвращение числа элементов списка

    var Item: pItem; // указатель на элемент списка

    Begin

    Item: =List; // устанавливаем Item на начало списка

    Result: =0; // обнуляем счетчик числа элементов

    while Item< > nil do begin // пока не достигнут конец списка:

    Item: =Item^.Next; Inc(Result); // сдвигаем Item и увеличиваем счетчик

    end; // while

    end;

    procedure Clear(var List: pItem);

    // Удаление элементов списка

    var Item: pItem; // указатель на удаляемый элемент списка

    begin

    while List< > nil do begin // пока список не пуст:

    Item: =List; // устанавливаем Item на начало списка,

    List: =List^.Next; // передвигаем начало списка на следующий элемент

    Dispose(Item); // и удаляем элемент

    end; // while

    end; //procedure Clear

    procedure FormLists(L: pItem; var L1, L2: pItem);

    // Формирование списков L1 и L2 из списка L по правилу:

    // отрицательные нечетные – в L1, положительные четные – в L2

    var Item: pItem; // указатель на текущий элемент списка

    begin

    Item: =L; // устанавливаем Item на начало списка

    while Item< > nil do begin // пока не достигнут конец списка L

    if (Item^.Value< 0) and odd(Item^.Value) // нечетные отрицательные

    then InsertLast(L1, Item^.Value); // включаем в список L1

    if (Item^.Value> 0) and not odd(Item^.Value) // положительные четные

    then InsertLast(L2, Item^.Value); // включаем в список L2

    Item: =Item^.Next; // сдвигаем Item на следующий элемент

    end; // while

    end; // procedure FormLists

    var

    fDat, fRes: Text; // файлы с исходными данными и результатами работы

    L, L1, L2: pItem; // указатели на исходный и результирующие списки

    v: tValue; // значение элемента списка

    begin

    Assign(fDat, 'LW3Dat.txt'); Reset(fDat); // открытие файла для чтения

    Assign(fRes, 'LW3Res.txt'); Rewrite(fRes); // открытие файла для записи

    Create(L); Create(L1); Create(L2); // создание пустых списков

    while not eof(fDat) do begin // пока не достигнут конец файла fDat:

    Read(fDat, v); // чтение из файла очередного значения в v,

    InsertFirst(L, v); // вставка элемента со значением v в начало списка L

    end; // while

    Writeln(fRes, 'Исходный список: '); WriteList(fRes, L); // вывод списка L

    Writeln(fRes, 'Число элементов списка: ', Size(L)); // вывод размера L

    FormLists(L, L1, L2); // формирование списков L1 и L2

    Writeln(fRes, 'Список отрицательных нечетных элементов: ');

    WriteList(fRes, L1); // вывод списка L1

    Writeln(fRes, 'Число элементов списка: ', Size(L1)); // вывод размера L1

    Writeln(fRes, 'Список положительных четных элементов: ');

    WriteList(fRes, L2); // вывод списка L2

    Writeln(fRes, 'Число элементов списка: ', Size(L2)); // вывод размера L2

    Clear(L); Clear(L1); Clear(L2); // удаление списков

    Close(fDat); Close(fRes); // закрытие файлов

    end.

    Тема 2. МОДУЛИ

    1. Назначение модулей

    Наличие модулей в Delphi позволяет:

    1) создавать библиотеки программных элементов – подпрограмм, констант, типов и переменных;

    2) практически неограниченно увеличивать кодовую часть программы;

    3) использовать подпрограммы, константы, типы и переменные, содержащиеся в стандартных модулях (поставляемых в составе системы программирования Delphi) и в модулях других программистов;

    4) программировать и отлаживать программу по частям.

    Модуль состоит из следующих частей:

    · заголовок модуля;

    · секция интерфейса;

    · секция реализации;

    · секция инициализации;

    · секция деинициализации.

    Первые три части являются обязательными. Обязательна также указанная последовательность разделов.

    2. Заголовок модуля

    Заголовок модуля состоит из зарезервированного слова unit и идентификатора. Идентификатор модуля должен быть уникальным. Пример заголовка:

    unit MyModule;

    Модуль должен быть помещен в файл, имя которого совпадает с именем модуля, а его расширение должно быть.pas. После компиляции файл с модулем получает расширение.dcu.

    3. Секция интерфейса

    Секции интерфейса выполняет представительскую функцию, – в ней указываются константы, типы, переменные, процедуры и функции, которые могут быть использованы в основной программе или в другом модуле при подключении данного модуля.

    Секция начинается зарезервированным словом interface. Далее могут размещаться: 1) предложение uses, в котором перечисляются имена модулей, используемых данным модулем; 2) раздел описания констант; 3) раздел описания типов; 4) раздел описания переменных; 5) раздел описания процедур и функций. Порядок следования разделов описаний так же, как и в главной программе, может быть произвольным. Возможно повторение разделов. Требуется только одно: используемое сейчас должно быть описано выше. Любой из подразделов может отсутствовать. Допустима даже пустая секция интерфейса, но модуль с такой секцией никому не нужен.

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

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

    4. Секция реализации модуля

    Назначение секции реализации – реализация подпрограмм, заявленных в секции интерфейса.

    Секция начинается зарезервированным словом implementation. Далее могут размещаться: 1) предложение uses, в котором перечисляются имена модулей, используемых данным модулем, но не упомянутые в предложении секции uses интерфейса; 2) раздел описания меток; 3) раздел описания констант; 4) раздел описания типов; 5) раздел описания переменных; 6) раздел описания процедур и функций.

    Структурно секция реализации отличается от секции интерфейса только тем, что разрешено наличие раздела описаний меток.

    Как и в секции интерфейса: 1) порядок следования разделов описаний может быть произвольным; 2) возможны повторения разделов; 3) действует правило: используемое сейчас должно быть описано выше; 4) любой из подразделов может отсутствовать; 5) допустима пустая секция реализации.

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

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

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

    Важно понимать, что все метки, константы, типы, переменные и подпрограммы, описанные в секции реализации, кроме подпрограмм из секции интерфейса, являются локальными элементами данного модуля, они не видны из других программ и модулей, они создаются только с одной целью – реализовать подпрограммы секции интерфейса!

    5. Секция инициализации

    Секция инициализации – факультативная часть модуля. В ней размещаются операторы, которые выполняются в начале работы той программы, которая использует данный модуль. Если программа использует несколько модулей, то содержимое их секций инициализации выполняется в порядке перечисления имён модулей в предложении uses. Эта секция начинается зарезервированным словом initialization, например:






    © 2023 :: MyLektsii.ru :: Мои Лекции
    Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
    Копирование текстов разрешено только с указанием индексируемой ссылки на источник.