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

Кілттік сөздер:

  • "Эратосфен торы" әдісі – 1-ден N-ге дейінгі аралықтағы жай сандарды анықтау алгоритмі.

Бақылау сұрақтары

  • Келесі сөйлемді аяқтаңдар: "Массивтегі белгілі бір шартты қанағаттандыратын элементтерді белгілеу үшін … ".

  • "Эратосфен торы" әдісін пайдаланып 1-ден N-ге дейінгі аралықтағы жай сандарды анықтау алгоритмін түсіндір.

Тапсырмалар

  • Массивтегі қайталанатын элементтердің санын анықтау керек.

  • Мәтіннің сөздерін жеке массивке ажыратып жазыңдар. Әріптерінің саны бірдей сөздердің санын анықтаңдар.

Қосымша «жалаушалар» массивін қолдану

(үш есеп – бір алгоритм)

Алдыңғы тақырыпта қарастырылған әдісті пайдаланудың басқа да мысалдарын келтірейік. Мысалы, қандай да бір жағдайдың (оқиғаның) басталуы мен аяқталуын сипаттау қажет болғанда (жақшаның ашылуы мен жабылуы, күзетшінің келіп-кетуі, кесіндінің басы мен соңы, т.с.) өңдеуді жалғастырамыз. Жағдайдың (оқиғаның) басталуын «1» «жалаушасы» арқылы,ал аяқталуын «-1» арқылы белгілейміз.

Жұмыстың мақсаты: классикалық есептерді шешу барысында «жалаушалар»-ды қолдануды үйрену.

1-мысал. Арифметикалық өрнектегі жақшалардың дұрыс қойылғандығын тексеру керек. Ашылған немесе жабылған жақшалар саны әртүрлі болса - өрнектің қате екенін хабарлау керек, ал егер олардың саны бірдей, бірақ, артық жазылған жақшалар бар болса, онда өрнек қате емес (мысалы ((а+b)) – жақшалар дұрыс қойылған) .

Есепті шешу идеясы:

  1. (а + b ((4а - 8) b + 3) – 15b) арифметикалық өрнегі берілді деп есептейік

  2. А және Flag екі массивін сипаттаймыз. Арифметикалық өрнекті сипаттайтын қатардың әр символын А массивіне орналастыра отырып «бөлшектейміз» (ҚАТАРДЫ СИМВОЛДАРҒА «БӨЛШЕКТЕУ» типтік алгоритмін қолдану арқылы).

Flag массивін жалаушамен толтырамыз:

  • Егер массивтің А элементі ашылған жақша, яғни «(» болса - "1";

  • Егер массивтің А элементі жабылған жақша, яғни «)» болса - "-1"; (7.1-сурет)

7.1-сурет

  1. Flag массивінің элементтерін қосамыз.

  2. Егер элементтердiң қосындысы 0-ден өзге сан болса, онда жақша дұрыс қойылмаған. Дұрыс өрнек үшін қосындының мәні 0-ге тең болуы керек.

Есепті Бейсикте шешу үлгісі:

input "арифм. өрнекті енгіз"; s$

n=len(s$)

dim a$ (n), flag (n)

for i=1 to n

a$(i)=mid$(s$, i, 1)

next

rem=======================

for i=1 to n

if a$(i)='(' then flag (i)=1

if a$(i)=')' then flag (i)=-1

next

rem=======================

for i=1 to n

s=s+flag (i)

if s<0 then x=1

next

if s=0 and x=0 then ?"жақшалар дұрыс қойылған" else ?"жақшалар қате қойылған"

Есепті Паскальда шешу үлгісі:

const m=10;

var flag: array [1..m] of integer;

a: array [1..m] of string[1];

st: string;

i,s,n,x: integer;

begin

writeln ('арифм. өрнекті енгіз'); readln (st);

n:=length (st);

for i:=1 to n do

begin

a[i]:=copy(st, i, 1);

flag[i]:=0;

end;

for i:=1 to n do

begin

if a[i]='(' then flag [i]:=1;

if a[i]=')' then flag [i]:=-1;

end;

s:=0;

for i:=1 to n do

begin

s:=s+flag [i];

if s<0 then x:=1;

end;

if (s=0) and (x=0) then writeln ('жақшалар дұрыс қойылған')

else writeln ('жақшалар қате қойылған');

end.

Тест:

Берілгені:

(4*5+1)*((2/6-2*3)+4))

(6+56))-90*(5-2*(3-7/3)

Нәтижесі:

Жақшалар дұрыс қойылған

Жақшалар қате қойылған

2-мысал: Сурет галереясында күзетшілер жұмыс істейді. Әр күзетшінің жұмысқа келу уақыты мен жұмыстан кету уақыты белгілі. Сурет галереясы әрдайым күзетілген бе, әлде күзетілмей қалған кездер бар ма?

Есепті шешу идеясы: мысал (7.1-кесте)

7.1-кесте

Келу уақыты

Кету уақыты

1-күзетші

8.00

12.00

2-күзетші

11.00

16.00

3-күзетші

15.00

19.30

4-күзетші

20.00

23.50

  1. Массивтерді толтырамыз:

А массиві: күзетшілердің келу және кету уақыттары;

Flag массиві:

  • егер А массивінің сәйкес элементі күзітшінің келу уақыты болса – «1»;

  • кету уақыты болса – «-1»;

7.2-сурет

  1. А массивін СҰРЫПТАЙМЫЗ. Сәйкесінше, Flag массивінің элементтерін ауыстырамыз:

7.3-сурет

  1. Екінші массивтің элементтерін қосамыз. Егер ағымдық қосынды 0-ге тең болып қалса (алайда массив әлі аяқталмаған болса), онда галерея күзетсіз қалды деген сөз (19.30-да күзетші кетіп қалды, ал ауысым әлі келген жоқ).

7.4-сурет

Есепті Паскальда шешу үлгісі:

const m=20;

var a, flag: array [1..m] of integer;

i,s,k,n,x: integer;

begin

writeln ('күзетшілер саны');

readln (n);

j:=1;

for i:=1 to n do

begin

writeln ('келу,кету уакыты');

readln (a[j], a[j+1]);

flag [j]:=1;

flag [j+1]:=-1;

j:=j+2;

end;

for j:=2*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;

x:=flag[i];

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

flag [i+1]:=x;

end;

k:=0;

s:=0;

for i:=1 to 2*n do

begin

s:=s+flag [i];

if s=0 then k:=k+1;

end;

if k=1 then writeln ('галерея ардайым күзетілді')

else writeln ('галерея ',k-1,' рет күзетсіз қалды');

end.

Тест:

Берілгені:

n=3

8

10

9

12

11

13

n=3

8

10

9

12

13

14

Нәтижесі:

галерея ардайым күзетілді

галерея 1 рет күзетсіз қалды'

3-есеп: Координаттық түзуде N бөлік (үзік) өз координаттарының соңымен берілген. Байланысқан облыстардың санын анықтау керек.

Есепті шешу идеясы:

  1. Массивті толтырамыз:

А: бөліктердің басы мен соңының координаттары;

Flag:

  • Егер массивтің сәйкес А элементі – бөліктің басының координатасы болса – «1» ;

  • Егер массивтің А элементі – бөліктің соңының координатасы болса – «-1» ;

  • Flag массивінің элементтерінің орнын ауыстыра отырып, А массивін СҰРЫПТАЙМЫЗ:

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