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 mookslalaikio 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 laabai 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 ap

pie 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 prriartinti 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 pa
asiraš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 ? 43

TRUMPA 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 la

aaabai 😉 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, un
niversitete 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 ;).
Matematinis 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 IR 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 lokalus ir 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.
C++ ir 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] program Rikiuoja;
{programos antraštė}

čia prasideda failo turinys
int A[100];//įvedamas masyvas,gali tureti iki 100 narių
int i, //pagalbinis ciklo skaitiklis

j, //pagalbinis ciklo skaitiklis

n, //masyvo narių skaičius (kiek skaičių yra faile)

min; //rasto mažiausio elemento indeksas
FILE *FD, //duomenų failo kintamasis

*FR; //rezultatų failo kintamasis type mas = array [0..99] of integer;
var A : mas;

i,j,n,min : integer;

FD,FR : text;
{kintamųjų paskirtis visiškai analogiška} Duomenų aprašai
void DuomSkait()
{

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

i = 0;

//duomenų skaitymas:

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

{

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

i++;

}

n = i;

fclose(FD); //nuskaičius, duomenų failas uždaromas
} procedure DuomSkait;
begin

Assign(FD, ‘duom.txt’);

Reset(FD);

i := 0;

{duomenų skaitymas: }

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

begin

read(FD, A[i]);

i := i + 1;

end;

n := i;
close(FD);
end; duomenų nuskaitymo paprogramė. C++ kalboje prieš paprogramės pavadinimą rašomas žodelis void, jei paprogramė tik atlieka veiksmus, bet nieko negrąžina. Jei būtų grąžinama tam tikra reikšmė, reikėtų nurodyti tos reikšmės tipą- int, float ir pan.
_Pastaba: C++ po pavadinimo būtini skliaustai.
Skliaustuose paprogramei gali būti perduodami tam tikri kintamieji, su kuriais bus atliekami veiksmai.
void Spausd()
{

int i; // lokalus kintamasis

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

fprintf(FR, “%d “, A[i]);

fprintf(FR, “n”);
}

procedure Spausd;
var i: integer;
Begin

for i := 0 to n-1 do

write(FR, A[i], ‘ ‘);

writeln(FR);
end; masyvo atspausdinimo faile paprogramė
_Pastaba: Paprogramėje aprašytas lokalus kintamasis “nepasiekiamas” už paprogramės ribų.
void Rikiavimas()
{

int b; //pagalbinis kintamasis narių sukeitimui

for (int i = 0; i < n-1; i++)

{

min = i;// pradinis mažiausio nario indeksas

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

if (A[j] < A[min]) min = j;

b = A[i]; A[i] = A[min];

A[min] = b; //sukeitimas

Spausd();

/* spausdinam masyvą, kad matytume, kaip jis

keičiasi rikiavimo metu*/

}
} procedure Rikiavimas;
var b:integer;
begin

for i := 0 to n-2 do

begin

min := i;

for j := i+1 to n-1 do

if A[j] < A[min] then min := j;

b := A[i]; A[i] := A[min]; A[min] := b;

Spausd;

end;
end; rikiavimo paprogramė:
tikrinsim nuo i+1 iki paskutinio, t.y n-1, nario:
jei j-asis narys < už i-tąjį, priskiriam minimumo indeksui j reikšmę.
_Pastaba: rikiavime svarbu rasti minimumo indeksą, o ne tik minimumo reikšmę, kaip buvo praeitam pvz. Mat pagal indeksą vykdomas masyvo elementų sukeitimas.
main()
{ begin Pagrindinės programos pradžia

FR = fopen(“rez.txt”, “w”);

assign(FR,’Rez.txt’);

rewrite(FR); rezultatų failų atidarymas
//duomenų skaitymas

DuomSkait();
//duomenų(t.y.pradinio masyvo) spausdinimas:

Spausd();
//rikiavimas:

Rikiavimas();
//rezultatų(t.y.galutinio masyvo)
//spausdinimas:

Spausd(); {duomenų skaitymas: }

DuomSkait;
{duomenų spausdinimas: }

Spausd;
{rikiavimas: }

Rikiavimas;
{rezultatų spausdinimas: }

Spausd;

pagrindinėje programoje užrašome tik kreipinius į paprogrames, kurios ir atliks visus veiksmus.
fclose(FR); close(FR); failo uždarymas
} end. Pagrindinės programos pabaiga
: Globalūs (aprašyti pagrindinės programos tekste) kintamieji galioja visoje programoje, pradedant nuo jų aprašymo vietos. Jie gali būti naudojami bet kurioj (žemiau už juos aprašytoj) paprogramėj. Norint, kad paprogramė nenaudotų globalių kintamųjų, jos viduj galima aprašyti lokalius, kurie už paprogramės ribų negalioja. Tai naudinga, kai reikia, kad paprogramė(-s) nepakeistų pagrindinės programos (globalių) kintamųjų reikšmių. Mūsų atveju Spausd paprogramėje aprašėme lokalų i, nes globalus i yra naudojamas rikiavimo cikle. Bendra praktika rodo, kad didesnėse programose verta visus paprogramių kintamuosius lokalizuoti ir reikšmes tarp pagrindinės programos bei paprogramių perduoti per parametrus (apie tai dar užsiminsime truputį vėliau).

: Kaip galima programą dar labiau moduliarizuoti (mes jau minėjome )? _Pastaba: tą verta daryti, kai paprogramės darosi sudėtingesnės.

Trasavimas (programų tikrinimas/derinimas/testavimas). ||2.66||
Trasavimas – tai programos veikimo tikrinimas. Jis labai svarbus, nes programuojant praktiškai neįmanoma išvengti klaidelių (juk klysti – žmogiška).
Parenkami tam tikri duomenys ir žiūrima, ką su jais atliks programa. Paprastai pradžioje duomenys parenkami atsitiktinai, bet vėliau galima parinkti ir specifinius duomenis, norint įsitikinti, ar programa apdoroja visas apgaulingas, klaidinančias situacijas.
Specifiniai duomenys nustatomi pagal ribinius atvejus: dalyboje – dalyba iš nulio, masyvų rikiavime – kai masyvą sudaro 1-nas elementas, arba nė vieno. Tai labai svarbu, kadangi atsitiktinai parinkus duomenis, programa gali duoti laukiamą ir teisingą rezultatą, nors su kitais duomenimis ji veiktų neteisingai.
Trasuosime MinMax algoritmą su atsitiktinai parinktais duomenimis, pvz. 7, 8, 6, 4, 2. Kartu paaiškinsime, ką programa atlieka:

: Sugalvokite savo pradinius duomenis ir pamėginkite trasuoti programą.

: programavimo aplinkose labai padeda taip vadinamos “debug” priemonės. Jos leidžia:
• stebėti kintamųjų reikšmes programos eigoje (“watch”, o jei reikia detaliau – “inspect”),
• programą vykdyti pažingsniui (“step into/over”).
• nurodyti, kurioj vietoj sustabdyt vykdymą ir laukt, ką nuspręs programuotojas (“break point”)
• netgi nurodyti kokias nori kintamųjų reikšmes, t.y. kitaip nei buvo algoritme (“evaluate/modify”).
Žodis “debug” kilęs nuo žodžio “bug” – kai kažkada NASA projekte į kosminio laivo valdymo mikroschemą pakliuvo vabalas ir laivas sudužo. Bet žmonija iš to pasimokė ir pradėjo naudoti automatizuotas testavimo/trasavimo priemones.
OBJEKTINIS PROGRAMAVIMAS. ||3.33, “Bet labai svarbus” ||
Tobulėjant programavimo technologijoms, nuo struktūrinio programavimo, kuriame esmė – ciklo ir sąlygos sakiniai bei paprogramės, buvo pereita prie objektinio programavimo (OP), kuris leidžia dar lanksčiau aprašyti programos eigą. Juo pagrįsta išpopuliarėjusi Java kalba. Dabar “ant bangos” yra galinga Microsoft .NET (tariasi “dot net”) programavimo platforma (turi labai patogių savybių internetinės sąsajos kūrime). Programuotojai sako, kad tai padeda sukurti programas 3 kartus greičiau negu anksčiau.
OP esmė tame, kad tiek kintamuosius, tiek paprogrames galima sugrupuoti pagal bendrą paskirtį.
Tokie junginiai vadinami klasėmis arba objektais (priklausomai nuo situacijos ;).
Klasėje esančios paprogramės (funkcijos, procedūros) vadinamos metodais, o kintamieji – savybėmis.
Tai labai palengvina pakartotinį kodo panaudojimą ir programų kūrimą.Yra specialios galimybės:
• paveldimumas (objektus galima apjungti į hierarchiją, pagal bendras savybes ir metodus)
• enkapsuliacija (galima nurodyti, kurias savybes/metodus leidžiama naudoti kt. objektams.)
• polimorfizmas (galimybė aprašyti kelis metodus vienu pavadinimu – skiriasi tik argumentai)
Objektai tarpusavy gali bendrauti žinutėmis – pranešimais apie įvykius – tai palengvina programų eigos valdymą. (Vietoj nuoseklaus veiksmų užrašymo, galima vykdyti kelias užduotis tuo pat metu (angl.: “multitasking”)
Obj. programų projektavime vietoj algoritmų akcentuojami projektavimo pavyzdžiai (“design patterns”). Trumpai tiek, kad žinotumėte tendencijas, o apie tai plačiau bus 2-trame semestre ;).
C++ BUILDER APLINKA. ||1||
Štai jums C++ Builder nuotrauka:

