Іздеу алгоритмі

0

Тақырыбы: Іздеу алгоритмі

Мазмұны

  1. Кіріспе
  2. Есептің қойылымы
  3. Теориялық мағлұматтар                                   1 Іздеу алгоритмі

3.1.1 Интерполяциялық іздеу әдісі

3.1.2 Сызықты іздеу  әдісі.

3.1.4 Қарапайым алгоритм.

3.2.1 Сұрыптау тәсілі

3.2.2 Сұрыптау алгоритмі

3.2.3 Орналастыру әдісі арқылы сұрыптау.

3.2.4 Көпіршік тәсілі

4 Программаның жазылуы

Қорытынды                                                                                                   Қолданылған әдебиеттер

КІРІСПЕ

Техниканың даму жетістіктеріне сай ЭЕМ – біздің өміріміздің әр алуан салаларында қызмет етуде. Айталық компьютердің көмегімен көптеген салалардың қызметі жеңілдеді десек те болады. Компьютерде автоматтандырылған программа жасауға арналған жаңа технологияларға сай көптеген программалау тілдері пайда болды, солардың негізінде компьтердің қолданылу ауқымы кеңейді, себебі программалау тілдері арқылы құрылған программалар қызметкерге бұрынғыдай көптеген қағаздарды ақтарып, іздеген дерегін таба алмай шаршауынан құтылуына көмектесті. Мысалы, кітапхананы алайық, әрине кімнің болса да, картотеканы пайдалана алғаны дұрыс. Дегенмен де өзімізге керекті кітапты табу үшін оны жазған авторды білуің керек, кітаптың атын, шыққан жылын білуің керек, ал бұл кей кездері ыңғайсыздық тудырады, әсіресе ең алғаш келген адамдарға немесе кітап туралы ақпараты аз адамға қиындық әкелуі әбден мүмкін. Ал қазіргі озық технологиялармен жабдықталған кітапханаға барсаңыз ЭЕМ-ның көмегімен оп-оңай өзіңізге қажетті кітапты, оның тек жылын немесе ұқсас атын білу арқылы ғана табуыңызға болады.

Программист мұндай программаларды жасаған кезде барлық мәліметті компьютерге енгізіп сақтайды да, кітаптардың параметрлері бойынша, мысалы авторлардың фамилиясын алфавит бойынша сұрыптау арқылы сұраныс жасай алады. Кітапханаға келген адам өзіне қажетті кітапты бірнеше параметрлері бойынша кітапханашыға жеткізеді, ол өз кезегінде программаға енгізіп, керекті кітаптың шифрын тез арада тауып алады. Осы арада, әрине сұрыптау және іздеу алгоритмі қолданылады.

Іздеу алгоритмі – барлық қолданбалы програмаларда пайдаланылған десек қателеспейміз. Аты шулы интернеттің өзін алып қарасақ та жеткілікті, онда кірген әрбір қолданушы өзіне керекті мәліметті сұраныс жіберу арқылы тауып алады.

Мәтіндік редактормен жұмыс жасау — өте күрделі программалауды талап етеді. Өзімізге қажетті сөзді табу үшін көптеген тәсілдердің ең тиімдісін таңдап алу да қиын, себебі, мәтіндік редактордың күрделілігіне қарай оған сәйкес іздеу-сұрыптау әдіс-тәсілдері қолданылады. Мен осы курстық жобада сол әдіс-тәсілдерге тоқталамын. Менің программамның мақсаты – енгізілетін мәліметтегі кейбір сөздерді іздеп тауып, оны жоюға немесе өзгертуге негізделген.

Есептің қойылуы.

   Тапсырма: Жол берілген. Барлық «de» жалғауын өшіру керек; барлық «an» жалғауын «en» жалғауымен, ал барлық «ol» сөзін «alar сөзімен алмастыру керек.

Мысалы: mende erten mamamen birge bolamin сөйлемі енгізілсе, алынатын нәтиже келесідей болады: men erten mamaman birge alarmin. 

Іздеу алгоритмі

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

Іздеу әдістерін сондай-ақ нақты кілттерді пайдаланатын және туындаушы кілттерді пайдаланатын деп екіге бөледі. Бұл жағдайда кілт деп өзіміз іздеп отырған сөзді айтады. Мәтіндік редакторға қолданылатын кілт – туындаушы болып табылады, себебі ізделінетін массив алдын-ала алфавит бойынша сұрыпталған. Бұл рет іздеуді жеңілдету үшін пайдаланылады.

 

