Автор работы: Пользователь скрыл имя, 21 Декабря 2011 в 21:16, курсовая работа
Модульное программирование. Здесь основная идея заключалась в том, чтобы "спрятать" данные и процедуры внутри независимых программных единиц - модулей. Эту идею впервые реализовал Н. Вирт в алгоритмическом языке Modula (1975-1979 годы), а затем "подхватили" и остальные, распространенные в то время языки программирования. Например, известные системы программирования Turbo Pascal и Turbo С.
var i: integer;
r: integer;
f,f1: file of integer;
begin
Assign(f,name);
Assign(f1,name1);
reset(f);
{$I-}
rewrite(f1);
{$I+}
while not EOF(f) do
begin
read(f, r);
write(f1, r);
end;
close(f);
close(f1);
end;
procedure sortirovka1(name:string); {б®авЁа®ўЄ ¬Ґв®¤®¬ ЇаאַЈ® б«ЁпЁп}
var i,j,w:integer;
f:filetype;
pr:boolean;
begin
kol_per:=0;
kol_sr:=0;
Assign(f,name);
reset(f);
sort(f, 0, pred(n));
close(f);
end;
procedure sortirovka2(name: string);
Var s1, s2, a1, a2, where, tmp: integer;
f: filetype;
pr: boolean;
f1, f2: filetype;
Begin
kol_sr := 0;
kol_per := 0;
s1 := 5; s2 := 5;
Assign(f, name);
Assign(f1, 'name1.tmp');
Assign(f2, 'name2.tmp');
While(s1 > 1)and(s2 >= 1)do
begin
where := 1;
s1 := 0; s2 := 0;
Reset(f); Rewrite(f1); Rewrite(f2);
Read(f, a1);
Write(f1, a1);
kol_per := kol_per + 1;
While not EOF(f)do
begin
read(f, a2);
kol_sr := kol_sr + 1;
If(a2 < a1)then
begin
Case where of
1: begin
where := 2;
inc(s1);
End;
2: begin
where := 1;
inc(s2);
End;
End;
End;
Case where of
1:
begin
write(f1, a2);
kol_per := kol_per + 1;
end;
2:
begin
write(f2, a2);
kol_per := kol_per + 1;
end;
End;
a1 := a2;
End;
If where = 2 then
inc(s2)
else
inc(s1);
Close(f); Close(f1); Close(f2);
Rewrite(f); Reset(f1); Reset(f2);
Read(f1, a1);
if not eof(f2)then
Read(f2, a2);
While(not EOF(f1))and(not EOF(f2))do
begin
kol_sr := kol_sr + 1;
If(a1 <= a2)then
begin
Write(f, a1);
kol_per := kol_per + 1;
Read(f1, a1);
End
else
begin
Write(f, a2);
kol_per := kol_per + 1;
Read(f2, a2);
End;
End;
pr := false;
If EOF(f1)and(pr = false)then
begin
while not EOF(f2)do
begin
kol_sr := kol_sr + 1;
If(a1 <= a2)then
begin
write(f, a1);
kol_per := kol_per + 1;
pr := true;
while not EOF(f2)do
begin
write(f, a2);
kol_per := kol_per + 1;
read(f2, a2);
end;
write(f, a2);
kol_per := kol_per + 1;
end
else
begin
write(f, a2);
kol_per := kol_per + 1;
read(f2, a2);
end;
end;
If(EOF(f2))and(pr = false)then
begin
kol_sr := kol_sr + 1;
If(a2 <= a1)then
begin
kol_per := kol_per + 1;
write(f, a2);
kol_per := kol_per + 1;
write(f, a1);
kol_per := kol_per + 1;
end else
begin
write(f, a1);
kol_per := kol_per + 1;
write(f, a2);
kol_per := kol_per + 1;
end;
end;
end;
If EOF(f2)then
begin
while not EOF(f1)do
begin
kol_sr := kol_sr + 1;
If(a2 <= a1)then
begin
write(f, a2);
kol_per := kol_per + 1;
pr := true;
while not EOF(f1)do
begin
write(f, a1);
kol_per := kol_per + 1;
read(f1, a1);
end;
write(f, a1);
kol_per := kol_per + 1;
end
else
begin
write(f, a1);
kol_per := kol_per + 1;
read(f1, a1);
end;
end;
If(EOF(f1))and(pr = false)then
begin
kol_sr := kol_sr + 1;
If(a2 <= a1)then
begin
{kol_per := kol_per + 1;}
write(f, a2);
kol_per := kol_per + 1;
write(f, a1);
kol_per := kol_per + 1;
end else
begin
write(f, a1);
kol_per := kol_per + 1;
write(f, a2);
kol_per := kol_per + 1;
end;
end;
{ else
If not EOF(f1)then
write(f, a1)
else
If pr = false then
write(f, a2); }
end;
Close(f); Close(f1); Close(f2);
Erase(f1);
Erase(f2);
end;
Assign(f, name);
Reset(f);
while not EOF(f)do
read(f, a1);
write(f, kol_sr);
write(f, kol_per);
close(f);
End;
procedure sortirovka(name: string; tip:integer);
begin
Case tip of
1: sortirovka1(name);
2: sortirovka2(name);
end;
end;
function MasF(var f:filetype; i:integer):integer;
var r:integer;
begin
seek(f,i-1);
read(f, r);
MasF := r;
end;
procedure MasFSave(var f:filetype; i:integer; n:integer);
begin
seek(f,i-1);
write(f,n);
end;
procedure merge(var f: filetype; lb, split, ub: integer);
function get_value(ix: integer; var _result: integer): integer;
begin
seek(f, ix);
read(f, _result);
get_value := _result;
end;
var
temp: filetype;
pos1, pos2, pos3: integer;
a1, a2, X: integer;
begin
pos1 := lb;
pos2 := split + 1;
pos3 := 0;
assign(temp, 'temp.dat');
rewrite(temp);
inc(kol_per);
while (pos1 <= split) and (pos2 <= ub) do begin
inc(kol_sr);
if get_value(pos1, a1) < get_value(pos2, a2) then begin
write(temp, a1); inc(pos1);
end
else begin
write(temp, a2); inc(pos2)
end;
end;
while pos2 <= ub do begin
get_value(pos2, a2);
write(temp, a2);
inc(pos2)
end;
while pos1 <= split do begin
get_value(pos1, a1);
write(temp, a1);
inc(pos1);
end;
reset(temp);
seek(f, lb);
while not eof(temp) do begin
read(temp, X);
write(f, X);
end;
close(temp);
erase(temp);
end;
procedure sort(var f: filetype; lb, ub: integer);
var splitter: integer;
begin
if lb < ub then begin
splitter := (lb + ub) div 2;
Sort(f, lb, splitter);
Sort(f, splitter+1, ub);
merge(f, lb, splitter, ub);
end;
end;
function proverka(s:string):integer;
var
f:filetype;
begin
Assign (f,s);
{$I-}
reset(f);
{$I+}
proverka := IOResult;
end;
end.
Текст модуля MyGraph:
unit MyGraph;
interface
uses massiv, crt;
const
norm=$20;
sel=$70;
def=$0F;
max_m = 3;
var
m:byte;
menu:array[1..max_m] of string[50];
punkt :integer;
ch:char
x,y:integer;
procedure vuvod_mass (name:string);
procedure vuvod_kol;
function vubor_faila: string;
Информация о работе Модульное программирование на примере сортировки последовательностей