Aukštoji matematika
5 (100%) 1 vote

Aukštoji matematika

Mokslų intro

arba “Aukštoji matematika “žaliems”

Trumpai:

Tikslas: palengvinti adaptaciją prie mokslų, kuriems eilinėse mokyklose nepakankamai paruošia: programavimas, matematika (diskrečioji & kt). Kad paskui netektų skųstis, jog daug kalti tenka )

Turinys: esminių idėjų paprasti ir kiek galima įdomūs pavyzdžiai, na, ir truputis teorijos (terminų apibrėžimų ;). Panašiai kaip enciklopedijoj „Mokslas ir visata“. Skiriamas dėmesys, parodyti, kokia nauda iš tų mokslų , kaip jie vienas nuo kito priklauso.

Argumentai abiturientams: manau, verta paaukoti dalelę savo vasaros laisvalaikio mokslams (nedideliais krūviais), nes mokslo metais tikrai norėsis dalį savo mokslalaikio pakeisti pramogomis .

Plačiau:

KODĖL?

Petriukas atbėga pas tėvelį ir klausia:

– Tėti, o kaip rašomas skaičius aštuoni?

– Tai tas pats, kaip begalybė pasukta pi pusiau kampu.

Kartais įstojus į KTU, galima pasijusti Petriuko vietoje. Šis leidinukas – tai prevencinė priemonė, kad taip nenutiktų ;-). Jį jums nepatingėjo parašyti keletas mėgstančių ir suprantančių matematiką funtikų (Fund. moksl. fak. studentų) su mintimi, kad ir jūs nepatingėsit paskaityti .

Matematika ne eilėraštis, jos neužtenka iškalti – nuo to nepajustumėte norimo efekto. Ją reikia suprasti. Matematika tuo ir ypatinga, kad trumpa formule galima užrašyti labai daug. O tam išsiaiškinti reikia laiko. Jei viskas būtų rašoma žodžiais, būtų maždaug 3-5 kartus daugiau popieriaus sugadinta ;).

Čia stengėmės paprastai, glaustai ir vaizdžiai supažindinti su tuo, ką jūs mokysitės KTU taikomojoj matematikoj. Nors buvo planuota apie 10 puslapių, jų išėjo apie 40. Bet juose atsispindi 3 storokos knygos ir semestras joms perskaityti .

Manau neįtemptai skaitant, jas galima peržvelgi per mėnesį – maždaug kaip laisvalaikio skaitinius arba popietės galvosūkius. Per vasaros dieną po puslapį vieną :)). Ir nebūtina išsiaiškinti visas temas – čia kiekvienam pagal galimybes: visi skyreliai yra apytiksliai įvertinti nuo 1 iki 5 pagal sudėtingumą (5 – sunkiausia). Tad galėsit pasirinkti . Be to, vieniems labiau patiks grafikai, kitiems formulės, tretiems algoritmai.

Aksiomos, apibrėžimai, lemos ir teoremos – tai tarsi matematikos griaučiai, ant kurių laikosi taikomieji matematiniai metodai. Todėl pirmame kurse daugiausiai tenka susidurti su teoriniais išvedžiojimais. Jų neišvengsi, bet iš anksto susipažinus ir apsipratus su terminais ir teoremų stilium, bus lengviau perprasti tai, ką dėsto profesoriai ;-). Mes manome, kad efektyviausiai moko geri pavyzdžiai, tad per juos ir stengsimės jus priartinti prie aukštosios matematikos, o į teoremas per daug nesigilinsime. 

Mūsų manymu, labiausiai, atėjus iš mokyklos, pristinga programavimo supratimo ir įgūdžių, tad jam skyrėme truputį daugiau vietos ir pateikėme pirmojuoju. Dabartiniai matematikai vietoj pieštuko ir popieriaus lapo dažniausiai naudoja įvairius matematinius programinius paketus, tad nusimanymas programavime – privalumas.

Ši medžiaga patalpinta internete. http://fumsa.ktusa.lt/mokslu_intro. Ten pat galite rašyti ir savo atsiliepimus. Jie mums pravers tobulinant leidinuką .

Šią medžiagą galima platinti GPL (General Public License) principu : t.y. nemokamai, bet jei ką nors pakeiti, turi pasirašyti bei paaiškint, ką ir kaip pakeitei. Parsisiuntimui bei atsispausdinimui yra PDF arba doc formatas, o skaitymui internete html.

TURINYS

Pastaba.: || || skliaustuose įvertintas temos sudėtingumas (5 – sudetingiausia), kartais su komentarais.

PROGRAMAVIMAS 8

KAI KURIE PASCAL IR C++ KALBŲ ELEMENTAI IR JŲ SKIRTUMAI.||3.5|| 8

Komentarai. ||1|| 8

Kintamieji. ||1.5|| 8

Masyvai. || 1 || 9

Priskyrimo ir palyginimo operacijos. || 1 || 9

Loginiai skliaustai. ||1|| 9

Sąlygos sakinys (if). ||2|| 10

Ciklai. ||1.5|| 10

Paprogramės. ||2.5|| 11

Kiti skirtumai. ||1|| 12

Kintamųjų bei paprogramių pavadinimai ||0.5|| 12

Rodyklės ir simbolių eilutės ||3.5, “Galite praleisti ir pasiskaityti vėliau, jei bus laiko”|| 13

Algoritmai. ||2.5|| 14

Blynų kepimo algoritmas. ||2, || 14

Sumavimo algoritmas (maždaug tai, ką moko mokykloj). || 1.5 || 15

Didžiausio elemento suradimas. ||2|| 15

Dviejų reikšmių sukeitimas. ||1|| 15

Rikiavimas dalinio MinMax būdu. ||2.5|| 18

Struktūrogramos. || 1.5 || 18

Trasavimas (programų tikrinimas/derinimas/testavimas). ||2.66|| 21

OBJEKTINIS PROGRAMAVIMAS. ||3.33, “BET LABAI SVARBUS” || 22

C++ BUILDER APLINKA. ||1|| 22

Praktiniai patarimai programuotojams. ||2|| 23

DISKREČIOJI MATEMATIKA 24

TEOREMŲ STRUKTŪRA ||4|| 24

MATEMATINĖ INDUKCIJA ||3|| 25

AIBĖS ||2.5|| 26

ATITIKTYS IR FUNKCIJOS ||3.66|| 26

Teorijos atvaizdis praktikoje ||0.5|| 28

ŠIS TAS APIE LOGINES FUNKCIJAS ||3|| 28

GRUPIŲ TEORIJA (ALGEBRINIŲ STRUKTŪRŲ DALIS) ||3.5|| 29

Kam reikalinga grupių teorija? ||2|| 29

GRAFAI ||3,”ĮDOMU” || 30

MATEMATINĖ ANALIZĖ 32