Интерполяциялық іздеу әдісі

Кейбір кітаптарда бұл әдіс «экстраполяция әдісі» деп аталады. Экстарполяция – берілген интервалдан тыс бірнәрсені анықтау әдісі, ал интерпояция – сол интервал аралығына анықтау әдісі. Сондықтан да «экстраполяция әдісі» деп атау қате, үйткені ізделінетін сөзді шекарадан тыс аумақта іздеу мүмкін емес.бұл әдісті сипаттамас бұрын сізге ағылшын тіліндегі «treasure» сөзінің аудармасы қажет болды дейік. Яғни сіздің алдыңызда тапсырма – осы сөзді сөздіктен іздеу. Біздің келесі іс-әркеттеріміз қандай да бір іздеу алгоритмін құрумен жалғасады. Ізделінетін сөзді алфавит бойынша сұрыпталған массивтен іздейміз, ал керекті сөз бізге белгілі. Оны тез арада тауып алуға болады. Енді осы іздеуге толығымен тоқталайық. Бізге керекті сөз «т» әрпінен басталады, яғни алфавиттің екінші бөлігінде, немесе біз ол қандай орында тұрғанында шамамен есептеп ала аламыз. Яғни қанша дым жасауға болатынын анықтап аламыз. Егер ізделінетін массив үлкен болса осы әдіс арқылы оның шекрасын көрсетіп, тек осы аралықты ғана іздеуге болады. Ол үшін келесідей ек теңдік аламыз:

T1=M*N;

T2=2M*Log(2)N+N*Log(2)N;

N – массивтегі элементтердің саны.

M – рет іздеуге болады.

Тура ауытырудың алгоритмі жасайтын операция саны M*N-ге тең. Ал сұрыптауға кететін уақыт N*Log(2)N-ге тең, оған тағы 2M*Log(2)N дихотомия әдісін қосамыз. T1=T2 кезінде екі алгоритм де тиімді шекарада боламыз.

Сызықты іздеу  әдісі.

Алдымен linearsearch (сызықты іздеу) деген шағын порграмма құрастырайық. Оның үш параметрі болады: Strings – жолдың өрнектер қптпры, newstring – жолдың өрнек, осыны іздеу қажет және size – қаралатын қатардың элемпенттер саны.

Біздің басты программамызда екі тип анықталған және оларды біз linearsearch-ң

формальді параметрін баяндауда қолданамыз:

Type StrType=String[20]

ArrayStrType=Array[1..100] Of StrType;

Енді біз шағын прогарамманың басын жаза аламыз:

Function linearsearch(Strings:ArrayStrType; NewString:String;

Size:Integer):Integer;

{……………………………………………………………………….}

{Сызықты іздеу әдісін қолдана отырып, String қатарының алғашқы Size элементінен NewString өрнегінің позициясын қайтару керек, ол жоқ болса, 0-ді қайтару керек…………………………………………………………………………………………………………………}

String қатарынынң әр элементі NewString – пен салыстырылады. Егер де мәндері сәйкес келсе, онда табылған элементтің  позийиясы (индексі) қайтарылады. Ал егер NewString – ті барлық элементтермен салыстырып болған соң, керекті жолдың өрнек табылмаса, онда 0 мәні қайтарылады, бұл – іздеуден түк шықпады деген сөз. Сипатталған процессте барлық элементтер кезекпен салыстырылады. Сондықтан бұл әдісті сызықты немесе тізбектелген іздеу әдісі деп атайды.

әр элемент Strings жодың өрнегінде бір-бірден кездеседі деп ойлайық(егер бұлай болмаса, онда олардың бірінші рет кездескендерін белгілеп отырамыз). Егер элемент табылса, әрі қарай процесс тоқтатылады, сондықтан логикалық Found айнымалысын енгізейік:

 

Var position:Integer;

Found:Boolean;

Begin

Position:=1;

Found:=False;

While (not Found) And (position=size) Do

Begin

If Strings [position]=NewString Then

Begin

Linearsearch:=position;

Found:=True;

End; {If…Then}

Position:=position+1;

End; {While циклінің соңы}

If not Found Then linearsearch:=0;

End; {linearsearch}

 

Егер сіз көңіл аударсаңыз, While циклі мына екеуінің біреуі орындалмағанша жүре береді: not Found өрнегі жалған болмағанша не position мәні size-дан асып кетпегенше.

