Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




КУРСОВ ПРОЕКТ ПО БАЗИ ДАННИ - ТЕХНИЧЕСКИ УНИВЕРСИТЕТ

Rusa




ПРОЕКТ

гр.74 F№ 13022101

КОН 16116x2310q 057;УЛТАНТ

Проф. Д. АРНАУДОВ

1. ТЕОРЕТИЧНА ПОСТАНОВКА

2. АЛГОРИТМИ ЗА ТЪРСЕНЕ И ФОРМИРАНЕ НА СТРУКТУРАТА

- ОМД1 - първа част от основния масив на дескрипторите - съдържа заглавията на съответните верижни списъци от втората част както и управлява първия възлов списък за съответния дескриптор в ОМПОД .Достъпът до този файл е пряк - по код на дескриптора , като той съвпада с позицията на елемента във файла

получава се след обработка на запитването в дескрипторния речник

 

n_zone_omd

n_element_omd

n_zone_ompod

a_begin

a_end

n_nodes

- НЗ1 - номер на зона в ОМД2 , в която се съдържа следващият елемент от верижния списък на съответния дескриптор

- НЕ1 - номер на елемент в съответната зона на ОМД2

- НЗ2 - номер на зона в ОМПОД , в която се съдържа възлов списък на съответния дескриптор

- НЕ2 - номер на елемент в съответната зона на ОМПОД , който се явява първи елемент на възловия списък на съответния дескриптор в съответната зона

- ОМД2 - втора част на основния масив на дескрипторите - този файл е сегментиран на зони , като съответните верижни списъци за всеки дескриптор преминават през зоните , без да се сегментират . Логическото деление на зони е необходимо за увеличаване на ефективността в режим на пакетна обработка на запитванията / търсенето в сегмент на списъка не изисква преместване на четящата глава /

n_zone_omd

n_element_omd

n_zone_ompod

a_begin

a_end

n_nodes

- ОМПОД - основен масив от познавателните образи на документите - този файл също е сегментиран , като всяка зона съдържа пресичащи се възлови списъци , които не са свързани със списъците от останалите зони

a_doc_d

b_num_d

- a_doc_d - адрес на съответния документ или на следващ документ , съдържащ съответния дескриптор

- b_num_d - брой на дескрипторите на съответня документ или код на съответния дескриптор

Програмата предоставя възможност за промяна на размера на зоната както на ОМД2 , така и на ОМПОД , с цел оптимално взаимодействие с конкретните физически устройства .

Настоящата програма поддържа и четвърти файл , играещ ролята на дескрипторен речник . При стартиране на програмата съдържанието на файла се прехвърля в паметта , където се извършва съответната обработка по време на работа на програмата , в този случай търсенето става последователно . При изход от програмата съдържанието на файла се актуализира , в зависимост от направените промени в съответния списък от дескриптори в паметта .

2. АЛГОРИТМИ ЗА ФОРМИРАНЕ НА СТРУКТУРАТА И ТЪРСЕНЕ :

2.1 АЛГОРИТЪМ ЗА ФОРМИРАНЕ И ПОПЪЛВАНЕ НА СТРУКТУРАТА :

2/ Проверка за първи документ в стуктурата

- ако това е така новият възел се записва непосредствено след края на последния елемент на ОМПОД

- ако възелът е по-голям от оставащото място в текущата зона на ОМПОД , той се записва в началото на следващата

- ако дескрипторът не фигурира в ОМД1 , следователно нововъведеният документ е първият , съдържащ този дескриптор - в този случай се добавя нов ред в ОМД1 , сочещ към нововъведения в ОМПОД документ

- в случай , че дескрипторът фигурира в ОМД1 се проверяват всички редове за този дескриптор в ОМД1 /един ред/ и ОМД2 до намиране на ред , сочещ към текущата за въвеждане на документи зона в ОМПОД или до достигане на последния ред за съответния дескриптор /в този случай се добавя нов ред в ОМД2 , асоцииран с текущата в ОМПОД зона , като е необходимо и да се актуализира предходния ред в ОМД2 или ОМД1 така ,че той да сочи към нововъведения / , в случай ,че при претърсването на ОМД1 и ОМД2 се открие ред за съответния дескриптор , сочещ към текущата зона в ОМПОД , той се актуализира така , че полето , указващо последния елемент от възловия списък за съответния дескриптор в текущата зона да сочи към нововъведения в ОМПОД възел .Необходимо е също така и да се актуализира предходния елемент от възловия списък в ОМПОД така , че той да сочи към позицията на нововъведения възел