SKAIČIŲ SEKA IR JOS RIBA ||3|| 32

FUNKCIJOS RIBA ||3.66|| 32

NYKSTAMŲJŲ FUNKCIJŲ PALYGINIMAS ||2|| 33

PARAMETRINĖS LYGTYS ||2|| 33

FUNKCIJOS TOLYDUMAS ||1.5|| 34

FUNKCIJOS IŠVESTINĖ IR DIFERENCIALAS ||4, “SVARBU”|| 35

Išvestinių pritaikymas (matematinių modelių sudarymas) ||3|| 36

INTEGRALAI ||3, “SVARBU”|| 37

Neapibrėžtinis integralas || 2.5 || 37

Apibrėžtinis
integralas || 3.5 || 38

SKAIČIUS E ||1.5|| 39

POLINĖ KOORDINAČIŲ SISTEMA ||2; ”GRAŽU IR SMAGU” || 39

KOMPLEKSINIAI SKAIČIAI ||2.66|| 40

GRADIENTAS IR JO SAVYBĖS ||2.5 “PATARTINA PERSKAITYTI, NES PRIEŠ KOLĮ NESPĖSIT ;)” || 41

Kaip mokytis ? 43TRUMPA APŽVALGA

PROGRAMAVIMAS

Nors sakoma, kad “matematika – mokslų tarnaitė”, bet jau kelis dešimtmečius ji turi galingą pagalbininką – kompiuterį ;). Jo pagrindinis pliusas – gebėjimas laaabai 😉 greitai skaičiuoti. Be to, jis sėkmingai tvarkosi su smulkmenom ir palieka laisvas rankas rimtesniam darbui. Tam, kad sėkmingai išnaudotume šias kompiuterio savybes, reikia nusimanyti programavime – t.y., mokėti nurodyti kompiuteriui ką ir kaip daryti .

Santrauka:. Programavimo pagrindai. Elementarių užd. sprendimo algoritmai. Programavimo kalbos, technologijos. Programų testavimas ir derinimas. Paprogramės ir bibliotekos. Duomenų tipai ir veiksmai su juose. Teksto analizės ir redagavimo algoritmai. Meniu kūrimo principai. Įrašo tipo duomenų struktūros. Failai.

Šis skyrelis yra skirtas informatikos, tiksliau – programavimo pradmenims. Mūsų universitete pirmajame kurse programuoti mokoma C++ Builder aplinkoje, kur naudojama C++ programavimo kalba (ji išsivystė iš C kalbos, kuri paprastesnė). Kadangi daugelyje mokyklų programuoti mokoma Pascal kalba, tai kartais būna sunku pereiti nuo vienos kalbos prie kitos. Todėl mes pateiksime pirmuosius algoritmus abejomis kalbomis. Tiems, kas nesimokė Pascal, geriau žiūrėti tik C++.

Apžvelgsime pagrindinius programavimo elementus ir pateiksime keletą standartinių pavyzdžių. Algoritmai, kurių išmoksti su C++, yra analogiški ir kitose programavimo kalbose – VisualBasic, Java ir pan. O žinant C++, kitos kalbos sintaksę perprasti galima per porą savaičių. Be to dauguma programavimo kalbų (ypač programavimui internete) yra pagrįstos C++ sintakse. Specifinėm funkcijom įsiminti gali reikėti daugiau laiko, bet tai – ne bėda, nes dabar yra galingos pagalbos sistemos (“Help”).

Dėstytojas J. Blonskis sakė, kad jo manymu, universitete labiausiai pritrūksta nuoseklaus studentų darbo. Be to, pirmas 3 savaites daugiausia dėmesio skiriama susipažinti su C++ Builder programavimo aplinka (tai nėra sudėtinga, bet neverta atsipalaiduoti, nes po to laukia rimtas darbas – programavimas).

DISKREČIOJI MATEMATIKA

Vienas iš labiausiai patraukiančių pirmakursių dėmesį modulių pirmame semestre yra diskrečioji matematika. Tik tas potraukis gan įvairus ir keistas…. Vieni džiaugiasi įdomiu ir verčiančiu smegenėles padidinti apsukas dalyku, o kitiems tai asocijuojasi su bemiegių naktų žvaigždėtu dangum . Čia svarbu sugebėti įsigilinti į problemą ir nesusimaišyti.

Apibendrintai galima sakyti, kad diskrečioji matematika nagrinėja pavienius (atskirus, diskrečius) objektus. Tokių objektų pavyzdžiai: sveikieji, racionalieji skaičiai, automobiliai, namai ir tie patys nemiegantys studentai.. Šiuo atžvilgiu realiųjų skaičių padėtis yra kiek kitokia… Žinome, kad tarp bet kurių dviejų realiųjų skaičių yra dar vienas, nesutampantis su jais. Vadinasi realieji skaičiai (tiksliau jų aibė) neturi nė mažiausio plyšelio, todėl nėra diskretūs.

Modulis, kuris dėstomas pirmakursiams, yra įvadinis, taigi jo tikslas yra supažindinti su diskrečiosios matematikos sąvokomis bei teorijomis. Tų sąvokų tikrai nepasirodys per mažai. Dažniausiai jas nėra sunku suprasti, bet kai jų daug, jos maišosi tarpusavyje (verta susigalvoti sau patogią įsiminimo sistemą). Vėlesniuose kursuose d. m. skyriai bus detalizuojami atskirais kursais: logika, algebrinės struktūros, skaitiniai metodai, grafų teorija.

Modulio santrauka: Aibės, funkcijos, sąryšiai. Atitiktys ir funkcijos. Bendrosios algebros elementai. Pusgrupės, grupės, gardelės. Logikos įvadas. Bulio algebra. Grafų teorijos įvadas. Maršrutai, grandinės ir ciklai. Kombinatorika. Binominių koeficientų savybės. Rekursija. Asimptotiniai įverčiai. Kalbos ir gramatikos. Automatų teorijos elementai.

MATEMATINĖ ANALIZĖ

Tai nėra labai baisus dalykas. Čia tik įvadas į matematinę analizę, kuria pagrįstas beveik visas mokslinis pasaulio ir gamtos reiškinių aprašymas. Bet juk visi dideli žygiai prasideda nuo mažų žingsnelių ;-).

Be apibrėžimų ir teoremų mokėjimo čia verta ir vaizduotę palavint. Kartais net pasitaiko grafikų, kurie galėtų pretenduoti į meno kūrinius .

Modulio santrauka: Aibių teorijos elementai. Skaičių seka ir jos riba. Funkcijos riba ir tolydumas. Funkcijos išvestinė, diferencialas. Viduriniųjų reikšmių teoremos. Teiloro formulė. Funkcijų tyrimas. Kelių kintamųjų funkcijos sąvoka, riba, tolydumas. Kelių kintamųjų funkcijų diferencijavimas. Ekstremumai. Mažiausių kvadratų metodas. Neapibrėžtinis integralas. Integravimo metodai.

