Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Таблица с записями

Автор: Pangolin 14.06.2006 22:53

Дано описание константы n и типа таблицы со строки типа MyRecord
Const n=30;
Type MyRecord = Record
Key: Integer;
Name: String;
End;
Table = Array[1..n] Of MyRecord
Считая, что в таблице записи имеют различные ключи, описать логическую функцию Found(T, K, H), определяющую, есть ли в таблице T (все записи которой уже упорядочены по возрастанию поля Кеу) запись со значением поля Key, равным K, и, если есть, присваивающую ее номер параметру H.

Помогите.. Никак не пойму чего хотят... wacko.gif

Автор: volvo 14.06.2006 23:31

Цитата(Pangolin @ 14.06.2006 18:53)
Никак не пойму чего хотят...

Вот этого, наверное:
function Found(var t: table; k: integer; var H: integer): boolean;
var i: integer;
begin
H := 0;
Found := True;

for i := 1 to n do
if T[i].Key = K then begin
H := i; exit;
end;

Found := False;
end;

Хотя, если записи упорядочены по возрастанию K, можно применить и другой алгоритм поиска, например бинарный... (Посмотри в поиске, klem4 как-то выкладывал реализацию...)

Автор: Bill Gates 14.06.2006 23:51

Держи решение! cool.gif

Код
function found(t:table;k:integer;var h:integer):boolean;
var  Lb,Ub:integer;
begin
     found:=false;

     (***Будем использовать метод бинарного поиска для большей
         эффективности***)
     Lb:=1;
     Ub:=n;
     repeat
           H := (Lb+Ub)div 2;
           if k < t[H].key then
            Ub := H-1
           else
           if k > t[H].key then
            Lb := H+1
           else
           begin
            found:=true;
            break;
           end;
     until Lb > Ub;
end;

зы. Опоздал чуть-чуть... Зато метод поиска - бинарный!

Автор: Pangolin 15.06.2006 0:29

Эх... Спасибо огромное... good.gif
Даже не ожидал, что так быстро помогут....