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

Й способ. Unit1 c базовыми операциями.

Читайте также:
  1. Аналитический способ.
  2. Й способ. Unit 1 с операциями над деком.
  3. Й способ. Unit2 c операциями меню.
  4. Й способ. Unit2 с операциями меню.
  5. Лог файл. 1-й способ.
  6. Лог файл. 2-й способ.

unit Unit1; //модуль с базовыми операциями

 

interface

 

type

TStruct = record // сведения о заказе

Title: string; // наименование заказа

Hours: integer; // часы поступления

Minutes: integer; // минуты поступления

Seconds: integer; // секунды поступления

end;

 

mas = array of TStruct; //динамический массив из записей

 

deq = record

data:mas; //массив с данными

begl,endl:byte;// индекс начала/конца

end;

 

const

nul: TStruct = (//нулевой элемент

Title: ' ';

Hours: 0;

Minutes: 0;

Seconds: 0;

);

 

function Check(a:deq):boolean; //проверка на пустоту

procedure CreateDeq(var a:deq); //создание дека из одного элемента

procedure Add(var a:deq; r:tstruct); //добавить

function Get(var a:deq):tstruct; //обработать первый элемент и удалить

procedure ChangeDir(var a:deq);//смена направления

procedure addlog(s:string; a:deq);//вывод в лог фаил

 

implementation

uses SysUtils;

 

function Check(a:deq):boolean;//проверка на пустоту

begin

if a.data=nil then result:=True//если массив пуст, то true

else result:=false;//иначе false

end;

 

procedure CreateDeq(var a:deq);//создать дек из одного нулевого элемента

begin

setlength(a.data,11);a.data[0]:=nul;//выделение памяти с запасом, нулевой эл-т

a.begl:=0;a.endl:=0;; //инедксы начала и конца устанавливаем на ноль

end;

 

procedure Add(var a:deq; r:tstruct); //добавление в начало

begin

if check(a) then //если дек пустой, то создаем и записываем

begin createDeq(a); a.data[a.begl]:=r; end// в первый эл-т данные

else //если не пустой, то

begin //если в конце есть запас памяти, то добавляем в конец

if a.endl+1 < length(a.data) then begin inc(a.endl);a.data[a.endl]:=r;end

else

begin//если нет запаса в конце

if a.endl+1=length(a.data) then begin

inc(a.endl);setlength(a.data,a.endl+1); //то выделяем новую память

a.data[a.endl]:=r;//и вводим данные в конечный элемент

end;

end;

end;

end;

 

function Get(var a:deq):tstruct; //обработка первого эл-та с удалением

var r:tstruct; i: byte; //буфер

begin

if check(a) then result:=nul//если дек пуст - возвращаем нулевой элемент

else //иначе

if a.begl=a.endl then //если начало и конец совпадают

begin r:=a.data[a.begl];//считываем данные

setlength(a.data,0); result:=r;end//обнуляем массив и выводим данные

else //если не совпадают

begin r:=a.data[a.begl];//считываем данные

for i:=a.begl+1 to a.endl do //сдвигаем элементы в начало

a.data[i-1]:=a.data[i]; dec(a.endl); //уменьшаем индекс конечного

setlength(a.data,a.endl+1); //выделяем на один элемент меньше памяти

result:=r; end;//выводим данные

end;

 

procedure ChangeDir(var a:deq);//сменить направление

var i:byte; buf:tstruct;//вспомогательный индекс, буффер данных

begin

for i:=0 to (a.endl-a.begl)div 2 do//от первого элемента до середины

begin

buf:=a.data[a.begl+i];//заносим в буфер данные первого

a.data[a.begl+i]:=a.data[a.endl-i];//вводим в первый данные последнего

a.data[a.endl-i]:=buf;//вводим в последний данные первого и т.д.

end;

 

end;

 

procedure addlog(s:string; a:deq);//вывод в лог фаил

var i:byte; F:textFile;//вспомогательный индекс, файловая переменая

begin

assignfile (f, 'log.txt'); //подключаем лог файл

try if fileexists('log.txt') then //если лог файл существует - дописать

append(f) else Rewrite(F); //иначе создать

try

try

WriteLn(F,DateTimeToStr(Now) + ': ');//дата, время

writeln (f,s);//заголовок лог файла

if check(a) then writeln (f,'Дек пуст.')//если пуст, то выводим соотв.

else begin//если нет

i:=a.begl;//вспомогательный индекс на начало

while i<=a.endl do //пока дек не закончился

begin

with a.data[i]do//выводим данные

begin

writeln(f, 'Наименование заказа: ', Title);

writeln(f, 'Часы поступления: ', Hours);

writeln(f, 'Минуты поступления: ', Minutes);

writeln(f, 'Секунды поступления: ', Seconds);

end;

writeln(f);inc(i);//переход на новую строку и к следующему элементу

end;

end;

except writeln ('Eror writing log file.');end;//вывод в случае ошибки записи

finally writeln(f); CloseFile (f); end;//обязательно закрыть файл

except Writeln ('Eror opening log file.');end;//вывод в случае ошибки чтения

end;

 

end.

 


Дата добавления: 2015-07-08; просмотров: 206 | Нарушение авторских прав


Читайте в этой же книге: Интерактивное консольное меню. | Й способ. Unit 1 с операциями над деком. | Лог файл. 1-й способ. | Лог файл. 2-й способ. |
<== предыдущая страница | следующая страница ==>
Й способ. Unit2 с операциями меню.| Й способ. Unit2 c операциями меню.

mybiblioteka.su - 2015-2024 год. (0.011 сек.)