Modulio tikslas: Išmokyti pagrindinių vieno ir kelių kintamųjų funkcijų diferencialinio skaičiavimo sąvokų, teiginių, metodų bei tų metodų taikymų gamtos ir technikos moksluose, mokyti matematinių modelių sudarymo pradmenų

Matematikos programiniai paketai

Studijuojant bei taikant matematiką, labai praverčia įvairūs matematiniai paketai – jie padeda sutaupyti laiko tiek atliekant sudėtingus skaičiavimus, tiek braižant grafikus. Aišku reikia suprasti, kaip ir ką jie daro ;).
paketas Ypatybes

MathCad

www.mathsoft.com

www.mathcad.com

Graži ir aiški vartotojo sąsaja. Turi įvairių savybių (įvairiapusiška), bet nėra optimalus labai sudėtingiems moksliniams skaičiavimams. Bakalauro studijoms jo beveik užtenka (kartais pagelbėt gali tik Maple ;).

Be to, prie jo yra MathConnex priedas – jis padeda susieti skaičiavimus, atliekamus skirtinguose programose. Galima pasinagrinėti pritaikymo pavyzdžius (Help->Resource Center).

Maple

www.maplesoft.com

Specializuojasi analitinėje matematikoje, t.y., formulių pertvarkymuose, supaprastinimuose ir pan. (visai pravartu sprendžiant sudėtingas lygčių sistemas ir norint gauti atsakymą formule) Analitinės matematikos srityje lyderiauja. Turi ir geras grafikos galimybes (kaip ir dauguma ;).

Mathematica

www.wolfram.com/

products/mathematica

panašiai kaip ir Maple (asmeniškai man neteko su ja dirbt, bet pagal ją padarytas http://mathworld.wolfram.com, ir atrodo neblogai :) Iš JAV atvykęs profesorius kažkada pasakojo, kad pas juos Mathematica pigiau kainuoja negu Maple.

MatLab

www.mathworks.com

Ypatingai specializuojasi skaitmeniniuose skaičiavimuose (rezultatai būna apytikslūs, bet gaunami greičiau negu analitiniu būdu, be to, analitiniu būdu neįmanoma kai kurių uždavinių išspręsti). Turi daug modulių/posistemių: veiksmams su matricom, optimizavimui, neuroniniams tikslams, sistemų modeliavimui (Symulink) ir t.t. Pasileidę ją parašykit demo ir pamatysit :).

Excel

www.microsoft.com/

office/excel

Manau, patys matėt – pritaikyta finansiniams skaičiavimams ir ataskaitoms. Bet turi daug įvairių priedų (Add-Ins) specializuotom užduotims (pvz. duomenų analizei).

SAS (www.sas.com),

SPSS(www.spss.com)

SAS (Statistical Analysis System) – galingiausia statistinės analizės programa, dirbanti visuose OS. Dirbti su ja mokoma ir mūsų fakultete. Brangiai kainuoja.

SPSS – panaši, siauresnių galimybių, bet populiaresnė, nes pigesnė.

Taip pat iš žymesnių yra S-Plus. Be to, statistika, dar jaunas ir besivystantis mokslas, tad pasitaiko įvairaus plauko programinių paketų.

Daugiau galite rasti http://directory.google.com/Top/Science/Math/Software/

LITERATŪRA. NUORODOS. PAAIŠKINIMAI

LITERATŪRA

Norite sužinoti daugiau? Galit paskaityti:

• Vidmantas Pekarskas, “Diferencialinis ir integralinis skaičiavimas”, 1d., Kaunas, Technologija, 1996. (Pagal šį vadovėlį ir yra mokoma FMF).

• Nijolė Janušauskaitė, Romualdas Markauskas, Aldona Pekarskienė, Vilė Sabatauskienė , “Tiesinė algebra ir diferencialinis skaičiavimas” KTU, Kaunas, Technologija, 2001 (pagal jį mokomi kitų specialybių studentai) (berods ružavais viršeliais)

• J. Blonskis, V.Bukšnaitis ir kiti, “Programavimo C++ Builder pavyzdžiai”, tamsiai raudonais viršeliais (pagal jį ir bus mokoma), Kaunas, Smaltijos leidykla, 2002

• Enciklopedija “Mokslas ir visata”, Vilnius, Vyriausioji enciklopedijų redakcija, 1990

Šiuos vadovėlius galite rasti viešojoj bibliotekoj. Bet nieks per galvą neduos, jei vadovėlį pavartysite kokiam knygyne ;-).

• Skyreliui “kaip mokytis ?” pora įdomių knygučių

o Silvija Lair, “Atminties lavinimas”, Vilnius, Rosma, 2001

o Kurt Tepperwein, “Menas mokytis nepavargstant”, Vilnius, Alma Littera, 1998

NUORODOS

Bendros:

http://mathworld.wolfram.com (sistematizuotas ir vaizdus matematikos žinynas)

http://www.mathsoft.com/ (MathCad svetainė)

http://archives.math.utk.edu/visual.calculus (vaizdžios ir interaktyvios mat. analizės pamokėlės)

http://atzalynas.su.lt/skaitykla/main_pagrindai.htm (šis tas lietuviškai apie programavimą)

http://mokslo.centras.lt/ (tikriausiai patys žinot 😉

ir aishku http://fumsa.ktusa.lt/moxlu_intro 

Specifinės:

Maple pradžiamokslis: http://www.vtu.lt/leidiniai/elektroniniai/matematika2/Mat2i1.html

Matematikos praktikumas su MAPLE http://ieva.maf.vu.lt/home/aleksas/

Grafų pritaikymo pvz.: http://www.soften.ktu.lt/~mockus/flash/Release/SST6.html

Paskaitų apie algoritmus konspektai http://proin.ktu.lt/~rimstur/paskaitos.htm

Apie apibrėžtinį integralą http://www.hyper-ad.com/tutoring/math/calculus/Construction of the Riemann Integral.html

Mandelbroto aibės (fraktalo) tyrinėjimui http://aleph0.clarku.edu/~djoyce/julia/explorer.html

PAAIŠKINIMAI

_Pastaba – pastaba;

_Pamąstymui – klausimai bei užduotys pamąstymui;

_Perspektyvoj – žvilgsnis į ateitį – daug neaiškinant paminimi terminai bei idėjos, kuriuos verta būt girdėjus, kad paskui būtų lengviau įsiminti 😉

 – lyriniai nukrypimai.

Dėstomų skyrelių sudėtingumą autoriai apytiksliai įvertino || || skliaustuose esančiu skaičiumi – nuo 1 iki 5 (5 – sudėtingiausia).

Apibrėžimus stengėmės pažymėti taip ; jei tai nėra tikslus apibrėžimas, bet