- ако това е така новият възел се записва непосредствено след края на последния елемент на ОМПОД

- ако възелът е по-голям от оставащото място в текущата зона на ОМПОД , той се записва в началото на следващата . По този начин като страничен ефект се получава известна вътрешна фрагментация на зоните в ОМПОД със среден обем за зона , равен на средната големина на възлите в структурата


- блок схема на процедурата за актуализиране на ОМД1 и ОМД2 - put_code_descriptor


да


не

 


не


не

Запис на нов ред в ОМД2 , кореспондиращ с текущата зона в ОМПОД и нововъведения документ ;актуализиране на предходния ред в ОМД2 или ОМД1 за този дескриптор така ,че тий да сочи към нововъведения ред в ОМД2

insert_in_omd

 


да


2.2 АЛГОРИТЪМ ЗА ТЪРСЕНЕ В СТРУКТУРАТА :

2/Проверка за наличието на всички дескриптори от запитването в структурата .В случай, че в запитването фигурира несъществуващ в структурата дескриптор , търсенето се прекратява и се извежда съобщение , указващо липсата на документ , отговарящ на запитването

3/Проверка за наличие на общи зони в ОМПОД , в които да са разположени възлови списъци на всички дескриптори от запитването

-В случай , че в ОМПОД не съществува обща зона за възлови списъци на всички дескриптори от запитването , търсенето се прекратява и се извежда съобщение , указващо липсата на документ ,отговарящ на запитването

-Проверката за наличие на обща зона в ОМПОД се осъществява с помощта на два последователни списъка , в чиито елементи се записва номерът на общата зона , кодът на дескриптора с най-къс възлов списък в съответната зона , началото и края на най-късия списък , както и броя на възлите в съответния возлов списък . За всеки дескриптор от запитването се повтарят следните стъпки

1. За първия дескриптор от запитването директно се попълва първият последователен списък с информация за зоните в ОМПОД , в които този дескриптор има възлов списък . Целта е за всеки следващ дескриптор да се проверява наличието на общи зони в ОМПОД с предходните дескриптори и в последователния списък да остава информация само за общите зони на всички преминали през проверката дескриптори

2. За нечетен пореден номер на дескриптор от запитването се попълва първият последователен списък като в него се записва информация за общите зони на текущия дескриптор и тези от втория списък , след което вторият списък се нулира

3. За четен дескриптор се постъпва аналогично - попълва се втория списък, след което първия се нулира

4. При попълването на последователните списъци се спазва следното правило - преди записване на елемент , сочещ към определена зона в ОМПОД се проверява наличието на елемент в другия списък , сочещ към същата зона в ОМПОД

- при отрицателен резултат елементът не са записва в списъка

- при положителен резултат от проверката , в списъка се записва информация за по-късия от двата възлови списъка в съответната зона /списъка на текущия дескриптор и този на дескриптора от другия последователен списък/

- В случай , че този списък е празен търсенето се прекратява и се извежда съобщение за липса на документ , отговарящ на запитването

- Броят на елементите в последователния списък показва и броя на ощите зони в ОМПОД , в които трябва да се извърши претърсване по най-късия възлов списък

5. За всяка обща зона се извършва претърсване с цел проверка за пълно съвпадение на дескрипторите от запитването с дескрипторите на елементите от съответния възлов списък, аналогично на това при еднозвенната структура

- претърсва се изцяло най-късият възлов списък в съответната зона на ОМПОД като при съвпадение с дескрипторите от запитването се извежда съобщение за намерен документ , отговарящ на запитването

2.2.1 БЛОК СХЕМА НА АЛГОРИТЪМА ЗА ТЪРСЕНЕ НА ДОКУМЕНТИ В СТРУКТУРАТА

get_query ,find_descriptor

 


Съобщение за липса на релевантен документ

 


да


не


да


не


- Блок схема на търсенето на релевантен документ в съответната обща зона на ОМПОД / find_doc_1 / - процедурата find_doc_ompod се повтаря толкова на брой пъти , колкото са общите зони в ОМПОД лементите на последователния списък , получен от seek_joint_zones_ompod


  да


не


не


да

 


3. РАЗПЕЧАТКА НА ПРОГРАМАТА :

