Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.12.2015, 22:49   #1
Kokosaki
Новичок
Джуниор
 
Регистрация: 28.12.2015
Сообщений: 16
По умолчанию Помогите решить проблему.

Я уже не знаю что делать вот программа

Код:
type
  PNode = ^TNode;{ Указатель на запись-узел }
  PLink = ^TLink;{ Указатель на список связей }
  TLink = record { Тип список связей }
    mLink: PNode; { указатель на смежный узел }
    mNext: PLink; { указатель на следующую запись в списке }
  end;
  TNode = record { Тип запись для хранения страны (узла графа) }
    mName: Char; { Название страны (одна буква) }
    mLinks: PLink; { список связей с соседями (смежными узлами) }
    mNext: PNode; { указатель на следующую запись в списке }
  end;

var
  List: PNode;{ список всех стран континента (узлов графа) }
{ Функция поиска страны (узла графа) по имени страны }
function GetPtr(aName: char): PNode;
var
  p: PNode;
begin
  p := List; { поиск начинается с головы списка }
  { проходим по элементам списка }
  while Assigned(p) do 
  begin
    if p^.mName = aName
      then break { нашли! }
    else p := p^.mNext; { а иначе следующий }
  end;
  GetPtr := p;
end;
 { Функция создает новую страну (узел), вставляет в глобальный список List
 и возвращает указатель на новый узел }
function MakeNode(aName: Char): PNode;
var
  p: PNode;
begin
  New(p); { создаем переменную }
  p^.mName := aName; { копируем имя }
  p^.mLinks := nil; { список связей пока пуст }
  p^.mNext := List; { указатель на следующий берем из заголовка }
  List := p; { заголовок указывает на новый узел }
  MakeNode := p; { результат выполнения функции }
end;
procedure Link(p1, p2: PNode);
var
  p: PLink;
begin
  New(p);
  p^.mLink := p2;
  p^.mNext := p1^.mLinks;
  p1^.mLinks := p;
end;
procedure ReadData(var F: Text);
var
  C: Char;
  p, q: PNode;
begin
  Reset(F);
  while not Eof(F) do 
  begin
    if not Eoln(F) then begin
      Read(F, C);
      C := UpCase(C);
      p := GetPtr(C);
      if not Assigned(p)
        then p := MakeNode(C);
      while not Eoln(F) do 
      begin
        Read(F, C);
        C := UpCase(C);
        if C in ['A'..'Z'] then begin
          q := GetPtr(C);
          if not Assigned(q)
            then q := MakeNode(C);
          Link(p, q);
        end
      end
    end;
    Readln(F);
  end;
end;
procedure ExpoData(var F: Text);
var
  p: PNode;
  q: PLink;
begin
  Rewrite(F);
  p := List; { начало просмотра списка стран (узлов) }
  while Assigned(p) do 
  begin
    Write(F, p^.mName);
    q := p^.mLinks;
    while Assigned(q) do 
    begin
      Write(F, ' ', q^.mLink^.mName);
      q := q^.mNext;
    end;
    Writeln(F);
    p := p^.mNext;
  end;
  Close(F);
end;

var
  F_In, F_Out: Text;

begin{--- Главная программа ---}
  List := nil;
  Assign(F_In, 'P_57_1.in');
  ReadData(F_In);
  Assign(F_Out, 'P_57_1.out');
  ExpoData(F_Out);
end.
Kokosaki вне форума Ответить с цитированием
Старый 30.12.2015, 22:54   #2
Kokosaki
Новичок
Джуниор
 
Регистрация: 28.12.2015
Сообщений: 16
По умолчанию

Вот более подробное описание кода
Код:
type
  PNode = ^TNode;{ Указатель на запись-узел }
  PLink = ^TLink;{ Указатель на список связей }
  TLink = record { Тип список связей }
    mLink: PNode; { указатель на смежный узел }
    mNext: PLink; { указатель на следующую запись в списке }
  end;
  TNode = record { Тип запись для хранения страны (узла графа) }
    mName: Char; { Название страны (одна буква) }
    mLinks: PLink; { список связей с соседями (смежными узлами) }
    mNext: PNode; { указатель на следующую запись в списке }
  end;

var
  List: PNode;{ список всех стран континента (узлов графа) }
{ Функция поиска страны (узла графа) по имени страны }
function GetPtr(aName: char): PNode;
var
  p: PNode;
begin
  p := List; { поиск начинается с головы списка }
  { проходим по элементам списка }
  while Assigned(p) do 
  begin
    if p^.mName = aName
      then break { нашли! }
    else p := p^.mNext; { а иначе следующий }
  end;
  GetPtr := p;
end;
 { Функция создает новую страну (узел), вставляет в глобальный список List
 и возвращает указатель на новый узел }