Parodome bendram supratimui. Kas yra dirbę su Delphi – tam naujienų beveik nebus. Bet ir šiaip čia darbuotis nėra sunku, tiesiog su pele spaudai mygtukus ir žiūri, kas gaunasi.
Viršuje yra meniu, įrankių juosta bei vizualių komponentų juosta.
Šone yra objektų inspektorius, kuriame išvardinamos pažymėto objekto savybės (šiuo atveju Button1).
Kuriama programa C++ Builderyje vadinama projektu. Šiame projekte yra viena forma Form1 ir joje vienas mygtukas Button1). Programinio kodo beveik neparašyta – tik funkcija Sumuoti – ta pati, kur sumavimo algoritmo pavyzdyje.
Praktiniai patarimai programuotojams. ||2||
Kiek teko pastebėti, studentai nedrąsiai naudojasi programinių paketų Pagalba (Help, F1) bei kitomis darbą kompiuteriu palengvinančiomis ir pagreitinančiomis programavimo aplinkos priemonėmis :
• makrokomandomis ir “sparčiaisiais klavišais” (Shortcut Key) (pvz., Ctrl+f, Ctrl+g, Ctrl+h).
• Tikrinant programų veikimą naudinga išmokti efektyviai naudotis derinimo (Debug) priemonėmis – jos padeda sutaupyti laiko ir nervų 😉 (Watch, Breakpoint, Step into).
• Užėjus su kursorium ant programos žodžio ir paspaudus Ctrl+F1, automatiškai bus iškviestas paaiškinimas apie tą žodį (jei tai yra standartinis programavimo kalbos žodis).
• Kai derini programą ir gauni klaidų sąrašą, galima sužinoti galimus sprendimo būdus. Tereikia išsirinkti klaidą ir paspausti F1.
• svarbu ir geras mokėjimas manipuliuoti tekstu. Paspaudus Ctrl, pažymėto žodžio kopiją galima iš karto nutempti į kitą vietą.
Tekstui pažymėt Shift+navigacija tekste. Navigacijai tekste praverčia Ctrl+  (arba , Home, PageUp ir pan).
Paspaudus ALT, su pele galima pažymėti bet kiek nuo paraštės nutolusį teksto stačiakampį lopinėlį. Šis ir kiti būdai padės prižiūrėti lygiavimą, kuris pravers bandant susiorientuoti programos tekste.
• Rašant programos tekstą, gali sutaupyti 30% laiko, jei naudosies automatinio užbaigimo (autocompletion) funkcija. Tai dažniausiai CTRL+j arba CTRL+SPACE. Parašyk “for” ir paspausk CTRL+j – ir pamatysi.
• DOKUMENTACIJA – labai svarbus programų kūrimo etapas. Tai palengvina programų veikimo supratimą. O tuo pačiu ir pakartotinį kodo panaudojimą (kai paimi draugo programą, nes pats tingi (neturi laiko) jai rašyti). Orientuotis programose padeda įvairios schemos: modulinė schema, struktūrograma ir pan. Objektiniam programavimui palengvinti dabar plačiai naudojamos UML (Unified modelling language) schemos: klasių (“class diagram”), atvejų (“case diagram”), programos eigos (“flow diagram”) bei būsenų (“state diagram”) diagramos. Shemoms braižyti yra specialių programų (galingiausia yra MS Visio, bet dažnai užtenka ir paprastesniu, pvz., SmartDraw, Dia). Iš bėdos galima ir su MS Word.
Kiekvieną funkciją verta pakomentuoti – žmonių kalba paaiškinti, ką ta funkcija daro (kokia jos paskirtis). Tai dažnai daroma komentaruose prieš funkcijos kodą.
Bendrai žiūrint, dokumentacija dažnai užima daugiau laiko, negu pats programinio kodo rašymas, tačiau tai “atsiperka” su kaupu, kai reikia greitai surasti ir pritaikyti anksčiau parašytą funkciją ar pan. Be to, dokumentaciją galima iš dalies automatizuoti.
• Programavimo kultūra (stilius). Programos tekste orientuotis lengviau, kai jis išdėstytas pagal bendrą sistemą: lygiavimas, atitrakimas nuo krašto, aiškiai matomi loginiai skliaustai. (tokią iš dalies automatizuotą galimybę siūlo dauguma dabartinių programavimo aplinkų). Dokumentaciją iš dalies atstoja prasmingi bei vienodo stiliaus programos kintamųjų ir funkcijų pavadinimai. Ir visada pravartu pakomentuoti sudėtingesnes programos vietas.
Programos struktūrizavimas/moduliavizavimas irgi labai padės tiek derinant programą, tiek norint pakartotinai panaudoti jos kodo dalį. Patartina pasirinkti ir visąlaik naudoti tą patį (geriausia – standartinį, kad būtų paprasčiau ir jums ir kitiems) programavimo stilių.
p.s.: Tik pats parašęs (nukopijavęs ar pakoregavęs) kokią programėlę geriausiai pajusi įvairius programavimo niuansus. Bet tam reikia turėti C++ Builder ar kitą C++ programavimo aplinką. Galima parsisiųsti nemokamą versiją iš http://www.borland.com/bcppbuilder/freecompiler/ (bet geriau paklausti, gal pažįstami turi, nes siuntimasis užtrunka – failai užima apie 200MB.)
Alternatyva gali būti http://www.delorie.com/djgpp/ , bet ten, norint susiinstaliuoti, reikia turėti darbo (terliojimosi 😉 su failais įgūdžių (tinka kompiuterastams – entuziastams).
DISKREČIOJI MATEMATIKA
daugiausia rašė Narūnas Vaškevičius.
TEOREMŲ STRUKTŪRA ||4||
Teoremų per studijų metus sutiksite tiek, kad tikrai verta suprasti jų struktūrą. Tam pirmiausia reikia suvokti teiginio sąvoką. Pagal matematinę logiką, teiginys yra bet kuris sakinys, kuris gali būti klaidingas arba teisingas, bet negali būti teisingas ir klaidingas vienu metu.
Pvz.: 1. 5+5=10
2. Trikampio kampų suma yra lygi 1800
3. sin300 = 2
Pirmieji du teiginiai yra teisingi, trečiasis klaidingas. Na dėl pirmojo galima ir pasiginčyti, nes neaišku kokioje skaičiavimo sistemoje lygybė užrašyta. Bet tarkim, kad dešimtainėje – tada teiginys lieka teisingas .
Dažniausiai teiginiai žymimi raidėmis p, q, . .
Implikacija: Tai teiginys, sudarytas iš keleto teiginių, sujungtų logine jungtimi „jei ., tai“.
Rašome: p => q, skaitome „Jei p, tai q“, „Iš p išplaukia q“, „Sąlyga p yra pakankama išvados q sąlyga“, „Sąlyga q yra būtina, kad galiotų sąlyga p“.
_Perspektyvoj : Pastebėkite, jei p yra pakankama (kad būtų q) , tai q yra būtina (kad būtų p) – dualumas.
Jei teorema(teiginys) p=>q teisinga, tai dar nereiškia, kad teisinga ir jai atvirkštinė q=>p. Pavyzdžiui teiginys „Jei keturkampis yra rombas, tai visada jo įstrižainės statmenos viena kitai.“ yra teisingas, kai tuo tarpu atvirkščias – „Jei keturkampio įstrižainės statmenos viena kitai, tai visada keturkampis yra rombas.“ yra klaidingas.
Kai abi teoremos – tiesioginė p=>q ir atvirkštinė q=>p – teisingos, rašome p<=>q , sakome „ p būtina ir pakankama sąlyga, kad galiotų q“ arba „p tada ir tik tada, kai q“.
Du teiginiai, sujungti logine jungtimi „tada ir tik tada, kai“, vadinami logiškai ekvivalenčiais.

Priešingoji teorema:
Priešingoji atvirkštinei teorema:

Teoremos tipas atžvilgiu “ ”
Siekiamas įrodyti teiginys Išvada

Figūros pvz. Pastabos

Teiginio pvz.
Tiesioginė
(p pakanka, kad būtų q)
Visada, jei keturkampis yra rombas, tai jo įstrižainės statmenos viena kitai. Taip Pagrindinės teoremos
Atvirkštinė
(p būtina, kad būtų q)
Visada, jei keturkampio įstrižainės statmenos viena kitai, tai keturkampis yra rombas. Ne

