04.02.2015 Views

"Datormācība. Skaitlisko aprēķinu realizācijas metodes ...

"Datormācība. Skaitlisko aprēķinu realizācijas metodes ...

"Datormācība. Skaitlisko aprēķinu realizācijas metodes ...

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

for j:=1 to i-1 do<br />

begin a:=a+1;<br />

if M[j+1]>M[j] then<br />

begin<br />

buf:=M[j];<br />

M[j]:=M[j+1];<br />

M[j+1]:=buf; end; end; end;<br />

for k:=1 to n do<br />

write(' ',M[k]);<br />

writeln(' ir veiktas',a, ' iteracijas');<br />

end.<br />

ņa}<br />

{salīdzina i-to elementu ar nepārbaudītās<br />

masīva daļas elementiem}<br />

{ja atrasts elements, kurš ir lielāks par i-to<br />

elementu, tos maina vietām}<br />

Programmas algoritms paredz ciklisku visu elementu no pēdējā līdz otram caurskati un<br />

pārvietošanu pa kreisi, ja „kaimiņam” ir mazāka vērtība. Pēc katra cikla soļa caurskatāmās<br />

masīva daļas garums samazinās par vienu.<br />

Dotā masīva sakārtošanai ar „burbuļu” metodi ir nepieciešams veikt 45 iterācijas.<br />

Abas iepriekš analizētās masīvu sakārtošanas <strong>metodes</strong> uzskatāmas par vienkāršām, bet<br />

arī maz efektīvām. Daudz efektīgāka ir metode, kuras pamatā ir masīva sadalīšanas<br />

princips atsevišķās daļās un elementu apmaiņa starp šīm daļām. Metodes algoritms ir<br />

visai sarežģīts un tādēļ attiecīgo programmu šī kursa apjomā nerekomendējam.<br />

Meklēšana nesakārtotā masīvā ir visai darbietilpīga, jo pamatojas uz visu elementu<br />

caurskati un salīdzināšanu ar uzdoto vērtību („atslēgu”) līdz situācijai, kad salīdzināšanas<br />

rezultāts dod vērtību true. Apstrādājot liela apjoma informāciju parasti vispirms<br />

attiecīgo informācijas masīvu sakārto un pēc tam veic nepieciešamā elementa meklēšanu.<br />

Viena no meklēšanas efektīvām metodēm ir „dalīšanas uz pusēm” metode.<br />

Metodes ideja – sakārtotu masīvu dala uz pusēm un pēc masīva vidējā elementa vērtības<br />

nosaka, kurā masīva daļā atrodas meklējamais elements. Nevajadzīgo masīva daļu<br />

atmet un attiecīgo algoritmu atkārto ar atlikušo masīva daļu. Dalīšanu atkārto tik ilgi,<br />

līdz masīva daļa sastāvēs tikai no viena elementa.<br />

Šādu algoritmu realizē programma:<br />

program dala;<br />

const n=20;<br />

M:array[1..n] of byte<br />

=(20,20,19,19,19,18,17,17,12,12,11,10,9,9,5,5, 3, 3, 2, 1);<br />

var atsl,i,pirm,ped:byte;<br />

a: integer;<br />

rez: boolean;<br />

42

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!