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

Алдымен 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,’табылған жоқ’)