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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.08.2012, 13:24   #1
krikqwerty
Пользователь
 
Регистрация: 26.08.2012
Сообщений: 35
По умолчанию ООП

Привет всем. Не подскажите мне как продолжить работу. Это по предмету «Объектно-ориентированное программирование». На тему «Взаимодействие классов на принципах композиции». Примером является создание структуру данных «Упорядоченный массив-список динамических стеков». Я написал описание классов и некоторую реализацию(Буду делать в Delphi):
У меня 3 класса:Teacher,Chair,Institut

Нужно дописать только списковый класс

Класс Teacher:


Код:
Type
TTeacher=class

private

Fam:string;
Post:string;
Prev:TTeacher;
public
constructor Create(aFam,aPost:string);
 function   GetFam:string;
 function   GetPost:string;
procedure   SetF(aFam:string);
procedure   SetP(aPost:string);
 function   GetPrev:TTeacher;
procedure   SetPr(aPrev:TTeacher);
end;
implementation

constructor TTeacher.Create(aFam,aPost:string);
begin
Fam:=aFam;  aPost:=aPost;
end;

function TTeacher.GetFam:string;
begin
result:=Fam;
end;

function TTeacher.GetPost:string;
begin
result:=Post;
end;

procedure TTeacher.SetF(aFam:string);
begin
Fam:=aFam;
end;

procedure   TTeacher.SetP(aPost:string);
begin
Post:=aPost;
end;

function TTeacher.GetPrev:TTeacher;
begin
result:=Prev;
end;

procedure   TTeacher.SetPr(aPrev:TTeacher);
begin
Prev:=aPrev;
end;
end.

Класс Chair:
Код:
Type
TChair=class
private

Name_Chair:string;
First:integer;
public

constructor    Create(aName_Chair:string;aFirst:TChair);
   function    GetNC:string;
  procedure    SetNC(aName_Chair:string);
   function    GetF:integer;
  procedure    SetF(aFirst:integer);
  procedure    Add(aFam,aPost:string);
   function    Delete:boolean;
end;
implementation


constructor TChair.Create(aName_Chair:string;aFirst:TChair);
begin
Name_Chair:=aName_Chair; aFirst:=nil;
end;

function    TChair.GetNC:string;
begin
result:=Name_Chair;
end;

procedure   TChair.SetNC(aName_Chair:string);
begin
Name_Chair:=aName_Chair
end;

function   TChair.GetF:integer;
begin
result:=First;
end;


procedure  TChair.SetF(aFirst:integer);
begin
First:=aFirst;
end;


procedure   TChair.Add(aFam,aPost:string);
var T:TTeacher;
begin
T:=TTeacher.Create(aFam,aPost);
First:=First+1;
end;

function   TChair.Delete:boolean;
begin
 result:=false;
 if First<>0 then
 begin
 First:=First-1;
 end;
 end;
end.
Класс Список
Код:
 const n=20;
Type
TInstitut=class

private

Chairs: array [1..n] of TChair;
Name_inst:string;
count:integer;

public

Constructor    Create;
   function    Add(name_new_chair:TChair):boolean;
   function    GetNI:string;
  procedure    SetNI(aName_inst:string);
   function    GetCount:integer;
   function    Delete(aName_Chair:TChair):boolean;
  procedure    SaveToFile(aName_File:string);
  procedure    LoadToFile(aName_File:string);
end;
implementation

constructor TInstitut.Create;
var First:TChair;  aName_inst:string;
begin
First:=nil; name_inst:=aName_inst;
count:=0;
end;

function    TInstitut.Add(name_new_chair:TChair):boolean;
var i:integer;
begin
 result:=false;
 if (count<n) then begin
 count:=count+1;
 for  i:=1 to count do
 begin
здесь надо организовать поиск по для находждения места для новой кафедры которую я буду добавлять(name_new_chair)
 result:=true;
 end;
 end;
         end;

function    TInstitut.Delete(aName_Chair:TChair):boolean;
begin

end;


procedure    TInstitut.SetNI(aName_inst:string);
begin
Name_inst:=aName_inst;
end;

function    TInstitut.GetNI:string;
begin
result:=name_inst;
end;

function    TInstitut.GetCount:integer;
begin
result:=count;
end;

procedure    TInstitut.SaveToFile(aName_File:string);
begin

end;
procedure    TInstitut.LoadToFile(aName_File:string);
begin
end;


У меня пока не получается написать добавление и удаление из списка
Если есть ошибки я жду ваших мнений

Последний раз редактировалось Stilet; 26.08.2012 в 14:10.
krikqwerty вне форума Ответить с цитированием
Старый 26.08.2012, 14:12   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Chairs: array [1..n] of TChair;
Это список??? Образмеренный???
Цитата:
для находждения места для новой кафедры
А что-то я не пойму критерий нахождения. Разве нельзя новую кафедру поставить в конце списка?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.08.2012, 20:27   #3
krikqwerty
Пользователь
 
Регистрация: 26.08.2012
Сообщений: 35
По умолчанию

Chairs это мой массив в который я буду вставлять кафедры с преподователями, новую кафедру можно поставить в конец списка но преподаватель сказал надо добавлять по названию
krikqwerty вне форума Ответить с цитированием
Старый 26.08.2012, 21:14   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
но преподаватель сказал надо добавлять по названию
Ты меня не понял. Я спросил зачем под список организовывать образмеренный массив, который ограничен в количестве элементов.