uses crt;

const zone=20;

zone_2=20;

type

name_descriptor=string[20];

zapis=record

n_zone_omd:integer;

n_element_omd:integer;

n_zone_ompod:integer;

a_begin:integer;

a_end :integer;

n_nodes:integer;

end;

fl=file of zapis;

zapis1=record

a_doc_d:integer;

b_num_d:integer;

end;

fl1=file of zapis1;

fl2=file of name_descriptor;

query1= array[1..50] of name_descriptor;

desc1= array[1..50] of integer;

pointer=^check;

check=record

descriptor:integer;

n_zone_ompod:integer;

a_begin:integer;

a_end:integer;

n_nodes:integer;

next:pointer;

end;

point=^voc;

voc=record

d_name:name_descriptor;

next:point;

end;

var

omd_1:fl;

omd_2:fl;

ompod:fl1;

f2:fl2;

node:zapis;

node1:zapis1;

name_d:name_descriptor;

exist:boolean;

query_number:byte;

doc_not_exists:boolean;

query:query1;

desc_1:desc1;

previous:integer;

bukva:char;

code_found:integer;

new_end,new_begin:integer;

code:integer;

last_document:integer;

first_doc:boolean;

new_descriptor:boolean;

old_adress:desc1;

old:integer;

xx:integer;

code1:desc1;

start:pointer;

nach:pointer;

first_desc:integer;

count:integer;

diction:point;

procedure assign_files;

begin

assign(omd_1,'c:\tp1\work_d\omd_1.adb');

reset(omd_1);

if ioresult<>0 then

rewrite(omd_1);

assign(omd_2,'c:\tp1\work_d\omd_2.adb');

reset(omd_2);

if ioresult<>0 then

rewrite(omd_2);

assign(f2,'c:\tp1\work_d\diction_1.adb');

reset(f2);

if ioresult<>0 then

rewrite(f2);

assign(ompod,'c:\tp1\work_d\ompod.adb');

reset(ompod);

if ioresult<>0 then

rewrite(ompod);

end;

procedure insert_queue(var p1:point;desc:string);

begin

if p1=nil then

begin new(p1);

with p1^ do begin

d_name:=desc;

next:=nil;

end

end

else insert_queue(p1^.next,desc);

end;

procedure insert_in_diction_queue;

begin

reset(f2);

while not eof(f2) do

begin

read(f2,name_d);

insert_queue(diction,name_d);

end;

end;

procedure insert_in_diction_file(p1:point);

begin

reset(f2);

while p1<>nil do

begin

name_d:=p1^.d_name;

write(f2,name_d);

p1:=p1^.next;

end;

end;

procedure put_code_descriptor_queue(desc:string;var code:integer; p1:point);

var exist:boolean;

i:integer;

begin

exist:=false;

i:=0;

while (p1<>nil) and (exist=false) do

begin

i:=i+1;

if desc=p1^.d_name then

begin

exist:=true;

code:=i;

end;

p1:=p1^.next

end;

if (exist=false) then

begin

insert_queue(diction,desc);

code:=i+1;

end;

end;

function new_zone_ompod:boolean;

begin  reset(ompod);

if (query_number+1)<=(zone-(filesize(ompod) mod zone)) then

new_zone_ompod:=false

else new_zone_ompod:=true;

if (filesize(ompod) mod zone)=0 then new_zone_ompod:=true;

end;

function zone_ompod:integer;

begin  reset(ompod);

if new_zone_ompod=false then

begin

if (filesize(ompod) mod zone)<>0 then

zone_ompod:= (filesize(ompod) div zone)+1

else zone_ompod:= (filesize(ompod) div zone)

end

else

begin

if (filesize(ompod) mod zone)<>0 then

zone_ompod:= (filesize(ompod) div zone)+2

else zone_ompod:= (filesize(ompod) div zone)+1;

end;

end;

function ompod_position_in_zone:integer;

begin

if new_zone_ompod=false then

ompod_position_in_zone:= (filesize(ompod)+1) mod zone

else

ompod_position_in_zone:=1;

end;

function new_zone_descriptor(desc:integer):boolean;

begin

reset(omd_2);

seek(omd_1,desc-1);

read(omd_1,node);

if node.n_zone_omd=0 then

begin

if node.n_zone_ompod<>zone_ompod then new_zone_descriptor:=true

else new_zone_descriptor:=false;

