![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
hdC0e5cSZvk.jpg
Упорядочить по водителю. Вывести информацию об автомобилях с заданным типом кузова и цветом. Помогите написать ф-цию в главной программе Код:
unit Un_Avtopark;
interface
uses Classes, Un_Avto;
Type TAvtopark=class
private
name:string;
FList:TList;
public
Constructor Create(file_name:string);
Procedure Print();
Procedure Sort();
Destructor Destroy; override;
property List:TList
read FList;
end;
implementation
Constructor TAvtopark.Create(file_name:string);
var t:TextFile;
who_is:char;
p:TAvto;
begin
inherited Create;
AssignFile(t,file_name);
Reset(t);
readln(t,name);
FList:=TList.Create;
while not eof(t) do
begin
readln(t,who_is);
case who_is of
'L':begin
p:=TLegkov.Create(t);
FList.Add(p);
end;
'G':begin
p:=TGruzov.Create(t);
FList.Add(p)
end;
end; //case
end; //while
CloseFile(t)
end;
Procedure TAvtopark.Print();
var i:integer;
p:TAvto;
begin
writeln(name);
writeln('===================');
for i:=0 to FList.Count-1 do
begin
p:=FList[i];
p.Print()
end
end;
Destructor TAvtopark.Destroy;
var p:TAvto;
begin
while FList.Count<>0 do
begin
p:=FList.First;
p.Destroy;
FList.Delete(0)
end;
FList.Destroy;
inherited Destroy;
end;
Function CompareByDriver(Item1:Pointer; Item2:Pointer):integer;
var drv1,drv2:TAvto;
begin
drv1:=TAvto(Item1);
drv2:=TAvto(Item2);
result:=drv1.Compare(drv2)
end;
Procedure TAvtopark.Sort();
begin
FList.Sort(CompareByDriver)
end;
end.Код:
unit Un_Avto;
interface
Type TAvto=class
private
FDriver:string;
public
Model:string;
Gos_number:string;
Constructor Create(var t:TextFile);
Procedure Print (); virtual;
Function Compare (AAvto:TAvto):integer;
Function GetName():string;
property Name:string
read GetName;
end;
TLegkov=class(TAvto)
private
Tip:string;
Color:string;
public
Constructor Create (var t:TextFile);
Procedure Print(); override;
// Function Kind():integer;
end;
TGruzov=class(TAvto)
private
Tonnag:integer;
public
Vid:integer;
Constructor Create (var t:TextFile);
Procedure Print(); override;
end;
implementation
// --TAvto--
Constructor TAvto.Create(var t:TextFile);
begin
inherited Create;
readln(t,FDriver);
readln(t,Model);
readln(t,Gos_number);
end;
Procedure TAvto.Print();
begin
writeln('Водитель: ', FDriver);
writeln('Марка: ', Model);
writeln('Государственный номер: ',Gos_number);
end;
Function TAvto.Compare (AAvto:TAvto):integer;
begin
if FDriver<AAvto.FDriver
then result:=-1
else
if FDriver>AAvto.FDriver then
result:=1
else
result:=0;
end;
Function TAvto.GetName():string;
begin
result:=FDriver;
end;
// --TLegkov--
Constructor TLegkov.Create (var t:TextFile);
begin
inherited Create(t);
readln(t,Tip);
readln(t,Color);
if not eof(t) then readln(t)
end;
Procedure TLegkov.Print();
begin
inherited Print();
writeln('Тип кузова: ',Tip);
writeln('Цвет: ',Color);
writeln;
writeln('------------------------');
end;
// --TGruzov--
Constructor TGruzov.Create (var t:TextFile);
begin
inherited Create(t);
readln(t,Tonnag);
readln(t,Vid);
if not eof(t) then readln(t)
end;
Procedure TGruzov.Print();
begin
inherited Print();
writeln ('Тоннаж: ',Tonnag);
writeln ('Вид: ',Vid);
writeln('---------------');
end;
end.Главная Код:
program Project_main;
{$APPTYPE CONSOLE}
uses
SysUtils, Windows,
Un_Avtopark in 'Un_Avtopark.pas',
Un_Avto in 'Un_Avto.pas';
Function ????(var L:TAvtopark; k,n:string):boolean;
var p:TAvto;
i:integer;
begin
result:=false;
(
)
end;
var L:TAvtopark; n,k:string;
begin
SetConsoleOutputCP(1251);
SetConsoleCP(1251);
writeln('*', GetHeapStatus.TotalFree, '*', #10);
L:=TAvtopark.Create('Data.txt');
L.Sort();
L.Print();
writeln('Введите тип кузова: ');
readln(n);
writeln('Введите цвет: ');
readln(k);
If (функция)then
writeln('Таких автомобилей нет')
else
begin
writeln(#10, '*******************');
L.Print()
end;
L.Destroy;
writeln('*', GetHeapStatus.TotalFree, '*', #10);
readln;
end.
|
|
#2
|
|||
|
|||
|
Если я правильно понимаю, то тип кузова - это легковой (L) или грузовой (G). Тогда как-то так:
Код:
function FindAutoByParams(AData : TAvtopark; AType, AColor : String) : Boolean;
var
I : Integer;
Auto : TAvto;
begin
Result := False;
For I := 0 To AData.List.Count-1 Do
Begin
Auto := TAvto(AData.List.Items[i]);
If ((AType = 'L') And (Auto Is TLegkov) And (AColor = (Auto As TLegkov).Color)) Or
((AType = 'G') And (Auto Is TGruzov)) // У грузовых нет цвета
Then
Begin
Auto.Print;
Result := True;
End;
End;
end;Вызов: Код:
...
If Not FindAutoByParams(L,n,k) then writeln('Таких автомобилей нет');
// else - сама функция распечатает
... |