supaprastintas paaiškinimas – taip .

PROGRAMAVIMAS

Daugiausia rašė Olegas Kosuchinas , bet Jurgis Pralgauskis buvo priekabus ir nemažai perrašė. Tačiau Olegas vėliau tapo dar priekabesnis ir perrašė viską galutinai.

Čia pateikiamos programos tiek C++, tiek Turbo Pascal kalba yra parašytos DOS aplinkai. Windows aplinkoje viskas būtų taip pat, tik tektų keisti vartotojo sąsają. Tačiau tai būtų sudėtingiau paaiškinti, tektų skirti daugiau laiko ne pačiam algoritmui, o kitokiems aspektams. Tačiau nesijaudinkite – išmoksite universitete.

KAI KURIE PASCAL
C++ KALBŲ ELEMENTAI IR JŲ SKIRTUMAI.||3.5||

Programavimo kalbos taip pat kaip ir žmonių kalbos, turi sakinio dalis bei sintaksę (gerai dar, kad neturi kirčiavimo taisyklių). Čia panagrinėsime C++ kalbos elementus, ir duosime paprastus pavyzdžius, bet programų tekstuose (koduose) jie gali būti įvairiai tarpusavy persipynę. Fundamentaliųjų mokslų fakultete pirmame kurse mokoma programuoti C++ kalba, todėl jai skirta daugiausia dėmėsio. Pascal kalba pavyzdžiai pateikti tam, kad būtų lengviau jau mokantiems ją.

Komentarai. ||1||

Komentarai naudojami tam, kad būtų galima paaiškinti programos tekstą. Tai ypač naudinga rašant ilgas programas – be komentarų net pats autorius dažniausia neprisimena, kodėl buvo suprogramuota būtent taip, o ne kitaip prieš keletą savaičių ar mėnesių. Komentarų tekstas C++ kalboje atskiriamas:

//dviem brūkšniais

/*arba rašomas tarp dalybos brūkšnio ir žvaigždutės

šiuo atvejų komentaro tekstas gali užimti ir daugiau nei vieną eilutę*/

Teksto kompiliatoriai, tikrinantys programų tekstus, komentarų nenagrinėja.

- Pascal kalboje tarp figūrinių { } skliaustų rašomi komentarai, o C++ kalboje “{“ atitinka programos (ciklo, sąlygos vykdymo) pradžią, o “}” – pabaigą. Pascal kalboje pradžia žymima žodžiu Begin, o pabaiga – žodžiu End.

Kintamieji. ||1.5||

Programos dažniausiai atlieka veiksmus su kintamaisiais – tai gali būti skaitinio, simbolinio (raidės, skyrikliai, kiti ženklai), loginio tipo duomenys ir kt. Tipas nurodo, kokias reikšmes kintamasis gali įgyti ir kokius veiksmus su juo galima atlikti. Kintamieji aprašomi:

C++ Pascal pastabos

; :; bendrasis atvejis

Pavyzdžiui:

C++ Pascal pastabos

int A; A : integer; sveikasis skaičius

float B; B : real; realusis skaičius

Galima aprašyti tame pačiame sakinyje kelis kintamuosius:

C++ Pascal pastabos

int A, b, c; A, b, c : integer; sveikasis skaičius

bool P1, P2; P1, P2 : boolean; loginis kintamasis

FILE *F, *FF; F, FF : text; tekstinės bylos kintamasis

Panašiai, kaip ir kintamuosius, galima apsirašyti ir reikšmes-konstantas. Jų keisti programos eigoje jau negalima. Tačiau jų prasmingi vardai padeda programuotojui orientuotis programoje. Pvz, programuojant grafiką, spalvų kodus gali atitikti konstantos BLACK, RED, WHITE ir tt.

C++ Pascal pastabos

const int TAIP = 1;

const int NE = 0; const taip := 1;

const ne := 1; : C++ kalboje yra susitarimas konstantas rašyti tik didžiosiomis raidėmis ar bent jau pradėti didžiąja.

Masyvai. || 1 ||

Be elementarių tipų (kur saugoma tik viena reikšmė) būna ir struktūrinių. Populiariausias iš jų – masyvas.

Masyvas – tai vienodo tipo elementų sąrašas (seka), kuriame elementai yra sunumeruoti.

Tai reiškia, kad kiekvienas masyvo elementas turi savo indeksą.

C++ Pascal pastabos

int mas[10];

float mas2[30];

char simboliu_masyvas[100],

vardas[15];

/*simboliu_masyvas tinka žodžiams arba tekstui saugoti*/ Var

Mas : array [0..9] of integer;

mas2 : array [0..29] of real;

vardas : array [0..14] of char; : C++ visi masyvai pagal nutylėjimą numeruojami nuo 0. T.y., jei masyve yra 10 elementų, tai dešimtojo elemento indeksas bus 9.

Norėdami panaudoti masyvo elementą, nurodome jo numerį (indeksą): pvz., vardas[2] – trečiasis masyvo vardas simbolis (primename – numeracija prasideda nuo 0).

_Perspektyvoj : galima ir pačiam nesunkiai susikurti naujų tipų. Tai dažniausiai įvairios struktūros: masyvai arba skirtingų tipų reikšmių rinkiniai.

Priskyrimo ir palyginimo operacijos. || 1 ||

Dažniausias veiksmas programuojant yra priskyrimas. Be jo nebūtų prasmės turėti kintamuosius.

C++ Pascal pastabos

b = 1;

vardas[0] = ‘O’;

vardas[1] = ‘n’;

vardas[2] = ‘a’;

Mas2[16] = -5.02;

b = b+1; //yra tas pats kaip

b++;

/*du paskutiniai priskirimai dažnai naudojama cikluose – padidina b reikšmę vienetu*/ b := 1;

vardas[0] := ‘O’;

vardas[1] := ‘n’;

vardas[2] := ‘a’;

Mas2[16] := -5.02;

b := b+1;

: C++ nereikia “:” priskyrimo operacijoje. Pripratusiems prie Pascal’io tai sudaro nepatogumų. O Pascalyje “=” reiškia palyginimo operaciją.

Šiais laikais ypač dažnai tenka rinktis. Tam reikalingos palyginimo operacijos. Jos grąžina loginę reikšmę TRUE (taip, tiesa) arba false (ne, netiesa).

C++ Pascal pastabos

b == c b = c ar b lygu c

b != c b <> c ar b nelygu c

b > c b > c ar b daugiau už c

b < c b < c ar b mažiau už c

b <= c b <= c ar b nedaugiau už c

(analogiškai yra >= )

Loginiai skliaustai. ||1||

Jie naudojami keliems veiksmams sugrupuoti. Tai būna reikalinga sąlygos (if) ir ciklo sakiniuose, taip pat aprašant funkcijas (paprogrames)

C++ Pascal pastabos

