Дерева бінарного пошуку

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Кафедра СКС

Інформація про роботу

Рік:
2012
Тип роботи:
Курсова робота
Предмет:
Програмування частина 4 Технологія системного програмування

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти і науки, молоді та спорту України Національний університет «Львівська політехніка» Інститут дистанційного навчання Кафедра СКС  КУРСОВА РОБОТА з дисципліни «Програмування» на тему «Дерева бінарного пошуку» Варіант № 7 Завдання на курсову роботу: Написати алгоритм і програму, яка міняє місцями n – ний і m – ний елементи списку. Написати програму для перевірки бінарного дерева в стандартній формі з цілими числами у вузлах. Змоделювати фабрику, що виробляє вироби з менших вузлів. Назвемо елементарною деталлю такий вузол, що не складається з дрібніших вузлів. Написати програму, що зчитує набір рядків, які містять чотирьох символьні номери деталей. Перший такий номер у рядку означає неелементарну деталь, а решта чисел означають деталі, з яких складається ця неелементарна деталь. Ці складові деталі можуть бути елементарними, а можуть складатися з інших частин (у такому випадку їх номери з’являться першим номером у якомусь іншому рядку). Програма складає список з елементом заголовку для кожної неелементарної деталі. Заголовок містить назву неелементарної деталі і вказівник на список елементів, що описує її складові частини вказівники на заголовки списків послідовно записуються в список. Для описаного представлення написати програму: а) роздруку всіх неелементарних деталей. б) виведення для кожної неелементарної деталі списку всії елементарних деталей з яких вона складається. ЗМІСТ ВСТУП………………………………………………………………………… 4  1. ТЕОРЕТИЧНА ЧАСТИНА………………………………………….. 5  1.1 Задача на списки………………………………………………………… 5  1.2 Задача на дерева бінарного пошуку…………………………………… 5  2. ОПИС АЛГОРИТМУ ЗАДАЧІ………………………………………. 8  2.1 Задача на списки………………………………………………………… 9  2.2 Задача на дерева бінарного пошуку…………………………………… 10  3. ТЕКСТ ПРОГРАМИ………………………………………………….. 12  4. РЕЗУЛЬТАТИ ТЕСТУВАННЯ……………………………………… 12  4.1 Задача на списки………………………………………………………… 12  4.2 Задача на дерева бінарного пошуку…………………………………… 13  3. ОРГАНІЗАЦІЯ ОДНОЗВ’ЯЗНИХ СПИСКІВ……………………... 14  3.1 Операція виділення елемента структури через вказівник……………. 14  3.2 Постановка завдання……………………………………………………. 15  3.3 Опис програми…………………………………………………………... 15  3.4 Текст програми………………………………………………………….. 17  ВИСНОВКИ…………………………………………………………………. 20  СПИСОК ВИКОРИСТАНОЇ ЛІТЕРАТУРИ…………………………….. 21  ДОДАТОК……………………………………………………………………. 22   ВСТУП Програма написана на будь-якій мові програмування, являється описаною послідовністю дій (операцій), котрі необхідно виконати з деякою сукупністю даних. Будова конкретної обчислювальної машини і особливості трансляторів визначають внутрішнє представлення даних - їх розмі-щення в пам”яті обчислювальної машини. Зрозуміло, що кожен рівень представлення даних важливий. В свою чергу, синтаксис окремої алгоритмічної мови може значно обмежувати можливості опису логічної структури даних, або ж робить ці описи складними і громіздкими. Неможливим або неефективним виконання синтаксично (і симантично) правильної програми можуть зробити характеристики комп”ютера (малий об”єм пам”яті, низька швидкодія). Тому структури даних та їх внутрішнє представлення, а також зв”язки між ними є одним з важливих питань в програмуванні. Для побудови алгоритмів надзвичайно важливі способи організації дій - допустимі структури, а також способи організації інформації - структури даних (масиви, записи, множини, черги, стеки, списки, таблиці). Звичайно, оперуючи великими кількостями інформації, бажано щоб вона була певним чином відсортована. Для цього використовують різноманітні методи впорядкування, тобто сортування інформації . Існує і інша проблема при роботі з великими об’ємами інформації - як зберегти і так організувати дані, щоб забезпечити найшвидшу їх вибірку та обробку. Цю проблему вирішують програми пошуку, котрі забезпечують швидкий і якісний пошук необхідної інформації. 1. ТЕОРЕТИЧНА ЧАСТИНА 1.1. Задача на списки Список являє собою динамічну структуру даних. Число елементів списку може сильно змінюватися в міру того, як елементи заносяться в список або вилучаються з нього. Динамічна природа списку може бути протиставлена статичній природі масиву, розмір якого залишається незмінним. В списку кожен елемент в середині містить адрес наступного елемента. Кожен елемент списку - вузол, містить два поля: поле інформації (info) і поле наступного адресу (ptrnxt). Поле інформації містить фактичний елемент списку. Поле наступного адресу містить адрес наступного елемента списку. Такий адрес, що використовується для доступу до наступного елементу, називається вказівником. Доступ до всього списку здійснюється через зовнішній вказівник lst, який вказує на перший елемент в списку(містить адрес цього елементу).(Під “зовнішнім” вказівником ми розуміємо той, який не містить в середині елемента. Його значення може бути одержане посиланням на деяку змінну.) Поле наступного адресу останнього елементу містить так зване пусте, або нульове значення – null. Це значення не є означеним адресом. Нульовий вказівник використовується для вказування кінця списку. Список що не містить елементів, називається пустим або нульовим списком. Значення зовнішнього вказівника lst для такого списку рівне значенню нульового вказівника. Відповідно, список може бути зроблений пустим за допомогою операції lst=null. 1.2. Задача на дерева бінарного пошуку Дерево бінарного пошуку — це бінарне дерево вузли якого взяті в симетричному порядку утворюють упорядковану (зростаючу) послідовність Дерево бінарного пошуку з коренем ( та піддеревами Вl і Вr має такі властивості : коли к’ Є Вl , то k’ < k , а коли k” Є Вr , то k” >= k . Якщо F – послідовність вузлів дерева бінарного пошуку В в симет-ричному порядку, то В вважається деревом бінарного пошуку для F. Таке дерево дозволяє швидко знаходити вузол із заданим значенням . Алгоритм пошуку ключа key в бінарному дереві представляється наступним чином ( ми припускаємо, що кожен вузол має чотири поля ( поле К, в якому зберігається значення ключа даного запису( поле R, в якому зберігається сам запис( поля Left i Right, які являються вказівниками на піддерева)( p:=tree; while p<>null do if key=k(p) then search:=p; return; endif; if key<k(p) then p:=left else p:=right; endif; endwhile; search:=null; return; Відмітимо, що бінарний пошук фактично використовує відсортований масив як деяке неявне дерево бінарного пошуку. Середній елемент цього масиву можна представити як корінь бінарного дерева. Нижню частину масиву ( всі елементи масиву, які більші за корінь дерева) можна розглядати як праве піддерево. Відсортований масив може бути одержаний із дерева бінарного пошуку при допомозі проходження цього дерева в симетричному порядку і вставки кожного елемента послідовно в деякий масив по мірі того, як він зустрічається в дереві. З другого боку, для деякого заданого відсортованого масиву мають багато відповідаючого йому деревам бінарного пошукую. Розглядаючи середній елемент масиву як корінь бінарного дерева і розглядаючи рекурсивно інші елементи як ліві і праві піддерева, ми дістанемо деяке відносно збалансоване дерево бінарного пошуку. Розглядаючи перший елемент масиву в ролі кореня бінарного дерева, а кожний наступний елемент як правило його попередника, ми дістанемо сильно розбалансоване дерево. Перевага від користування деякого дерева бінарного пошуку перед відсортованим масивом полягає в тому, що структура дерева позволяє виконувати ефективно операцію пошуку, вставки і видалення. Якщо використовується масив, то для операції вставки або видалення потребується переміщувати близько половину елементів усього масиву. Для вставки або видалення в дереві пошуку, з другого боку , необхідна настройка тільки декількох вказівників. Наведений дальше алгоритм організує пошук по деякому бінарному дереву і виконує вставку, нових записів в таке дерево, якщо пошук був невдалий. Ми припускаємо існування підпрограми maketree, яка сприймає деякі значення, будує бінарне дерево , яке складається з одного вузла, інформаційне поле якого має дане значення, і видає деякий вказівник на це бінарне дерево. В нашій даній версії ми припускаємо, що підпрограма maketree дістає два значення – запис і ключ. Q = null P =tree While p <> null do If key = k(p) They search = p Return Endif Q = p If key < k(p) Then p = left(p) Else p = right(p) Endif Endwhile V = maketree (rec,key) If q = null Then tree = v Else if key <k(p) Then left(p) = v Else right(p) = v Endif F1 = f2 F2 = f Endif Endif Endwhile If finish Then search = 0 Else search =mid endif 2. ОПИС АЛГОРИТМУ ЗАДАЧІ Для реалізації задач в програмі використовуються такі процедури та функції: Procedure draw – виводить меню на екран; Procedure redraw – відповідає за колір екрана головного меню; Procedure frame – малює рамку для головного меню; Procedure cursor – включає і виключає курсор на екрані, тобто при переході між кнопками змінює колір вибраної нами кнопочки на інший, що забезпечує зручність у користуванні програмою і наглядність головного меню; Procedure about – дає короткі відомості про програму; Procedure task1 – реалізує необхідні дії для роботи першої задачі; Procedure task2 – реалізує необхідні дії для роботи другої задачі; Procedure vyvod – виводить створене дерево або список на екран; Procedure delete tree – звільняє динамічну пам’ять яка використовувалася для зберігання деревом; Procedure obhod – під час обходу вираховує глибину дерева; Procedure symetria – проходить дерево в семетричному порядку і перевіряє чи числа у вузлах утворюють зростаючу послідовність; Function get tree – створює дерево на основі даних з файлу; Function get list – створює список на основі даних з файлу; Function is left – перевіряє наявність лівого сина вузла дерева; Function is right – перевіряє наявність правого сина вузла дерева. 2.1. Задача на списки Алгоритм цієї задачі дуже простий , він полягає в тому щоб поміняти n-ний і m-ний елементи списку місцями. Для наглядності ввід даних для програми відбувається в текстовому режимі. З допомогою меню вибираємо пункт “Задача на списки” для запуску першої програми. Після цього запускається процедура task1 і завдяки їй виконуються всі інші процедури і функції необхідні для нормальної роботи задачі. Тоді появляється запит “Створити файл з даними (1) чи відкрити існуючий(2)”. При виборі одинички ми створюємо новий файл , а при виборі двійки ми працюємо з існуючим. Функція get list створює список на основі даних з файлу. З клавіатури ми вводимо елементи m та n і після цього алгоритм програми міняє їх місцями , а процедура vyvod виводить список вже переформований у відповідному порядку на екран. Після натиску клавіші “enter” програма завершується і користувач повертається у головне меню. 2.2 Задача на дерева бінарного пошуку Після вибору в головному меню клавіші “Бінарні дерева” викликається процедура task2 , що реалізує необхідні дії для роботи другої задачі. Алгоритм цієї задачі побудований так , що ми тут можемо використовувати дані уже з існуючого файлу або створити новий. Наша задача полягає в тому , щоб перевірити чи дане дерево є деревом бінарного пошуку. Для цього ми використовуємо процедуру symetria яка проходить дерево в семетричному порядку , і перевіряє чи числа у вузлах при проходженні утворюють зростаючу послідовність. Якщо ця умова не виконується , то при виведенні дерева появляється повідомлення , що “Дане дерево не є деревом бінарного пошуку” , а якщо виконується то навпаки. Для наглядності програми вивід дерева відбувається в графічному режимі. Після натискання клавіші “enter ” програма завершується і користувач повертається у головне меню. Загальна блок-схема для задачі  Блок-схема для першої задачі (процедури task1)  3. ТЕКСТИ ПРОГРАМ В курсовій роботі використаний модуль СRT, в якому зосереджені всі процедури і функції, що забезпечують управління текстовим режимом роботи екрану. Усі процедури викликаються основною програмою після вибору користувача. У кожній з підпрограм знаходиться блок тестування який викликається користувачем. Для інтерфейсу головного меню використовується модуль Graph, який представляє собою могутню бібліотеку графічних підпрограм універсального призначення , розраховану на роботу з найбільш розповсюдженими адаптерами IBM – сучасних ПК. Підпрограми модуля Graph забезпечують різні режими роботи багаторежимних адаптерів, повністю використовують їх кольорові можливості. 4. РЕЗУЛЬТАТИ ТЕСТУВАНЬ Результати тестування необхідні для перевірки правильності виконання програми. Тому ми в ручну проводимо розрахунок і звіряємо відповіді при цьому розрахунку і результаті виконання програми. Із чого робимо висновок чи правильно ми зробили програму. 4.1.Задача на списки Для тестування задачі використаємо дані з файлу , і з ними будемо виконувати відповідні дії. Запишемо елементи файлу: 32 48 8 12 0 45 23 94 56 34 77 89 29 92 Введемо елементи списку які потрібно поміняти місцями: m = 5 n = 12 Після виконання деяких операцій одержимо переформований список. Він буде мати такий вигляд: 54 32 48 8 77 0 45 23 94 56 34 12 89 29 92 Розглянемо і інший випадок коли який-небудь із введених елементів непопадатиме в діапазон чисел заданого списку. Нехай m = 9 n = 20 Оскільки елемента з порядковим номером (20) немає то програма видає повідомлення “Помилка параметрів вводу” , для продовження тестування задачі нам потрібно вводити інші числа. При ручному обрахунку всі дані співпадають з результатами тестування на комп’ютері. 4.2. Задача на дерева бінарного пошуку Для тестування задачі використаємо один з допоміжних файлів , і побудуємо дерево використовуючи його дані. Тестування дерева будемо проводити по таких двох пунктах: 1) Провіримо чи при проходженні в семетричному порядку вузли дерева утворюють зростаючу послідовність. 2) Провіряємо чи листки дерева відрізняються один від одного на один рівень, а якщо на більше ніж один рівень, то дерево не є деревом бінарного пошуку. Дане дерево не є деревом бінарного пошуку , оскільки це підтверджує другий пункт нашої умови. Це дерево є деревом бінарного пошуку, оскільки для нього виконуються всі пункти. Проробивши ці обрахунки можемо зробити висновок чим відрізняється дерево бінарного пошуку від небінарного. При ручному обрахунку всі дані співпадають з результатами тестування на комп’ютері. 5. ОРГАНІЗАЦІЯ ОДНОЗВ’ЯЗНИХ СПИСКІВ 5.1. Операція виділення елемента структури через вказівник Операція для звертання до елементів структури через вказівник на структуру позначається стрілкою —>. Синтаксис операції Вказівник на структуру —> ім’я поля. Наприклад, struct data { int a1; int a2; float a3;} x, y[5]; Адресою 0-го елементу масиву структур y[5] є y, (y+2) – адреса 2-го елементу масиву структур y[5]. Звертання до 1 поля a1 2-го елементу масиву структур y[5] за допомогою операції “стрілка” має вигляд: (y+2) —> a1; Вказівникова форма звертання до елементів структури ефективна, коли для роботи з масивом структур використовують зовнішні вказівники, базовий тип яких збігається з типом структур – елементів масиву. 5.2. Постановка завдання Змоделювати фабрику, що виробляє вироби з менших вузлів. Назвемо елементарною деталлю такий вузол, що не складається з дрібніших вузлів. Написати програму, що зчитує набір рядків, які містять чотирьох символьні номери деталей. Перший такий номер у рядку означає неелементарну деталь, а решта чисел означають деталі, з яких складається ця неелементарна деталь. Ці складові деталі можуть бути елементарними, а можуть складатися з інших частин (у такому випадку їх номери з’являться першим номером у якомусь іншому рядку). Програма складає список з елементом заголовку для кожної неелементарної деталі. Заголовок містить назву неелементарної деталі і вказівник на список елементів, що описує її складові частини вказівники на заголовки списків послідовно записуються в список. Для описаного представлення написати програму: а) роздруку всіх неелементарних деталей. б) виведення для кожної неелементарної деталі списку усіх елементарних деталей з яких вона складається. 5.3 Опис програми Підключення бібліотечних файлів. #include <stdlib.h> #include <stdio.h> #include <string.h> char c[12]; Визначення структури елементів списку. struct data { char name[12]; struct data *next; }; Опис і визначення функції f() для пропусків при друці. void f(int k) {char d=' '; int i; for (i=1; i<=k; i++) printf("%c", d); return;} Опис і визначення функції free_memory_list для очистки пам’яті. void free_memory(LINK first) { LINK cur_ptr; LINK nex_rec; cur_ptr = first; /* Початкова адреса */ while (cur_ptr != NULL) /* Перевірка на закінчення списку */ { nex_rec = cur_ptr->next; /* Одержання адреси наступного запису */ free(cur_ptr); /* Звільнення поточного запису */ cur_ptr = nex_rec; /* Перехід на наступний запис*/ } } int main( void ) {int i; Виведення на екран введених елементів списку printf(" %lld\n", new); printf(" ---------\n"); printf(" %lld \n", new->name); printf(" %s \n", new->name); printf(" ---------\n"); printf(" %lld \n", new->next); Виведення на екран значень елементів списку current = head; printf("%lld", current->name); i=8; while (current != NULL) { printf("\n"); f(i) ; printf("%s",current->name); printf("\n"); f(i) ; printf("%lld", (current->next)); i=i+8; current = current->next; } printf("\n"); Звільнення виділеної пам’яті для елементів однозв’язного списку. current = head; free_memory(current); system("pause"); return 0; } Нижче наведено повний текст програми, введення елементів списку та результати роботи програми. 5.4. Текст програми #include <stdio.h> #include <string.h> #include <stdlib.h> char *KOD_NAME(char cc) { char a[]="NED-A"; char b[]="NED-B"; char c[]="NED-C"; char d[]="NED-D"; char e[]="NED-E"; char ed1[]="ED-1"; char ed2[]="ED-2"; char ed3[]="ED-3"; char ed4[]="ED-4"; char ed5[]="ED-5"; char ed6[]="ED-6"; char ed7[]="ED-7"; char ed8[]="ED-8"; char ed9[]="ED-9"; char rez[10]; switch (cc) { case 'A': strcpy (rez,a); break; case 'B': strcpy (rez,b); break; case 'C': strcpy (rez,c); break; case 'D': strcpy (rez,d); break; case 'E': strcpy (rez,e); break; case '1': strcpy (rez,ed1); break; case '2': strcpy (rez,ed2); break; case '3': strcpy (rez,ed3); break; case '4': strcpy (rez,ed4); break; case '5': strcpy (rez,ed5); break; case '6': strcpy (rez,ed6); break; case '7': strcpy (rez,ed7); break; case '8': strcpy (rez,ed8); break; case '9': strcpy (rez,ed9); break; } return rez; } struct list { char *s; char *n ; struct list *next;}; main () { struct list head, *ptr; int i=0, j; char n1[6]; char s1[6]; ptr=&head; ptr->next=NULL; do { printf (" %d) ",i+1); fgets (s1,6,stdin); if (!strcmp(s1,"0\n")) { break;} else { ptr->n=(char *)malloc(strlen(n1)); ptr->s=(char *)malloc(strlen(s1)); strcpy (ptr->n,KOD_NAME(s1[0])); strcpy (ptr->s,s1); ptr->next=(struct list *)malloc(sizeof(struct list)); ptr=ptr->next; ptr->next=NULL; } i++; } while (1); ptr=&head; i=1; while (ptr->next!=NULL) { printf ("%d) %10s%10s\n",i++,ptr->n, ptr->s); ptr=ptr->next; } printf (" \n\n"); ptr=&head; i=1; while (ptr->next!=NULL) { printf ("%d) %10s%10s ",i++,ptr->n, ptr->s); printf (" -> "); for (j=1; j<4; j++ ) if ( (ptr->s[j])>='1'&& (ptr->s[j])<='9' ) { printf ("%10s ",KOD_NAME(ptr->s[j])); } printf (" \n"); ptr=ptr->next; } system("PAUSE"); } ВИСНОВОК В даній курсовій роботі виконані такі задачі: - програма на списки, яка міняє місцями n-ний і m-ний елементи списку; - програма для перевірки бінарного дерева , чи є воно деревом бінарного пошуку. Ці дві задачі для зручності об’єднані в одну оболонку з відповідним меню вибору, яке забезпечує швидкий вхід та виконання кожної з задач. В результаті тестування отримано підтвердження очікуваних результатів як описано в четвертому розділі цієї курсової роботи . Дана курсова робота дає змогу систематизувати, закріпити і розширити теоретичні і практичні знання з програмування, навчитися застосовувати різноманітні структури даних та алгоритми при розв’язанні конкретних прикладних задач. Виконання курсової роботи потребувало знання основних принципів розробки програм і методів структурного програмування. СПИСОК ВИКОРИСТАНОЇ ЛІТЕРАТУРИ Фаронов В.В. Турбо Паскаль 7.0. Навчальний курс. Й.Ленгсам “Структури даíих для персональних ЕОМ”. В. Г. Абрамов, Н. П. Тріфонов, Г. Н. Тріфонова “Введення в мову Паскаль”. Кнут Д. Искусство программирования для ЭВМ. Сортировка и поиск.Т.3, -М., Мир, 1976. Вирт Н. Алгоритмы + структури данных = программы. М., Мир, 1985. Заварыкин В.М. и др. Основы информатики и вычислительной техники. Учебное пособие для студентов педагогических институтов физико-математических специальностей., -М, Просвещение, 1989. Лебедев В.Н. Введение в системы програмирования. -М., Статистика, 1975. Додаток uses crt,dos,tasks; const items:array[1..4] of string[26] = (' Задача на списки ', ' Бінарні дерева  ', ' Про програму ', ' Вихід '); var com,i,j,k:byte; ch:char; procedure draw; begin for j:=1 to 4 do begin gotoxy(29,6+j*2); if j=i then begin textcolor(10); textbackground(9);end else begin textcolor(7); textbackground(13);end; write(items[j]); end; end; procedure redraw; var i:integer; begin asm xor bh,bh mov bl,1 mov ah,0bh int 10h end; textbackground(1); clrscr; textcolor(15); for i:=1 to 2000 do write('°'); gotoxy(3,25); textcolor(15); write(' Використовуйте клавіші '+chr(24)+' '+chr(25)+' для вибору задачі'); draw; end; procedure cursor(flag:boolean); const sizecursor:word=0; var reg:registers; begin with reg do begin if flag then cx:=sizecursor else begin bh:=0; ah:=03; intr($10,reg); sizecursor:=cx; ch:=$20; end; ah:=$01; intr($10,reg); end; end; begin asm xor bh,bh mov bl,1 mov ah,0bh int 10h end; i:=1; cursor(false); redraw; repeat ch:=readkey; case ch of #72: begin if i=1 then i:=4 else dec(i); draw end; #80: begin if i=4 then i:=1 else inc(i); draw end; #13: begin case i of 4: break; 3: about; 2: begin cursor(true);task2;cursor(false);end; 1: begin cursor(true);task1;cursor(false);end; end; redraw; end; end until false; asm xor bh,bh mov bl,0 mov ah,0bh int 10h end; end. (((((((((((((((((((((((((((( (( unit tasks; interface uses crt,graph; type tree = ^node; node = record n:byte; number:byte; left,right,father:tree; end; procedure about; procedure task1; procedure task2; implementation procedure about; procedure frame(x1,y1,x2,y2,color:byte); var i,k:byte; begin textcolor(color); gotoxy(x2,y2);write('ј'); gotoxy(x1,y2);write('И'); gotoxy(x1,y1);write('Й'); gotoxy(x2,y1);write('»'); for i:=x1+1 to x2-1 do begin gotoxy(i,y1); write('Н'); gotoxy(i,y2); write('Н'); end; for i:=y1+1 to y2-1 do begin gotoxy(x1,i); for k:=x1 to x2 do write(' '); gotoxy(x1,i); write('є'); gotoxy(x2,i); write('є'); end; end; begin textbackground(7); frame(25,7,56,16,9); textcolor(15); gotoxy(34,8); writeln('Курсова робота '); gotoxy(27,9); textcolor(14); writeln('Алгоритми та структури даних'); gotoxy(27,11); textcolor(9); writeln(' Виконав ст. гр. КІ-24'); gotoxy(27,12); writeln(' Козачок Р.Б.'); textcolor(10); gotoxy(27,14); writeln(' НУ”Львівська політехніка”'); gotoxy(36,15); textcolor(15); writeln(' Львів - 2000'); readln; end; procedure task1; type list =^node; node = record n:byte; next:list end; const len:byte=0; var ch:char; s,s1:string; f:text; l:integer; k,m,n:byte; sp,p,q,p1:list; function get_list(s:string):list; var b:byte; p,q:list; f:text; begin assign(f,s); reset(f); read(f,b); new(p); p^.n:=b; p^.next:=nil; get_list:=p; while not eof(f) do begin read(f,b); new(q); p^.next:=q; q^.n:=b; q^.next:=nil; p:=q; inc(len) end; close(f); end; procedure vyvod; var q:list; begin q:=sp; while q<>nil do begin write(q^.n,' '); q:=q^.next; end; end; begin textbackground(1); textcolor(7); clrscr; write('Створити файл з даними(1) чи відкрити існуючий(2) ');readln(ch); case ch of '1': begin write('Введіть ім”я файлу '); textcolor(15); readln(s1); textcolor(7); writeln('Введіть дані нечислового формату для закінчення вводу'); assign(f,s1); rewrite(f); l:=0; textcolor(15); while l=0 do begin readln(s); val(s,k,l); if l=0 then writeln(f,s); end; close(f); sp:=get_list(s1); end; '2': begin write('Введіть ім”я файлу з даними: '); readln(s); sp:=get_list(s); end; end; textcolor(7); writeln('Список отриманий на основі даних файлу'); textcolor(15); vyvod; writeln; textcolor(7); writeln('Ввід параметрів задачі'); write('m=');readln(m); write('n=');readln(n); if (m in [1..len])and(n in [1..len]) then begin l:=1;p:=sp; while l<>m do begin inc(l); p:=p^.next; end; l:=1;q:=sp; while l<>n do begin inc(l); q:=q^.next
Антиботан аватар за замовчуванням

20.11.2013 19:11-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!