PASCAL apakšprogrammas iedalās procedūrās un funkcijās. Ir iebūvētās funkcijas - tās, kuras nāk komplektā ar kompilatoru, piemēram, sqrt un copy. Un ir lietotāja definētas funkcijas - tās, kuras programmists rada pats. Funkcijas tipa apakšprogrammas parasti izmanto tad, ja apakšprogrammas rezultāts ir viens lielums:skaitlis vai teksts. Lai izsauktu procedūru, jāraksta atsevišķa komanda. Funkciju izsauc, ierakstot tās nosaukumu kādas izteiksmes sastāvā.
Paskālā ir iebūvēta funkcija sin, kas aprēķina sinusu, ja leņķis dots radiānos. Uzrakstīsim funkciju sin1, kas rēķinās sinusa vērtību no leņķa grādos.
var a:integer; function sin1(x:integer):real; begin sin1:=sin(pi*x/180); end; begin write('Ievadi leņķi grādos ==>'); readln(a); writeln('sin(',a,')=',sin1(a):1:2); readln; end. |   |   | |
    | Funkcijas tipa apakšprogramma | ||
    |   |
2. Funkcijas sin1 sākums. Iekavās aprakstīts parametrs x. Tā kā tas ir integer tipa, tad šī funkcija varēs aprēķināt sinusu tikai no veseliem grādiem.
Atšķirībā no procedūras, norādīts arī funkcijas rezultāta tips - real.
3. Pirms begin var aprakstīt mainīgos, kurus izmantos tikai šī funkcija. Šoreiz tādu nav.
4. Funkcijas rezultātu jāpiešķir funkcijas nosaukumam sin1.
Aprēķinā tiek izmantota iebūvētā funkcija sin, vispirms grādus pārvēršot uz radiāniem, t.i., pareizinot ar π un izdalot ar 180.
π tiek iegūts ar iebūvētu funkciju pi.
5. Apakšprogrammas beigas.
6. Programmas sākums.
9. Šajā rindiņā starp visu pārējo tiek arī izsaukta funkcija sin1.
Izsaucot arguments var būt konkrēts skaitlis, mainīgais vai izteiksme.
Programma aprēķina trijstūra visu leņķu kosinusus, ja zināmi malu garumi. 3 reizes tiek izmantota funkcija kos, kas aprēķina viena leņķa kosinusu. Funkciju nevajadzētu nosaukt cos, jo šis nosaukums jau ir izmantots iebūvētai funkcijai.
var a,b,c:real; function kos(a,b,c:real):real; begin kos:=(b*b+c*c-a*a)/(2*b*c); end; begin write('Ievadi trijst×ra malas ==>'); readln(a,b,c); writeln(kos(a,b,c):5:2,kos(b,a,c):5:2,kos(c,a,b):5:2); readln; end. |
2. Funkcijai var būt varāki argumenti. Ir svarīga to kārtība.
4. Funkcija pēc kosinusu teorēmas aprēķina kosinusu leņķim, kurš ir pretī malai a (pirmajam argumentam).
9. 3 reizes tiek izmantota funkcika kos, pie tam katru reizi mainās pirmais arguments.
Papildināsim iepriekšējo programmu, lai tā aprēķinātu trijstūra leņķus.
Paskālā nav funkcijas, kas pēc kosinusa nosaka leņķi (matemātikā šo funkciju apzīmē ar arccos).
Bet paskālā ir funkcija arctan, ar kuru var noteikt leņķi, ja zināms tangenss.
Tā kā kosinusu jau mākam aprēķināt, tad varam izteikt arī tangensu:
Atliek vēl atcerēties, ka tangens no 900 nav definēts. Tāpēc šis gadījums jāaplūko atsevišķi.
var a,b,c:real; function kos(a,b,c:real):real; begin kos:=(b*b+c*c-a*a)/(2*b*c); end; function lenkis(a,b,c:real):real; var k,tg,l:real; begin k:=kos(a,b,c); if k=0 then lenkis:=90 else begin tg:=sqrt(1-k*k)/k; l:=arctan(tg)/pi*180; if l<0 then lenkis:=180+l else lenkis:=l; end; end; begin write('Ievadi trijst×ra malas ==>'); readln(a,b,c); writeln(lenkis(a,b,c):5:0,lenkis(b,a,c):5:0,lenkis(c,a,b):5:0); readln; end. |
2. Iepriekšējā uzdevuma funkcija, kas aprēķina kosinusu.
6. Funkcija, kas rēķina leņķi.
9. Kosinusu aprēkinām, izmantojot funkciju kos.
10.Gadījums, kad leņķis ir taisns, jāaplūko atsevišķi.
12.Tagad, ja leņķis nav taisns.
13.Aprēķinām tangensu.
14.Atrodam leņķi un pārvēršam to no radiāniem uz grādiem.
15.Plata leņķa vietā arctan dod negatīvu leņķi, tāpēc tam vēl jāpieskaita 1800.
Uzdevumi