М | Используй теги |
У меня вот такая проблема:
есть задача, она вроде как решена. Однако преподу не понравились мои методы. А на финальной проверке он мне вообще сказать содрать код с дот нэта ( что-то связанное с классом хэштаблиц), и просто адаптировать этот код под Дэлфи. Вот у меня и вопрос: правильно ли теперь сделан класс( или может кто-то даст мне ссылку на дот нэтовсткие хэштаблицы)?
В работе необходимо создать класс, описанный в задании. Требуется обратить особое внимание на состав членов класса, а также на внутренний формат представления данных. Необходимо предусмотреть возможность тестирования класса.
Класс для представления таблицы, элементы которой представляет собой пару «ключ-значение ключа». «Ключ» - строка, «значение ключа» - целое число. Реализовать поиска значения по ключу, подтверждение наличия ключа или значения в таблице, сортировку таблицы по ключу.
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,Dialogs;
type dl=string[30];
TPair=record
key:string[30];
value:integer;
end;
TTable=array of TPair;
TDO = class(TObject)
private
FArray:TTable;
Function PodK(n:word;ku:dl):dl;
Function PodZ(n:word;zn:integer):dl;
public
procedure Enter(a:TTable);
function QuickSortR(n:word):TTable;
function PoiskK(n:integer;k:dl):dl;
function PoiskZ(n,za:integer):dl;
property masK[n:word;ku:dl]:dl read PodK;
property masZ[n:word;zn:integer]:dl read PodZ;
end;
Var i,j:integer;n:word;
implementation
Procedure TDo.Enter;
begin
FArray:=a;
end;
Function TDO.QuickSortR;
Procedure sort(L,R: word);
Var i,j:Word;w:TPair; x:dl;
begin
i:=L;
j:=R;
x:=FArray[(L+R) div 2].key;
Repeat
While FArray[i].key<x do i:=i+1;
While FArray[j].key>x do j:=j-1;
if i<=j then
begin
w:=FArray[i];
FArray[i]:=FArray[j];
FArray[j]:=w;
i:=i+1;
j:=j-1;
end;
until i>j;
if L<j then sort(L,j);
if i<R then sort(i,R);
end; //sort
begin
sort(0,n-1);
QuickSortR:=FArray;
end;
function TDo.PoiskK;
var i:integer;l:dl;
begin
PoiskK:='net takogo klucha';
for i:=0 to n-1 do
if FArray[i].key=k then
begin
str(FArray[i].value,l);
PoiskK:=l;
end;
end;
function TDo.PoiskZ;
var i:integer;l:dl;
begin
PoiskZ:='net takoi zapisi';
for i:=0 to n-1 do
if FArray[i].value=za then PoiskZ:=FArray[i].key;
end;
Function TDo.podK;
var i:integer;
begin
PodK:='net takogo klucha!';
for i:= 0 to n-1 do
if FArray[i].key=ku then PodK:='est kluch!';
end;
Function TDo.podZ;
var i:integer;
begin
PodZ:='net takogo znachenia!';
for i:= 0 to n-1 do
if FArray[i].value=zn then PodZ:='est znachenie!';
end;
end.
program Project2;
{$APPTYPE CONSOLE}
uses
SysUtils,
Unit2 in 'Unit2.pas';
var a:TTable;n,i:integer;d:TDo;
procedure zadanie(n:integer);
Var b:TTable;s,kl,k,pz,pk,ku:Dl;z,za,zn,i:integer;
begin
writeln('esli vi hotite: - otsortirovat massiv, nazhmite 1');
writeln(' - sovershit poisk po kluchu, nazhmite 2');
writeln(' - sovershit poisk po znacheniu, nazhmite 3');
writeln(' - podtverdit nalichie klucha, nazhmite 4');
writeln(' - podtverdit nalichie znachenia, nazhmite 5');
writeln(' - viiti iz programmi, nazhmite 6');
readln(z);
if z=1 then
begin
setlength(b,n);
b:=d.QuickSortR(n);
for i:= 0 to n-1 do
begin
write(b[i].value,' ');
writeln(b[i].key);
end;
b:=nil;
zadanie(n);
end
else if z=2 then
begin
writeln('vvedite znachenie klucha:');
readln(k);
s:=d.PoiskK(n,k);
writeln('vvedennomu kluchu sootvetstvuet znachenie: ',s);zadanie(n);
end
else if z=3 then
begin
writeln('vvedite znachenie znachenia:');
readln(za);
kl:=d.PoiskZ(n,za);
writeln('znacheniu sootvetstvuet kluch: ',kl);zadanie(n);
end
else if z=4 then
begin
writeln('vvedite znachenie klucha:');
readln(ku);
pk:=d.masK[n,ku];
writeln(pk);
zadanie(n);
end
else if z=5 then
begin
writeln('vvedite znachenie znachenia:');
readln(zn);
pz:=d.masZ[n,zn];
writeln(pz);
zadanie(n);
end
else if z=6 then
begin
d.free;
a:=nil;
exit;
end
else
begin
writeln('net takoi opcii! povtorite popitku!');
zadanie(n);
end;
end;
begin
{ TODO -oUser -cConsole Main : Insert code here }
writeln('Vvedite kol-vo elementov par zapis-kluch:');
Write('n=');
readln(n);
setlength(a,n);
for i:= 0 to n-1 do
begin
write('vvedite kluch(stroka):');
readln(a[i].key);
write('vvedite znachenie(chislo):');
readln(a[i].value);
end;
d:=TDo.create;
d.Enter(a);
zadanie(n);
end.