Priešingoji
Visada, jei keturkampis ne rombas, tai jo įstrižainės nėra statmenos viena kitai. Ne Priešingos teoremos išvedamos iš pagrindinių pagal logikos taisykles
Priešingoji atvirkštinei
Visada, jei keturkampio įstrižainės nėra statmenos viena kitai, tai jis ne rombas Taip

_Pastaba: Tai, kas būtina dažnai nėra pakankama. Ir atvirkščiai

Tiesioginė ir priešinga atvirkštinei formuluotės yra ekvivalenčios: <=>
Todėl ir jų klaidingumas ar teisingumas sutampa.
Ši savybė yra įrodymo prieštaros metodu pagrindas. Vietoj teoremos , kurią reikėjo įrodyti, įrodome teoremą .
MATEMATINĖ INDUKCIJA ||3||
Ši indukcija skiriasi (ir ne šiek tiek) nuo visų pamėgtos elektromagnetinės indukcijos  Matematinė indukcija yra matematikoje ir informatikoje labai svarbi įrodymo technika. Ji naudojama įrodyti matematiniams teiginiams, kurių reikšmė priklauso nuo tam tikro kintamo teigiamo sveiko (natūralaus) skaičiaus. Matematinės indukcijos formų yra keletas. Mes apibrėšime vieną populiariausių matematinės indukcijos metodą.

Tegu S(n) yra matematinis teiginys, priklausantis nuo natūraliojo kintamojo n.
Jei teisingi teiginiai:

a) S(1) yra teisingas; (bazinis žingsnis)
b) Jei S(k) (čia k natūralusis fiksuotas skaičius) teisingas tai ir S(k+1) teisingas; (induktyvus žingsnis)

Tada teiginys S(n) yra teisingas su visais natūraliaisiais n.

_Pastaba: bazinis žingsnis gali būti atliekamas nebūtinai nuo 1, bet ir nuo bet kurio natūralaus skaičiaus m. Tada turi būti km.
Na apibrėžimas gali kiek ir keblokai atrodyti. Bet matematikai visada sugeba rašyti sudėtingai apie nesudėtingus dalykus. Panagrinėkime pavyzdį:
Įrodysim gerai visiem žinomą aritmetinės progresijos n narių sumos formulę:

čia ir būtų mūsų teiginys S(n).
a) Tikrinam ar S(1) (t.y. n=1) teisingas:
S(1): ; apskaičiavę dešinę pusę gauname 1, vadinasi teiginys teisingas.
b) Tarkime, kad teiginys S(k) teisingas. Tada teisinga lygybė:
c)
S(k): (1)
Reikia parodyti, kad jei teisingas S(k), tai teisingas ir S(k+1):

(2)
Prie (1) lygybės (mes tarėme, kad ji yra teisinga) prie abiejų pusių pridėkime po (k+1). Gauname:

Skaičiuojame dešinę pusę:

Matome, kad (2) lygybė teisinga. Taigi jei S(k) teisingas tai ir S(k+1) teisingas. Vadinasi, teiginys S(n) yra teisingas su visais natūraliaisiais n. Taigi įrodėme.

_Pamąstymui : Dabar galit pamėgint savo malonumui įrodyti:

, visiems natūraliesiems n.
AIBĖS ||2.5||
Šiaip sąvoka “aibė” yra pirminė (reiškia savaime suprantama), jį reiktų suprasti iš pavyzdžių.
Bet man atrodo, kad gyvenime šį žodį mes retai vartojame, tad pabandysime tai paaiškinti labiau įprastais žodžiais:
Aibė – tai bet koks objektų rinkinys. Ir jame nėra svarbi tų objektų tvarka.

Pvz.: Visi pasaulio žmonės, daiktai tavo kambaryje, visi sveikieji skaičiai.
Matematikoje aibė užrašoma, išvardinant jos elementus tarp { } skliaustų. Pvz.: {1 5 7 6 2 5}. Elementų pasikartojimas aibėje neturi jokios reikšmės, nes konkreti reikšmė įskaitoma tik vieną kartą. Juk jei beskaičiuodamas kambaryje esančius žmones, kelis kartus suskaičiuosiu save, manęs nepadaugės .
Matematikoje bus svarbios matematikos objektų aibės: skaičių, taškų, vektorių, funkcijų ir t.t.
_Perspektyvoj : Verta žinoti, kad iš aibės galima išskirti poaibį (t.y., dalį aibės elementų), o jei sugrupuosime dviejų aibių elementus po du, ir paimsime visas galimas porų kombinacijas, gausime tų aibių Dekarto sandaugą.
ATITIKTYS IR FUNKCIJOS ||3.66||
Universitete mokydamiesi šį skyrelį gausit tiek apibrėžimų, kad net galva gali apsisukti. Kad taip neatsitiktų supažindinsime su keletu svarbesnių sąvokų.
Susidarykime dvi aibes A={Petriukas, Joniukas, Kaziukas} ir B={ Onutė, Marytė }
Dekarto sandauga: A×B={( Petriukas, Onutė ), ( Petriukas, Marytė ), ( Joniukas, Onutė ),
(Joniukas, Marytė ), (Kaziukas, Onutė ), ( Kaziukas, Marytė )}
Nesunku pastebėti, kad Dekarto sandaugai priklauso visos įmanomos poros.
Tarkime, žemiau parodyta schema vaizduoja, kuris vaikinas kurią merginą pažįsta:

Ar mergina pažįsta vaikiną nenagrinėsime. Gyvenime būna ir taip, kad vaikinas pažįsta merginą, o ši jo nelabai.
Sudarykime pažįstamų porų aibę:
G={( Petriukas, Onutė ), ( Petriukas, Marytė ), (Kaziukas, Onutė )}. Ši aibė (Dekarto sandaugos poaibis) vadinama atitiktimi tarp aibių A ir B. Realiam gyvenime sakome “vaikinas pažįsta merginą”, o matematikoje sakome, pvz., Onutė (aibės B elementas) atitinka Petriuką (aibės A elementą) pagal atitiktį G – „vaikinas pažįsta merginą“.

Atitiktimi tarp aibių A ir B vadinamas poaibis .
Jei tai sakoma, kad b atitinka a pagal atitiktį G.

Atitiktys su tam tikromis savybėmis turi atskirus pavadinimus. Tikslių apibrėžimų nepateiksime, nes jie reikalauja dar tam tikrų papildomų sąvokų apibrėžimų. Paaiškinsime tik pagrindinius principus.

Pilnai apibrėžta atitiktis
Atitikties G elementuose (porose) sutinkame visus aibės A elementus. Mūsų pavyzdyje atitiktis nėra pilnai apibrėžta, nes joje nesutinkam „Joniuko“.
Surjekcinė atitiktis
Atitikties G elementuose (porose) sutinkame visus aibės B elementus. Pavyzdyje atitiktis yra surjekcinė, nes sutinkame visus aibės B elementus: „Marytę“ ir „Onutę“.
Funkcinė (vienareikšmė) atitiktis
Elementą , kuris yra sutinkamas atitikties G porose, atitinka tik vienas elementas .
Jei, pavyzdžiui, Petriukas nepažinotų Marytės ar Onutės tai atitiktis G būtų funkcinė. Grafiniam vaizde iš kiekvieno A elemento išeina tik viena arba neišeina nė vienos rodyklės:

Bijekcinė (abipusiškai vienareikšmė) atitiktis
Ši atitiktis yra pilnai apibrėžta, surjekcinė, funkcinė ir kiekvieną B elementą atitinka tik vienas A elementas. Pavyzdyje pateikta atitiktis nėra bijekcinė. Dar daugiau, tarp pavyzdyje pateiktų aibių A ir B tokios atitikties būti ir negali, nes aibės A elementų kiekis nėra lygus aibės B elementų kiekiui. Geriausiai bijekciją padeda įsivaizduoti grafinis vaizdavimas. Tada iš kiekvieno A elemento išeina lygiai viena rodyklė, o į kiekvieną aibės B elementą ateina taip pat lygiai viena rodyklė (atkreipkite dėmesį į tai, kad funkcinėje atitiktyje išeina viena, bet ateiti gali ir kelios.):

Dar dvi labai svarbios sąvokos yra funkcija ir atvaizdis:
FUNKCIJA: tai funkcinė atitiktis.
ATVAIZDIS: Pilnai apibrėžta funkcija f: A→B vadinama aibės A atvaizdžiu aibėje B

Atvaizdis turi būti apibrėžtas kiekviename pradinės aibės taške. Be vienos rodyklės vienas elementas būtų neatvaizduotas ir tai būtų atitiktis, o ne atvaizdis.

Atitikčių hierarchija atrodo maždaug taip:

