Организовать очереди по N элементов, создать файл слов по N символов в каждом - Free Pascal

Узнай цену своей работы

Формулировка задачи:

Помогите пожалуйста с решением задачи на FreePascal по динамическим структурам Имеется файл символьного типа. Организовать очереди по N элементов,создать файл слов по N символов в каждом.

Решение задачи: «Организовать очереди по N элементов, создать файл слов по N символов в каждом»

textual
Листинг программы
  1. const
  2.     capacity = 100;
  3. type
  4.     TData = Char;
  5.     TPElem = ^TElem;
  6.     TElem = record
  7.         Data: TData;
  8.         PNext: TPElem;
  9.     end;
  10.     TQueue = record
  11.         PFirst, PLast: TPElem;
  12.     end;
  13. procedure QueueInit(var aQueue: TQueue);
  14. begin
  15.     aQueue.PFirst := nil;
  16.     aQueue.PLast := nil;
  17. end;
  18. procedure QueuePush(var aQueue: TQueue; const aData: TData);
  19. var
  20.     PElem: TPElem;
  21. begin
  22.     New(PElem);
  23.     PElem^.Data := aData;
  24.     PElem^.PNext := nil;
  25.     if (aQueue.PFirst = nil)
  26.     then
  27.         aQueue.PFirst := PElem
  28.     else
  29.         aQueue.PLast^.PNext := PElem;
  30.     aQueue.PLast := PElem;
  31. end;
  32. function QueuePop(var aQueue: TQueue; var aData: TData): Boolean;
  33. var
  34.     PElem: TPElem;
  35.     Result: Boolean;
  36. begin
  37.     Result := False;
  38.     Result := (aQueue.PFirst <> nil);
  39.     if (Result)
  40.     then
  41.     begin
  42.         PElem := aQueue.PFirst;
  43.         aData := PElem^.Data;
  44.         aQueue.PFirst := PElem^.PNext;
  45.         if (aQueue.PFirst = nil)
  46.         then
  47.             aQueue.PLast := nil;
  48.         Dispose(PElem);
  49.     end;
  50.     QueuePop := Result;
  51. end;
  52. procedure QueueFree(var aQueue: TQueue);
  53. var
  54.     Data: TData;
  55. begin
  56.     while QueuePop(aQueue, Data) do;
  57. end;
  58. function QueueToStr(var aQueue : TQueue): String;
  59. var
  60.     QTmp: TQueue;
  61.     Data: TData;
  62.     Result: String;
  63. begin
  64.     if (aQueue.PFirst = nil)
  65.     then
  66.     begin
  67.         Result := 'Очередь пуста.';
  68.         Exit;
  69.     end;
  70.     Result := '';
  71.     QueueInit(QTmp);
  72.     while QueuePop(aQueue, Data) do
  73.     begin
  74.         QueuePush(QTmp, Data);
  75.         if (Result <> '')
  76.         then
  77.             Result := Result + ', ';
  78.         Result := Result + Data;
  79.     end;
  80.     aQueue := QTmp;
  81. end;
  82. var
  83.     f, g: File Of TData;
  84.     c: TData;
  85.     q: TQueue;
  86.     size, i, n: Word;
  87.     s: String;
  88. begin
  89.     Assign(f, 'f.txt'); ReSet(f);
  90.     size := FileSize(f);
  91.     SetLength(s, size);
  92.     BlockRead(f, s[1], Size);
  93.     Close(f);
  94.     QueueInit(q);
  95.     Write('Input n='); ReadLn(n);
  96.     for i := 1 to size do
  97.     begin
  98.         if ((i > 1) And (i mod n = 1))
  99.         then
  100.         begin
  101.             QueuePush(q, #13);
  102.             QueuePush(q, #10);
  103.         end;
  104.         QueuePush(q, s[i]);
  105.     end;
  106.     size := 0;
  107.     while QueuePop(q, c) do
  108.     begin
  109.         Inc(size);
  110.         if (size > Length(s))
  111.         then
  112.             SetLength(s, size + capacity);
  113.             s[size] := c;
  114.     end;
  115.     Assign(g, 'g.txt'); ReWrite(g);
  116.     BlockWrite(g, s[1], size);
  117.     Close(g);
  118.     QueueFree(q);
  119. end.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.6 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы