Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Kurs2011

.pdf
Скачиваний:
11
Добавлен:
15.06.2014
Размер:
616 Кб
Скачать
☆

Приложение 3 (продолжение)

31

Приложение 3 (продолжение)

32

Приложение 3 (продолжение)

33

Приложение 3 (продолжение)

34

Приложение 3 (продолжение)

35

Приложение 3 (продолжение)

36

Приложение 4

Граф передачи управления процедуры ОБРАБ(А, N)

1

2

3

sum=5

 

sum 5

 

 

 

4

 

 

 

sum 5

 

 

sum>5

 

5

6

 

 

7

8

9

10

37

Приложение 5

Program Lab_11;

Const Nmax=20; {максимальное количество элементов в массиве} Type Mas=array[1..Nmax] of Shortint;

var n: Byte;

a:Mas;

{======= INPUT ======= }

Procedure Input(var Mi: Mas; var Ni: Byte); var f: Text;

Begin { of Input } Assign(F, 'f1.txt'); Reset(F);

Ni:=0;

While not EoF(F) do begin

Inc(Ni); Read(F, Mi[Ni]);

end;

Close(F);

End; { of Input }

{ ======= TRANSFORM ======= }

Procedure Transform(var Mt: Mas; Nt: Byte); Type SumType=0..9;

var IncreaseFlag, PositiveFlag: Boolean; b: Mas;

n1: Byte; Sum: SumType;

{-----Analysis-----}

Procedure Analysis(Ar:Mas; N:Byte; var Sum: SumType; var PositiveFlag: Boolean);

var NOdd:Byte;

Function FSum(n:Word):SumType; var s, d:Word;

Begin {of FSum} s:=0; d:=n; Repeat

Repeat

s:=s+(d mod 10); d:=d div 10;

Until (d=0); d:=s; s:=0;

Until (d<10);

38

FSum:=d;

End; {of FSum}

Function QuantityOdd(ArQ:Mas; Nq:Byte):Byte; var i, q:Byte;

Begin {of QuantityOdd} q:=0;

For i:=1 to Nq do If Odd(ArQ[i]) Then Inc(q); QuantityOdd:=q;

end; {of QuantityOdd}

Begin { of Analysis } Sum:=FSum(N);

NOdd:=N-QuantityOdd(Ar,N); {Находим количество четных эле-

ментов}

if (NOdd>=(N-NOdd)) Then PositiveFlag:=True Else PositiveFlag:=False;

End; { of Analysis }

{-----Choice-----}

Procedure Choice(ArA:Mas; var ArB:Mas; N:Byte; var N1:Byte; PositiveFlag: Boolean);

var j:Byte;

Begin { of Choice } N1:=0;

For j:=1 to N do

If (((ArA[j]>=0) and PositiveFlag) or ((ArA[j]<0) and (not PositiveFlag))) Then

Begin Inc(N1);

ArB[N1]:=ArA[j]

End; End; { of Choice }

{-----Sort-----}

Procedure Sort(var ArB:Mas; Ns:Byte; IncreaseFlag: Boolean);

Procedure SortInc(var a:Mas; Ni:Byte); var i,j,min: Byte;

tmp: Shortint; Begin { of SortInc }

for i:=1 to Ni-1 do Begin

min:=i;

39

for j:=i+1 to Ni do if (a[j]<a[min]) Then

min:=j;

tmp:=a[min];

a[min]:=a[i];

a[i]:=tmp;

End;

End; { of SortInc }

Procedure SortDec(var a:Mas; Nd:Byte); var i,j,min: Byte;

tmp:

Shortint;

Begin

{

of SortDec }

 

for i:=1 to Nd-1 do

 

Begin

 

 

min:=i;

 

 

for j:=i+1 to Nd do if (a[j]>a[min]) Then

min:=j;

 

 

 

 

tmp:=a[min];

 

 

a[min]:=a[i];

 

 

a[i]:=tmp;

 

End;

End;

{ of SortDec }

Begin

{ of Sort }

if IncreaseFlag Then SortInc(ArB,Ns)

 

 

Else SortDec(ArB,Ns);

End;

{ of Sort }

{-----

Ret-----

}

Procedure Ret(var ArA:Mas; ArB:Mas; N:Byte; PositiveFlag: Boolean);

var j,k:Byte;

Begin

{ of Ret }

k:=0;

For j:=1 to N do

 

If (((ArA[j]>=0) and (PositiveFlag)) or

((ArA[j]<0) and (not PositiveFlag))) Then

 

Begin

 

Inc(k);

 

ArA[j]:=ArB[k];

 

End;

End;

{ of Ret }

Begin { of Transform }

Analysis(Mt, Nt, Sum, PositiveFlag);

40

Соседние файлы в предмете Информатика