ПОСЛІДОВНИЙ МЕТОД ДОСТУПУ ДО ФАЙЛІВ НА ЗОВНІШНІХ ЗАПАМ’ЯТОВУЮЧИХ ПРИСТРОЯХ.

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

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

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

Рік:
2007
Тип роботи:
Лабораторна робота
Предмет:
Організація баз даних і знань
Група:
КН-4

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

Міністерство освіти і науки України Національний університет «Львівська політехніка» Кафедра С А П Р З в і т про виконання лабораторної роботи №1 на тему: «ПОСЛІДОВНИЙ МЕТОД ДОСТУПУ ДО ФАЙЛІВ НА ЗОВНІШНІХ ЗАПАМ’ЯТОВУЮЧИХ ПРИСТРОЯХ» З курсу: «Організація баз даних і знань» Виконав: ст. гр. КН-4 Львів 2007р. 1. МЕТА РОБОТИ Розглянути органiзацiю i ведення файлiв послiдовного доступу; набути практичнi навички у програмуваннi алгоритмiв роботи з файлами послiдовного доступу. 2. ТЕОРЕТИЧНI ВIДОМОСТI Будь-який обмiн даними передбачає присутнiсть джерела iнформацiї, каналу передачi та її приймача. У випадку обмiну даними мiж програмою i периферiйним пристроєм одним кiнцем каналу обмiну даними завжди є оперативна пам’ять ПЕОМ. Другий кiнець цього каналу у бiльшостi мов програмування визначений як файл. Поняття файла достатньо широке. Це може бути комунiкацiйний порт, пристрiй друку. У данiй роботi розглядається файл даних. Одним iз головних чинникiв, що впливає на продуктивнiсть програм, якi взаємодiють iз базою даних, є спосiб зберiгання i доступу до файлiв даних: послiдовний, iндексно-послiдовний, індексно-довiльний, прямий, хешування. Усi методи розглядаються за двома критерiями: 1. Ефективнiсть доступу - величина, обернена середнiй кiлькостi фiзичних звертань, необхiдних для логiчного доступу, тобто запиту конкретного запису бази даних. Фiзичнi звертання забезпечують задоволення запиту. Наприклад, якщо для пошуку потрiбного запису система звертається до двох записiв, то ефективнiсть доступу дорiвнює 0,5. 2. Ефективнiсть зберiгання - величина, обернена середнiй кiлькостi байтiв поля вторинної пам’ятi, яка необхiдна для зберiгання одного байта вхiдних даних. Крiм вхiдних даних, пам’ять займають таблицi, керуюча iнформацiя, вiльна пам’ять, яка резервується для розширень, i дiлянка, яка не використовується через фрагментацiю 2.1. ДОСТУП ДО ЗАПИСІВ Записи у простому послiдовному файлi доступнi лише послiдовно один за одним. Наприклад, можна звернутися до n-го запису тiльки пiсля звертання до 1,2,...,n-1 записiв. Для того, щоб видалити запис з файла, необхiдно створити копiю файла, у якiй цей запис є вiдсутнiм; для того, щоб помiстити запис у файл, також необхiдно створити копiю файла, у яку цей новий запис входить. Щоб змiнити хоча б одне з полiв у записi, необхiдно створити копiю файла, який мiститиме модифiкований запис. При послiдовному методi доступу значення ключiв фiзичних записiв знаходяться у логiчнiй послiдовностi. 2.1.1. Ефективнiсть доступу. Нехай вибрано один фiзичний запис, i належить вибрати iнший з бiльшим значенням ключа. У найгiршому випадку для вибору потрiбного запису необхiдно переглянути всi записи бази даних, а у кращому достатньо вибрати наступний запис. Для того, щоб виявити необхiдний запис у послiдовному файлi, який складається з N записiв, необхiдно переглянути у середньому N/2 записiв. Це пояснюється так. Нехай здiйснюється достатньо багато випробовувань, пов’язаних iз пошуком у послiдовному файлi випадково вибраних значень ключа. Причому кожний пошук починається з першого запису файла. Тодi для виявлення шуканого запису потрiбно переглянути у середньому половину загальної кiлькостi записiв. 2.1.2. Ефективнiсть зберiгання. Ефективнiсть використання пам'ятi близька до 100%. Зберiгання фiзичних записiв у логiчнiй послiдовностi можна використовувати для прискорення доступу, якщо перед звертанням до власне записiв бази даних перевiряти значення ключiв. 2.1.3 Алгоритм вставляння запису <зчитати номер запису, який потрiбно вставити><m> <зчитати данi><str> <вiдкрити два файли, файл А - для читання, файл B - для зберiгання модифiкованої iнформацiї> i:=1 доки не кiнець файла А якщо m<>i тодi <зчитати з А, записати в B> i:=i+1 iнакше <записати у В str> якщо m>=i тодi <записати в В str> <закрити файли А, В> <змiнити iм'я з В на А> 2.1.4. Алгоритм модифiкацiї записiв <зчитати номер запису, який потрiбно модифiкувати><m> <зчитати данi><str> <вiдкрити два файли, файл А - для читання, файл B - для зберiгання модифiкованої iнформацiї> i:=1 доки не кiнець файла А якщо i=m тодi <зчитати з А><sm> <записати в B><str> i:=i+1 iнакше <зчитати з А><sm> <записати у В>< sm> <закрити файли А, В> <змiнити iм'я з В на А> 2.1.5. Алгоритм видалення запису <зчитати номер запису, який потрiбно видалити><m> <вiдкрити два файли, файл А - для читання, файл B - для зберiгання модифiкованої iнформацiї> i:=1 доки не кiнець файла А якщо i=m тодi <зчитати з А><sm> <записати в B><sm> 2.2. ГРУПОВЕ ОБРОБЛЕННЯ ПОСЛІДОВНИХ ФАЙЛІВ Якщо необхiдно органiзувати доступ до М записiв послiдовного файла, який складається з N записiв, то звичайно прагнуть не застосовувати методу лiнiйного пошуку. Адже тодi знадобиться застосовувати цей метод М разiв, починаючи кожного разу перегляд файла з першого запису. Всього потрiбно проаналiзувати MN/2 записiв; очевидно, що при великому N на це буде витрачено значний час. Існує ефективнiший метод перегляду файла: лише один раз. Для того, щоб використати цей метод, необхiдно всi значення шуканих первинних ключiв вставити у новий файл. Цей файл звичайно називають файлом повiдомлень, а файл, у якому здiйснюється пошук, головним файлом. Головний файл i файл повiдомлень повиннi бути впорядкованi за одним ключем. Спершу з файла повiдомлень зчитується перше значення первинного ключа i за методом лiнiйного пошуку у головному файлi шукається запис, що йому вiдповiдає. Потiм зчитується друге значення первинного ключа, i пошук у головному файлi продовжується, починаючи з того запису, на якому вiн припинився. Цей процес послiдовно повторюється для всiх значень первинного ключа з файла повiдомлень. 3. КОНТРОЛЬНI ЗАПИТАННЯ Що таке ефективнiсть доступу до файла на зовнiшньому носiї? Як органiзовується доступ до файлiв послiдовного доступу? Яка ефективнiсть зберiгання iнформацiї у файлах з послiдовним доступом? Скільки записів необхідно переглянути, щоб виявити шуканий запис у файлі послідовного доступу. Як всталяється новий елемент у файл з послiдовним доступом? ІНДИВІДУАЛЬНЕ ЗАВДАННЯ 1.Написати програму, яка реалiзує такi функцiї: 1.1. Друк бази даних. 1.2. Пошук запису за введеним ключем. 1.3. Видалення запису за введеним ключем. 1.4. Вставлення запису. 1.5. Модифiкацiя запису. 2.Написати програму групового оброблення файла даних, яка реалiзує наступнi функцiї: 2.1. Створення файла повiдомлень. 2.2. Друк бази даних. 2.3. Пошук запису за введеним ключем. 2.4. Видалення запису за введеним ключем. 2.5. Вставлення запису. 2.6. Модифiкацiя запису. Індивідуальне завдання: Пакетна вставка. Текст програми. Program lab1BD; Uses Crt; Label 1,2; Var nfa,nfb:string; fa,fb:Text; ch:char; s1,s2,sbuf:string; n:integer; Procedure prc1; Begin clrscr; reset(fa); While not Eof(fa) do begin readln(fa,s1); writeln(s1) end; readkey End; Procedure prc2; Label p2l1; Var p2i:integer; Begin write('Enter the number of element to find: '); readln(n); reset(fa); p2i:=0; while not Eof(fa) do begin readln(fa,s1); p2i:=p2i+1; if p2i=n then begin write('Your element is: '); writeln(s1); goto p2l1 end end; writeln('Element #',n,' does not exist!'); p2l1:readkey End; Procedure prc3 (Var s3:string); Begin s1:=s3; reset(fa); rewrite(fb); while not eof(fa) do begin readln(fa,s2); if s2<>s1 then writeln(fb,s2) end; close(fa); close(fb); reset(fb); rewrite(fa); while not Eof(fb) do begin readln(fb,s1); writeln(fa,s1) end; close(fa); close(fb); reset(fa); rewrite(fb) End; Procedure prc4 (Var s4:string); Var ozn:byte; sdod:string; Begin s1:=s4; reset(fa); rewrite(fb); readln(fa,s2); sdod:=s2; if s1<sdod then begin ozn:=1; writeln(fb,s1) end; while not eof(fa) do begin readln(fa,s2); if (s1>=sdod) and (s1<s2) then begin ozn:=1; writeln(fb,sdod); writeln(fb,s1) end else writeln(fb,sdod); sdod:=s2 end; writeln(fb,sdod); if ozn=0 then writeln(fb,s1); close(fa); close(fb); reset(fb); rewrite(fa); while not eof(fb) do begin readln(fb,s1); writeln(fa,s1) end; close(fa); close(fb); reset(fa); rewrite(fb) End; Procedure prc5; Var s5,choise5:string; Begin write('Enter the element to modify: '); readln(s1); write('Enter new value: '); readln(s2); reset(fa); rewrite(fb); while not eof(fa) do begin readln(fa,s5); if s5=s1 then writeln(fb,s2) else writeln(fb,s5) end; close(fa); close(fb); reset(fb); rewrite(fa); while not eof(fb) do begin readln(fb,s1); writeln(fa,s1) end; close(fa); close(fb); reset(fa); rewrite(fb); write('Do you want to resort the list of DB (y/n)? '); readln(choise5); if choise5='y' then begin sbuf:=s2; prc3(sbuf); prc4(sbuf) end End; Procedure prc6; Var p6a:array[1..10] of string; p6f:Text; p6i,p6j,p6n:byte; p6s:string; Begin p6n:=1; writeln('"stop" -- end of entering!'); repeat write('Enter new element #',p6n,': '); readln(p6s); p6a[p6n]:=p6s; p6n:=p6n+1 until p6s='stop'; p6n:=p6n-2; for p6i:=1 to p6n do for p6j:=1 to p6n-1 do if p6a[p6j]>p6a[p6j+1] then begin sbuf:=p6a[p6j]; p6a[p6j]:=p6a[p6j+1]; p6a[p6j+1]:=sbuf end; { writeln('ARRAY:'); for p6i:=1 to p6n do writeln(p6a[p6i]);} assign(p6f,'C:\vantemp.txt'); rewrite(p6f); for p6i:=1 to p6n do writeln(p6f,p6a[p6i]); close(p6f); reset(p6f); reset(fa); rewrite(fb); while not eof(p6f) do begin readln(p6f,s1); readln(fa,s2); while s2<=s1 do begin writeln(fb,s2); readln(fa,s2) end; writeln(fb,s1); writeln(fb,s2) end; while not eof(fa) do begin readln(fa,s1); writeln(fb,s1) end; close(p6f); close(fa); close(fb); reset(fb); rewrite(fa); while not eof(fb) do begin readln(fb,s1); writeln(fa,s1) end; close(fa); close(fb); reset(fa); rewrite(fb) End; Begin clrscr; write('Enter name of file A: '); readln(nfa); assign(fa,nfa); reset(fa); write('Enter name of file B: '); readln(nfb); assign(fb,nfb); rewrite(fb); 1: writeln('This is what you can do:'); writeln(' 1-Show the DB;'); writeln(' 2-Find the element;'); writeln(' 3-Delete the element;'); writeln(' 4-Add the element;'); writeln(' 5-Modify the element;'); writeln(' 6-Group insertion;'); writeln(' e-EXIT.'); write('Enter your choise: '); readln(ch); if ch='1' then prc1 else if ch='2' then prc2 else if ch='3' then begin write('Enter the element to delete: '); readln(sbuf); prc3(sbuf) end else if ch='4' then begin write('Enter new element: '); readln(sbuf); prc4(sbuf) end else if ch='5' then prc5 else if ch='6' then prc6 else if ch='e' then goto 2 else writeln('WRONG choise!'); goto 1; 2: close(fa); close(fb); readkey End. Висновок: виконавши лабораторну роботу, я набув навичок роботи із файлами послідовного доступу.
Антиботан аватар за замовчуванням

01.01.1970 03:01-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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