Ada Programlama Dili — Örnekler: Fonksiyonlar

mozgan
Ada Programlama Dili
3 min readJun 6, 2024
https://ocw.ui.ac.id/pluginfile.php/8010/mod_label/intro/icon8.JPG

1. Subtract Function

Subtract adındaki bir fonksiyona Integer türünden iki parametre verilecek. İlk parametreden ikincisi çıkartılacak, ve sonuç fonksiyondan geriye döndürülecek. Programı çalıştırırken main.adb içerisinde bulunan test isimleri verilecek.

subtract.ads

function Subtract (Left, Right : in Integer) return Integer;

subtract.adb

function Subtract (Left, Right : in Integer) return Integer is
begin
return Left - Right;
end Subtract;

Derleme ve Test

❯ gnatmake main.adb
gcc -c main.adb
gcc -c subtract.adb
gnatbind -x main.ali
gnatlink main.ali

❯ ./main Sub_10_1_Chk
Result: 9

❯ ./main Sub_10_100_Chk
Result: -90

❯ ./main Sub_0_5_Chk
Result: -5

❯ ./main Sub_0_Minus_5_Chk
Result: 5

2. Equality Function

Is_Equal adındanki bir fonksiyona Integer türünden iki parametre verilecek. Fonksiyon, eğer bu parametrelerin içerikleri aynı ise geriye True, aksi halde False değerini döndürecek.

is_equal.ads

function Is_Equal (Left, Right : in Integer) return Boolean;

is_equal.adb

function Is_Equal (Left, Right : in Integer) return Boolean is
begin
return Left = Right;
end Is_Equal;

Derleme ve Test

❯ gnatmake main.adb
gcc -c main.adb
gcc -c is_equal.adb
gnatbind -x main.ali
gnatlink main.ali

❯ ./main Equal_Chk
0 is equal to 0.
1 is equal to 1.
2 is equal to 2.
3 is equal to 3.
4 is equal to 4.
5 is equal to 5.
6 is equal to 6.
7 is equal to 7.
8 is equal to 8.
9 is equal to 9.
10 is equal to 10.

❯ ./main Inequal_Chk
0 isn't equal to -1.
1 isn't equal to 0.
2 isn't equal to 1.
3 isn't equal to 2.
4 isn't equal to 3.
5 isn't equal to 4.
6 isn't equal to 5.
7 isn't equal to 6.
8 isn't equal to 7.
9 isn't equal to 8.
10 isn't equal to 9.

3. States #2

Kullanıcı uygulamayı çalıştırırken argüman olarak Integer türünden bir değer verecek. Ve bu argümana bağlı olarak Get_State fonksiyonu, aşağıda belirtilen durum bilgisini, aksi halde boş bir karakter dizisini geriye döndürecek.

Sayı |     Durum Bilgisi      
------|-------------------------
0 | Off
1 | On: Simple Processing
2 | On: Advanced Processing

get_state.ads

function Get_State (State : in Integer) return String;

get_state.adb

function Get_State (State : in Integer) return String is
begin
return
(case State is
when 0 => "Off",
when 1 => "On: Simple Processing",
when 2 => "On: Advanced Processing",
when others => ""
);
end Get_State;

Derleme ve Test

❯ gnatmake main.adb
gcc -c main.adb
gcc -c get_state.adb
gnatbind -x main.ali
gnatlink main.ali

❯ ./main 0
Off

❯ ./main 1
On: Simple Processing

❯ ./main 2
On: Advanced Processing

❯ ./main 3

❯ ./main -1

❯ ./main test

raised CONSTRAINT_ERROR : bad input for 'Value: "test"

4. States #3

Bu uygulama öncelikle kullanıcıdan argüman olarak Integer türünden bir değer alacak. Bu argüman Display_On_Off metotuna parametre olarak aktarılacak. Bu metot da aldığı parametreyi Is_On isimli fonksiyona parametre olarak verecek. Is_On fonksiyonu da şayet verilen parametre 0 ise False, aksi halde True değerini döndürecek. Böylece Display_On_Off metodu fonksiyonun verdiği değere göre ekrana On veya Off mesajını yazacak.

is_on.ads

function Is_On (State : in Integer) return Boolean;

is_on.adb

function Is_On (State : in Integer) return Boolean is
begin
return not (State = 0);
end Is_On;

display_on_off.ads

procedure Display_On_Off (State : in Integer);

display_on_off.adb

with Ada.Text_IO; use Ada.Text_IO;
with Is_On;

procedure Display_On_Off (State : in Integer) is
begin
Put_Line (if Is_On (State) = True then "On" else "Off");
end Display_On_Off;

Derleme ve Test

❯ gnatmake main.adb
gcc -c main.adb
gcc -c display_on_off.adb
gcc -c is_on.adb
gnatbind -x main.ali
gnatlink main.ali

❯ ./main -1
On
TRUE

❯ ./main 0
Off
FALSE

❯ ./main 1
On
TRUE

❯ ./main 2
On
TRUE

❯ ./main test

raised CONSTRAINT_ERROR : bad input for 'Value: "test"

--

--