{

//programos tekstas

}; Begin

{programos tekstas}

end; “;” ne visada būtinas, bet atsargumo dėlei jį verta visada dėti. Jį praleidus kartais gali tekti gerą pusvalandį ieškoti klaidos !

Jei naudojama tik viena komanda (sakinys), tai ją “apskliaudus” loginiais skliaustais, niekas nesikeičia. Tačiau juos verta naudoti ir tokiu atveju: tada programa būna aiškesnė, ir, norint papildyti veiksmus cikle ar sąlygos sakinyje, nereikės rūpintis skliaustais.

Sąlygos sakinys (if). ||2||

Kas moka anglų kalbą, šį sakinį (šią struktūrą) gali suprasti
intuityviai.

C++ Pascal pastabos

//bendras atvejis:

if () ;

//arba

if () ;

else ; {bendras atvejis:}

if then ;

{arba}

if then

else ; : C++ prieš else būtinas kabliataškis (pascal kalboje jo dėti negalima)

: C++ būtina apskliausti sąlygą (pascal kalboje to nereikia)

//pavyzdys:

if (pazymys == 10)

stipendija = 210; {pavyzdys:}

if pazymys = 10 then

stipendija := 210; Jei pazymių vidurkis yra 10, tai stipendija bus 210Lt.

if ir else sakinius galima kombinuoti tarpusavy, norint nurodyti įvairias sąlygas.

: Čia taip vadinamo sprendimų medžio (“decision tree”) pavyzdys (jį galima pavaizduoti, kaip dvejetainį medį).

: Atsargiai. Jei neprižiūrėsite loginių skliaustų, galite sulaukti netikėtų rezultatų. if (pazymys < 6)

{

stipendija = 0;

pramogos = 0;

}

else

if (studiju_forma == dienine)

{

if (pazymys < 9)

stipendija = 150;

else if (pazymys < 10)

stipendija = 180;

else

stipendija = 210;

}

/*pernelyg nesidžiaukite – tai tik taip vadinamas „pseudo kodas“ – programos algoritmas, užrašytas „panašiai“ į kurią nors programavimo kalbą. O kad iš tikrųjų gauti 210 lt teks daug paprakaituoti 

*/ Sprendimų medžio blokinė schema. Medis tarsi apverstas, o po kiekvienos sąlygos – atsišakojimas (dažniausiai į dvi puses): : Galima nurodyti ir sudėtinę sąlygą, naudojantis loginėmis operacijomis && (ir) bei || (arba).

Ciklai. ||1.5||

Ciklas – labai galingas programavimo elementas. Parašius skaičiavimo komandą(as) vieną kartą, jas galima vykdyti 1000 ir daugiau kartų. Žmogui atlikti tiek veiksmų greitai ir be klaidų neįmanoma, o kompiuteris tai įvykdys greitai ir be pastebimo nuovargio. Vykstant ciklui, dažniausiai keičiasi tam tikri parametrai (pvz., į universitetą priimamų studentų atrinkimo cikle keistųsi studento registracijos numeris, tuo pačiu priėmimo balas ir pan.)

oj : Vienas ciklo “prasukimas” vadinamas iteracija.

Ciklai naudojami pasikartojantiems veiksmams aprašyti. Pradžioje mums užteks dviejų tipų ciklų – while ir for. Trumpai aptarsime, kaip jie veikia, ir kuo skiriasi C++ ir Pascal kalbose:

while ciklas:

C++ Pascal pastabos

i = -19;

while (i < 0)

{

i = i + 2;

} i := -19;

while (i < 0)

begin

i := i + 2;

end; Veiksmai cikle vykdomi tol, kol tenkinama ciklo vykdymo sąlyga. Duotu atveju kol kintamasis i yra neigiamas, prie jo daug kartų pridedama 2.

for ciklas:

C++ Pascal pastabos

n = 9;

for (i = 1; i <= n; i++)

{…}

//ciklas vykdomas, kol

//i mažesnis arba lygus n n := 9;

for i := 1 to n do

begin … end;

{ciklas paskutinį kartą vykdomas, kai i lygus n, po to ciklas nebevykdomas} Pirmą kartą vykdant ciklą, i reikšmė bus 1 (galima nurodyti ir kitą pradinę reikšmę), antrą kartą bus 2, ir t.t. Po kiekvieno ciklo i reikšmė padidėja vienetu.

: šiuo atveju i yra taip vadinamas

ciklo kintamasis (ar skaitliukas). T.y., juo reguliuojamas ciklo kitimas.

: Matematiškai tai įprasta žymėti i=1¯,¯n¯

arba i = 1..n

n = 10;

for (i = 1; i < n; i++)

{…}

//ciklas vykdomas, kol

//i mažesnis už n : C++ kalboje for ciklas yra lankstesnis, duotą pavyzdį galima buvo aprašyti ir kitaip.

: C++ kartais net nebūtina nurodyti visų trijų ciklo antraštėje esančių parametrų.

Paprogramės. ||2.5||

Dažnai, norint parašyti lengviau suprantamą ir paprastesnę programą, patogu užduotį išskaidyti į kelias smulkesnes užduotis. Tada programuojant kurią nors programos dalį, nereikia galvoti apie kitas dalis, galima labiau susikoncentruoti ties viena problema.

Suskaidyti programą į keletą smulkesnių uždavinių padeda paprogramės.

Pavyzdžiui, programuodami masyvo rikiavimo algoritmą, mes programą išskaidysime į smulkesnes dalis, kiekvienai parašydami paprogramę:

1. Duomenų skaitymas.

2. Masyvo išvedimas (ši paprogramė patogi tuo, kad ją galima naudoti tiek pradinio masyvo išvedimui į failą, tiek rezultatų spausdinimui – šį paprogramė yra universali. Apskritai, programuojant reikia stengtis, kad kiekviena paprogramė būtų kuo universalesnė – galėtų apdoroti įvairesnius uždavinius su skirtingais duomenimis).

3. Rikiavimas.

4. Rezultatų išvedimas.

Šias sudėtines dalis galime skaidyti toliau. Pvz., dalinio dalinio MinMax rikiavimo eigą galima išskaidyti taip:

1. Kiekvieno ciklo metu randame mažiausią elementą

2. Sukeičiame rastą mažiausią reikšmę su buvusia pirmoje dar nesurikiuotoje pozicijoje.

Tačiau labai smulkiai skaidyti algoritmą taip pat ne visada naudinga, jei jis aiškus ir be skaidymo. Yra pastebėta, kad lengviausia uždavinį (ar aprašomą sistemą) suvokti kai jį sudaro ne daugiau 7-nių objektų (kintamųjų, paprogramių ir pan.). Aišku, vienų vaizduotė “paveža” daugiau, kitų – mažiau. Pvz., kodo dalis, kurioje yra 3 kintamieji, 2 ciklo ir 2 sąlygos sakiniai, jau yra “ant ribos”.