LinearSearch функциясының қолданылуы.

Біздің linearsearch функциямызда басты программада қалай қолдануға болады? Мысалы, n соңды аттардан тұратын қатарда іздеу жүргізу керек болсын, осы мақсатпен басты программада names қатары баяндалған, сонымен қатар ізделінді есімді сақтайтын NewName айнымалысы да баяндалған. Онда LinearSearch функциясын шақыратын программа үзіндісі былай болады:

Type StrType=String[20];

ArrayStrType=Array[1..100] Of StrType;

Var Names:ArrayStrType;

NewName:StrType;

N,location:Integer;

…….

Location:=linearsearch(names,n);

If location>0

Then WriteLn(NewName,’орны’,location)

Else WriteLn(newName,’табылған жоқ’)

 

Қарапайым алгоритм.

Алгоритмді қарау үшін бір мысалды қарастырайық. Сонымен бізде n символдан тұратын мәтін берілген, оны Т деп атайық немесе T[i] және оның і-ші символы деп атауға да болады. m символдан тұратын жолды немесе сөзді S деп немесе S[i] және оның i-ші символы деп атайық. Бізге берілген жол берілген мәтінде бар ма, бар болса мәтіннің қандай символынан басталатындығын табу керек.

Біз m символы мәтіннің жолының қай символдарымен сәйкес келетіндігін тексереміз. Оны іске асыру үшін Паскальда келесі кодты жазамыз:

Program SimpleSearch;

Var T:array[1..40000] of char;

{мәтін ролін анықтайды}

S: array[1..10000] of char;    {жолдың ролін атқарады}

i, j:longint;

m, n:longint;

begin {программа денесін баяндау}

Қарапайым түрде жаздық, енді осы программаның тиімділігін тәжірибе жүзінде тексеруге болады.

 

Сұрыптау алгоритмі

Сұрыптаудың Шелл әдісі бойынша сұрыптау, Хоар әдісі бойынша сұрыптау, таңдап сұрыптау сияқты түрлері бар.

Сұрыптау дегеніміз—берілген жиынның элементтерін белгілі бір ережелерге сәйкес орналастыру. Оның негізгі көздеген мақсаты – сұрыпталған жиыннан керек элементтерді іздеуді жеңілдету. Сұрыптауды көбіне массивтерді және файлдарды сұрыптағанда көп қолданады. Бұл екеуін әдетте ішкі және сыртқы сұрыптаулар деп атайды. Массивтер “ішкі” (жедел) жадыда орналасатындықтан, ішкі сұрыптау болады. Бұл жадыға тез қатынаймыз, ал файлдар бұдан бәсеңдеу, бірақ сыйымдылығы үлкендеу “сыртқы” жадыда, яғни есте сақтау құрылғыларында (диск, лента т.б.)  сақталатындықтан, оны сыртқы сұрыптау деп атаймыз.

Іздеу әдістерінің де әдістері бір-бірімен қатты байланысқан. Әсіресе, біз бинарлы әдісті, егер қатарымыз сұрыпталған болса, тинтен қолдана алмаймыз. Мысалы, біз бинарлы іздеу әдісін миллиондаған фамилияларды іздеген кезде қолданамыз. Ал ол кітапшадағы фамилиялар алфавит әріптері бойынша сұрыпталған. Яғни, іздеу бар жерде сұрыптау міндетті түрде болу керек.

Тағы сұрыптаудың орналастыру арқылы сұрыптау түрі бар. Бұл әдістің негізгі мәні алдыңғы реттелген элементтерге соңғы элементтерді бір-бірлеп қосып отыруда. Әрине, бұл сұрыптаумен танысқан адам, көп уақытқа созылатын процесс деп ойлауы мүмкін. Бірақ олай емес, өйткені алдыңғы элементтер сұрыпталған күйде болады да, келесі элементті сәйкес кез-келген жерге қоямыз.

Орналастыру әдісі арқылы сұрыптау.

Бұл әдістің негізгі мәні алдыңғы реттелген элементтерге соңғы элементтерді бір-бірімен қосып отыруда. Бірінші қадамға алғашқы екі элемент сұрыпталады. Содан кейін осы екі элементпен салыстырылып, сәйкес орынға үшінші элемент орналастырылады. Үш сұрыпталған элементтерге төртінші элементті қосамыз. Ол жаңа төрттіктегі өз орнына жайғасады. Сөйтіп, сұрыпталған n-1 элементтерге соңғы n-ші элемент қосылғанша жалғаса береді. Осы әдіске мысал ретінде мына процедураны қарастырайық:

 