Teorijos atvaizdis praktikoje ||0.5||
Matematikos mokslo uždavinys – gauti patikimus atvaizdžius. Visos mokslinės teorijos bei inžineriniai skaičiavimai ir projektai yra atvaizdžiai. Inžinierius popieriaus lape numato, jog dar nepastatytas lėktuvas galės skristi. Kaip ir geografiniuose žemėlapiuose, tuose atvaizdžiuose atsisakoma kai kurių detalių, ir jie nėra tobuli. Kartais atvaizdžiai visiškai netinka praktiniams tikslams.

Praktikoje dažnai sutinkami ir tokie atvaizdžiai 
ŠIS TAS APIE LOGINES FUNKCIJAS ||3||
Kasdieninėj kalboj mes dažnai sakome “ir” ir “arba” :). Be šių loginių jungtukų (matematiškai operatorių/funkcijų), yra ir daugiau. Pabandysim apibendrinti.
Funkcija gali būti apibrėžiama argumentų reikšmių ir funkcijos reikšmių lentele. Paimsime pavyzdį su dvinare funkcija (kuriai reikia 2-jų argumentų).:

Dvinarių loginių funkcijų “šeima”
funkcijos nr. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

pq argumentų kombinacija
00 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1
01 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
10 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1
11 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
funkcijos
pavadinimas/paaiškinimas konjunkcija “p ir q”, (angl and) “griežtas arba”, (angl. xor)
“tik p arba tik q” disjunkcija, “p arba q”, (angl or) ekvivalentumas,

“q tada ir tik tada, kai p” q=>p, arba gal aiškiau būtų parašyti p<=q. (bet pažymėjimo “<=” atseit nėra).

implikacija, “jei p,tai q”, p=>q
“q tada, kai p”, “p tik tada, kai q” Įdomu, kaip vadinasi?
Kai argumentų skaičius yra n, tai iš viso gali būti funkcijų. Kodėl? Atsakymas slypi kažkur kombinatorikoj :
Vienai funkcijai gali būti 2n argumentų kombinacijų. Kiekvienai argumentų kombinacijai funkcija gali įgyti vieną iš 2-jų reikšmių ({taip; ne} arba {1; 0} arba dar kaip nors :), svarbu, kad būtų 2 skirtingos reikšmės).
_Pamąstymui : Kodėl mes naudojame tik kelias logines funkcijas, kai vien dvinarių yra 16 ?

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

Gyvenime mes grupes dažniausiai naudojame kam nors suskirstyti. Diskrečiojoje matematikoje tam reikalui naudojamos klasės, o grupės čia reiškia kitką.
Pradžioje pateikiame sąvokas, kurios reikalingos nagrinėjant grupes.
Operacija tai funkcija, kuri apibrėžiama taip: : An → A. Pavyzdžiui:
+:Z2 → Z yra įprasta sumos operacija dviem (nes n = 2) sveikiesiems skaičiams.
Algebra vadinama sistema
. A – elementų aibė,  – operacijų aibė.
Pvz.: (R – realiųjų skaičių aibė, o joje apibrėžtos 5toje klasėje išmoktos operacijos ).

Pusgrupė vadinama algebra su viena asociatyvia dvinare operacija. Asociatyvumas yra,

kai (a*b)*c = a*(b*c).
Grupė yra pusgrupė su neutraliuoju elementu, kurioje kiekvienas elementas turi sau atvirkštinį.
Neutralusis elementas (e) turi tenkinti tokią sąlygą : a*e=e*a=a, kur .
(čia žvaigždutė reiškia ne daugybą, bet tam tikrą grupės operaciją).
Atvirkštinis elementas a-1: a* a-1 = a-1*a = e .
Pvz.: Grupėje a + 0=0 +a = a. Taigi nulis yra neutralusis elementas. Bet kuriam elementui a atvirkštinis yra –a, nes a-a=-a+a=0.
(Z – sveikųjų skaičių aibė).
Paminėtų algebrinių struktūrų hierarchija:
_Pastaba: Kartais šios sąvokos būna apibrėžiamos kiek kitaip, nes skirtingose teorijose būna akcentuojami skirtingi aspektai.
_Pastaba: Algebrinių struktūrų moksle yra nemažai sąvokų, kurios reiškia visai ne tai, ką įsivaizduoja eilinis pilietis: “kūnas”, “laukas” bei “žiedas”. Tiesiog taip sugalvojo prancūzų matematikai, o juk sąvokų pavadinimai – susitarimo reikalas .
Kam reikalinga grupių teorija? ||2||
Grupių teorija padeda nagrinėti skaičių sistemas. Sveikųjų skaičių aibė yra grupė sudėties atžvilgiu, o “0” yra jos neutralus elementas. Užrašyt reiktų ;

Savo laiku grupių teorija padarė perversmą lygčių sprendime! Nes iki jos sukūrimo nebuvo formalaus (tvarkingo) “aparato” lygtims spręsti – juk būtent atvirkštinis elementas ir “leidžia” rasti sprendinį (a+5=3 => a+5-5 = a = 3-5 = -2 ).

: “Grupių teorija” yra “Algebrinių struktūrų” dalis. Algebrinių struktūrų mokslas ieško panašumų tarp veiksmų skirtingose aibėse. Pavyzdžiui, kompiuteriai atlieka veiksmus su dvejetainiais skaičiais, o mes matome veiksmus dešimtainėje sistemoje.

Tai yra panašumas (dar sakoma izomorfizmas) tarp algebrų <{dvejetainiai skaičiai};{+,-,•,/}> ir <{dešimtainiai skaičiai};{+,-,•,/}>.
_Pastaba: Algebrinės struktūros – gan abstraktus matematikos skyrius, nes jame daug apibendrinimų ir klasifikavimo (kartais atrodo, daugiau, negu tiesioginės naudos ;).

GRAFAI ||3,”ĮDOMU” ||
Paradoksalu, kad didžiausios abstrakcijos kartu yra ir veiksmingiausi įrankiai, leidžiantys apmąstyti konkrečius faktus.
A.N. Vaithedas
Pasakojimą apie labai svarbią grafų teoriją pradėsime nuo „Karaliaučiaus tiltų“ uždavinio. Tiltai pavaizduoti paveikslėlyje:

Apie 1700m. per Karaliaučių tekanti Priegliaus upė dalijo jį į keturias atskiras dalis (A, B, D, K), sujungtas septyniais tiltais. Nežinia kodėl, bet to miesto gyventojai užsimanė sudaryti maršrutą, kuriuo būtų galima apeiti miestą, pereinant visais septyniais tiltais lygiai po vieną kartą, ir sugrįžti į tą vietą, iš kur prasidėjo kelionė. Niekam nepavyko sudaryti tokio maršruto, bet ir niekam nepavyko įrodyti, kad tokio nėra. Klausimas liko atviras iki tol, kol žymus matematikas L.Oileris įrodė, kad toks maršrutas neegzistuoja. Jis ne tik tai padarė, bet ir padėjo pagrindus tolimesnėms grafų teorijos studijoms.

Grafas – tai viršūnių (taškų) bei briaunų (linijų) rinkinys, kurį galima įsivaizduoti kaip figūrą. Briauna turi jungti dvi grafo viršūnes (išskirtinais atvejais – vieną – su savimi pačia).

Tačiau anaiptol tai nėra tikslus grafo apibrėžimas, universitete gausite daug tikslesnį.
Viršuj esančio paveikslėlio abstrakcija:

 briaunų formą ir viršūnių išdėstymą galima keisti, tik svarbu, kad tas pačias viršūnes jungtų tos pačios briaunos.
Dar pora to pačio grafo variantų:

Atskiras briaunos atvejis yra kilpa. Pvz., b yra kilpa.

Dar viena labai svarbi sąvoka yra viršūnės laipsnis – tai iš viršūnės išeinančių briaunų kiekis. Viršūnė, iš kurios neišeina nė viena briauna, vadinama izoliuota.

Taip pat svarbūs yra orientuoti grafai, juose briaunos turi kryptis nuo vienos viršūnės iki kitos. Pavyzdžiui jei briauna vaizduotų gatvę, tai briaunos kryptis galėtų sutapti su automobilių judėjimo kryptimi.
Grafo briaunoms gali būti priskirtas svoris – skaitinė charakteristika (pvz.: gatvės ilgis (žemėlapyje), laiko trukmė (tvarkaraštyje – darbų grafe), pinigų srautai (ekonomikos procesų modeliavime) ).

: Praktiniuose taikymuose ir viršūnės dažnai turi kokias nors charakteristikas. Pvz., katalogų medis Windows Explorer’yje– tai irgi orientuotas grafas, kurio charakteristikos – katalogų pavadinimai (bei viršūnės tipo nurodymas: katalogas ar failas). Medžiai – tai dar viena grafų rūšis.

Grafų užrašymo būdai ||3.5||

čia e – briaunos, o v – viršūnės

