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

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

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

> Cчётчики, Куда их?
Anastacia Adesso
сообщение 4.10.2006 15:29
Сообщение #1


Пионер
**

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

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


Ммм вот тут никак не въеду..
Надо какимто образом вставить в обе процедуры (метод Хоара и метод сливания) счётчик, чтоб узнать количество сравниваний.
Тока вот куда?
Плиииз unsure.gif Прикрепленный файл  HOARSALI.PAS ( 2.16 килобайт ) Кол-во скачиваний: 311


--------------------
Ben sensiz yaşayamam
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 3)
volvo
сообщение 4.10.2006 15:46
Сообщение #2


Гость






По-моему, я уже где-то показывал, как это можно сделать. Попробую найти ссылку, а пока - просто принцип:
Операцию сравнения заменить на функцию:

function IsGreater(a, b: LongInt): boolean;
begin
IsGreater := (a > b);
{
Ну, как ты понимаешь, ЗДЕСЬ производилось сравнение,
поэтому именно тут увеличивай счетчик
}
end;

smile.gif

Тогда, например, фрагмент:
while ar[j]>tempr do ...
Перепишется в виде:
while IsGreater(ar[j], tempr) do ...
, ну и не забывай обо ВСЕХ остальных сравнениях, тебе же надо считать все?

P.S.
unsure.gif unsure.gif Не понял... Я же вроде тебе же показывал, как это делается?

Счётчик, Куда его поставить?
 К началу страницы 
+ Ответить 
Anastacia Adesso
сообщение 4.10.2006 15:54
Сообщение #3


Пионер
**

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

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


Ага, спасибо! С Хоаром разобралась.
Но в другой процедуре всё ещё не найду куда


--------------------
Ben sensiz yaşayamam
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 5.10.2006 0:40
Сообщение #4


Гость






Цитата(Anastacia Adesso @ 4.10.2006 14:54)
Но в другой процедуре всё ещё не найду куда

Чем она кардинально отличается от Хоара? По-моему, ничем...

procedure merge(var ar:masiv; n:integer);

type
T = (cmLess, cmEqual, cmGreat);
function Compare(a, b: longint): T;
begin
if a < b then Compare := cmLess
else if a > b then Compare := cmGreat
else Compare := cmEqual;
inc(count);
end;

procedure Slit( k, q: longint);
var
m: longint;
i,j,t: integer;
d: masiv;
begin
m:=k+(q-k) div 2;
i:=k; j:=succ(m); t := 1;
while (i<=m) and (j<=q) do begin
if compare(ar[ i ], ar[ j ]) in [cmLess, cmEqual] then begin
d[t]:=ar[ i ]; Inc(i)
end
else begin
d[t]:=ar[ j ]; Inc(j)
end;
inc(t)
end;

while i<=m do begin
d[t]:=ar[ i ]; inc(i); inc(t)
end;
while j<=q do begin
d[t]:=ar[ j ]; inc(j); inc(t)
end;
for i:=1 to pred(t) do ar[pred(k+i)]:=d[i]
end;

procedure sort(i,j:integer);
var t: integer;
begin
if i>=j then exit;
if j-i=1 then begin
if compare(ar[ j ], ar[ i ]) = cmLess then begin
t:=ar[ i ]; ar[ i ]:=ar[ j ]; ar[ j ]:=t
end
end
else begin
sort(i,i+(j-i) div 2);
sort(i+(j-i) div 2+1,j);
slit(i, j)
end;
end;

begin
sort(1,n);
end;
...
 К началу страницы 
+ Ответить 

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

 



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