Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
InfOlimp_7-lab.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
188.93 Кб
Скачать

Сурет 4.1- «Көбікті» сұрыптау

Паскальда программаны орындау:

C/C++-те программаны орындау:

for j:=n downto 2 do

for i:=1 to j-1 do

if a[i]>a[i+1] then

begin

x:=a[i]; a[i]:= a[i+1];

a[i+1]:=x; end;

for (j=n; j>=2; j--)

for (i=1; i<=j-1; i++)

if (a[i]>a[i+1])

{ x=a[i];

a[i]=a[i+1];

a[i+1]=x; }

Сұрыптау әдістерін қолдануға мысалдар

1-мысал. Кез-келген сандар қатары берілген. Олардың арасына "<" және ">" символдарын қою арқылы ретімен орналастыру керек («ара тәріздес» тізбек).

Есепті шешу идеясы: Алдымен сандар қатарын сұрыптап алып, сосын бірінші элементтен бастап әрбір жұптың орнын ауыстырамыз.

var a: array [1..100] of integer;

i,j,n,x:integer;

begin

writeln ('элементтер саны: '); readln (n);

for i:= 1 to n do

begin

writeln ('a[',i,']='); readln (a[i]);

end;

{=====сұрыптау==========}

for j:=n downto 2 do

for i:=1 to j-1 do

if a[i]>a[i+1] then

begin

x:=a[i];

a[i]:= a[i+1];

a[i+1]:=x;

end;

for i:=1 to 5 do write(a[i]:3); writeln;

j:=1;

{====әрбір жұптың орындарын ауыстырамыз====}

for i:=1 to (n div 2) do {тек циклдың қайталану санын анықтайды}

begin

x:=a[j];

a[j]:= a[j+1];

a[j+1]:=x;

j:=j+2;

end;

for i:=1 to n do write(a[i]:4);

end.

Тест:

Берілгені:

5, 2, 1, 8, 0, 67, 100

Сұрыпталғаны:

0, 1, 2, 5, 8, 67, 100

Нәтижесі:

0, 2, 1, 8, 5, 100, 67

2-мысал. Сандар тізбегінен қатар келген сандардың ішкі тізбегін анықтау керек.

Есепті шешу идеясы: сандар қатарын сұрыптаймыз. Массив элементтерін екі көрші элементті салыстыра отырып өңдейміз: егер олардың айырмашылығы бірге тең болмаса, онда экранға жаңа тізбекті шығарып бастаймыз.

var a: array [1..100] of integer;

i,j,n,x: integer;

begin

writeln ('элементтер саны:');

readln (n);

for i:= 1 to n do

begin

write('a[',i,']=');readln (a[i]);

end;

{===== массивті сұрыптау=============}

for j:=n downto 2 do

for i:=1 to j-1 do

if a[i]>a[i+1] then

begin

x:=a[i];

a[i:= a[i+1];

a[i+1]:=x;

end;

{===қатар орналасқан тізбектерді шығару===}

write (a[1]);

for i:= 2 to n do

begin

if (a[i]-a[i-1]) <> 1 then writeln;

write (a[i]:3);

end;

end.

Тест:

Берілгені :

N=10

2, 1, 5, 3, 7, 8, 6, 12, 9, 11

Нәтижесі:

1, 2, 3

5, 6, 7, 8, 9

11, 12

3-мысал. Сандар тізбегіндегі қатар келген сандардың ең ұзын тізбегін тауып, оларды шығару керек.

Есепті шешу идеясы: Сандар қатарын сұрыптаймыз. Екі көрші элементті салыстыра отырып, массивті өңдейміз: егер олардың айырмасы 1-ге тең болса, онда келесі сан осы тізбекке қосылады. k шамасы арқылы оның ұзындығын анықтаймыз. Максимум элементті табудың типтік алгоритмін қолданып, ең ұзын тізбекті анықтаймыз.

var a: array [1..10] of integer;

max,k,number,i,j,n,x: integer;

begin

writeln ('элементтер саны:');

readln (n);

for i:= 1 to n do

begin

write('a[',i,']='); readln (a[i]);

end;

{=====массивті сұрыптау================}

for j:=n downto 2 do

for i:=1 to j-1 do

if a[i]>a[i+1] then

begin

x:=a[i];

a[i]:= a[i+1];

a[i+1]:=x;

end;

{===ең ұзын тізбекті анықтау===}

max:=0;

k:=1;

for i:=1 to n-1 do

begin

if a[i+1]-a[i]=1 then k:=k+1 else k:=1;

if k>max then begin max:=k;

number:=i+1; end;

end;

writeln('Ең ұзын тізбек элементтерінің саны=', max);

writeln('Ең ұзын тізбек:');

for i:=(number-max+1) to number do write(a[i]:3);

end.

Тест:

Берілгені :

N=10

2, 1, 5, 3, 7, 8, 6, 12, 9, 11

Нәтижесі:

Max=5

5, 6, 7, 8,9




4-мысал: Берілген сөйлемдегі сөздердің орнын ондағы әріп санының өсу ретімен ауыстыру керек.

Есепті шешу идеясы: Сөйлемдегі сөздерді бөліп алудың типтік алгоритімін қолданып, әрбір сөзді массив элементіне орналастырып жазамыз. Сонан соң, сөздер массивін ондағы сөздің ұзындығы бойынша сұрыптаймыз.

var b:array[1..10] of string;

a,a1,a2,x: string;

n,i,j,k: integer;

begin

writeln ('Сөйлемді ендір:');

readln (a);

n:=length (a);

k:=0;

for i:=1 to n do

if copy(a,i,1)=' ' then k:=k+1;

k:=k+1;

j:=1;

for i:=1 to n do

if copy(a,i,1)=' ' then j:=j+1

else b[j]:=b[j]+copy(a,i,1);

{===== массивті сұрыптау ==============}

for j:=k downto 2 do

for i:=1 to j-1 do

if length (b[i])>length (b[i+1]) then

begin

x:=b[i];

b[i]:= b[i+1];

b[i+1]:=x;

end;

{ ==============================}

for i:=1 to k do

writeln (b[i]);

end.

Тест:

Берілгені:

Менің сүйікті пәнім - информатика

Нәтижесі:

-

Менің

пәнім

сүйікті

информатика

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]