Grafai gali būti užrašomi įvairiai – priklausomai nuo aplinkybių – kaip patogiau.

Neorientuotas grafas Orientuotas grafas
Incidencijų matrica (letnelė)

(“incidensija” reiškia “susidūrimas”, panašiai kaip angl. “incident” – avarija) v1 v2 v3 v4
e1 1 1 0 0
e2 1 1 0 0
e3 1 0 0 1
e4 0 0 1 1
Jei briauna incidentinė tam tikrai viršūnei, tai atitinkamos briaunos eilutės ir atitinkamos viršūnės stulpelio sankirtos langelyje rašome vienetą. v1 v2 v3 v4
e1 -1 1 0 0
e2 1 -1 0 0
e3 1 0 0 -1
e4 0 0 1 -1
Analogiškai kaip ir neorientuotame grafe tik čia reikia išskirti briaunos pradžią ir pabaigą. Pradžią žymi -1, pabaigą 1.
Briaunų sąrašas Briauna Viršūnės
e1 v1 v2
e2 v1 v2
e3 v1 v4
e4 v3 v4
Kiekviena eilutė atitinka briauną, kituose dviejuose stulpeliuose surašomos viršūnės, kurioms ji yra incidentinė. Briauna Viršūnės
e1 v1 v2
e2 v2 v1
e3 v4 v1
e4 v4 v3
Viskas tas pats tik pirmiausia rašoma briaunos pradžia, kai tuo tarpu neorientuotam grafe tvarka nesvarbi.
Gretinių matrica (letnelė)

v1 v2 v3 v4
v1 0 2 0 1
v2 2 0 0 0
v3 0 0 0 1
v4 1 0 1 0
Į eilutės ir stulpelio sankirtos langelį įrašomas briaunų, kurios jungia atitinkamas viršūnes, kiekis. v1 v2 v3 v4
v1 0 1 0 0
v2 1 0 0 0
v3 0 0 0 0
v4 1 0 1 0
Į eilutės ir stulpelio sankirtos langelį įrašomas briaunų, kurių pradžia eilutės viršūnėje, o pabaiga stulpelio viršūnėje, kiekis.
Problemų kartais iškyla aprašant kilpas, tačiau tai ir dar daugiau apie grafus paliksim išaiškinti dėstytojui .
Grafų pritaikymo pvz.: http://www.soften.ktu.lt/~mockus/flash/Release/SST6.html
MATEMATINĖ ANALIZĖ
rašė Artūras Katvickis ir Jurgis Pralgauskis
SKAIČIŲ SEKA IR JOS RIBA ||3||
Skaičių seka yra tam tikras skaičių rinkinys, kurį galima sudėlioti tam tikra tvarka (t.y. tuos skaičius sunumeruoti). Skaičių seka yra žymima .
Skaičių sekos pavyzdys gali būti toks ; šios sekos n–tasis narys .
Jei iš sekos išrinktume dalį jos narių ir surašytume “išrinktuosius” tokia tvarka kokia jie eina pradinėje sekoje, gautume tos sekos posekį. Pavyzdžiui, iš anksčiau pateiktos sekos išrinkę visas trupmenas su lyginiu vardikliu gautume tokį posekį: .
Gyvenime labai svarbu žinoti/jausti ribas. Nes jas “peržengus”, gali sekti labai nemalonūs padariniai, ar šiaip iš esmės keistis situacija. Matematikoje jos yra nemažiau svarbios: jos naudojamos funkcijos tolydumo, funkcijos išvestinės bei integralo apibrėžimuose, o pastarosiomis sąvokomis yra paremta labai didelė matematikos dalis.
Galime pastebėti, kad didėjant sekos nario numeriui n kai kurių sekų skaičiai vis mažiau skiriasi nuo tam tikro konkretaus skaičiaus. Pavyzdžiui, mūsų sekoje 9–tas narys yra 0.9, 99–tasis narys – 0.99, 999–tasis narys – 0.999 ir t.t. Taigi šios sekos nariai tampa vis “artimesni” 1. Todėl skaičių sekos ribą a galima apibūdinti kaip tokį skaičių, su kuriuo skirtumo (a – xn) modulis, esant pakankamai dideliems n, yra kiek norima mažas.

Nors ribą galima suvokti intuityviai, jos apibrėžimas yra gan “suveltas”. Čia viskas priklauso nuo sugebėjimo įsivaizduoti bei apibendrinti ir labai mažą skaičių , ir labai didelį – N:
Skaičius a vadinamas sekos {xn} riba, kai kiekvieną teigiamą skaičių atitinka toks natūralusis skaičius N, kad su visais n>N teisinga nelygybė

Jeigu seka artėja į kokį nors skaičių, tai sakoma, kad ji konverguoja , o jeigu jos riba yra ± arba ji neartėja prie jokio skaičiaus (tiesiog periodiškai svyruoja), tai sakoma, kad seka diverguoja.
FUNKCIJOS RIBA ||3.66||
_Pastaba: Galima sakyti, kad seka irgi yra funkcija, tik diskreti. Jos n-tasis narys gali būti aprašomas kokios nors funkcijos formule (kaip ir mūsų pavyzdy). Ribos naudingos ten, kur yra be galo daug reikšmių, ir visų jų neįmanoma sužinoti, bet norisi sužinoti tendenciją: todėl diskrečių funkcijų atveju domina tik ± , o tolydžių – bet kuris realus taškas (nes to taško aplinkoje yra be galo daug reikšmių) bei ±.
Funkcijos ribą galima apibrėžti sekų pagalba (yra ir dar pora apibrėžimų):

Funkcijos riba taške gali būti skaičiuojama artėjant prie taško iš skirtingų pusių. Tos ribos vadinamos vienpusėmis, ir jei jos sutampa, sakoma, kad funkcija tame taške turi ribą.
_Perspektyvoj : Norint pagrįsti funkcijų ribos skaičiavimo logiškumą, yra nemažai apibrėžimų ir teoremų: apie funkcijų aprėžtumą, nykstamąsias funkcijas, ekvivalenčias nykstamąsias funkcijas, ribų dėsnius, Koši kriterijų, neapibrėžtus reiškinius ir pan.
Verta atsiminti šias dvi ribas: ir . Jos jums pravers .
_Perspektyvoj : Pats ribų skaičiavimas yra kur kas lengviau perprantamas, negu apibrėžimai ir teoremos, todėl čia apie jį nerašysim – spėsit išmokti ir KTU ;-).

NYKSTAMŲJŲ FUNKCIJŲ PALYGINIMAS ||2||
Nykstamosiomis funkcijos vadinamos tokios funkcijos, kurių riba kuriame nors taške lygi nuliui.
Tokiomis funkcijomis būtų kai ; kai .
Tokios funkcijos yra lyginamos, atsižvelgus į jų santykio ribą (jei tokia egzistuoja):
jei , tai nykstamosios funkcijos f(x) ir g(x) vadinamos tos pačios eilės nykstamosiomis funkcijomis;
jei , tai sakoma, kad f(x) yra aukštesnės eilės nykstamoji funkcija, nei g(x); ji žymima f(x)=O(g(x)); (“O” – tai stilizuotas “o”).
jei , tai funkcijos f(x) ir g(x) vadinamos ekvivalenčiomis nykstamosiomis funkcijomis.
Jei funkcijos f(x) ir g(x) yra tos pačios eilės nykstamosios funkcijos, kai , tai mažoje taško a aplinkoje jos elgiasi panašiai (mažėja vienodais greičiais).
Jei funkcijos f(x) yra aukštesnės eilės nykstamoji funkcija, nei g(x), kai , tai mažoje taško a aplinkoje funkcija f(x) mažėja greičiau, nei funkcija g(x).
Jei funkcijos f(x) ir g(x) yra ekvivalenčios nykstamosios funkcijos, kai , tai mažoje taško a aplinkoje jos įgyja labai artimas reikšmes ir taško a aplinkoje jos gali pakeisti viena kitą..
Jos yra plačiai naudojamos skaičiuojant ribas. Vertos dėmesio yra: ln(1+x)~x arba ex–1~x, kai x0.
_Pamąstymui : Gal galite pasakyti daugiau ekvivalenčių funkcijų pvz.? Mes apie vieną porą esame netiesiogiai užsiminę ;).

PARAMETRINĖS LYGTYS ||2||
Čia tema prasiblaškymui nuo apibrėžimų .
Tarkime turime dvi funkcijas

Kiekvieną t reikšmę atitinka viena x reikšmė ir viena y reikšmė. Šią porą (x, y) galime pažymėti kaip tašką koordinačių plokštumoje xOy. Kai t įgyja reikšmes iš intervalo [t1, t2], koordinačių plokštumoje aibė porų (x, y) nubrėš tam tikrą kreivę. Todėl tokia funkcijų pora yra vadinama parametrine kreivės lygtimi, o kintamasis t vadinamas parametru.
Daugelį kreivių galima užrašyti ir paprastomis, ir parametrinėmis lygtimis (pavyzdžiui tiek lygtis , tiek parametrinės lygtys , apibūdina tą pačią kreivę – apskritimą su centru koordinačių pradžioje).
Kai kuriais atvejais kreivės yra paprasčiau užrašomos parametrinėmis lygtimis nei tradiciniu būdu. Pavyzdžiui, kreivę