Paprogramių realizacijos čia detaliau neaprašinėsime – ji bus paaiškinta nagrinėjant pavyzdžius.

Globalūs ir lokalūs kintamieji:

Paprogramės gali turėti savo lokalius (vidinius) kintamuosius – jie neegzistuoja už tos paprogramės ribų. Pati paprogramė gali pasiekti globalius (išorinius) pagrindinėje programoje aprašytus kintamuosius. Jei yra
globalus kintamasis tuo pačiu pavadinimu, tai naudojamas lokalus (dažnai taip būna su ciklo skaitliuku i).

: Paprastame programos bloke (kuris nesuskaidytas į paprogrames) dviejų kintamųjų tuo pačiu pavadinimu neleidžiama aprašyti.

Parametrai

C++ kalboje kiekviena paprogramė gali gauti ir grąžinti tam tikras reikšmes, kaip kad matematikoje funkcijos gauna argumentą (arba argumentus) ir grąžina rezultato reikšmę. Paprogramių parametrai – tai kaip funkcijų argumentai. Jie nurodomi paprogramės apraše.

Pavyzdžiui,

float plius(float a, b) {return a + b;}

reiškia, kad skaičiai a ir b yra formalūs parametrai. Paprogramės viduje su jais galima elgtis kaip ir su paprastais kintamaisiais. return nurodo, ką grąžins paprogramė (grąžinamos reikšmės tipas nurodomas prieš paprogramės vardą: šiuo atveju float, bet galetų būti ir int (grąžintų sveikąjį skaičių) ar kitas).

Realūs parametrai – tai konkrečios reikšmės, su kuriomis paprogramė iškviečiama, pvz.:

float c = plius(6, 0.25); //gausime c = 6.25

float d = plius(c, 0.25); //gausime d = 6.5

: void (t.y. tuščias) tipas prieš paprogramę reiškia, kad ji neturi grąžinti jokios reikšmės. Jis naudojamas mūsų rikiavimo programoje (žr. toliau), nes mes tik sugrupuojame veiksmus, o reikšmių skaičiuoti nereikia. Nors kartais verta naudoti grąžinamą reikšmę, kuri patvirtintų, kad paprogramė sėkmingai atliko darbą arba praneštų apie nesklandumus (pvz., jeigu nerado duomenų failo, grąžina reikšmę 0, o jei viskas gerai – 1).

Kiti skirtumai. ||1||

Raidės.

Pascal kalboje didžiosios ir mažosios raidės traktuojamos vienodai, t.y. visi šie užrašai būtų ekvivalentūs:

A : integer;

A := 3; a : integer;

a := 3; A : integer;

a := 3;

C++ kalboje didžiosios ir mažosios raidės traktuojamos skirtingai, aukščiau užrašyti trys kintamojo aprašymo ir reikšmės priskyrimo veiksmai būtų interpretuojami skirtingai (pvz., trečiuoju atveju aprašomas vienas kintamasis A, o reikšmė priskiriama visiškai kitam kintamajam a).

Dalyba.

Jei Pascal kalboje yra trys dalybos operatoriai: /, div, mod (jų paskirties nenagrinėsime – universitete vis tiek naudosite C++ kalbą), tai C++ kalboje lieka tik du – / ir %. Aptarsime juos.

a = b / c; Galimi keli atvejai:

1. a, b, c – sveikojo tipo (pvz. int).

a = 37 / 10;

//a bus 3, nes iš 3.7, atmetus trupmeninę dalį, gausime 3

2. a – sveikojo tipo, bet bent vienas iš b ir c realiojo tipo (pvz., float).

a = 36.5 / 10;

//a bus lygus 3

3. a – realiojo tipo, b ir c – int tipo.

a = 37 / 10;

//a bus 3, nes b ir c sveiki ir jų dalybos rezultatas yra sveikasis

išeitis:

a = (float) b / c; // a bus 3.7

4. a – realiojo tipo, bent vienas iš b ir c realiojo tipo.

Įprasta dalyba. Dalybos rezultatas – realusis skaičius.

a = b % c; Dalybos liekanos radimas. Visi kintamieji turi būti sveikojo tipo

Kintamųjų bei paprogramių pavadinimai ||0.5||

Kad būtų patogiau ir lengviau susigaudyti programose, verta naudoti vieningą pavadinimų stilių. C++ rekomenduojamo stiliaus pvz.:

Elementarūs kintamieji int i, j, k, n;

Struktūriniai kintamieji int mas[10];

Pavadinimai iš kelių žodžių char asmensDuom;

int masIlgis;

Paprogramių pavadinimai TekstoAnalize();

Inicializacija();Rodyklės ir simbolių eilutės ||3.5, “Galite praleisti ir pasiskaityti vėliau, jei bus laiko”||

Rodyklė – tai dar vienas duomenų tipas. Jo galimos reikšmės – tai operatyvinės atminties adresai.

Rodyklės pačios informacijos nesaugo, o tik nurodo, kur kompiuterio atmintyje ta informacija yra. Analogiškai, kaip ir nuorodos internete.

Programos kintamojo (duomenų) adresui sužinoti naudojamas “nuorodos” (angl. referencing) operatorius “&”. O norint pasiekti duomenis (ar paprogramę), kai žinomas adresas, naudojamas „pasiekimo“ (angl. dereferencing) operatorius “*”.

Deja, C++ nėra mechanizmo atminties apsaugojimui nuo nekorektiškų pakeitimų (kaip kad “Java” kalboj). Tad dirbant su rodyklėmis, reikia būti atsargiems .

Ypatingą skirtumą pajusite, kai teks dirbti su simbolių eilutėmis. C++ jos aprašomos kaip simbolių masyvas (arba rodyklė į jį) pasibaigiantis NULL reikšme (NULL reiškia tą patį, ką 0 ar ‘’).

Esminis skirtumas tarp rodyklės ir paprastos (simbolių masyvo) reikšmės atrodytų taip.

eil_

L a b a s _ r y t a s NULL

Tačiau C++ simbolių eilučių funkcijoms kaip argumentus vienodai galima paduoti tiek eil tiek eil_rod.

Trumpas pavyzdys dešinėje.

O jo paaiškinimas pažingsniui atrodytų taip:

char eil[15], *eil_rod;//kintamųjų aprašai

eil_ ? ? ? ? ? b e t k a s ; )

_P: eil[15] gali talpinti 14 raidžių sakinį, 15-tas baitas – pabaigos simboliui NULL.

strcpy(eil, „Labas rytas“); // (1)

eil_ L a b a s _ r y t a s NULL ? ? ?

eil_rod = „kazhkur“; // (2)

k a z h k u r NULL

eil_rod = eil; // (3)

eil_ L

a b a s _ r y t a s NULL ? ? ?