В конце концов можно указать Chairs: array of TChair;
А функцию вставки сделать такой:
Код:
function    TInstitut.Add(name_new_chair:String):TChair;
begin
 SetLength(Chairs,Length(Chairs)+1)
 Result:=TChair.Create(name_new_chair,nil);
 Chairs[High(Chairs)]:=Result;
end;
И вот так вот вносить новое
Код:
 with add('Пудрология') do begin
  SetF('Факультет Каверзных Мыслей');
  SetP('Министр Защиты от Темных сил');
 end;
Все равно твоя стратегия мне не нравится.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.11.2012, 22:59   #5
krikqwerty
Пользователь
 
Регистрация: 26.08.2012
Сообщений: 35
По умолчанию

Привет всем! я решил продолжить свою работу. Я написал добавление в мой класс институт
Код:
unit Institut;

interface    
uses Chair,Teacher,Unit1;
 const n=20;
Type
TInstitut=class

private

Chairs: array [1..n] of TChair;
Name_inst:string;
count:integer;


public

Constructor    Create(aName_inst:string);
   function    Add(name_new_chair:string):boolean;
   function    GetNI:string;
  procedure    SetNI(aName_inst:string);
   function    GetCount:integer;
   function    Delete(aName_Chair:string):boolean;
   procedure   ShowAll;
  procedure    SaveToFile(aName_File:string);
  procedure    LoadToFile(aName_File:string);
end;
implementation

constructor TInstitut.Create(aName_inst:string);
begin
name_inst:=aName_inst;
count:=0;
end;

function    TInstitut.Add(name_new_chair:string):boolean;
var i,j:integer; aName_Chair:string;
begin
 result:=false;                                              
 if (count=0) then begin
 Chairs[1]:=TChair.Create(aName_Chair);
 count:=count+1;
 end
 else
 if (count<n) then begin
    for i :=  1 to count do
      if Chairs[i].GetNC > name_new_chair then begin
         for j := count downto i-1 do  chairs[j+1]:=chairs[j];
            chairs[i+1]:=TChair.Create(name_new_chair)            
             end
            else
          if Chairs[i].GetNC < name_new_chair then
         for j := count downto i-1 do  chairs[j+1]:=chairs[j];
       chairs[i]:=TChair.Create(name_new_chair);
      count:=count+1;
   result:=true;
 end;
 end;





function    TInstitut.Delete(aName_Chair:string):boolean;
var i,j:integer; Char:TChair;
begin
      result:=false;
        if (count<>0) then begin
         for i:= 1 to count do
           if Chairs[i].GetNC=aName_Chair then
       for j:= i+1 to count do  Chairs[j-1]:=chairs[j];
     count:=count-1;
    result:=true;
end;
end;





procedure    TInstitut.SetNI(aName_inst:string);
begin
Name_inst:=aName_inst;
end;

function    TInstitut.GetNI:string;
begin
result:=name_inst;
end;

function    TInstitut.GetCount:integer;
begin
result:=count;
end;




procedure    TInstitut.SaveToFile(aName_File:string);
begin

end;



procedure    TInstitut.LoadToFile(aName_File:string);
begin
end;
end.
у меня не получается написать сохранение в файл и загрузка его написать сохранение и загрузку надо вручную без не через диалоги и еще я
теперь хочу проверить работоспособность добавления, но никак не получается
посоветуйте через что и как мне проверить добавление в главном модуле
krikqwerty вне форума Ответить с цитированием
Старый 30.11.2012, 23:22   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
надо вручную без не через диалоги
Казнить нельзя помиловать?
Цитата:
но никак не получается
Что именно?
Цитата:
как мне проверить добавление в главном модуле
Добавление чего и к чему? Если речь идет о работоспособности программы, то достаточно просто написать функции вывода на экран добавленного, или пройтись трассировкой по программе. Как правило этого хватает для начальных тестов.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.01.2013, 03:26   #7
krikqwerty
Пользователь
 
Регистрация: 26.08.2012
Сообщений: 35
По умолчанию Combobox

В появилась еще одна загвоздка это Combobox никак не могу разобраться с ним, хочу добавить имена моих кафедр в него но не получается он выводит пустые строчки, сначала я добавляю имена моих кафедр в массив потом обновляю комбобокс
обновление выглядит так:
Код:
    procedure TInstitut.ShowAll;
      var
        i:integer;
      begin
        Form1.Combobox1.Clear; //очищаю комбобокс
        for i:=1 to Count do
        begin
        Form1.Combobox1.Items.Add(Chairs[i].GetNC); //добавляю факультеты в комбобокс
        end;
      end;
Chairs это мой массив в котором я храню имена кафедр
вызов в демо-модуле выглядит так:
Код:
       Ins.Add((Edit1.Text)); //добавляю факультет

         Ins.ShowAll; //обновляю комбобокс
Добавление в массив правильное я проверял, в чем проблема понять не могу
krikqwerty вне форума Ответить с цитированием
Старый 05.01.2013, 12:25   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
for i:=low(Chairs) to High(Chairs) do...
Раз уж так
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.01.2013, 20:28   #9
krikqwerty
Пользователь
 
Регистрация: 26.08.2012
Сообщений: 35
По умолчанию

исправил, теперь работает

Последний раз редактировалось krikqwerty; 06.01.2013 в 19:08.
krikqwerty вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
КР ООП Airou Фриланс 3 04.03.2011 00:45
ООП kiss2 Помощь студентам 4 16.06.2010 10:31
ООП AlekDruzh Паскаль, Turbo Pascal, PascalABC.NET 0 09.09.2009 20:32
Паскаль ООП. Примеры программ с использованием ООП SeЯgey Помощь студентам 5 13.05.2009 21:55