,
yra ganėtinai sudėtinga užrašyti tradiciniu būdu, o ši kreivė atrodo taip:

FUNKCIJOS TOLYDUMAS ||1.5||
Visas funkcijas galima suskirstyti į tam tikras klases. Vienas iš paprasčiausių yra skirstymas į tolydžias ir trūkias funkcijas.
Paprastai sakoma, tolydžioji funkcija yra tokia funkcija, kurios grafiką galima nupiešti neatitraukiant pieštuko nuo popieriaus lapo. Jei to padaryti neįmanoma, tai tokia funkcija vadinama trūkiąja.

a) b)
Grafikuose pavaizduota atkarpoje [-1;1] trūki funkcija ir tolydi funkcija .
Galima sakyti, kad funkcija tolydi taške, jei iš abiejų to taško pusių funkcijos reikšmės artėja į tą patį skaičių.

Funkcija vadinama tolydžiąja intervale, jei visuose to intervalo taškuose ji yra tolydi.

Jei kažkuriame taške f(x) nėra tolydi, tai tas taškas vadinamas f(x) trūkio tašku.
Trūkio taškai būna net 3jų rūšių, bet apie tai – KTU 

_Pastaba: Taigi dirbant tiek su išvestinėm, tiek su integralais, tiek su bet kuriom kitom ribom svarbu, kad funkcija būtų tolydi. Juk ji turi ribą taške tik tada, kai yra tame taške tolydi.
FUNKCIJOS IŠVESTINĖ IR DIFERENCIALAS ||4, “SVARBU”||
Kaip jau minėjom, funkcijos išvestinė taške x apibrėžiama kaip riba:

čia x nuo x nepriklauso ir gali būti pažymėtas bet kaip, kad ir a
mokant skaičiuoti ribas, pagal šią formulę galima rasti funkcijos išvestinę. Pvz.:

galima ir nuosekliau:
Suprastinkime išraišką, kurios ribos ieškom:

tada :

,nes

, juk 2x nuo x nepriklauso

_Pastaba: Funkcijos f(x) išvestinė f‘(x) irgi yra funkcija ir gali turėti išvestinę taške x,
ji žymima (f‘(x))’ arba f ”(x) ir tt.

Sakoma, kad funkcija diferencijuojama taške x0, jei jos pokytį
y=f(x0+x)-f(x0) galima išreikšti y=A•x+ O (x), čia A=const ir .

Diferencijuojamumas yra glaudžiai susijęs su išvestine.
Įrodoma teorema: Funkcija y = f(x) yra diferencijuojama taške x0 tada ir tik tada, kai taške x0 egzistuoja išvestinė f’(x0) = A. O tai reiškia, kad sąvokos “funkcija yra diferencijuojama” ir “funkcija turi išvestinę” yra ekvivalenčios – reiškia tą patį.
Funkcijos diferencialas taške x0 žymimas df(x0) arba dy ir apibrėžiamas formule: .
Paėmę y = f(x) = x, gausime dx = x’•x = 1•x = x.

Iš to: , bendru atveju x0 gali būti žymimas x tai leidžia užrašyti .
Vėliau sužinosit, kad f(x) atvirkštinės funkcijos x = g(y) = f -1(y) išvestinė . Gal pastebit kokių dėsningumų? 
_Pastaba: Paveiksliuke matome, kad diferencialas dy (BC) apytiksliai lygus funkcijos f(x) pokyčiui (BD). Tai įgalina apytiksliai skaičiuoti funkcijos pokytį, žinant jos išvestinę taške; kuo funkcija tiesesnė, tuo tiksliau gausim .
_Pastaba: Išvestinė (bei diferencialas) nusako pokytį, tad jei funkcija yra konstanta (pastovi) – išvestinė lygi nuliui.
Išvestinių pritaikymas (matematinių modelių sudarymas) ||3||
Išvestinė parodo tam tikro dydžio/funkcijos kitimo spartą kito dydžio atžvilgiu (dažniausiai laiko atžvilgiu, bet nebūtinai).

Bene lengviausiai suvokiamas išvestinės pavyzdys yra iš 9-tos klasės fizikos kurso – tai (greitėjančio tiesiaeigio) judėjimo aprašymas.
Nueito atstumo kitimą lemia momentinis greitis, tad (momentinis) greitis – kelio išvestinė. Analogiškai – pagreitis – greičio išvestinė. Jei mąstysime indukciškai – ir pagreitis gali turėti išvestinę, ir t.t. Tačiau dažniausiai pagreitis būna pastovus, o tai reiškia, kad jo išvestinė lygi 0.
Šone matote stilizuotą judėjimo modeliavimo schemą. Kad būtų lengviau pavaizduoti, laiką imame diskrečiais intervalais t=1 (kuo laiko intervalai bus mažesni, tuo tikslesnius rezultatus gausime).
Kaip minėjom, diferencialas leidžia apytiksliai apskaičiuoti funkcijos reikšmę nežinant jos formulės, bet žinant jos išvestinės formulę (arba bent reikšmę x0 taške) pagal formulę . O dx=x Pagal tai kiekvienu laiko momentu apskaičiuojame iš pradžių greitį, o paskui nueitą kelią:

_Pastaba: “” – MathCad algoritmuose reiškia priskyrimą “=”
_Pastaba: Kaip matome, aukštesnės eilės išvestinės įtaka ypač pasireiškia per ilgesnį laikotarpį.
_Pastaba: Kelio pokytis per laiko vienetą būtų tiksliau aprašomas greičio vidurkiu tarp to laiko pradžios ir pabaigos momentų. Na, aišku tiksliausiai būtų pagal žemiau paminėtas formules . Bet modeliavime dažnai tenka balansuoti tarp tikslumo ir paprastumo (kaip ir gyvenime ;). Tik moksle/teorijoj svarbiau tikslumas, o gyvenime/praktikoj – paprastumas (laiko taupymo sumetimais ;).

_Perspektyvoj : Čia judėjimas aprašytas diferencialinėmis lygtimis. Norint jas išspręsti, reikia mokėti integruoti. Šiuo atveju gautume , ką galima pastebėti ir iš grafiko.

Pamąstymui : Procesas atrodo įdomiau, kai vyksta stabdymas. Pamodeliuokit. (Čia modeliavimui patogu naudoti Excel’į (galite parsisiųsti mūsų padarytą pavyzdėlį tiek Excel, tiek MathCad :)).
INTEGRALAI ||3, “SVARBU”||

Yra daugybė ( apie 25 ) integralo rūšių. Po keturių kursų mes jau esame girdėję Rymano, Stiltjeso, Lebego, kreivinį bei daugialypį. Paprasčiausias ir pirmiausia mokomas yra Rymano integralas. Apie jį čia ir pakalbėsime.
Neapibrėžtinis integralas || 2.5 ||
Praktiniuose uždaviniuose dažniai tenka ieškoti funkcijos, kai yra žinoma jos išvestinė, t.y. atlikti veiksmą priešinga diferencijavimui. Toks veiksmas vadinamas integravimu, rasta funkcija – pirmykšte funkcija.
Pavyzdžiui, jei žinome kūno greičio paklausomybė nuo laiko, o norime rasti kūno nueitą kelią, tai reikia suintegruoti greičio kitimo funkciją.

_PastabaG: skirtingai nei diferencijavime, kur bet kurios funkcijos išvestinė apibrėžiama vienareikšmiškai, čia bet kuri funkcija f(t) turi be galo daug pirmykščių funkcijų, kurios besiskiria tik laisvąja konstanta C. _Pamąstymui : kodėl diferencijuojant dingsta C?

_PastabaG: nepamirškit, kad ir diferencijuoti ir integruoti galima tik tolydžias funkcijas.

Geometriškai neapibrėžtinis integralas reiškia kreivių šeimą F(x) + C, kurių kiekviena gaunama pastumiant funkcijos y = F(x) grafiką ašies Oy kryptimi į viršų ar į apačią.

Funkcijų šeimos maždaug 20-ties narių grafikas pavaizduotas paveiksliuke

Integralus skaičiuoti yra ne taip paprasta, kaip išvestines. Štai pagrindiniai integravimo metodai :

Integravimo metodas komentarai
tiesioginis paprasčiausias, pagal apibrėžimą, galima naudotis lentele 😉
keičiant kintamąjį remiasi išvestinės savybe, kad f ’(g(x)) = f ’(g)  g’(x)
dalimis remiasi diferencialo savybe d(uv)=udv+vdu; v ir u, reiškia v(x) ir u(x)
trupmenų pertvarkymas po integralu esančias racionaliąsias trupmenas galima išskaidyti į paprastas, ir tada jas lengvai suintegruoti.