eil_rod =& (eil[6]); // (4)

eil_ L a b a s _ r

y t a s NULL ? ? ?

strcpy(eil_rod, „vakaras“); // (5)

eil_ L a b a s _ v

a k a r a s NULL ?

Norint sutrumpinti eilutę iki k simbolių, galima parašyti eil[k]=NULL arba eil_rod[k]=NULL. Toliau už k esantys simboliai išliks, bet strcpy ir panašios funkcijos jais nebesirūpins, nes NULL žymi eilutės pabaigą. Su rodyklėmis glaudžiai
susiję dinaminiai kintamieji.

_ : C++ Builder aplinkoje simbolių eilutėms saugoti yra AnsiString tipas (klasė, nes aprašyta objektiškai). Tarp jo ir simbolių masyvo duomenis galima konvertuoti specialiomis funkcijomis.

Algoritmai. ||2.5||

Algoritmas tai veiksmų seka, atliekanti tam tikrą užduotį.

Algoritmus galima aprašyti keliais būdais: nupasakoti kalba, aprašyti blokine schema (jų čia nenagrinėsime, bet anksčiau jos buvo populiarios) arba struktūrograma (apie jas truputį vėliau) arba užrašyti kaip realizaciją konkrečia programavimo kalba.

Apie algoritmų vaizdavimą gerai paaiškinta čia (svarbu pirmi 5 skyreliai; toliau galit ir nesigilint, nes dalykai senstelėję ir apie Pascal kalbą).

Mokyklose dažniausiai moko sumavimo ir panašių algoritmų, kur svarbiausia mokėti suprogramuoti ciklą. Čia panagrinėsime kelis dažnai praverčiančius algoritmus: paieškos bei rikiavimo (ir dar blynų kepimo ;). Tą pačią užduotį galima atlikti keliais būdais, tad ir algoritmai būna įvairūs. Čia panagrinėsime paprasčiausius.

Blynų kepimo algoritmas. ||2, ||

Tarkime, turime užduotį iškepti šeimynai blynų. Pateiksime apytikslį algoritmą.

Mums reikės: miltų, vandens, kiaušinių, bliūdo, keptuvės, aliejaus ir ugnies – tai kaip ir kintamieji;

Kepimo algoritmo struktūrograma atrodytų taip: C++ programos “pseudo” kodas galėtų atrodyti taip :Pradžia BlynusKepti

Užmaišyti tešlą

Užkurti ugnį

1..šeimos_narių_skaičius

Įpilti aliejaus į keptuvę

Įpilti tešlos į keptuvę

kol apkeps viena pusė

laukti

Apversti

kol apkeps antra pusė

laukti

Išimti blyną

duoti šeimynai

Taip

liko tešlos

Ne

Padėti tešlą į šaldytuvą

Pabaiga BlynusKepti

_Pastaba: Ši programa, aišku, neveiks, bet kada nors ateityje kompiuteriai mokės blynus kepti .

Šiuo pavyzdžiu tiesiog norėjome pademonstruoti, kad gyvenime mes irgi neretai elgiamės pagal algoritmus.

Programavimo teoretikas už tokį algoritmą tikriausiai parašytų 2, nes algoritmams keliami tikslumo ir išbaigtumo reikalavimai. Tačiau, projektavimo stadijoje algoritmai būna abstraktesni, o tik paskui konkretizuojami.

Sumavimo algoritmas (maždaug tai, ką moko mokykloj). || 1.5 ||

//—————————————————————————

// Funkcija grąžina kelių sveikųjų skaičių sumą

//—————————————————————————

int Sumuoti()

{

int skaiciai[100] = {10, 5, -3}; // pradines reiksmes

int n = 3; // kiek yra skaiciu (ne daugiau 100)

int i; // ciklo kintamasis

int suma;

suma = 0; // sumos kintamojo inicializavimas

for (i = 0; i < n ; i++ ){

suma += skaiciai[i]; // reishkia ta pati, kaip ir

// suma = suma + skaiciai[i]

}

return suma;

}

}

Sumavimo algoritmo esmė tokia, kad mes turime kažkiek skaičių ir norime sužinoti, kokia yra jų suma.

Tuos skaičius patogu saugoti masyve. O sumai skaičiuoti reikia sukurti atskirą kintamąjį (kurio reikšmė iš pradžių yra 0). Tada, vykdant ciklą, prie sumos kintamojo po vieną paeiliui pridedami skaičiai.

_Pamąstymui : Tarkim skaičiai reiškia tavo pinigus, neigiami – skolas. Ką padaryti, kad algoritmas suskaičiuotų skolas? Jei to nesugalvoji, tai tau tikriausiai trūksta algoritminio mastymo (verta daugiau pasipraktikuoti, kad univere nebūtų nemalonumų ;).

Didžiausio elemento suradimas. ||2||

Galima ieškoti ir didžiausio blyno, tik tada reiktų susikurti (aprašyti) blynų masyvą .

Šis algoritmas yra pakankamai paprastas:

1. Mes pradedame ieškoti nuo pirmojo masyvo elemento, kurio reikšmę iš pradžių pasižymime/įsidėmime kaip didžiausią.

2. Iš eilės visus masyvo narius lyginame su didžiausia reikšme.

3. Jei kuris nors iš masyvo elementų yra didesnis už iki tol rastą didžiausią reikšmę, tai dabar jis įsidėmimas kaip didžiausias.

4. Taip patikrinus visus elementus, bus rastas didžiausias.

Pateiksime ne tik patį paieškos algoritmą, bet ir visą programą, kuri ras didžiausią skaičių. Duomenys imami iš tekstinio failo “duom.txt”, kuris turi būti tame pačiame kataloge, kaip ir failas su programos tekstu. Duomenų faile duomenys – sveikieji skaičiai – rašomi į vieną eilutę, atskiriant juos tarpu. Pradinis masyvas ir didžiausias elementas atspausdinami faile “rez.txt”. Bet prieš tai – dar vienas skyrelis.

Dviejų reikšmių sukeitimas. ||1||

Rikiavimo algoritmuose, suradus maksimalią ar minimalią reikšmę, ją reikia “pastatyti į vietą”, dažniausiai į pradžią (tiksliau, į dar nesurikiuotos masyvo dalies pradžią). Ir atvirkščiai – pradžioje buvusi reikšmė keliama į ten, iš kur “atėjo“ max/min reikšmė.

Procesas panašus į šachmatų rokiruotę. Tarkim, norim sukeisti kintamųjų a ir b reikšmes. Mums reikės pagalbinio kintamojo, pvz., c. Pažingsniui atrodo taip:

veiksmas a b c

// pradinė situacija 5 10 nesvarbu (svarbu, kad reikšmės tipas sutaptų)

c = a; 5 10 5

a = b; 10 10 5

