Конвертация с Pascal на C - C (СИ)

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

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

Нужна помощь, нужно перевести программу с Pascal на C
type
  Tname = (anna, boris, ekaterina, igor, marina, olga, yakov);
  Tdesc = text;
 
const
  Titles: array[Tname] of string =
    ('anna', 'boris', 'ekaterina', 'igor', 'marina', 'olga', 'yakov');
  children: array[Tname, Tname] of boolean =
    (
      // anna:
      (false, false, false,  true, false,  true, false),
      // boris:
      (false, false, false, false, false, false, false),
      // ekaterina
      (false, false, false, false,  true, false, false),
      // igor
      (false,  true,  true, false, false, false, false),
      // marina
      (false, false, false, false, false, false, false),
      // olga
      (false, false, false, false, false, false,  true),
      // yakov
      (false, false, false, false, false, false, false)
    );

Type
  PTQueueItem = ^TQueueItem;
  TQueueItem = Record
    Data: Tname;
    next: PTQueueItem;
  End;
 
  TQueue = Object
    Head, Tail: PTQueueItem;
    Constructor Init;
    Destructor Done;
 
    Function IsEmpty: Boolean;
    Procedure Put(T: Tname);
    Procedure Get(Var T: Tname);
  End;

Constructor TQueue.Init;
Begin
  Head := nil
End;
 
Destructor TQueue.Done;
Var T: Tname;
Begin
  While not IsEmpty Do Get(T)
End;
 
Function TQueue.IsEmpty: Boolean;
Begin
  IsEmpty := (Head = nil)
End;
 
Procedure TQueue.Put(T: Tname);
Var nItem: PTQueueItem;
Begin
  new(nItem);
  With nItem^ Do Begin
    Data := T;
    next := nil;
  End;
 
  If IsEmpty Then Head := nItem
  Else Tail^.next := nItem;
 
  Tail := nItem
End;
 
Procedure TQueue.Get(Var T: Tname);
Var ToDelete: PTQueueItem;
Begin
  ToDelete := Head;
  Head := ToDelete^.next;
  T := ToDelete^.Data;
  Dispose(ToDelete)
end;
 
var
  queue: Tqueue;
  i, root, next: Tname;
  f: Tdesc;
 
begin
  assign(f, 'fout.txt'); rewrite(f);
 
  root := anna;
  queue.Init;
 
  queue.Put(root);
 
  while not queue.isempty do begin
 
    queue.Get(next);
    writeln(f, titles[next]);
    for i := low(Tname) to high(Tname) do
      if children[next, i] then queue.Put(i);
 
  end;
 
  queue.Done;
  close(f);
end.

Решение задачи: «Конвертация с Pascal на C»

textual
Листинг программы
#include <stdio.h>
 
#include "queue.h"
 
enum TName
{
  anna,
  boris,
  ekatrina,
  igor,
  marina,
  olga,
  yakov,
  NAMES_MAX
};
 
const char* Titles[NAMES_MAX] = {
  "anna",
  "boris",
  "ekatrina",
  "igor",
  "marina",
  "olga",
  "yakov"
};
 
const int children[NAMES_MAX][NAMES_MAX] = {
  {0, 0, 0, 1, 0, 1, 0},
  {0, 0, 0, 0, 0, 0, 0},
  {0, 0, 0, 0, 1, 0, 0},
  {0, 1, 1, 0, 0, 0, 0},
  {0, 0, 0, 0, 0, 0, 0},
  {0, 0, 0, 0, 0, 0, 1},
  {0, 0, 0, 0, 0, 0, 0}
};
 
 
int main(void)
{
  QUEUE_HANDLE hQueue;
 
  enum TName root = anna;
  enum TName next, i;
 
  FILE* f = fopen("fout.txt", "w");
 
  QueueCreate(&hQueue, sizeof(int));
 
  QueueEnqueue(hQueue, &root);
 
  while (!IsQueueEmpty(hQueue))
  {
    QueueDequeue(hQueue, &next);
 
    fprintf(f, "%s\n", Titles[next]);
 
    for (i = anna; i < NAMES_MAX; i++)
    {
      if (children[next][i]) QueueEnqueue(hQueue, &i);
    }
  }
 
  QueueDelete(&hQueue);
 
  fclose(f);
 
  return 0;
}

Объяснение кода листинга программы

  1. Включаем необходимые заголовочные файлы
  2. Объявляем перечисление TName с возможными именами
  3. Объявляем массив строк Titles с именами из перечисления
  4. Объявляем двумерный массив children размером NAMES_MAX на NAMES_MAX для хранения связей
  5. В функции main создаем очередь с помощью функции QueueCreate
  6. Добавляем корневой элемент в очередь с помощью функции QueueEnqueue
  7. В цикле пока очередь не пуста, извлекаем из неё следующий элемент с помощью функции QueueDequeue
  8. Записываем имя текущего элемента в файл с помощью функции fprintf
  9. В цикле проходим по всем возможным элементам для текущего элемента и если у текущего элемента есть связь с этим элементом, то добавляем его в очередь с помощью функции QueueEnqueue
  10. Закрываем файл с помощью функции fclose
  11. Возвращаем 0, чтобы указать, что программа успешно завершилась

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


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

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

6   голосов , оценка 3.833 из 5
Похожие ответы