Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Помогите реализировать в программе функции


Автор: NTFF 20.2.2011, 00:08
Код


#include <iostream.h>    //подключение библиотеки ввода/вывода
#include <conio.h>        // подключение библиотеки для обработки экрана
#include <iomanip.h>    // подключение библиотеки манипуляторов для форматированного вывода

const size = 30;        //максимальное количество элементов в массиве

/*Функция ввода массива с клавиатуры.
Вх.данные:
    mas - массив (не задан);
    n - количество элементов в массиве (не задано)
Вых.данные:
    mas - массив задан;
    n - количество элементов в массиве (от 1 до size-1)
Способ передачи параметров:
    Массив передается с помощью указателя на нулевой элемент массива.
    n передается по ссылке.
*/
void vvod(char *mas, int &n)
{  //цикл ввода количества элементов массива
   do
   {
      cout<<"Enter quantity of elements of array ->";
      cin>>n;
   }while((n<=0)||(n>=size)) ;

   //ввод элементов массива с клавиатуры
   for (int i=0;i<n;i++)
   {
      cout<<"#"<<i<<" = ";            //вывод индекса элемента, который вводится с клавиатуры
      cin>>mas[i];                //ввод i-го элемента массива с клавиатуры
   }
}

/*Функция печати массива.
Вх.данные:
    mas - массив;
    n - количество элементов в массиве (от 1 до size-1)
Способ передачи параметров:
    Массив передается с помощью указателя на нулевой элемент массива.
    n передается по значению.
*/
void print(char *mas, int n)
{
   for(int i=0;i<n;i++)
    cout<<setprecision(2)<<setw(10)<<mas[i];    //два знака после запятой,
//для одного числа выделяется 10 позиций на экране
}

/*Функция поиска индекса минимального элемента массива.
Вх.данные:
    mas - массив;
    n - количество элементов в массиве (от 1 до size-1)
Вых.данные:
    Индекс минимального элемента массива */
int min(char *mas, int n)
{  int imin = 0;                    //пусть элемент с номером 0 будет минимальным
   for(int i=1;i<n;i++)                //цикл просмотра элементов массива от 1 до n-1
     if (mas[i]<mas[imin])  imin = i;        //поиск минимального из двух чисел
   return imin;                    //возврат индекса минимального элемента массива
}


int k[10],v,i,j,m;
for (i=0;i<10;i++)
scanf("%d",&k[i]);
scanf("%d",&v);
i=0;
j=10;
m=50;
while (k[m]!=v)
    { if (k[m] < v) i+=m; else j=m-i; m=(i+j)/2;}
    printf("%d %d",v,m);
    return 0;
  }



/*Функция поиска индекса максимального элемента массива.
Вх.данные:
    mas - массив;
    n - количество элементов в массиве (от 1 до size-1)
Вых.данные:
    Индекс максимального элемента массива*/
int max(char *mas, int n)
{  int imax = 0;                    //пусть элемент с номером 0 будет максимальным
   for(int i=1;i<n;i++)                //цикл просмотра элементов массива от 1 до n-1
     if (mas[i]>mas[imax])  imax = i;        //поиск максимального из двух чисел
   return imax;                    //возврат индекса максимального элемента массива
}



/*Функция для вывода меню на экран и выбора одного из пунктов меню.
Вых.данные: номер пункта меню от 1 до 4*/ int menu()
{  int number;    //номер выбранного пункта меню
   do            //цикл выполняется пока пользователь не выберет пункт от 1 до 4
   {
      clrscr();
      cout<<"          MENU\n";
      cout<<"1. Input array please,\n";
      cout<<"2. Print array\n";
      cout<<"3. Processing array\n";
      cout<<"4. Exit\n";
      cout<<"\nSelect menu item -> ";
      cin>>number;
   }while ((number<1) || (number>4));
   return number;                //возврат номера пункта меню
}

void main()        //главная функция программы
{
   char a[size];    //массив
   int m;        //количество элементов в массиве
   int punkt;        //номер пункта меню
   int isvvod=0;    //признак, что массив задан: isvvod=0 - массив не задан, isvvod=1 - массив задан

   //цикл выполняется пока пользователь не выберет пункт "Выход"
   do
   {  punkt = menu();    //выбор пункта меню
      switch (punkt)    //выполнение действий в зависимости от номер пункта меню
      {
     case 1:        //пункт 1 "Ввод массива"
     {
       clrscr();
       cout<<" --= Input array =--\n";
       vvod(a,m);        //вызов функции для задания размера и элементов массива
       isvvod=1;        //признак, что массив задан
     };break;
     case 2:        //пункт 2 "Печать массива"
     {
        if (isvvod)    //если массив задан, то его можно распечатать
        {
           clrscr();
           cout<<" --= Print array =--\n";
           print(a,m);    //вызов функции для печати массива
        }
        else        //массив не задан, необходимо сначала задать массив
          cout <<"It's necessary to set array at first. Select point 1.";
        getch();        //задержка экрана до нажатия клавиши
     };break;
     case 3:        //пункт 3 "Обработка массива"
     {
        if (isvvod)    //если массив задан, то его можно распечатать
        {
           clrscr();
           cout<<" --= Processing array... =--\n";
           int imin = min(a,m);    //вызов функции для определения номера мин.элемента
           int imax = max(a,m);    //вызов функции для определения номера макс.элемента
           cout<<setprecision(2)<<"Minimum element = "<<a[imin]<<"\n";
               cout<<setprecision(2)<<"Maximu  element = "<<a[imax]<<"\n";
           cout<<"Index of the minimum element = "<<imin<<"\n";
           cout<<"Index of the maximum element = "<<imax<<"\n";
           cout<<setprecision(2)<<"The total of minimum and maximum values= "<<a[imin]+a[imax];
           cout<<"\nArray\n";
           print(a,m);        //вызов функции для печати массива
        }
        else        //массив не задан, необходимо сначала задать массив
          cout <<"It's necessary to set array at first. Select point 1.";
        getch();        //задержка экрана до нажатия клавиши
     };break;
      };

   }while(punkt!=4); //цикл выполняется пока не выбран пункт 4 "Выход"
}



Автор: Metalex 21.2.2011, 12:07
Лучше обратился бы : http://forum.vingrad.ru/forum/s/1c3a4b8621c662106ab23d2a31d15321/forum-471.html. И что собственно не понятно: найти ошибки, помочь именно с поиском и сортировкой, а все остальное работает или как?
Я бы бинарный поиск реализовывал через рекурсию.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)