Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.05.2013, 22:21   #1
Андрос
Пользователь
 
Регистрация: 19.04.2009
Сообщений: 45
Печаль Турбо паскаль Бинарный поиск

всем доброго времени суток, попалась мне задача по лабе паскаля "Бинарный поиск". и все на этом...теорию почитал, возникла трудность в склеивании 2х кодов, в первом идет сортировка, во втором бинарный поиск. но он работает с отсортированными данными, но потом надо подключить в код сортировку (второй листинг). Задача должна сортировать массив по убыванию и ищет в нем элемент равный Х, Х вводится с клавиатуры. Помогите пожалуйста склеить листинги...и еще один вопрос - какие могут быть загвоздки с этим видом поиска? он ищет только в одномерном массиве? И еще? может кто немного подкорректировать ввод элементов массива, чтоб спрашивала - заполняем в ручную - да,нет? если нет - то вводим размерность массива, и элемент который надо найти, потом срабатывает наша сортировка, а потио наш бин. поиск, помогите немного подшаманить эти шайтан-листинги. С уважением, Андрей...

сортировка:
Код:
Program _;
uses crt;
const n=10;
type am=array[0..n] of integer;
var a:am; x,m:integer; i,j,f:byte;
begin
clrscr;
randomize;
          for i:=1 to n do a[i]:=random(10); //сортирует
          for i:=2 to n do                          //сортирует
          for j:=n downto i do                    //сортирует
              if a[j-1]<a[j] then begin
                 x:=a[j-1];
                 a[j-1]:=a[j];
                 a[j]:=x;
                 end;                                 //сортирует
          write (' введи элемент для поиска=');  readln (m);
          write ('отсортированный начальный массив= ');
          for i:=1 to n do write (a[i],'  ');
          writeln;
          for i:=1 to 10 do begin
          if a[i]=m then begin writeln ('найден!=',m,' его место=',i); break; end;
           end;
end.
и вот вроде как нормальный бинарный поиск...
Код:
Program _;
const count =10;
var M: array[1..count] of byte; N, i, First, Last: Byte; a: integer; Found: boolean ;
begin
  randomize;
  for i:=1 to count do M[i]:=random(10);
  Writeln('Введи элемент для поиска ='); Readln(N);
  a := 0;
  First := 1;
  Last := count;
  Found := False; {Элемент не найден}
  
  repeat {Повторять поиск}
  i := (First + Last) div 2; {Разделить на две части}
  if M[i] = N then Found:=True
    else
      begin
        if M[i] > N then First := i+1 {Искать элемент в правой части}
        else Last := i-1; {Искать элемент в левой части}
      end;
  a := a+1; {Увеличить счетчик числа итераций}
  until (Found) or (First>Last); {Завершить, если найдется искомый элемент или будет просмотрен весь массив}
  
  if Found then Writeln('Искомый элемент ',N,' в массиве занимает ',I,'-ю позицию')
  else
  Writeln('В массиве нет искомого элемента ',N);
  Writeln('Поиск выполнен За ',a,' итераций');
  Writeln('Завершить>');
  Readln;
end.
Андрос вне форума Ответить с цитированием
Старый 16.05.2013, 23:14   #2
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Ну хорошо..

Т.к. время - вечер.. Хочется спать.. и уроки не деланы, то пишу прямо тут.. не проверяя..

Поехали :
Код:
uses crt;

const SIZE=10;

type am=array[1..SIZE] of integer; // в тушке программы у Вас нет обращения к 0-му элементу массива, поэтому я поставил 1
var a:am; x,m:integer; i,j,f:byte; ch : Char;
begin
clrscr;
randomize;
Write ('Do you prefer to input digits automatically? Y/N')
ReadLn (ch);
if UpCase (ch) = 'Y' then begin
          n := SIZE;
          for i:=1 to n do a[i]:=random(10) // Заполняем 
end
else begin
       ReadLn (n);
       for i := 1 to n do
              Read (a[i]);
end;

Write ('What elem do you want to look for in this array ? ');
ReadLn (m); // не ахти имя..

          for i:=2 to n do                          //сортирует
          for j:=n downto i do                    //сортирует
              if a[j-1]<a[j] then begin
                 x:=a[j-1];
                 a[j-1]:=a[j];
                 a[j]:=x;
                 end;                                 //сортирует

          write ('отсортированный начальный массив= ');
          for i:=1 to n do write (a[i],'  ');
          writeln;

 count := 0;
  First := 1;
  Last := n;
  Found := False; {Элемент не найден}
  
  repeat {Повторять поиск}
  i := (First + Last) div 2; {Разделить на две части}
  if a[i] = m then Found:=True
    else
      begin
        if a[i] > m then First := i+1 {Искать элемент в правой части}
        else Last := i-1; {Искать элемент в левой части}
      end;
  count := count+1; {Увеличить счетчик числа итераций}
  until (Found) or (First>Last); {Завершить, если найдется искомый элемент или будет просмотрен весь массив}
  
  if Found then Writeln('Искомый элемент ', m,' в массиве занимает ',I,'-ю позицию')
  else
  Writeln('В массиве нет искомого элемента ',m);
  Writeln('Поиск выполнен За ',count,' итераций');
  Writeln('Завершить>');
  Readln
          
end.
Дихотомия и пузырек - на Вашей совести
Цитата:
он ищет только в одномерном массиве?
Нет.

Кстати, старичек турбушка не позволяет использовать такие ('//') комментарии.. Но в названии темы Вы указали именного его.. Что это? Распространение заведомо ложной информации?
Poma][a вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
(Турбо паскаль) Бинарный поиск gjkg Паскаль, Turbo Pascal, PascalABC.NET 8 22.04.2013 08:05
Паскаль.Бинарный поиск. Всё работает. Объяснить. Антон Лысенко Помощь студентам 1 25.02.2011 18:20
Бинарный поиск CraZZZy-GameRRR Общие вопросы Delphi 8 25.05.2010 14:57
Бинарный поиск (Паскаль) Zhanna5006 Помощь студентам 3 07.01.2010 09:52
бинарный поиск(паскаль) MetR Помощь студентам 6 14.12.2009 15:46