Главная страница Случайная страница Разделы сайта АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
💸 Как сделать бизнес проще, а карман толще?
Тот, кто работает в сфере услуг, знает — без ведения записи клиентов никуда. Мало того, что нужно видеть свое раписание, но и напоминать клиентам о визитах тоже.
Проблема в том, что средняя цена по рынку за такой сервис — 800 руб/мес или почти 15 000 руб за год. И это минимальный функционал.
Нашли самый бюджетный и оптимальный вариант: сервис VisitTime.⚡️ Для новых пользователей первый месяц бесплатно. А далее 290 руб/мес, это в 3 раза дешевле аналогов. За эту цену доступен весь функционал: напоминание о визитах, чаевые, предоплаты, общение с клиентами, переносы записей и так далее. ✅ Уйма гибких настроек, которые помогут вам зарабатывать больше и забыть про чувство «что-то мне нужно было сделать». Сомневаетесь? нажмите на текст, запустите чат-бота и убедитесь во всем сами! Пример выполнения задания. Создать список целочисленных элементов
Создать список целочисленных элементов. Составить процедуру записи отрицательных нечетных элементов исходного списка в один список, положительных четных – в другой и продемонстрировать ее работу. // Лабораторная работа 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, например:
|