Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Задача на бинарный поиск

10K
06 мая 2005 года
Ромка_1983
11 / / 06.05.2005
Здарова! Помогите начинающему программисту решить задачу бинарным поиском.


Результаты соревнования по прыжкам в длину представлены списком фамилий и массивом результатов 25 участников, упорядоченным в порядке занятых мест. Бинарным поиском определить фамилию спортсмена прыгнувшего 6 метров.
247
06 мая 2005 года
wanja
1.2K / / 03.02.2003
Цитата:
Originally posted by Ромка_1983
Здарова! Помогите начинающему программисту решить задачу бинарным поиском.


Результаты соревнования по прыжкам в длину представлены списком фамилий и массивом результатов 25 участников, упорядоченным в порядке занятых мест. Бинарным поиском определить фамилию спортсмена прыгнувшего 6 метров.


a:=1;b:=n;{Индексы начала и конца куска поиска}
repeat
m:=(a+b)div 2;
if x[m]>xx then
b:=m
else if x[m]<xx then
a:=m
else
begin
a:=m;
b:=m;
end
until (x[m]=XX)or(a>=b) do
Примерно так

10K
09 мая 2005 года
Ромка_1983
11 / / 06.05.2005
Не фига не получается:x
Написал программу, выдает ошибки

подскажите, что неправильно.
Var
C:array [1..25] of real;
a,b:real;
m,n:integer;
begin
writeln ('Введите размер массива');
readln (m);
a:=1;
b:=n;
repeat
m:=(a+b)div 2;
If C[m]>25 then
b:=m
else if C[m]<25 then
a:=m
else
begin
a:=m;
b:=m;
end
until (C[m]=25) or (a>=b) do
write ('C[m]=',C[m]);
readln(C[m]);
end.:)
247
09 мая 2005 года
wanja
1.2K / / 03.02.2003
Я же сказал, примерно...
А как ругается-то?
10K
09 мая 2005 года
Ромка_1983
11 / / 06.05.2005
Error 41: Operand types do not match operator.

Вот такую вот фигню выкидывает и ставит курсор после div 2.
10K
09 мая 2005 года
Ромка_1983
11 / / 06.05.2005
Ну а вобще-то с первого взгляда программа нормально написана?
247
09 мая 2005 года
wanja
1.2K / / 03.02.2003
Цитата:
Originally posted by Ромка_1983
Ну а вобще-то с первого взгляда программа нормально написана?


a и b должны быть целые, они же индексы!!!
Кстати, где у тебя задаются элементы массива?
и, еще раз кстати, у меня там описка: не x[m], а m

10K
10 мая 2005 года
Ромка_1983
11 / / 06.05.2005
Вот переписал, но теперь ошибка,перед do говорят пропущен знак ;
И еще вопрос: А что такое n ?

Var
C:array [1..25] of real;
a,b,m,n:integer;
begin
writeln ('Введите размер массива');
readln (m);
a:=1;
b:=n;
repeat
m:=(a+b)div 2;
If m>25 then
b:=m
else if m<25 then
a:=m
else
begin
a:=m;
b:=m;
end
until (m=25) or (a>=b) do
write ('C[m]=',C[m]);
readln(C[m]);
end.
10K
10 мая 2005 года
Ромка_1983
11 / / 06.05.2005
А как ввести элементы массива в моем случае? Я организовал дополнительный цикл
I:=1;
While (i<=m) do
Begin
Write (‘C(‘,i,’)=’);
Readln(C;
i:=i+1
End;
Кстати, ошибку после do все равно выкидыввает.
247
10 мая 2005 года
wanja
1.2K / / 03.02.2003
Цитата:
Originally posted by Ромка_1983
А как ввести элементы массива в моем случае? Я организовал дополнительный цикл
I:=1;
While (i<=m) do
Begin
Write (‘C(‘,i,’)=’);
Readln(C;
i:=i+1
End;
Кстати, ошибку после do все равно выкидыввает.


do после repeat надо убрать.
Кстати, чем тебя не устраивает цикл for при вводе?
n - число элементов(25 в твое случае)

10K
10 мая 2005 года
Ромка_1983
11 / / 06.05.2005
Цитата:
Originally posted by wanja
do после repeat надо убрать.
Кстати, чем тебя не устраивает цикл for при вводе?
n - число элементов(25 в твое случае)


Вот опять исправил, какая-то фигня
программа запускается, но после ввода последнего элемента ничего не происходит.
Как мне здесь написать что надо найти шестиметрового прыгуна?
И еще, если n - число элементов, то что тогда m?
Ввод элементов можно и через for сделать, только какая разница?
Var
C:array [1..25] of real;
a,b,m,n:integer;
begin
writeln ('Введите размер массива');
readln (m);
i:=1;
while (i<=m) do
begin
write(‘C(‘,I,’)=’);
readln(C);
i:=i+1;
end;
a:=1;
b:=n;
repeat
m:=(a+b)div 2;
If m>25 then
b:=m
else if m<25 then
a:=m
else
begin
a:=m;
b:=m;
end
until (m=25) or (a>=b);
write ('C[m]=',C[m]);
readln(C[m]);
end.

253
10 мая 2005 года
Proger_XP
1.5K / / 07.08.2004
Цитата:
Originally posted by Ромка_1983
C:array [1..25] of real;


Лучше всегда делать [0..24]
writeln ('Введите размер массива');
readln (m);

Зачем тебе размер? Он же не динамический
b:=n;
Где ты задаешь N? По умалчанию оно 0, но лучше задавай явно
Наверное, здесь у тебя и ошибка, т.к в первом шагу у тебя m = (1 + 0) div 2 = 0 и во втором if у тебя a = b = 0, и цикл заканчивается

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог