IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Таблица с записями
Pangolin
сообщение 14.06.2006 18:53
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 24
Пол: Мужской

Репутация: -  0  +


Дано описание константы 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
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 14.06.2006 19:31
Сообщение #2


Гость






Цитата(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 19:51
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 24
Пол: Мужской

Репутация: -  0  +


Держи решение! 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;

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

Сообщение отредактировано: Bill Gates - 14.06.2006 19:53
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Pangolin
сообщение 14.06.2006 20:29
Сообщение #4


Новичок
*

Группа: Пользователи
Сообщений: 24
Пол: Мужской

Репутация: -  0  +


Эх... Спасибо огромное... good.gif
Даже не ожидал, что так быстро помогут....
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 19.06.2025 4:39
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"