Procedure ins(var x:Array Of Integer; n:Integer);

Var i,j,t:Integer;

Begin

For i:=1 To n-1 Do

Begin

T:=x[i];

J:=i-1;

While (j>=0) And (t<x[j]) Do

Begin

X[j+1]:=x[j];

j:=j-1;

end;

x[j+1]:=t;

End;

End;

…….

 

 

 «Көпіршік» тәсілі

Осы тәсілді пайдаланған кезде (n-1) – дің ең үлкен өтулері керек. Кестенің бірінші өтуі кезінде  бірінші және екінші жазбаның К1 және К2 кілттері салыстырылады, егер де олардың арасындағы тәртіп бұзылса, онда R1және  R2 жазбалары орындарын ауыстырады. Содан кейін осы процесс R2 және R3, R3 және R4 т.с.с. үшін қайталанады. Осы тәсіл аз кілттері бар жазбаларды қозғалтуға және білінуге мәжбүр етеді. Бірінші өтүден кейін  ең көп мәні бар жазбадағы  кілт кестенің n-ші позициясында тұрады. Әрбір келесі өтулер кезінде  ең көп мәндері бар келесі жазбалардағы кілттер n-1, n-2, …,2 позицияларында орналасады, нәтижесінде сұрыпталған кесте шығады. Әрбір өтулерден кейін осы өтулер кезінде  ауыстырулар болда ма, жоқ па деген тексеруді да істеуі мүмкін. Егер де ауыстырулар жоқ болса, онда ол кесте сұрыпталғаны екені және де одан арғы өтулерді қажет етпейтінін білдіреді. Сонымен қатар, соңғы ауыстырудың индексін есте сақтауға болады. Бұл келесі қадамдағы қарайтын қосалқы кестені кішірейтуге мүмкіндік береді. «Көпіршік» тәсілімен сұрыптағандағы сипаттамасы ең болмағанда n(n-1)/2 салыстыруларын және n(n-1)/2 ауыстыруларын құрайды.  Салыстырудың және ауыстырудың орташа саны n**2 рет.

Паскаль және Си тілдеріндегі «Көпіршік» тәсілін іске асыратын процедура төменде келтірілген:

            Паскаль                                                           Си

Type                                                                      typedef
Rec=Record                                                            struct{
f1 : char;                                                      char f1;
f2 : integer;                                                  int f2;
f3 : integer                                                     int f3; } rec;
End;
Table = Array[1..100] Of Rec;                               rec[100] table;
procedure bubble(var T:Table;                               void bubble(table *t,int n);
n:integer);                                                     /* t — кесте */
{ T — кесте; n – оның өлшемі }                                       /* n – жазба өлшемі */
{ f3 ауданы бойынша сұрыптау}               /* f3 ауданы бойынша сұрыптау */
{
var                                                                 int i,j,pr;
i:integer;                                                       rec el;
temp:Rec;                                            /* f3 ауданы бойынша сұрыптау */
switch:boolean;                                                       do{
begin                                                                       pr=0;
repeat                                                            for( j=0;j<n;j++)
switch:=false;                                                          {
for i:=1 to n-1 do                                          if(*t[j].f3>*t[j+1].f3)
if T[i].f3>T[i+1].f3 then                                                   {
begin                                                                       el=*t[j];
switch:=true;                                                           *t[j]=*t[j+1];
temp:=T[i];                                                             *t[j+1] = el;
T[i]:=T[i+1];                                                        pr=1;
T[i+1]:=temp                                                         }
end                                                                }
until not(switch)                                            }while(pr==1);
end                                                                }

 

Бұл тәсіл ауыстыру тәсілімен сұрыптауды пайдаланады. Ол салыстыру операцияларының циклында орындалуында және көршілес тұрған элементтерін ауыстыруға қажеттігіне негізделген. Оның аталуы сумен толтырылған резервуардағы көпіршіктердің қозғалу кезіндегі процесске ұқсас болғандықтан олай аталды. Әрбір көпіршік өз жиегін табады. Төменде көпіршік тәсілімен сұрыптаудың ең қарапайым программаның формасы көрсетліген:

{Көпіршік тәсілімен сұрыптаудың басталуы}

