Главная страница Случайная страница Разделы сайта АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
💸 Как сделать бизнес проще, а карман толще?
Тот, кто работает в сфере услуг, знает — без ведения записи клиентов никуда. Мало того, что нужно видеть свое раписание, но и напоминать клиентам о визитах тоже.
Проблема в том, что средняя цена по рынку за такой сервис — 800 руб/мес или почти 15 000 руб за год. И это минимальный функционал.
Нашли самый бюджетный и оптимальный вариант: сервис VisitTime.⚡️ Для новых пользователей первый месяц бесплатно. А далее 290 руб/мес, это в 3 раза дешевле аналогов. За эту цену доступен весь функционал: напоминание о визитах, чаевые, предоплаты, общение с клиентами, переносы записей и так далее. ✅ Уйма гибких настроек, которые помогут вам зарабатывать больше и забыть про чувство «что-то мне нужно было сделать». Сомневаетесь? нажмите на текст, запустите чат-бота и убедитесь во всем сами! Protected. fHead: pNode; // поле - указатель на начало списка узлов
fHead: pNode; // поле - указатель на начало списка узлов fNodesNumber: Word; // поле - количество узлов графа fArcsNumber: Word; // поле - количество дуг графа Public property Head: pNode read fHead write fHead; property NodesNumber: Word read fNodesNumber write fNodesNumber; property ArcsNumber: Word read fArcsNumber write fArcsNumber; function NodeValue(Node: pNode): tValue; // значение узла Node function NodeAddr(v: tValue): pNode; // адрес узла графа со значением v function ArcAddr(Node1, Node2: pNode): pArc; // смежность узлов function HeadNode(ArcNode: pArc): pNode; // начальный узел дуги function RearNode(ArcNode: pArc): pNode; // конечный узел дуги function Empty: Boolean; // наличие узлов в графе procedure AddArc(Node1, Node2: pNode); // включение дуги procedure DeleteArc(Node1, Node2: pNode); // исключение дуги procedure AddNode(v: tValue); // включение узла function DeleteNode(DisNode: pNode): tValue; // исключение узла procedure Build(var f: Text); // построение графа procedure Revision(var f: Text); // просмотр графа procedure Clear; // удаление всех узлов графа constructor Create; // конструктор графа destructor Destroy; // деструктор графа end; // tOrGraph 4. Реализация основных операций над ориентированным графом Вычисление адреса узла графа по значению его информационной части фактически представляет собой поиск этого узла в списке узлов: function tOrGraph.NodeAddr(v: tValue): pNode; // адрес узла со значением v Var Node: pNode; Begin if fHead= nil then NodeAddr: = nil Else begin Node: = fHead; while (Node^.NextNode< > nil) and (Node^.Value< > v) do Node: =Node^.NextNode; if Node^.Value=v then NodeAddr: = Node else NodeAddr: = nil; end; end; // function tOrGraph.NodeAddr Операция проверки смежности двух узлов возвращает значение «истина», если узлы смежны, и «ложь» в противном случае. При связанном представлении графа целесообразно возвращать адрес дуги, соединяющей узлы, если они смежны, и nil в противном случае. Перед использованием операции необходимо убедиться, что оба узла присутствуют в списке узлов графа. function tOrGraph.ArcAddr(Node1, Node2: pNode): pArc; // Проверка смежности узлов Node1 и Node2 Var Arc: pArc; Begin ArcAddr: = nil; Arc: =Node1^.ArcList; if Arc< > nil then begin // поиск узла Node2 в списке дуг узла Node1 while (Arc^.NextArc< > nil) and (Arc^.RearNode< > Node2) do Arc: = Arc^.NextArc; if Arc^.RearNode=Node2 then ArcAddr: = Arc; end; end; // function tOrGraph.ArcAddr Операция определения начального узла дуги возвращает адрес узла, из которого выходит заданная дуга (дуга задается своим адресом). Перед применением операции необходимо убедиться, что дуга присутствует в одном из списков дуг графа. function tOrGraph.HeadNode(ArcNode: pArc): pNode; // Начальный узел дуги Var Node: pNode; Arc: pArc; Begin Node: = fHead; HeadNode: = nil;
|