_PastabaG: Yra integralų, kurių nepavyksta suintegruoti, t.y., nepavyksta gauti atsakymo išreikšto elementariosiomis funkcijomis (xk, sin(x), ln(x) ir pan.). Kartais tokiems integralams įvedamas naujas žymėjimas, pvz., = li x.

Plačiau apie neapibrėžtinius integralus http://archives.math.utk.edu/visual.calculus/4/antider.1/index.html .
Apibrėžtinis integralas || 3.5 ||

Apibrėžtinis integralas yra paprasčiau suvokiamas – jį galima įsivaizduoti, kaip kreivės ribojamą plotą konkrečiame intervale.
Tą plotą galima apytiksliai apskaičiuoti kaip stačiakampio ar trapecijos plotą. Stačiakampio aukštis gali būti lygus funkcijos reikšmei bet kuriame vidiniame intervalo taške. Norint apskaičiuoti tiksliau, intervalą reikia suskaidyti į dalis (nebūtinai vienodo dydžio) ir susumuoti gautų stačiakampių stulpelių plotus. Kai stačiakampio aukštis parenkamas laisvai (atitinkamame intervaliuke), tai tokia suma vadinama Rymano (integralinė) suma.

Pavyzdys, kai intervalas skaidomas į mažesnius, o stulpelių aukštis parenkamas minimalus arba maksimalus (gali būti ir tarpinių variantų, be to, intervalai gali būti skirtingo dydžio).
Pavyzdys paimtas iš http://www.hyper-ad.com/tutoring/math/calculus/Construction%20of%20the%20Riemann%20Integral.html

Tokios sumos, kai visiems stulpeliams imamas min ar max aukštis, dar vadinamos Darbu sumomis.

_PastabaG: Neapibrėžtinis integralas yra funkcija (tiksliau funkcijų šeima), o apibrėžtinis – skaičius. Bet juos sieja Niutono-Leibnico formulė.

Jei intervalo bent vienas rėžis kinta, apibrėžtinis integralas irgi yra funkcija. Dažniausiai sutinkami atvejai, kai kintamuoju imamas viršutinis rėžis , o apatinis a=0 ir tada turime:

Trumpai apibendrinant, integravimo ir diferencijavimo ryšį galima aprašyti formule

_Perspektyvoj : Integralai plačiai naudojami tikimybių teorijoje (aprašant atsitiktinius dydžius), aproksimuojant periodiškai kintančius dydžius (bangas ir pan.), Ir kas be ko, sprendžiant diferencialines lygtis.
_Perspektyvoj : Vienas iš įdomesnių integralų yra . Jis dar vadinamas Puasono integralu. Neapibrėžtinis integralas analitinio sprendinio (išreikšto elementariosiomis f. neturi)
SKAIČIUS e ||1.5||
Skaičių seka, kurios bendrasis narys yra , turi ribą intervale (2; 3). Ši riba ir buvo pavadinta skaičiumi e. Apytiksliai šis skaičius lygus 2,718281828459045. Skaičius e, kaip ir skaičius , yra transcendentinis (transcendentiniais vadinami skaičiai, kurie negali būti algebrinių lygčių su sveikaisiais koeficientais šaknimis).
Jis plačiai naudojamas aprašant gamtos reiškinius. Tam turi įtakos patogi funkcijos ex savybė – jos išvestinė lygi jai pačiai. . _Pamąstymui : Ar sugebėtumėte patys tai įrodyti ? 
POLINĖ KOORDINAČIŲ SISTEMA ||2; ”GRAŽU IR SMAGU” ||
Tai dar vienas būdas pavaizduoti funkcijas grafiškai.
Jis patogus, kai reikia vaizduoti “suktas” kreives ;), pvz., apskritimus, spirales. Fizikoje tai galėtų būti sukamasis judesys (kreivaeigis judėjimas).
Taško padėtis polinėje koordinačių sistemoje apibūdinama spinduliu r ir kampu . O “suktos” funkcijos užrašomos paprastesnėm išraiškom.
Pvz., apskritimą Dekarto koordinačių sistemoje (xOy) galima nusakyti neišreikštine forma x2+y2=r2 arba kitaip reikia dviejų funkcijų (neblogai gelbsti parametrinės lygtys). Pasižiūrėkit:

_Pamąstymui : Pabandykite xOy sistemoje nubraižyti tokią kreivę:

arba Linkime sėkmes :-D.
KOMPLEKSINIAI SKAIČIAI ||2.66||
Tai vienas žaviausių matematikos skyrių.
Tai, kas atrodė nesuvokiama, , atvėrė plačias galimybes apibūdinant elektromagnetinius reiškinius. Ir ne tik juos.
Kompleksiniai skaičiai glaudžiai siejasi su trigonometrinėmis funkcijomis bei skaičiumi e.
Matematikas Oileris išvedė formulę , pagal kurią

_Pastaba: Ne taip dažnai vienoje formulėje galima rasti 3 populiariausias matematines konstantas ;).

Formaliai žiūrint, kompleksinis skaičius – tai dviejų koordinačių (realios ir menamos ) vektorius. Bet jį užrašyti galima bent 5 būdais:
1. z=a+b•i; – Paprastai algebriškai. Iš to galima parašyti: a=Re(z), b=Im(z). _Pastaba: Re(z) ir Im(z) kaip kintamaisiais galima žymėti koordinačių ašis.
2. z=(a b); (Dekarto koordinačių sistemoje). jį atitinka taškas M(a; b)
3. z=r• (cos() + i•sin()); (trigonometrinė forma) čia , .
4. z=(r Polinėje koordinačių sistemoje)
5. (pagal Oilerio formulę). Visa tai atsispindi brėžinuke.
Kiekvienas kompleksinis skaičius z turi jungtinį . Tai tam tikra simetrija.
_Perspektyvoj : Kompleksinio kintamojo teorija padeda aprašyti įvairių fizikinių laukų pasiskirstymą nevienalytėje aplinkoje (pvz., srovės tekėjimą upėje, kai yra kliūčių) – tai nesunkiai atliekama transformacijų pagalba. Kai kurios kompleksinio kintamojo funkcijos yra įspūdingos ir gražios – jos braižomos 3D erdvėje , o kaip 4tas matavimas imama spalva. (2-jų matavimų reikia argumentui ir 2-jų – funkcijos rezultatui).
Perspektyvoj : Be to, tai susiję su dar viena žavia matematikos sritimi – fraktalais. Pvz., Mandelbroto aibė yra aibė kompleksinių taškų c, su kuriais seka {zn}, aprašoma rekurentine formule zn+1=zn2+c, nenutolsta į begalybę. Dažniausiai imama z0=0.

Mandelbroto aibė – tai likę juodi taškai. O spalvos parodo atliekamas iteracijas (ciklus) – kuo didesniam n apskaičiuojamos reikšmės, tuo daugiau spalvų. Apytiksliai vertinant, kad seka {zn} konverguotų, reikia, kad |c|<2. Štai jums bendras vaizdas ir pora fragmentų – gražu, ane .

http://aleph0.clarku.edu/~djoyce/julia/explorer.html – interaktyvi programėlė
GRADIENTAS IR JO SAVYBĖS ||2.5 “PATARTINA PERSKAITYTI, NES PRIEŠ KOLĮ NESPĖSIT ;)” ||
Gradientas yra vienas “išvestinių” šeimos narys. Tačiau tai ne paprasta išvestinė, o visas išvestinių vektorius!
Jei turime kelių kintamųjų funkciją f(x1, x2, ., xn), tai jos gradientu bet kuriame taške M vadinamas vektorius , čia – dalinė išvestinė, t.y. funkcijos pokyčio riba, kai keičiasi tik k-tasis argumentas. Gradientas žymimas gradf arba f.
Gradientas būna naudingas, kai nagrinėjamos kelių (daugelio) kintamųjų funkcijos. Pagrindinės ir naudingiausios gradiento savybės yra šios: gradientas parodo greičiausią funkcijos didėjimo kryptį, o jo modulio reikšmė tuo didesnė, kuo spartesnis yra funkcijos kitimas. Šias gradiento savybes galima naudoti apytiksliai optimizuojant sudėtingas funkcijas.
Tarkime, turime funkciją . Šis paviršius atrodo taip:

Bet kuriame taške (x, y) šios funkcijos gradientas lygus , o paviršiaus gradientų laukas atrodo taip:
Kaip surasti šios funkcijos maksimumą?
Paimkime bet kurį tašką, pvz., M0 = (-0.5;-0.5). Šį tašką atitinka spindulys vektorius . Šiame taške gradientas lygus {0.303, -0.303}, jo modulis lygus 0.429, o pradinė funkcija įgyja reikšmę -0.303.
Dabar paimkime tašką M1 :