procedure Bubble(var item: DataArray; count:integer);
var
i,j: integer;
x: DataItem;
begin
for i := 2 to count do
begin
for j := count downto i do
if item[j-1]>item[j] then
begin
x := item[j-1];
item[j-1] := item[j];
item[j] := x;
end;
end;
end; { Көпіршік тәсілімен сұрыптаудың аяқталуы }

 

Бұл мысалда берілген «item» «Dataitem» элементінің массиві болып табылады. Ол сұрыпталады да, ал берілген «count» массивінде элементтердің саны бар. Көпіршік тәсілімен сұрыптаудың екі циклі бар. Массив элементінің саны  «count» айнымалымен берілгендіктен, сыртқы цикл count массивінің қаралуын 1 рет ғана шақырады. Бұл процедура аяқталғаннан кейін әрбір элементтің өз  позициясында тапқанын қамтамасыз етеді. Ішкі цикл салыстыру және ауыстыру операцияның шындығымен орындалатынына негізделген. Көпіршік тәсілімен сұрыптаудың осы версиясы символдық массивтегі элементтердің мәндерін өсу реті бойынша сұрыптай алады. Мысалы, келесі қысқа программа «test.dat» дисктік файлынан оқитын жолды сұрыптайды:

 

program SortDriver;
{бұл программа «test.dat» дисктік файлынан 80 немесе одан да аз символдарын сұрыптайды да, нәтижені экранға шығарады }

type
DataItem = char;
DataArray = array [1..80] of char;
var
test: DataArray;
t, t2: integer;
testfile: file of char;
{ Көпіршік тәсілімен сұрыптау}
procedure Bubble(var item: DataArray; count:integer);
var
i,j: integer;
x: DataItem;
begin
for i := 2 to count do
begin
for j := count downto i do
if item[j-1]>item[j] then
begin
x := item[j-1];
item[j-1] := item[j];
item[j] := x;
end;
end;
end;
begin
Assign(testfile, ‘test.dat’);
Reset(testfile);
t := 1;

{ сұрыптауға кететін символдарды оқу}

while not Eof(testfile) do begin
read(testfile, test[t]);
t := t+1;
end;
t := t-2; {есептелген элементтердің санын дұрыстау }
Bubble(test, t); { массивті сұрыптау}
{ сұрыпталған сиволдық массивтің шығарылуы }
for t2 := 1 to t do write(test[t2]);
WriteLn;
end.

Көпіршік тәсілімен сұрыптауының бір ерекшелігі бар: массивтің соңындағы өз орнында тұрмаған элемент (мысалы, «dcab» массивіндегі «а» элементі) бір өту арқылы өз орнына жетеді, ал массивтің басында орналасқан элемент (мысалы, «d» элементі), өз орнына өте баяу жетеді. Барлық қарауларын бір бағытта істеу міндетті емес. Оның  орнына әрбір келесі қарауын қарама-қарсы бағытта істеуге болады. Бұл жағдайа өз орнынан қатты алыстап кеткен элементтер тез арада өз орнына жылжиды.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Қорытынды

Осы курстық жұмысты жасай отырып мен Паскаль тілінің қандай мүмкіндіктерінің бар екенінне көзім жетті.

Қазіргі уақытта компьютерлік технологиялардың мүмкіндіктері өсті. Кез-келген ірі немесе ұсақ өндіріс орындарын алып қарасаңыз соған көзіңіз жетеді. Үйткені олардың өздері арнайы тапсырыс беріп жасатқан программалары бар. Бұл программада осы өндіріс орнының бүкіл жұмыс-жоспары туралы ақпарат сақталған. Оның қандай да бір жылдағы шығыны мен пайдасын білу қажет болған жағдайда оператор арнайы программаны қолданып оған сұранысты енгізеді, компьютер қас қағым сәтте керекті ақпараттты шығарады. Міне осындай программалардың бәрінде іздеу іске асқан. Бұл дегеніміз іздеу алгоритмі – программаның негізгі тірегі десек те болады.

Іздеу және сұрыптау алгоритмінің тиімділігі – күрделі мәліметтердің ішінен керекті деректі табуға кететін уақытты үнемдеуі. Сіз сол деректі шаң басқан архивтен іздесеңіз жоқ дегенде бір күніңіз кетер еді.

Қорыта айтқанда іздеу алгоритмі – ЭЕМ-ның күнделікті өмірде пайдаланылуын көбейтеді. Себебі ондағы барлық программаларда іздеу алгоритмі қолданылған.