b = c; 10 5 5 (bet jau irgi nesvarbu 😉

: masyvo atveju vietoj a ir b būtų, pavyzdžiui, mas[i] ir mas[nr_max]. Čia i – rikiuojama masyvo mas pozicija, nr_max – rasto didžiausio elemento pozicija/indeksas.

: Reikšmės priskyrimo/kopijavimo operacija eilutėms-simbolių masyvams būtų strcpy funkcija.
Pascal (Maksimumo paieškos) programos pavyzdžio palyginamoji lentelė

pastaba.: Lentelėje horizontalios linijos atskiria programos dalis tik vaizdumo dėlei; realiai programuojant jų nereikia.

Maksimumas.cpp Maksimumas.pas failo pavadinimas (dar ne programa)

//prijungiama pagalbinė biblioteka (paprogramių rinkinys)

// darbui su failais

#include program Maksimumas; {programos antraštė}

čia prasideda failo turinys

int A[100]; // skaičių masyvas duomenims saugoti

int i, //pagalbinis kintamasis- ciklo skaitliukas

n, //duomenų skaičius (masyvo narių skaičius)

max; //didžiausia reikšmė

FILE *FD, //duomenų failo kintamasis

*FR; //rezultatų failo kintamasis var

A : array [0..99] of integer;

i, n, max : integer;

FD, FR : text;

{kintamųjų paskirtis visiškai analogiška} Duomenų aprašai

main()

{ begin Pagrindinės programos pradžia

FD = fopen(„duom.txt“, „r“);

FR = fopen(„rez.txt“, „w“); assign(FD, ‘duom.txt’); reset(FD);

assign(FR, ‘Rez.txt’); rewrite(FR); Duomenų failų atidarymas

i = 0; i := 0; Duomenų kiekio skaitliuko pradinė reikšmė 0, nes duomenų dar nėra.

while (!feof(FD) && (i < 100))

{

fscanf(FD, „%d“, &A[i]);

i++; // tas pats, kaip i = i+1

} while ((not Eof(FD)) and (i < 100)) do

begin

read(FD, A[i]);

i := i + 1;

end; duomenu skaitymas iš failo į masyvą

n = i; n := i; n – duomenų (skaičių) kiekis

for (i = 0; i < n; i++) fprintf(FR, „%d „, A[i]);

fprintf(FR, „n“); //žymeklis perkeliamas į kitą eilutę for i := 0 to n-1 do write(FR, A[i], ‘ ‘);

writeln(FR); {žymeklis perkeliamas į kitą eilutę} pradinių duomenų spausdinimas

// Max paieška

max = A[0];

for (i = 0; i < n; i++)

{

if (A[i] > max) max = A[i];

} { Max paieška: }

max := A[0];

for i := 0 to n-1 do

begin

if A[i] > max then max := A[i];

end; šio pavyzdžio vinis – Max

paieška. Jei A[i] elemento reikšmė didesnė už iki tol rastą didžiausią reikšmę, tai didžiausiai reikšmei priskiriama A[i] reikšmė.

// rezultatų spausdinimas:

fprintf(FR, „Maksimumas lygus %d“, max);

fclose(FD);

fclose(FR); {rezultatų spausdinimas: }

writeln(FR, ‘maksimumas lygus ‘, max);

close(FD);

close(FR); rezultatu spausdinimas,

failų uždarymas

} end. Pagrindinės programos pabaiga

_mąstymui : Pakeiskite programą taip, kad ji surastų mažiausią elementą. Ką reiktų pakeisti, kad programa skaičiuotų dar ir masyvo skaičių sumą?

Rikiavimas dalinio MinMax būdu. ||2.5||

Galbūt jums (ar šeimynai) parūpo surikiuoti blynus, pagal prisvilimo laipsnį?

Šis algoritmas ko gero yra vienas paprasčiausių rikiavimo algoritmų. Jo esmė tokia: jei reikia surikiuoti skaičių masyvą iš n elementų (pvz., didėjimo tvarka), mes:

1. einame nuo pirmojo masyvo nario (priminsime, kad jo indeksas yra 0)

2. iš eilės tikrindami visus kitus elementus, randame mažiausią

3. jį sukeičiame su pirmuoju masyvo elementu (t.y. pirmajam elementui priskiriame rastą mažiausią reikšmę, o elementui, kuris iki tol turėjo mažiausią reikšmę, priskiriame pirmojo elemento reikšmę).

4. tada pradedame mažiausio elemento paiešką ne nuo pirmojo, bet nuo antrojo nario

5. radę mažiausią elementą, jį sukeičiame su antru

6. toliau ieškome nuo trečiojo elemento ir t.t. iki (n-2)-ojo nario(Kadangi yra n narių, tai priešpaskutiniojo indeksas yra n-2. Palyginus n-1 narį su n-2 narių ir, jei reikia, juos sukeitus, masyvas bus surikiuotas)

7. atlikus šiuos veiksmus, masyvas bus surikiuotas.

: surikiuotame sąraše (pvz., skaičių masyve) elementą galima rasti daug greičiau, negu nerikiuotame. Tam, pvz., skirtas dalybos pusiau metodas. Pavyzdžiui, jei yra 256 skaičių/vardų masyvas, tai norimo elemento paieška užtruks ne daugiau 8-nių palyginimo žingsnių ir tada bus žinoma ar ieškomas elementas yra masyve ar ne. O nuosekliai ieškant, tektų lyginti ieškomą elementą su visais iš eilės – gal net 256 kartus. Apie tai dar kalbės universitete.

Pateiksime ne tik patį rikiavimo algoritmą, bet ir visą programą, kuri surikiuos duotus skaičius. Duomenys imami iš tekstinio failo “duom.txt”, kuris turi būti tame pačiame kataloge kaip pats failas su programos tekstu. Duomenų faile duomenis – sveikieji skaičiai – rašomi į vieną eilutę, atskiriant juos tarpu. Pradinis ir surikiuotas masyvai atspausdinami faile “rez.txt”.

Naudojant paprogrames, programą yra lengviau projektuoti. Galima pasidaryti jos abstraktų planą – modulinę schemą:

Šiuo atveju, tai reiškia, kad pagrindinė programa naudos duomenų nuskaitymo , duomenų spausdinimo ir rikiavimo paprogrames.

Struktūrogramos. || 1.5 ||

Dažnai, prieš rašant programą, patogu jos veikimą (algoritmą) aprašyti abstrakčiai ar įprasta kalba, o ne kuria nors programavimo kalba. Tai galima atlikti surašius veiksmus struktūrogramoje. Pvz., mūsų pirmojo rikiavimo algoritmo, dalinio MinMax, struktūrograma atrodo taip:

ymui : Sudarykite struktūrogramą sumos radimo algoritmui

Pradžia Rikiavimo

i = 0..n-2

min = i;

j = (i+1)..(n-1)

taip A[j]