Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 31.05.2014, 11:31   #1 (permalink)
Эффект массы
Member
 
Регистрация: 31.05.2014
Сообщений: 16
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Не работает программа, как исправить? Паскаль

Нужно написать программу с бинарным поиском в упорядоченном по убыванию массиве, и высчитать временную сложность алгоритма. Но программа не работает, ошибка в процедуре poisc. Не знаю как исправить.
Код:
program pro1;
uses op,obrabotki;
var a:mas;
    n,key:integer;
begin
vvod(a,n);
writeln('Исходный массив');
vivod(a,n);
sort(a,n);
writeln('После сортировки');
vivod(a,n);
write(' Введите число:');
poisc(a,n);
end.
Код:
unit obrabotki;

interface
uses op;
procedure vvod(var a:mas; var n:integer);
procedure vivod (a:mas;n:integer);
procedure sort(var a:mas;n:integer) ;
procedure poisc(a:mas;n:integer);

implementation

procedure vvod(var a:mas;var n:integer);
var i:integer;
begin
writeln ('Введите количество элементов');
readln(n);
writeln('Введите элементы:');
for i:=1 to n do
Readln(a[i]);
end;

procedure vivod (a:mas;n:integer);
var i:integer;
begin
for i:=1 to n do write(a[i]:4);
writeln;
end;

procedure sort(var a:mas;n:integer) ;
var i, temp, n_min : integer;
begin
temp:=0;
for i :=1 to n do begin
for n_min :=1 to n do begin
if a[i] > a[n_min] then begin
temp:= a[i];
a[i]:= a[n_min];
a[n_min]:=temp;
end;

end;

end;
end;

procedure poisc(a:mas;n:integer);
var
   i,l,u,r,m,key:integer;
   begin
   l := 1;
    r := n + 1;
    u:=0;
    inc(u,2);
    readln(key);
    While l < r - 1 do
    begin
      m := (l + r) div 2;
      inc(u);
      if a[m] > key then
      begin
      r := m;
      inc(u,2);
      end
        else
        begin
        l := m;
        inc(u,2);
    end;
    begin
    if a[l] = key then WriteLn(l)
    
    else writeln('Данных элементов нет в массиве');
    end;
    writeln('Временная сложность: ',u);

end;
end;
end.
Код:
unit op;
interface
type mas=array [1..10000] of integer;
implementation
end.
Эффект массы вне форума   Ответить с цитированием

Старый 31.05.2014, 11:31
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Дабы не тратить время на поиск, я скину вам аналогичные темы

Паскаль, программа, помощь в корректировке
Программа с несколькими процедурами, Паскаль
Помогите исправить ошибку в программе. Паскаль
Программа в Турбо-Паскаль 7,0
Программа на Паскаль
Программа на Паскаль. Множества

Старый 31.05.2014, 11:32   #2 (permalink)
Эффект массы
Member
 
Регистрация: 31.05.2014
Сообщений: 16
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Он не находит число в массиве, всегда пишет, что такого элемента нет. Так же данную запись и временную сложность он показывает по несколько раз. Паскаль ABC
Эффект массы вне форума   Ответить с цитированием
Старый 31.05.2014, 18:42   #3 (permalink)
Vladimir_S
Специалист
 
Аватар для Vladimir_S
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 26,973
Сказал(а) спасибо: 322
Поблагодарили 542 раз(а) в 183 сообщениях
Репутация: 102185
По умолчанию

Цитата:
Сообщение от Эффект массы Посмотреть сообщение
Он не находит число в массиве, всегда пишет, что такого элемента нет.
Естественно. Потому что массив у Вас отсортирован по убыванию, а поиск построен для массива, отсортированного по возрастанию. Короче говоря, в строке
Цитата:
if a[m] > key then
поменяйте знак неравенства.
__________________
With Mozilla Firefox - straight to communism!
Vladimir_S вне форума   Ответить с цитированием
Старый 31.05.2014, 19:53   #4 (permalink)
Эффект массы
Member
 
Регистрация: 31.05.2014
Сообщений: 16
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Нужно, что бы массив был по убыванию. Как исправить процедуру поиска, что бы она был под убывающий массив?
Эффект массы вне форума   Ответить с цитированием
Старый 31.05.2014, 20:00   #5 (permalink)
Vladimir_S
Специалист
 
Аватар для Vladimir_S
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 26,973
Сказал(а) спасибо: 322
Поблагодарили 542 раз(а) в 183 сообщениях
Репутация: 102185
По умолчанию

Цитата:
Сообщение от Эффект массы Посмотреть сообщение
Как исправить процедуру поиска, что бы она был под убывающий массив?
Ничего не понимаю! Я же только что написал, как. Хорошо, повторю:
вместо строки

if a[m] > key then

записать

if a[m] < key then

чего ж тут неясно?
__________________
With Mozilla Firefox - straight to communism!
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 31.05.2014, 20:04   #6 (permalink)
Эффект массы
Member
 
Регистрация: 31.05.2014
Сообщений: 16
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Vladimir_S. Туплю, все заработало. Спасибо
Эффект массы вне форума   Ответить с цитированием
Старый 31.05.2014, 20:07   #7 (permalink)
Vladimir_S
Специалист
 
Аватар для Vladimir_S
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 26,973
Сказал(а) спасибо: 322
Поблагодарили 542 раз(а) в 183 сообщениях
Репутация: 102185
По умолчанию

Цитата:
Сообщение от Эффект массы Посмотреть сообщение
все заработало
Ну и славно.
__________________
With Mozilla Firefox - straight to communism!
Vladimir_S вне форума   Ответить с цитированием
Старый 31.05.2014, 20:08   #8 (permalink)
Эффект массы
Member
 
Регистрация: 31.05.2014
Сообщений: 16
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Хотя нет:nieiie.png
Эффект массы вне форума   Ответить с цитированием
Старый 31.05.2014, 20:12   #9 (permalink)
Vladimir_S
Специалист
 
Аватар для Vladimir_S
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 26,973
Сказал(а) спасибо: 322
Поблагодарили 542 раз(а) в 183 сообщениях
Репутация: 102185
По умолчанию

Цитата:
Сообщение от Эффект массы Посмотреть сообщение
Хотя нет:
Ох, до чего не охота в это дело влезать: и кому сейчас нужны эти бинарные поиски? Ладно, посмотрю. Только уж с временными сложностями сами разбирайтесь, ладно?
__________________
With Mozilla Firefox - straight to communism!
Vladimir_S вне форума   Ответить с цитированием
Старый 31.05.2014, 20:18   #10 (permalink)
Эффект массы
Member
 
Регистрация: 31.05.2014
Сообщений: 16
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Преподаватели требуют
Эффект массы вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 03:06.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.