Студенттер үшін Паскаль тілдерінде осындай курстық жұмыстарды жасау, оларға үлкен практикалық сабақтар ретінде болады деп ойлаймын.

 

 

 

 

 

 

 

 

 

 

 

 

Қолданылған әдебиеттер тізімі

 

  1. Фаронов В. В.

Turbo Pascal 7.0 – Москва, издат. «Нолидж», 2000 г.

 

  1. Turbo Pascal – Интернет-руководство.

 

  1. Чинер Р. Язык Турбо Си. «Мир», 1991 г.

 

  1. Немнюгин С. Pascal: Учебный курс. Санкт-Петербург: «Питер», 1999 г.

 

  1. Рюттен Т., Франкен Г. Turbo Pascal 7.0. Киев: Изд. гр. «BHV», 1998 г.

 

  1. Уэйт М., Прата С., Мартин Д. Язык СИ. Москва: «Мир», 1998 г.

Программаның листингісі

  1. PROGRAM IZDEU;
  2. uses crt;
  3. VAR SOILEM:STRING;
  4. COZ:STRING;
  5. K,K1:INTEGER;
  6. BEGIN
  7. clrscr;
  8. WRITELN(‘MATINDI ENGIZ’);
  9. READLN(SOILEM);
  • COZ:=’de’;
  • REPEAT
  • K:=POS(COZ,SOILEM);
  • IF K<>0 THEN
  • BEGIN
  • DELETE(SOILEM,K,2);
  • END;
  • UNTIL K=0;
  • REPEAT
  • K:=POS(‘an’,SOILEM);
  • IF K<>0 THEN
  • BEGIN
  • DELETE(SOILEM,K,2);
  • INSERT(‘en’,SOILEM,K);
  • END;
  • K1:= POS(‘ol’,SOILEM);
  • IF K1<>0 THEN
  • BEGIN
  • DELETE(SOILEM,K1,2);
  • INSERT(‘alar’,SOILEM,K1);
  • END;
  • UNTIL (K=0) AND (K1=0);
  • WRITELN(SOILEM);
  • readkey;

Логикалық структураның баяндалуы

  1. программаның аты;
  2. crt модулін шақыру;

3-5. айнымалыларды баяндау бөлімі:

  1. енгізілетін сөйлемнің типі;
  2. жойылатын сөздің типі;
  3. көмекші бүтін типті айнымалылар, k, k1- символдардың орнын анықтауға қолданылады,
  4. программаның негізгі денесінің басталуы;
  5. экранды тазалау;
  6. «мәтінді енгіз» сөзін экранға шығару;
  7. енгізілетін мәтінді экранға шығару немесе оқу;
  8. меншіктеу операторын қолдану арқылы жойылатын сөзді көрсету
  9. циклдің басталуы;
  10. жойылатын создің сөйлемдегі орнын, яғни позициясын анықтау;
  11. егер жойылатын сөз табылса, онда
  12. жақшаның ашылуы
  13. сөйлемнен k позициясынан бастап 2 символды жою;
  14. жақшаны жабу;
  15. циклдің шарты: позиция 0-ге тең болғанша орында;
  16. циклдің басталуы;
  17. ‘an’ сөзін сөйлемнен іздеп, оның тұрған позициясын k-ға меншіктеу;
  18. егер k позициясы 0-ге тең болмаса, онда;
  19. жақшаның ашылуы;
  20. сөйлемнен k позициясынан бастап 2 символды өшіру;
  21. сөйлемнің k позициясынан бастап ‘en’ сөзін қою;
  22. жақшаның жабылуы;
  23. ‘ol’ сөзін сөйлемнен іздеп, оның тұрған позициясын k1-ге меншіктеу;
  24. егер k1 позициясы 0-ге тең болмаса, онда;
  25. жақшаның ашылуы;
  26. сөйлемнен k1 позициясынан бастап 2 символды өшіру;
  27. сөйлемнің k1 позициясынан бастап ‘alar’ сөзін қою;
  28. жақшаның жабылуы;
  29. циклдің шарты: k және k1 позициялары 0-ге тең болғанша орында;
  30. өзгертілген мәтінді экранға шығару;
  31. нәтижені ‘Enter’- ді басқанда бірден экранға шығару;
  32. программаның соңы.

Программаға енгізілген мәліметтер мен алынған нәтиже