function MakeNode(aName: Char): PNode;
var
  p: PNode;
begin
  New(p); { создаем переменную }
  p^.mName := aName; { копируем имя }
  p^.mLinks := nil; { список связей пока пуст }
  p^.mNext := List; { указатель на следующий берем из заголовка }
  List := p; { заголовок указывает на новый узел }
  MakeNode := p; { результат выполнения функции }
end;
{ Процедура установки связи узла p1 с узлом p2 }
procedure Link(p1, p2: PNode);
var
  p: PLink;
begin
  New(p); { создаем переменную-связь }
  p^.mLink := p2; { поле mLink должно указывать на p2 }
  p^.mNext := p1^.mLinks; { указатель на следующий берем из заголовка }
  p1^.mLinks := p; { заголовок указывает на новый узел }
end;
{ Процедура чтения графа из текстового файла }
procedure ReadData(var F: Text);
var
  C: Char;
  p, q: PNode;
begin
  Reset(F);
  while not Eof(F) do 
  begin
    if not Eoln(F) then begin{ если строка не пуста }
      Read(F, C); { читаем имя страны }
      C := UpCase(C); { перевод в верхний регистр }
      p := GetPtr(C); { а может эта страна уже существует? }
      if not Assigned(p)
        then p := MakeNode(C); { если нет, – создаем }
      while not Eoln(F) do 
      begin{ чтение стран-соседей до конца строки }
        Read(F, C);
        C := UpCase(C);
        if C in ['A'..'Z'] then begin{ если это имя страны, а не пробел }
          q := GetPtr(C); { проверяем существование страны }
          if not Assigned(q) { если не существует, – создаем }
            then q := MakeNode(C);
          Link(p, q); { связываем страну p с q }
        end
      end
    end;
    Readln(F); { переход на следующую строку файла }
  end;
end;
{ Процедура распечатки графа }
procedure ExpoData(var F: Text);
var
  p: PNode;
  q: PLink;
begin
  Rewrite(F);
  p := List; { начало просмотра списка стран (узлов) }
  while Assigned(p) do 
  begin
    Write(F, p^.mName); { название страны }
    q := p^.mLinks; { начало просмотра списка соседей }
    while Assigned(q) do 
    begin
      Write(F, ' ', q^.mLink^.mName); { название соседа }
      q := q^.mNext; { следующий сосед }
    end;
    Writeln(F); { конец строки }
    p := p^.mNext; { следующая страна }
  end;
  Close(F);
end;

var
  F_In, F_Out: Text;{ входной и выходной файла }

begin{--- Главная программа ---}
  List := nil;
  Assign(F_In, 'P_57_1.in');
  ReadData(F_In); { читаем граф из входного файла }
  Assign(F_Out, 'P_57_1.out');
  ExpoData(F_Out); { печатаем в выходной файл }
end.
Kokosaki вне форума Ответить с цитированием
Старый 31.12.2015, 04:14   #3
Naive
Раздолбайских Дел
Старожил
 
Аватар для Naive
 
Регистрация: 22.05.2009
Сообщений: 3,828
По умолчанию

Цитата:
Я уже не знаю что делать вот программа
А я понял что делать! В армию сходить! Есть вероятность, что там тебя научат понимать задания, решать поставленные задачи и, возможно, в какой-то маленькой мере, хотя-бы объяснять другим людям что тебе надо сделать, что у тебя не получается и как с этим правильно потом доложить командованию.

п.с.
Твой код:
Код:
Ехал Грека { глагол, имя собственное }
  Через вечность { указатель, бесконечное кол-во времени }
Видит Грека { констатация факта с указателем на экземпляр класса ТЧеловек }
  — пустота { dev/null }
Сунул Грека { опрометчивый поступок, не связанный с инстинктом размножения }
  Безмятежность { ничем не обязывающее слово, с объяснением, которое ничего не объясняет в контексте программы }
В иллюзорность { междометие и существительное }
  Бытия { тут слово }
Alar, верни репу!

Последний раз редактировалось Naive; 31.12.2015 в 04:25.
Naive вне форума Ответить с цитированием
Старый 31.12.2015, 09:13   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Помогите решить проблему.
А в чем проблема состоит?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите решить проблему. Nikromantik Общие вопросы C/C++ 9 12.02.2014 22:39
Помогите решить проблему? Serik410 JavaScript, Ajax 4 19.12.2013 18:29
ПОМОГИТЕ РЕШИТЬ ПРОБЛЕМУ !!!!!!!!!!!! ЛиЛу Помощь студентам 5 29.12.2008 15:36
Помогите решить проблему nismo Microsoft Office Excel 7 12.09.2008 08:59
помогите решить проблему 1234 Общие вопросы Delphi 2 04.07.2008 11:52