end

else

begin

while node.n_zone_omd<>0 do

begin

seek(omd_2,(node.n_zone_omd-1)*zone_2+node.n_element_omd-1);

read(omd_2,node);

end;

if node.n_zone_ompod<>zone_ompod then new_zone_descriptor:=true

else new_zone_descriptor:=false;

end

end;

procedure update_ompod(z_1,position,desc:integer);

var i,k,p:integer;

begin

i:=0;

seek(ompod,(z_1-1)*zone+position-1);

read(ompod,node1);

k:=node1.b_num_d;

repeat

begin

i:=i+1;

read(ompod,node1);

end;

until (i=k) or (desc=node1.b_num_d);

with node1 do

a_doc_d:=ompod_position_in_zone;

seek(ompod,(z_1-1)*zone+position+i-1);

write(ompod,node1);

end;

procedure insert_in_omd_21(desc:integer);

var i:integer;

position:integer;

z_1:integer;

begin

i:=0;

seek(omd_1,desc-1);

read(omd_1,node);

while node.n_zone_ompod<>zone_ompod do

begin

seek(omd_2,(node.n_zone_omd-1)*zone_2+node.n_element_omd-1);

read(omd_2,node);

i:=i+1;

end;

with node do

begin

z_1:=n_zone_ompod;

position:=a_end;

n_nodes:=n_nodes+1;

a_end:=ompod_position_in_zone;

end;

update_ompod(z_1,position,desc);

if i=0 then

begin seek(omd_1,filepos(omd_1)-1);

write(omd_1,node);

end

else begin seek(omd_2,filepos(omd_2)-1);

write(omd_2,node);

end

end;

procedure insert_in_omd_2(desc:integer);

var i:integer;

begin

reset(omd_2);

i:=0;

seek(omd_1,desc-1);

read(omd_1,node);

while node.n_zone_omd<>0 do

begin

seek(omd_2,(node.n_zone_omd-1)*zone_2+node.n_element_omd-1);

read(omd_2,node);

i:=i+1;

end;

with node do

begin

if ((filesize(omd_2)+1) mod zone_2)<>0 then

n_zone_omd:=(filesize(omd_2)+1) div zone_2 +1

else n_zone_omd:=(filesize(omd_2)+1) div zone_2;

if ((filesize(omd_2)+1) mod zone_2)<>0 then

n_element_omd:= ((filesize(omd_2)+1) mod zone_2)

else n_element_omd:=zone_2;

end;

if i=0 then

begin seek(omd_1,filepos(omd_1)-1);

write(omd_1,node);

end

else begin seek(omd_2,filepos(omd_2)-1);

write(omd_2,node);

end;

seek(omd_2,filesize(omd_2));

with node do

begin

n_zone_omd:=0;

n_element_omd:=0;

n_zone_ompod:=zone_ompod;

a_begin:= ompod_position_in_zone;

a_end:= ompod_position_in_zone;

n_nodes:=1;

end;

write(omd_2,node);

end;

procedure put_code_descriptor(desc:integer);

var new_desc:boolean;

begin

reset(omd_1);

if desc>filesize(omd_1) then new_desc:=true

else new_desc:=false;

if (new_desc=false) and

((new_zone_ompod=true) or (new_zone_descriptor(desc)=true)) then

insert_in_omd_2(desc)

else

if (new_desc=false) and (new_zone_ompod=false) and

(new_zone_descriptor(desc)=false) then

insert_in_omd_21(desc);

if new_desc=true then

begin

seek(omd_1,filesize(omd_1));

with node do

begin

n_nodes:=1;

n_zone_omd:=0;

n_element_omd:=0;

n_zone_ompod:=zone_ompod;

a_begin:= ompod_position_in_zone;

a_end:= ompod_position_in_zone;

old:=a_end;

write(omd_1,node);

end;

end;

end;

procedure put_code_document;

var i,x,current:integer;

begin

reset(ompod);

last_document:=zone_ompod;

new_end:=ompod_position_in_zone;

if new_zone_ompod=false then

seek(ompod,filesize(ompod))

else seek(ompod,(zone_ompod-1)*zone+ompod_position_in_zone-1);

with node1 do

begin

a_doc_d:=code;

b_num_d:=query_number;

write(ompod,node1);

end;

current:=new_end;

for i:=1 to query_number do

begin

with node1 do

begin

