program tabliza; uses crt; const n=10; type ANk=record npp:1..n; FIO:string[13]; Adr:string[15]; Dr:string[8]; tel:string[7]; Ocen:array[1..5] of 2..5; SrB:real; end; var A12:array[1..n] of Ank; nom,i,j,k,h,y:integer;s:integer;min:string;g:ANk
После введения данных необходимо организовать диалог по сортировке(прямой метод сортировки) полей таблицы при помощи процедуры.Т.е. будем вводить название поля(или маркер,указывающий на конкретное поле) по которому нужно сортировать и это станет входящим параметром процедуры.После выводим результат сортировки.Подскажите,пожалуйста, как сделать такую процедуру.
volvo
10.12.2005 3:30
ISV, сначала посмотри здесь, как организуется сортировка по одному полю... Если, прочитав это, не догадаешься, как сделать нужную тебе процедуру, я подскажу...
volvo ,в предложенном примере нет главного,что нужно:не задавать критерий сортировки в самой программе,а вводить его в диалоге.До этого я и не могу дойти.Помоги,пожалуйста.
volvo
10.12.2005 16:16
Используем преимущества процедурных типов... Я тут набросал небольшой примерчик, я думаю, разобраться будет несложно...
Что-то в этом роде:
program SortRec;
uses Crt;
const
N = 4;
type
SortBy = (_byNpp, _byFio, _byAdr, _byDr, _byTel, _bySrB);
TInfo=record
npp: 1..n;
FIO: string[13];
Adr: string[15];
Dr: string[8];
tel: string[7];
Ocen: array[1..5] of2..5;
SrB:real;
end;
List = array [1..N] of TInfo;
TFunc = Function(T1, T2: TInfo): Integer;
{ *** comparison functions }function CompareNpp (T1,T2: TInfo): integer; far;
beginif T1.Npp > T2.Npp then CompareNpp := 1elseif T1.Npp = T2.Npp then CompareNpp := 0else CompareNpp := -1end;
function CompareFio (T1,T2: TInfo): integer; far;
beginif T1.Fio > T2.Fio then CompareFio := 1elseif T1.Fio = T2.Fio then CompareFio := 0else CompareFio := -1end;
function CompareAdr (T1,T2: TInfo): integer; far;
beginif T1.Adr > T2.Adr then CompareAdr := 1elseif T1.Adr = T2.Adr then CompareAdr := 0else CompareAdr := -1end;
function CompareDr (T1,T2: TInfo): integer; far;
beginif T1.Dr > T2.Dr then CompareDr := 1elseif T1.Dr = T2.Dr then CompareDr := 0else CompareDr := -1end;
function CompareTel (T1,T2: TInfo): integer; far;
beginif T1.Tel > T2.Tel then CompareTel := 1elseif T1.Tel = T2.Tel then CompareTel := 0else CompareTel := -1end;
function CompareSrB (T1,T2: TInfo): integer; far;
beginif T1.SrB > T2.SrB then CompareSrB := 1elseif T1.SrB = T2.SrB then CompareSrB := 0else CompareSrB := -1end;
Const
Compare: Array[_byNpp .. _bySrB] Of TFunc =
(
CompareNpp, CompareFio, CompareAdr,
CompareDr, CompareTel, CompareSrB
);
procedure QuickSort(marker: SortBy;
var A: List; Lo, Hi: Integer);
var
i,j: integer;
x, y: TInfo;
procedure Sort (l, r: Integer);
beginrepeat
x := A[(l+r) shr1];
i := l; j := r;
repeatwhile Compare[marker]( A[i], x ) < 0do inc(i);
while Compare[marker]( A[j], x ) > 0do dec(j);
if i <= j thenbegin
y := A[i]; A[i] := A[j]; A[j] := y;
inc(i); dec(j);
end;
until i > j;
if l < j then Sort (l, j);
l := i;
until l >= r;
end;
begin
Sort (Lo,Hi);
end; { QuickSort }const
Data: List =
(
(npp:1;
FIO:'petrov';
Adr:'moscow';
Dr:'january';
tel:'4587';
Ocen:(2, 2, 2, 2, 2);
SrB:2),
(npp:2;
FIO:'sidorov';
Adr:'kiev';
Dr:'october';
tel:'2487';
Ocen:(5, 5, 5, 5, 5);
SrB:5),
(npp:3;
FIO:'ivanov';
Adr:'piter';
Dr:'march';
tel:'5287';
Ocen:(3, 3, 3, 3, 3);
SrB:3),
(npp:4;
FIO:'kuku';
Adr:'earth';
Dr:'december';
tel:'3411';
Ocen:(4, 4, 4, 4, 4);
SrB:4)
);
Procedure PrintData;
Var i: integer;
BeginFor i := 1To n DoWith data[i] Do
Writeln(npp:2, ' ', fio:10, ' ', adr:6, ' ',
dr:8, ' ', tel:6, ' ', srb:5:2);
End;
var
ix: SortBy;
Choice: Char;
_sort: integer;
const
sb_string: array[SortBy] ofstring =
('by Npp', 'by Fio', 'by Adr', 'by Dr', 'by Tel', 'by SrB');
begin
WriteLn('before:');
PrintData;
Writeln('sort data by:');
For ix := Low(SortBy) To High(SortBy) Do
writeln(1 + Ord(ix):2, ' - ', sb_string[ix]);
Choice := ReadKey;
_sort := Ord(Choice) - Ord('1');
If (_sort >= 0) and (_sort <= Ord(High(SortBy)))
then
QuickSort ( SortBy(_sort), Data, 1, N)
Else Writeln('incorrect input');
WriteLn('after:');
PrintData;
end.
generic viagra available in us p
31.08.2021 20:39
comprar viagra zaragoza
sildenafil citrate generic viagr
8.11.2021 5:10
viagra eyaculacion ereccion
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.