Lietotāja definēta funkcija

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ā.

1. programma

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.

2. programma

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.

3. programma

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

  1. Uzrakstīt funkciju, log(a,b) kas aprēķina logab, ja paskālā ir naturālā logaritma funkcija ln(x) un ir spēkā bāzu pārejas formula:
  2. Uzrakstīt funkciju, kas aprēķina trijstūra laukumu, ja doti malu garumi.
  3. Izmantojot iepriekšēja uzdevuma funkciju, aprēķināt laukumu četrstūrim, ja doti visu malu un vienas diagonāles garumi.
  4. Uzrakstīt funkciju, kas aprēķina izteiksmi 1+x2 un, 3 reizes izmantojot šo funkciju, aprēķināt izteiksmi:
  5. Uzakstīt funkciju max(a,b), kas atrod lielāko no 2 skaitļiem a un b. Izmantojot šo funkciju 2 reizes, atrast lielāko no 3 skaitļiem.
  6. Uzakstīt funkciju LKD(a,b), kas atrod skaitļu a un b lielāko kopīgo dalītāju. Izmantojot šo funkciju, atrast 3 skaitļu lielāko kopīgo dalītāju.
  7. Uzrakstīt funkciju LEFT(a,k), kuras rezultāts ir teksta a pirmie k burti.
  8. Uzrakstīt funkciju RIGHT(a,k), kuras rezultāts ir teksta a pēdējie k burti.