a_doc_d:=0;

b_num_d:=code1[i];

write(ompod,node1);

end;

end;

end;

procedure insert_document;

var i,dn,x:integer;

begin

clrscr;

first_doc:=false;

for i:=1 to 50 do

query[i]:='';

writeln('Enter the code of the document:');

readln(code);

writeln('Enter the descrptors for this document please -');

i:=1;

repeat

begin

read(bukva);

if bukva<>',' then

begin

if bukva<>#13 then

query[i]:=query[i]+bukva

end

else

i:=i+1;

end;

until bukva=#13 ;

query_number:=i;

reset(omd_1);

reset(omd_2);

reset(ompod);

if eof(omd_1) then

begin

first_doc:=true;

for i:=1 to query_number do

begin

name_d:=query[i];

insert_queue(diction,query[i]);

code1[i]:=i;

with node do

begin

n_zone_omd:=0;

n_element_omd:=0;

n_zone_ompod:=1;

a_begin:=1;

a_end:=1;

n_nodes:=1;

write(omd_1,node);

old_adress[i]:=1;

end

end

end

else

for i:=1 to query_number do

begin

put_code_descriptor_queue(query[i],code1[i],diction);

put_code_descriptor(code1[i]);

old_adress[i]:=old;

end;

put_code_document;

end;

procedure get_query;

var i:integer;

begin

clrscr;

for i:=1 to 50 do

query[i]:='';

writeln('Enter your query please -');

i:=1;

repeat

begin

read(bukva);

if bukva<>',' then

begin

if bukva<>#13 then

query[i]:=query[i]+bukva

end

else

i:=i+1;

end;

until bukva=#13 ;

query_number:=i;

end;

procedure get_code_descriptor_queue(desc:string;var x:integer;p1:point);

var i:integer;

begin

exist:=false;

i:=0;

while (p1<>nil) and (exist=false) do

begin

i:=i+1;

if p1^.d_name=desc then

begin

exist:=true;

x:=i;

end;

p1:=p1^.next;

end;

end;

procedure free(var p:pointer);

var k:pointer;

begin

while p<> nil do

begin

k:=p;

dispose(p);

p:=k^.next;

end;

p:=nil;

end;

procedure insert_p(var p:pointer;desc:integer);

begin

if p=nil then

begin new(p);

with p^ do begin

descriptor:=desc;

n_zone_ompod:=node.n_zone_ompod;

a_begin:=node.a_begin;

a_end:=node.a_end;

n_nodes:=node.n_nodes;

next:=nil;

end

end

else insert_p(p^.next,desc);

end;

procedure input_q(var p,q:pointer;desc:integer);

begin

if q=nil then

begin new(q);

with q^ do begin

descriptor:=p^.descriptor;

n_zone_ompod:=p^.n_zone_ompod;

a_begin:=p^.a_begin;

a_end:=p^.a_end;

n_nodes:=p^.n_nodes;

q^.next:=nil;

end

end

else input_q(p,q^.next,desc);

end;

procedure search_p(var p,q:pointer;desc:integer);

begin

if p<>nil then

begin

if p^.n_zone_ompod=node.n_zone_ompod then

begin

if p^.n_nodes>node.n_nodes then

with p^ do

begin

descriptor:=desc;

n_zone_ompod:=node.n_zone_ompod;

a_begin:=node.a_begin;

a_end:=node.a_end;

n_nodes:=node.n_nodes;

end;

input_q(p,q,desc);

end

else search_p(p^.next,q,desc);

end;

end;

procedure seek_joint_zones_ompod(desc:integer);

var start_1:boolean;

begin

seek(omd_1,desc-1);

read(omd_1,node);

if (count mod 2)=0 then start_1:=true

else start_1:=false;

if desc=first_desc then

insert_p(nach,desc) else

begin

if start_1=true then

search_p(nach,start,desc)

else search_p(start,nach,desc);

end;

while node.n_zone_omd<>0 do

begin

seek(omd_2,(node.n_zone_omd-1)*zone_2+node.n_element_omd-1);

read(omd_2,node);

if desc=first_desc then

insert_p(nach,desc) else

begin

if start_1=true then

search_p(nach,start,desc)

else search_p(start,nach,desc);

end;

end;

if (count mod 2)=0 then

begin

free(nach);

nach:=nil;

end

else begin

free(start);

start:=nil;

end;

end;