= + gradf = (-0.197, -0.803). Taške M1 gradientas lygus {0.466, -0.16}, jo modulis lygus 0.492, o pradinė funkcija įgyja reikšmę -0.099.
Imkime tašką M2 : = + gradf = (0.269, -0.963). Taške M2 gradientas lygus {0.315, 0.191}, jo modulis lygus 0.368, o pradinė funkcija įgyja reikšmę 0.099.
Taip tęsdami procesą po kurio laiko “nukeliausime” labai arti prie maksimumo taško. Norint rasti minimumą reikėtų “keliauti” antigradiento (t.y. priešinga gradientui) kryptimi. Čia panašiai, kaip “visi keliai veda į Romą” .

KAIP MOKYTIS ?

Nors daugiausia studentai mokosi kaip išeina ir paskutinę naktį, paskaitykit – gal padės ;).
Ankstesniais laikais buvo labai mėgstama sakyti “mokytis, mokytis ir dar kartą mokytis !”. Kaip žinome tada prioritetas buvo skiriamas kiekybei. Tačiau ne mažiau svarbu ką ir kiek mokytis. Esant spartiems mokslo pažangos tempams bei sunkiai suvokiamomis informacijos plitimo galimybėms, mokytis teks visą gyvenimą. Vienas dalykas – atsirinkti, iš ko tau bus daugiausia naudos (tai gan subjektyvu), kitas mokėti efektyviai įsisavinti žinias (tai labiau bendra dėl vienodos fiziologijos). Psichologai, remdamiesi žmogaus smegenų darbo ypatumais, siūlo įvairių metodikų. Pagrindinis principas lieka kuo geriau paskirstyti medžiagą ir laiką:
• kas 30 minučių darykite ~3 minučių pertraukėlę (kad smegenys greit nepavargtų),
o kas 2 valandas darykite šiek tiek ilgesnę 20-30 minučių pertrauką (prasimankštinkite ar pan.).
• Kad informacija liktų ilgalaikėje atmintyje, geriausia ją pakartot po 2 val, paskui po 8val ir dar po 2 parų (kartojimas mokymosi motina ;). (per 24 val pamirštama 75% neatnaujinamos info.).
• nesimokyk, jei matai kad juo tolyn tuo blogyn (geriau eik pasivaikščiot ar pan., o gal išalkai ar tiesiog labai nori miego – be šių dalykų mokymasis laaabai lėtai judės 😉
• pabandyk pakaitomis mokytis skirtingos specifikos mokslus (pvz., kalbą bei matematiką)
• Jei (per paskaitą) gauname daug informacijos, geriausiai atsimename tik pradžią ir pabaigą.
• Atsirink tai, kas svarbiausia.
• Mokymosi medžiagą 1– peržvelk nesigilindamas, kad susidarytum bendrą vaizdą; 2–skaityk nuosekliai, ir paryškink kas svarbu; 3– po šiek tiek laiko pasikartok (tai,kas svarbiausia).

Taip pat labai svarbu motyvacija (kodėl mokytis). M.Knowles motyvaciją suskirstė taip:

Motyvacijos tipas konkrečiau
Socialinių ryšių: – bedravimo poreikis,
– patenkinti asociacijų, narystės poreikius.
Asmeninių pasiekimų: – aukštesnis stausas/pareigos darbe,
– profesionalus tobulėjimas,
– konkurencingumo mažėjimas.
Išorinių lūkesčių: – atitikti reikalavimus,
– patenkinti vadovų lūkesčius/rekomendacijas.
Socialinės gerovės siekimo: – galimybė geriau padėti visuomenei,
– tarnauti visuomenei,
– dalyvauti visuomeninėje veikloje/darbe.
Stimuliaciniai: – atsiskirti nuo kasdienybės,
– išvengti nuobodulio,
– suteikti kontrastą kitoms gyvenimo detalėms
Susidomėjimo mokslu: – siekti žinių dėl asmeninių interesų,
– mokytis dėl mokymosi,
– patenkinti smalsų protą.
Jei trūksta motyvacijos, paieškokit šitoj lentelėj ;).
Informacijos įtvirtinimui išnaudokit savo vaizduotę, rašykit ir skaitykit, vaizduokit grafiškai, palyginkit, komentuokit ir įsijauskit  (žr. diagramą), susiekit naujas žinias su kitais dalykais.
Mokytis ne taip nuobodu, jei gauni pabendrauti su žmonėmis (nors kartais tai per daug blaško;): galit su draugais patestuoti vienas kitą arba aptarti, kaip supratote medžiagą (šiuo atveju labai dažnai atrandami “praslydę” niuansai). Nusiteik pozityviai – mokytis bus lengviau .
Siekiant efektyvumo, verta susiorganizuoti patogią darbo vietą – kad būtų tinkamas(-a) apšvietimas, temperatūra, kūno laikysena, pakankamai deguonies, netrukdytų pašaliniai garsai (nors lengvas muzikinis fonas (pvz., Mocarto ar Vivaldi) dažniausiai padeda). Dėl pašalinių garsų tai galėčiau rekomenduoti tokias raudonas ausines nuo triukšmo, kurios senukuose 10Lt kainuoja (šiaip visokiems traktoristams skirtos ) – jos tinka tiek mokantis, tiek miegant, kai aplinkui chebra nerimsta 😉 Dar dėl miego – jei tenka prie šviesos bandyti užmigti, tai galit susikombinuoti medžiaginius akinius –kaip lėktuvuose duoda (tereik juodos m-gos, gumytės ir siūlo su adata ;).
Stebėk ir bandyk pajusti, kaip mokytis tau geriausia! Visuma tavo mokymosi ypatumų parodo, koks yra tavo mokymosi stilius. Apie mokymosi efektyvumą bei mokymosi stilių paskaitėlė yra čia. Tai labiau apžvalga, bet yra pora gerų idėjų.

ĮSIDĖMĖTINŲ TERMINŲ SUVESTINĖ
_Pamąstymui : Dar kartą galit peržvelgt, ar atsimenat ką reiškia:

Algebra, 26
atitiktis, 24
atvaizdis, 24, 25
atvirkštinė, 22, 30
Atvirkštinis elementas, 26
ciklo kintamasis, 10, 14
Darbu sumos, 37
Dekarto sandauga, 23
diferencialas, 5, 34, 35
ekvivalenčios, 23, 32, 34
funkcija, 20, 21, 24, 25, 26, 31, 32, 33, 34, 36, 37, 40
Grupė, 26
Implikacija, 22
iteracija, 9
Loginis ekvivalentumas, 22
matematinius programinius paketus, 2
matrica, 28, 30
Neapibrėžtinis, 5, 36, 37
nykstančios funkcijos, 32
Operacija, 26
paprogramė, 10, 17, 18
Priešingoji teorema, 22
Pusgrupė, 26
Rekursija, 4
riba, 5, 31, 32, 34, 38, 40
Rymano suma, 37
seka, 5, 8, 13, 31, 38
tada ir tik tada, 22, 25, 34
tos pačios eilės, 32

PABAIGAI

Visai tikėtinas atsitikimas iš universitetinio gyvenimo:
Vieno matematikos egzamino metu egzaminavo 2 dėstytojai – vienas geraširdis, o kitas – kirvis. Taip sutapo, kad tuo pačiu metu pas tuos dėstytojus atsakinėt atėjo mokslinčius ir tinginys. Mokslinčius pas kirvį, o tinginys pas gerietį.
Mokslinčius atsakinėja viską, ko bepaklaustų, rašo keturių aukštų formules, jau net popieriaus joms pritrūko. O tinginys vos supranta, ko jo klausia; na bet šį tą pasako, ką iš mokyklos atsimena ar ką iš mokslinčiaus nugirsta..
Po ilgų klausinėjimų galų gale jiems parašomi įvertinimai:

Moksliukui – 7, o tinginiui – 6.
Baigėsi egzaminas, dėstytojai eina koridorium ir kalbasi. Gerietis klausia:
– Kodėl tu parašei tik 7, man atrodo, jis viską gerai atsakė?
– Matai, matematika didelė – jis vis tiek ko nors nežino.. O štai tu už ką tam tinginiui parašei 6 – jis beveik nieko neatsakė.
– Na, matai, matematika didelė. jis vis tiek ką nors žino 

Taigi, linkime jums (ir sau) sėkmingai naviguoti matematikos platybėse .
Iki susitikimo KTU.

Autoriai: Jurgis Pralgauskis (idėjos autorius, vyr redaktorius, maketuotojas ir pan;), Artūras Katvickis, Narūnas Vaškevičius, Olegas Kosuchinas.
Taip pat prisidėjo: Tomas Miliauskas ir Gintautas Narvydas.
AČIŪ konsultavusiems bei kritikavusiems prof. V. Pekarskui,
doc. B. Narkevičienei, doc. N. Listopadskiui, doc. J. Blonskiui.

Leave a Comment