
- •1 Основні поняття
- •2 Засоби мови с
- •3 Структура програми, директиви препроцесору
- •4 Елементарні алгоритми
- •5 Бітові операції
- •6 Вкладені алгоритми
- •7 Складні типи даних
- •9 Процедури
- •Int main(void)
- •Void systema(float *yy)
- •Int main(void)
- •Void rekurs(float a, float s, int I)
- •Int main(void)
- •Void reku_for(float z, int I)
- •Int main(void)
- •10 Файли
- •11 Динамічні конструкції даних
- •Int main(void)
- •Int main(void)
- •Int main(void)
- •12 Сортування
- •Void s(int *a, int n)
- •Int main(void)
- •Void s(int *a, int n)
- •Void s(int *a, int n)
- •Void s(int *a, int n)
- •Void s(int *a, int left, int right)
- •Void s(struct pidpr *a, int n)
- •Int main(void)
- •13 Пошук
- •Int p(struct pidpr *a, char *slo, int n)
- •Int p(struct pidpr *a, char *slo, int n)
- •Void s(struct pidpr *a, int n)
- •Int p(char *slo, int n)
- •Int main(void)
- •14 Класи
- •Int main()
- •Void based :: fun()
- •Void poxid :: fun()
- •Int main()
Int p(char *slo, int n)
{
int i, k= 0;
while(1)
{
i =ceil((n+k)/2.);
if(i==k || i== n)break; if( !strcmp(dv[k].nazva, slo))return dv[k].index;
if(strcmp(dv[i].nazva, slo)>=0)n = i; else k = i;
}
return dv[i].index;
}
/* Головна програма */
Int main(void)
{int i, count = 6, w;
char slovo[25]="Київтрансгаз";
struct pidpr m[6] = {{1, "Харківтрансгаз ", 34.60},
{2, "Прикарпаттрансгаз ", 22.15},
{3, " Київтрансгаз ", 75.00},
{4, "Львівтрансгаз ", 42.12},
{5, "Експорттрансгаз ", 1.85},
{6, "Гадячгазпром ", 12.48}};
s(m, count);
puts("\n Результати виконання програми\nДопоміжний масив структур:");
for(i = 0; i<count; i++)printf("%s %d\n", dv[i].nazva, dv[i].index);
w=p(slovo, count);
puts("\n Знайдені відомості про підприємство:");
printf("kod=%d naz=%s stf=%5.2f\n", m[w].kod,m[w].naz,m[w].stf);
getch();
return 0;
}
Результати виконання програми
Допоміжний масив структур:
5 Гадячгазпром
4 Експорттрансгаз
2 Київтрансгаз
3 Львівтрансгаз
1 Прикарпаттрансгаз
0 Харківтрансгаз
Знайдені відомості про підприємство:
kod=3 naz=Київтрансгаз stf=75.00
Пошук за допомогою допоміжного масиву структур виконаємо методом половинного ділення. Нехай поставимо ту ж задачу, що і в прикладі 13.1 – знайти відомості про підприємство Київтрасгаз. Пошук виконує функція p(), яка подібна до прикладу 13.2, але відрізняється від нього тим, що видає не значення простої змінної, а елемента масиву dv[i].index.
Попри привабливість, застосування допоміжних масивів структур, а заодно й методу дихотомії, має той суттєвий недолік, що вимагає посортованих даних. Іншим недоліком допоміжного масиву є те, що його необхідно обновляти синронно з еталонним масивом. В умовах виробництва, як правило, відбувається регулярне редагування масивів даних та зв’язанх списків. Через це йому в такт потрібно виконувати й сортування і може так статися, що економія машинних ресурсів, досягнена за рахунок більш ефективних методів пошуку, буде знівельована високою частотою операцій сортування.
Втрати можуть суттєво зрости, якщо еталонний масив структур має декілька допоміжних масивів (максимально – за кількістю елементів заданої структури, вказаних у оголошенні) і відповідних їм умов пошуку. Тому їх застосування може бути доцільним лише у випадку нечастих змін заданого масиву.
Запитання для самоперевірки
Перелічіть та коротко охарактеризуйте методи пошуку.
Скільки операцій порівняння потрібно затратити для пошуку найменшого числа в масиві, посортованому за зростанням?
Як можна знайти значення близьке до пошукуваного із застосуванням послідовного пошуку? методу дихотомії?
Вкажіть переваги та недоліки методу дихотомії.
Як виконується пошук у зв’язаному списку? Чи можна тут застосувати метод дихотомії?
Чим відрізняється сортування допоміжного масиву структур від масивів інших структур?
Використовуючи функцію clock(), відому з розділу 7, знайдіть ту межу, коли застосування допоміжного масиву структур для пошуку стане невигідним.