function joint_zone(p,q:pointer):boolean;

begin

if (p=nil) and (q=nil) then joint_zone:=false

else joint_zone:=true;

end;

procedure find_descriptor ;

var i:byte;

x:integer;

a_min:integer;

begin

reset(omd_1);

reset(omd_2);

a_min:=maxint;

doc_not_exists:=false;

nach:=nil;

start:=nil;

for i:=1 to query_number do

begin

get_code_descriptor_queue(query[i],x,diction);

desc_1[i]:=x;

if exist=false then

begin

doc_not_exist:=true;

i:=query_number;

end;

end;

if doc_not_exist=false then

for i:=1 to query_number do

begin

if i=1 then first_desc:=desc_1[i];

count:=i;

seek_joint_zones_ompod(desc_1[i]);

if joint_zone(nach,start)=false then

begin doc_not_exist:=true;

i:=query_number;

end;

end;

end;

procedure find_next_adress(var x:integer;main_descriptor:integer;current_zone:integer);

var k:integer;

begin

k:=0;

repeat

begin

k:=k+1;

seek(ompod,previous+k-1);

read(ompod,node1);

end;

until node1.b_num_d=main_descriptor;

if node1.a_doc_d<>0 then

x:=(current_zone-1)*zone+node1.a_doc_d

else

x:=0;

end;

procedure find_doc_ompod(adress_begin,adress_end,main_descriptor,current_zone:integer);

var doc_found:boolean;

i,k,n,x:integer;

function descriptor_compare:boolean;

var i,j:integer;

ok:boolean;

begin

if query_number>n then descriptor_compare:=false

else

begin

for i:=1 to query_number do

begin

ok:=false;

for j:=1 to n do

begin

seek(ompod,previous+j-1);

read(ompod,node1);

if desc_1[i]=node1.b_num_d then ok:=true;

end;

if ok=false then

begin

descriptor_compare:=false;

i:=query_number;

end;

end;

end;

if ok=true then descriptor_compare:=true;

end;

begin

reset(ompod);

x:=1;

doc_not_exists:=true;

doc_found:=false;

previous:=adress_begin;

seek(ompod,adress_begin-1);

while ((filepos(ompod)<=adress_end) and (x<>0)) do

begin

read(ompod,node1);

k:=node1.a_doc_d;

n:=node1.b_num_d;

if descriptor_compare=true then

begin

doc_found:=true;

code_found:=k;

writeln('The code of the document you are looking for is:',code_found);

find_next_adress(x,main_descriptor,current_zone);

seek(ompod,x-1);

previous:=x;

end

else

begin

find_next_adress(x,main_descriptor,current_zone);

seek(ompod,x-1);

previous:=x;

end;

end;

if doc_found=true then doc_not_exists:=false;

end;

procedure find_doc_1(var p:pointer);

var adr_b,adr_e,main_d,z:integer;

begin

while p<>nil do

begin

adr_b:=(p^.n_zone_ompod-1)*zone + p^.a_begin;

adr_e:=(p^.n_zone_ompod-1)*zone + p^.a_end;

main_d:=p^.descriptor;

z:=p^.n_zone_ompod;

find_doc_ompod(adr_b,adr_e,main_d,z);

p:=p^.next;

end;

end;

procedure search;

begin

get_query;

find_descriptor;

if doc_not_exists=false then

if (query_number mod 2)=0 then

find_doc_1(start)

else find_doc_1(nach);

if doc_not_exists=true then

writeln('There is no such a document!');

readkey;

end;

procedure write_title;

begin clrscr;

clrscr;

gotoxy(22,10);

writeln('You can choose one of this options');

gotoxy(10,14);

write('1 - Search in the data base');

gotoxy(10,15);

write('2 - Add new document');

gotoxy(10,16);

write('3 - Exit the program');

end;

procedure menu;

var ch:byte;

exit_program:boolean;

begin

exit_program:=false;

repeat

write_title;

gotoxy(27,20);

write('Enter your choice:');

readln(ch);

case ch of

1: search;

2: insert_document;

3: exit_program:=true;

end;

until exit_program=true;

end;

begin

assign_files;

insert_in_diction_queue;

menu;

insert_in_diction_file(diction);

close(ompod);

close(f2);

close(omd_1);

end.

https://www.scriru.com/15/7/Pierburg93753789234.php


Document Info


Accesari: 1044
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2024 )