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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.09.2016, 23:49   #1
WebManual
Новичок
Джуниор
 
Регистрация: 22.09.2016
Сообщений: 1
По умолчанию Помогите с добавлялкой в список (ООП)

Здравствуйте, имеется такая задача: Нужна программа, в которую нужно забить информацию о файлам (Имя и размер), а эти файлы в свою очередь, были в контейнере, реализованном в виде адресного однонаправленного списка. Вот что получилось у меня:

Код:
unit FailU;
 
interface
 
type
  TFail = class
    private
      NameFile:string;
      SizeFile:integer;
      Next:TFail;
    public
      constructor Create(aName:string; aSize:integer); //Создать файл
      function GetName:string; //Получить имя файла
      function GetSize:integer; // Получить размер файла
      procedure SetName(aName:string);  // Установить имя файла
      procedure SetSize(aSize:integer); // Установить размер файла
      function GetNext (Next:TFail);  //Перейти к следующему файлу
      procedure SetNext (aNext:TFail);  //Установить следующий файл
  end;
 
implementation
 
constructor TFail.Create(aname: string; asize: Integer);
begin
  NameFile:=aName;
  SizeFile:=aSize;
end;
 
procedure TFail.SetName(aname: string);
begin
  NameFile:=aName;
end;
 
procedure TFail.SetSize(asize: Integer);
begin
  SizeFile:=aSize;
end;
 
function TFail.GetName;
begin
  result:=NameFile;
end;
 
function TFail.GetSize;
begin
  result:=SizeFile;
end;
 
procedure TFail.SetNext(anext: TFail);
begin
  next:=anext;
end;
 
function TFail.GetNext(next: TFail);
begin
  result:=next;
end;
 
end.
И

Код:
unit Katalog;
 
interface
 
uses
  Dialogs, FileU; //Используем модуль файлов
 
type
    TKatalog = class
    private
      Name:string; //* Название каталога;
      pFirst: TBuilding; //*Казатель на первый элемент
      Count:integer;
    public
      Constructor Create(aName:string);
      procedure SetName(aNameKatalog:string); //Установить имя
      function  GetName:string; //Получить имя
      function TKatalog.SearchFile(anamefile:string):TFail;
      procedure AddFile(aFile:TFile); //Добавить файл после нужного файла
      function GetName: string; // получить название Каталога
      procedure SetName(aName: string); // установить название Каталога
 
  end;
 
implementation
 
constructor TKatalog.Create(Name:string);
begin
  Name:=aName;
  pFirst:=nil;
  count:=0;
end;
 
function TKatalog.SearchFile(anamefile:string):TFail;
var pTemp:TFail;
begin
  if Count=0 then ShowMessage('Поиск невозможен! Нет файлов для поиска!') else
    begin
      pTemp:=pFirst;
      while (pTemp<>nil) do
        if (pTemp.GetName = anamefile) then
          begin
            result:=pTemp;
            break;
          end
            else pTemp:=pTemp.GetNext;
    end;
end;
 
procedure AddFile(aFile:=TFile);
var pTemp:TFile;
Begin
  if count=0 then
    begin
         aFile.SetNext(pFirst);
         pFirst:=aFile;
         Inc(count);
    else
    pTemp:=SearchFile(anamefile);
    if (pTemp<>nil) then
      aFile.SetNext()
End;
end.
С контейнером у меня проблемы, (ЮНИТ2) не уверен, что правильно описан адрессный однонаправленный список и не знаю как реализовать добавлялки :-( Гуру, помогите пожалуйста новичку, хочется разобраться...
WebManual вне форума Ответить с цитированием
Старый 28.09.2016, 01:00   #2
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Приведенный код содержит ошибки, которые должны приводить к его некомпиляции.
Например, некоторые вызовы ГетНекст и СетНекст не совпадают со своими объявлениями.
function GetNext (Next:TFail); - не скомпилируется, нет возвращаемого результата.
procedure AddFile(aFile:=TFile); - не скомпилируется, лишний знак =
в тексте той же процедуры строка pTemp:=SearchFile(anamefile); приведет к ошибке необъявлен идентификатор anamefile
В классе каталога упоминается вообще какой-то ТБилдинг - явно скопипастили бездумно.
Имя модуля про файлы (кстати, неуместное слово Fail для понятия файл) - FailU , а при ссылке на нужный модуль файлов в модуле каталогов упоминается уже FileU, это ваш fail .

Отдельно стоят проблемы без синтаксических ошибок, но с ошибками алгоритмическими (и даже семантическими):
гетнекст возвращает не пойми какую величину указателя из переданного аргументом, вместо величины из одноименного поля (вызов гетнекст, собственно, ничего и не передаёт, так что налицо ошибка в том что объявлен аргумент вообще)
Функция поиска никак не определяет, что вернуть при отсутсвии в имеющемся списке искомого файла, это приведет в выдаче мусорного указателя и сломает полагающийся на это код.
Исправляйте, и там уже можно будет говорить за доведение до ума остальной рабочей части.
phomm вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Используя ООП создать в динамической памяти фигуру, представляющую связный список отдельных объектов (C#) BaHDaJl Помощь студентам 0 20.06.2012 15:42
ООП Delphi разработка классов для реализации контейнера на основе структуры"упорядоченный динамический список" naffy Помощь студентам 0 28.06.2011 00:22
Кольцевой двунаправленный список. ООП. Purr Помощь студентам 5 30.11.2010 08:48
C#(ООП) Помогите R_A_M_I_L7777777 Помощь студентам 0 02.06.2009 23:04