Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать


Может не в тему языка, но на С++ это выглядит так, если можешь перевести на Pascal или форумчане переведут... То вот...

читать дальше »
Код: Выделить весь код
//Бинарный поиск
#include <iostream>
using std::cout;
using std::cin;
using std::endl;

#include <iomanip>
using std::setw;

int binarySearch(const int[], int, int, int, int);
void printHeader(int);
void printRow(const int[], int, int, int, int);

int main()
{
   int const arraySize = 15; 
   int z, 
       a[arraySize],
       key,
       result;

   for(int i = 0; i < arraySize; i++)
      a[i] = 2 * i;

   cout<<"ENTER NUMBER IN DIAPAZON 0 AND 28: ";
   cin>>key;
   
   while(key != -1){
       printHeader(arraySize);
       result = binarySearch(a, key, 0, arraySize - 1, arraySize);
       if(result != -1)
          cout<<'\n'<<key<<" FOUND THE ELEMENT OF MASSIVA "<<result<<endl;
       else
          cout<<'\n'<<key<<" NO FOUND "<<endl;
      
      cout<<"ENTER NUMBER IN DIAPAZON 0 AND 28: ";
      cin>>key;
    }
   return 0;
}

// Функция бинарного поиска
int binarySearch(const int b[], int searchKey, int low, int high, int size)
{
   int midlle;
   
   while(low <= high){
       midlle = (low + high) / 2;
       printRow(b, low, midlle, high, size);
       if(searchKey == b[midlle])
           return midlle;
       else if(searchKey < b[midlle])
           high = midlle - 1;            // определение нижнего конца массива
       else
           low = midlle + 1;             // определение верхнего конца массива
     }
   return -1;
}

// Первоначальнный массив с рассположенными элементами
void printHeader(int size)
{
   int i;

   cout<<"\nINDEKS:\n";
   for(i = 0; i < size; i++)
      cout<<setw(3)<<i<<' ';
  
   cout<<'\n';
   
   for(i = 1;  i<= 4 * size; i++)
      cout<<'-';
   
   cout<<endl;
}

// Функции графического представления бинарного поиска 
void printRow(const int b[], int low, int mid, int high, int size)
{
   for(int i = 0; i < size; i++)
      if(i < low || i > high)
         cout<<"    ";
      else if(i == mid)                // отметить среднее значение
         cout<<setw(3)<<b[i]<<'*';
     else
         cout<<setw(3)<<b[i]<<' ';
        
   cout<<endl;
}

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif


Последний раз редактировалось Drongo, 29-05-2008 в 17:39.


Отправлено: 12:50, 29-05-2008 | #4