Модульное программирование на примере сортировки последовательностей

Автор работы: Пользователь скрыл имя, 21 Декабря 2011 в 21:16, курсовая работа

Краткое описание

Модульное программирование. Здесь основная идея заключалась в том, чтобы "спрятать" данные и процедуры внутри независимых программных единиц - модулей. Эту идею впервые реализовал Н. Вирт в алгоритмическом языке Modula (1975-1979 годы), а затем "подхватили" и остальные, распространенные в то время языки программирования. Например, известные системы программирования Turbo Pascal и Turbo С.

Содержимое работы - 1 файл

модульное программирование.doc

— 274.50 Кб (Скачать файл)

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;

Информация о работе Модульное программирование на примере сортировки последовательностей