Организовать очереди по N элементов, создать файл слов по N символов в каждом - Free Pascal
Формулировка задачи:
Помогите пожалуйста с решением задачи на FreePascal по динамическим структурам
Имеется файл символьного типа. Организовать очереди по N элементов,создать файл слов по N символов в каждом.
Решение задачи: «Организовать очереди по N элементов, создать файл слов по N символов в каждом»
textual
Листинг программы
const capacity = 100; type TData = Char; TPElem = ^TElem; TElem = record Data: TData; PNext: TPElem; end; TQueue = record PFirst, PLast: TPElem; end; procedure QueueInit(var aQueue: TQueue); begin aQueue.PFirst := nil; aQueue.PLast := nil; end; procedure QueuePush(var aQueue: TQueue; const aData: TData); var PElem: TPElem; begin New(PElem); PElem^.Data := aData; PElem^.PNext := nil; if (aQueue.PFirst = nil) then aQueue.PFirst := PElem else aQueue.PLast^.PNext := PElem; aQueue.PLast := PElem; end; function QueuePop(var aQueue: TQueue; var aData: TData): Boolean; var PElem: TPElem; Result: Boolean; begin Result := False; Result := (aQueue.PFirst <> nil); if (Result) then begin PElem := aQueue.PFirst; aData := PElem^.Data; aQueue.PFirst := PElem^.PNext; if (aQueue.PFirst = nil) then aQueue.PLast := nil; Dispose(PElem); end; QueuePop := Result; end; procedure QueueFree(var aQueue: TQueue); var Data: TData; begin while QueuePop(aQueue, Data) do; end; function QueueToStr(var aQueue : TQueue): String; var QTmp: TQueue; Data: TData; Result: String; begin if (aQueue.PFirst = nil) then begin Result := 'Очередь пуста.'; Exit; end; Result := ''; QueueInit(QTmp); while QueuePop(aQueue, Data) do begin QueuePush(QTmp, Data); if (Result <> '') then Result := Result + ', '; Result := Result + Data; end; aQueue := QTmp; end; var f, g: File Of TData; c: TData; q: TQueue; size, i, n: Word; s: String; begin Assign(f, 'f.txt'); ReSet(f); size := FileSize(f); SetLength(s, size); BlockRead(f, s[1], Size); Close(f); QueueInit(q); Write('Input n='); ReadLn(n); for i := 1 to size do begin if ((i > 1) And (i mod n = 1)) then begin QueuePush(q, #13); QueuePush(q, #10); end; QueuePush(q, s[i]); end; size := 0; while QueuePop(q, c) do begin Inc(size); if (size > Length(s)) then SetLength(s, size + capacity); s[size] := c; end; Assign(g, 'g.txt'); ReWrite(g); BlockWrite(g, s[1], size); Close(g); QueueFree(q); end.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д