Ada Programlama Dili Temelleri

Bölüm 3

Standard Pakette Tanımlanan Öntanımlı Veri Tipleri

Bölüm 3 Sayfa 3

3.2 - Öntanımlı Tamsayı Veri Tipleri

Ada 2012 spesifikasyonu ile birlikte gelen Standard paketin görünebilir kısmında tanımlanan tamsayı veri tiplerinin tanımı aşağıda görülmektedir :

package Standard is
pragma Pure(Standard);

....


-- The integer type root_integer and the
-- corresponding universal type universal_integer are predefined.
type Integer is range implementation-defined;
subtype Natural is Integer range 0 .. Integer'Last;
subtype Positive is Integer range 1 .. Integer'Last;
-- The predefined operators for type Integer are as follows:
-- function "=" (Left, Right : Integer'Base) return Boolean;
-- function "/=" (Left, Right : Integer'Base) return Boolean;
-- function "<" (Left, Right : Integer'Base) return Boolean;
-- function "<=" (Left, Right : Integer'Base) return Boolean;
-- function ">" (Left, Right : Integer'Base) return Boolean;
-- function ">=" (Left, Right : Integer'Base) return Boolean;
-- function "+" (Right : Integer'Base) return Integer'Base;
-- function "-" (Right : Integer'Base) return Integer'Base;
-- function "abs" (Right : Integer'Base) return Integer'Base;
-- function "+" (Left, Right : Integer'Base) return Integer'Base;
-- function "-" (Left, Right : Integer'Base) return Integer'Base;
-- function "*" (Left, Right : Integer'Base) return Integer'Base;
-- function "/" (Left, Right : Integer'Base) return Integer'Base;
-- function "rem" (Left, Right : Integer'Base) return Integer'Base;
-- function "mod" (Left, Right : Integer'Base) return Integer'Base;
-- function "**" (Left : Integer'Base; Right : Natural)
-- return Integer'Base;

ISO/IEC 8652:201z(E) Ed. 3 - Ada Reference Manual
A.1 The Package Standard 11 June 2010 324
-- The specification of each operator for the type
-- root_integer, or for any additional predefined integer
-- type, is obtained by replacing Integer by the name of the type
-- in the specification of the corresponding operator of the type
-- Integer. The right operand of the exponentiation operator
-- remains as subtype Natural.

Yukarıdaki pakette dört tane tamsayı tipi tanımlanmaktadır. Bunlar,

root_integer, universal_integer, Integer, Natural ve Positive

tamsayı veri tipleridir. Bu tamsayı tiplerinin bibirleri ile ilişkisinin anlaşılması için, Ada programlama dilinde veri tipleri hiyerarşisinin incelenmesi yararlı olacaktır.

Ada programlama dilinde veri tipleri hiyerarşik bir yapılanma olarak düzenlenmiştir. Her veri tipinin bir ilk atası (ultimate ancestor) bulunur. İlk ata, hiçbir üst sınıftan türetilmemiş olan veri tipidir. Bu ilk ata tipinden, çeşitli kapsam kısıtları gibi farklıklarla aynı tipin alt sınıfları türetileblir. Alt tiplerin türetilmesi, Standard pakette tanıtma ile gerçekleşebildiği gibi, ileride göreceğimiz gibi, kullanıcılar da geniş ölçüde gereksinmelerine göre alt tipler tanımlayıp uygulamalarında kullanabilirler.

Standart pakette tanımlanmış olan yukarıda belitilen tamsayı veri tiplerini de, bir tamsayı veri tipi hiyerarşisi olarak düşünmek gerekir. Bu tamsayı veri hiyerarşisi aşağıda incelenmiştir.

3.2.1 - root_integer

Standard pakette root_integer tamsayı veri tipi için, sadece öntanımlı bir tamsayı olduğu bilgisi verilmiştir. Bu tamsayı veri tipi, Standard pakette değil, derleyici bünyesinde tanımlanmıştır. Derleyici bünyesinde tümleşik root_integer veri tipi hakkında, Ada 2012 spesifikasyonu sayfa 33, bölüm 3.4.1 de açıklayıcı bilgiler verilmiştir. Burada, sayısal root tiplerin, sayısal universal tiplerin atası olarak tanımlandıkları belirtilmiştir. Bu tanıma göre, root_integer, tüm tamsayı tiplerinin ilk atası, (ultimate ancestor) sınıfıdır.

Tüm tamsayı tiplerinin ilk atası olarak tanımlandığı belirtilen, root_integer, universal_integer veri tipi ile uygulanan işlemcilerde karşılaşılabilme olasılığı olan kuramsal belirsizliğin aşılması amacı ile tanımlanmıştır. Eğer universal_integer veri tipindeki değerler tüm sayı işlemcilerinde geçerli olursa bir belirsizlik yaşanabileceği ve bu belirsizliğin aşılabilmesi için, kuramsal bir üst sınıf tamsayı veri tipi yaratıp, işlemcilerde önceliğin bu üst sınıfa verilmesi düşünülmüştür. Bu konuda henüz tartışmalar devam etmesine karşın, bunun pratik alana bir etkisi yoktur. Bu belirsizilik, kuramsal matematiksel düzeydedir. Sadece bir tanım konusudur ve uygulamalara bir etkisi yoktur. Kuramsal amaçlarla tanımlanmış olan root_integer veri tipi, sadece tüm tamsayı tiplerinin en üst atası olarak ve kuramsal düzeyde bir tip olarak belirtilmiştir. Bu veri tipinin programlarda bir tamsayı veri tipi olarak kullanılması sözkonusu değildir.

Kuramsal root_integer tamsayı veri tipi, tüm tamsayı tiplerin en üst atası (ultimate ancestor) konumundadır. Sınırları System.Min_Int .. System.Max_Int sınırları arasındadır. Bu değerler, çalışılan sistem karakteristiklerine bağlı doğrudan saptanma olanağı olmayan, kuramsal değerlerdir. Hiçbir tamsayı tipinin kapsam aralığı root_integer tipinden daha geniş olamaz. Kullanıcılar, gerçek programlama çalışmaları sırasında root_integer veri tipi ile karşılaşmazlar.

3.2.2 - universal_integer

Standard pakette tanımlanmış olan ikinci tamsayı veri tipi universal_integer veri tipidir. Bu veri tipi, root_integer veri tipinin alt tipidir ve en küçük ve en büyük değerleri root_integer ile aynıdır. Standard pakette tanımlanmış olan universal_integer veri tipi Tüm tamsayı tipleri için sınıf boyu (class wide) tip olarak tanımlıdır ve bu özelliği ile tüm alt tamsayı veri tipleri ile uyumludur, fakat kullanıcılar tarafından değişken tipi olarak tanımlanamaz ve alt tipleri oluşturulamaz. Matematiksel olarak, tüm tanım aralığındaki tamsayıların ve işlemcilerin birleşimi (union) ile oluşan bir küme olarak tanımlanır.

Bu küme elemanları ile yapılacak işlemlerde, örnek olarak

1 + 4 < 7
		

gibi, çelişkili olma potansiyeli taşıyan sonuçlara neden olacağından çelişkinin aşılması için, işlenenleri universal_integer tiplerin oluşturduğu işlemlerde işlemci önceliğinin temel tamsayı ata tipi olarak tanımlanan root_integer veri tipine vererek çelişkinin aşılmasına çalışılmıştır. Konu üzerinde kuramsal tartışmalar hala devam etmektedir. Bu kuramsal konunun gerçek problemlerle çalışan programcıları, yani gerçek dünyayı ilgilendirecek bir yönü yoktur. Kullanıcılar sadece Integer tipinde ve onun öntanımlı alt tipleri olan Natural ve Positive tipleri ile kendi tanımlayabilecekleri tamsayı alt tiplerinin oluşturduğu nesneleri uygulayarak kapsam aşımına neden olmadan hesaplamalarını gerçekleştirmekle yükümlüdür.

Standard pakette tanımlanmış olan universal_integer veri tipi, root_integer kök tipine göre daha gerçek ve operasyonel özelliktedir. Yine de, bu veri tipinin kullanıcılar tarafından isimli alt tipleri tanımlanamaz. Integer veri tipinden sabitler ve tamsayı literalleri, universal_integer tipinde veriler olarak kabul edilir. Ayrıca bazı niteliklerin döndürdüğü değerler universal_integer veri tipinde olarak tanımlanmıştır. universal_integer Veri tipinin kendisi için tanımlı alt programları (tiplerin işlemcileri alt programlar olarak tanımlanırlar) yoktur. Fakat, universal_integer, veri tipi, tüm tamsayı tiplerinin sınıf boyu (class-wide) tipi olarak kabul edilir ve tüm tamsayı alt tipleri ile uyumlu kabul edilir. Bu şekilde tüm tamsayı tipleri için tanımlı işlemcilerde işlenen olarak kullanılabilir, tüm tamsayı tipi değişkenlerine atanabilir ve tüm tamsayı tipleri ile ifadeler oluşturabilirler. Aslında, root_integer kuramsal sınıfının tanımlanmasının gereği de universal_integer veri tipinin bu üniversalitesidir. Kullanıcılar, universal_integer veri tipinden nesneler ile programlarda karşılaşabilirler. Örnek olarak,

Alan_Sabiti : constant Integer  :=16;
		

şeklinde yapılan bir tanımda, kullanıcı sabitin Integer tipinde olacağını belirtmiş olmasına rağmen, derleyici bu sabitin veri tipini universal_integer olarak algılar. Kullanıcılar universal_integer veri tipi ile, bu tür bir sabit tanımı, tamsayı literallerin kullanımı ve geri döndürülen nitelik değerlerin tipi olması dışında, fazla karşılaşmazlar.

3.2.3 - Integer

Öntanımlı Integer tamsayı veri tipi, uygulanabilen nesneleri (objects) oluşturulabilen ilk tamsayı tipidir. Bu tipin Standard paketteki tanıtımı yukarıda görülmektedir. Satndard pakette verilen Integer tanımın anlaşılması, buraya kadar gerçekleştirdiğimiz çalışmaları anımsarsak fazla zor olmaması gerekir. Bazı ileride inceleyeceğimiz tanımların açıklanması ile daha açık bilgiler elde edebileceğiz.

Standart pakette Integer veri tipinin tanımı,

type Integer is range implementation-defined;

Bu tanım aslında ileride göreceğimiz bir tamsayı alt tipi tanımıdır. Burada range saklı sözcüğü kapsam araqlığını belirtmektedir. Sadece, kullanıcılar, uygulanması gereken gerçek kapsam aralığı belirtmek zorunda olmalarına karşın, Standard paketteeki Integer veri tipi tanıtımı, kapsam aralığının yerleşime bağlı olacağını belirtmektedir.

Integer veri tipinin kapsam aralığının yerleşime bağlı olması, Integer tipinin yerleşime göre sistemin destekleyebileceği en yüksek kapsam aralığına sahip olacağı anlamın kesinlikle gelmemektedir. Bir sistemde tamsayı değerlerinin en geniş kapsam aralığı, root_integer tipinin sınırları System.Min_Int .. System.Max_Int arasında olan kapsam aralığıdır. Integer veri tipinin yerleşime bağlı kapsam alaını sadece Integer veri tipi için geçerlidir ve daha çok derleyicinin tasarımı ile ilgilidir. Eskiden çalışan çoğu sistemlerin, 16 bit mimari üzerinde çalıştığı düşünülerek, Integer veri tipi kapsam aralığı, 16 bitlik sistemlerin destekleyebilmesi için, çok kısıtlı sınırlar içinde tutulmuştur. Bu düşünce ile, GNAT derleyicisi, Integer veri tipleri için kapsam aralığının –2**15+1 .. +2**15–1 (- 32767 ile 32767) belki ekstra bir negatif değerle, (-32768 - 32767) arasında destekleneceğini belirtmektedir. Bu değer doğal olarak çok tutucu olduğundan,32 bit aritmetiği destekleyebilen sistemler için, bir Long_Integer veri tipinin de tanımlanabileceğini ve bunun destekleyebileceği kapsam aralığının –2**31+1 ..+2**31–1 (-2 147 483 647 ile 2 147 483 647), belki ekstra bir negatif değerle -2 147 483 648 ile 2 147 483 647 arası olabileceği belirtilmiştir. Günümüzde çalışan sistemlerin büyük bir kısmı 32 bit aritmetiği desteklemektedir. Dolayısı ile bu son değer aralığı ile çalışmak programların taşınabilirliğini büyük bir olasılıkla etkilemeyecektir. Yani, günümüzde 32 bitlik sistemlerin desteklediği tanım aralığında tanımlanan tamsayı tipleri ile çalışılan programlarda, taşınırlık probleminin yaşanmasının olasığı çok az olacaktır.

Gerçmişte, çoğunlukla 16 bitlik sistemlerle çalışıldığından, 32 bitlik aritmetiği destekleyebilen sistemlerde çalışabilmek amacı ile bugünkü 32 bit sistemlerin kapsam aralığında çalışabiliecek bir Long_Integer tanımı yapılmıştı. Günümüzde 32 bit sistemlerde Integer tipinin tanım aralığı bu aralığa ulaştığından Long_Integer tanımı anlamsız kalmış ve günümüzde standart pakete dahil edilmemiştir.

3.2.3.1 - Integer Veri Tipine Uygulanabilen Nitelikler

Integer veri tipi, skaler (scalar), ayrık (discrete) bir veri tipidir, sayılabilir bir veri tipi olarak da düşünülebilir. Bu nedenle, Integer veri tipine uygulanabilen nitelikler, Boolean veri tipine uygulanabilen nitelikler ile aynıdır. Burada uygulanacak niteliklerin tanımları Boolean veri tipi incelenirken yapılmış olan nitelik açıklamalarından, veya ek4-s1 deki nitelik listesinden bulunabilir.

Intger veri tipinin monitör gösterimlerinin sağlanması için, Ada.Text_IO paketinde alt paket olarak tanımlanmış olan Ada.Text_IO.Integer_Text_IO generik paketi, Integer veri tipi için, öntanımlı olarak Ada.Integer_Text_IO adı ile örneklenmiştir. Bu öntanımlı paketin kullanılması geniş ölçüde ek3-s2 de açıklanmıştır. Integer tipi nesnelerin giriş/çıkış işlemlerinin düzenlenmesi için, bu paketin kullanımının iyi bir şekilde incelenmesi gereklidir. İstenirse, basit sonuçların ekran gösterimi, imaj niteliğinden yararlanıp sözel değerlere dönüştürülerek Ada.Text_IO paketinden yararlanılarak gerçekleştirilebilir.

Integer veri tipinin Integer'First ve Integer'Last nitelikleri, Integer veri tipinin çalışılan sistemde, desteklenen en küçük ve en büyük değerlerini döndürür. Aşağıda görülen prosedürde, bu kapsam sınırları sorgulanmaktadır.


   with Ada.Text_IO;
   with Ada.Integer_Text_IO;
   

   procedure  b3_2_3_1_uyg_1 is

   begin

      Ada.Text_IO.Put(item => "Bu Makinenin En Alt Integer Veri Tipi Değeri : ");

      Ada.Integer_Text_IO.Put(item =>Integer'First,  width => 11);

      Ada.Text_IO.New_Line;

      Ada.Text_IO.Put(item => "Bu Makinenin En Üst Integer Veri Tipi Değeri :");

      Ada.Integer_Text_IO.Put(item => Integer'Last,  width => 12);

   end b3_2_3_1_uyg_1;


Bu programın sonucu,

Bu Makinenin En Alt Integer Veri Tipi Değeri : -2147483648

Bu Makinenin En Üst Integer Veri Tipi Değeri : 2147483647

Yukarıdaki prosedürde, alınan sonuçlar, çalışılan Windows 7 (64 bit) işletim sistemi ile çalışan bir masaüstü sistemi olan, çalışılan sistemde, Integer veri tipinin 32 bit sistemler için desteklenen kapsam aralığında yerleştiridiği görülmektedir. Kapsam aralığı yaklaşık 2 milyar pozitif tamsayı olan bu kapasite, birçok projede kullanıcı tanımına gerek kalmayacak kadar geniş bir tamsayı kullanma olanağını sağlamaktadır. Bundan çok daha geniş kapsam aralığı olan kullanıcı tanımlı özgün tamsayı tiplerini ileride tanımlayıp kullanabileceğiz. Kullanıcılar gereksinmelerine göre, isterlerse öntanımlı Integer veri tipinden isterlerse, biraz sonra inceleyeceğimiz, öntanımlı Natural ve Positive öntanımlı tamsayı alt tiplerinden, isterlerse kendi tanımlayacakları özgün tamsayı tiplerinden yararlanabilirler. Integer tipi verilerin günümüzde geniş bir kapsam alanı bulunmakta ve bilgisayar sistemlerinde sağlanan gelişme düşünüldüğünde, tüm sistemler an az 32 bitlik mimarilerde çalıştığından taşınabilirlik problemi yaşanmayacağı kesinlikle belirtilebilir.

Integer veri tipinin Intger'Max ve Intger'Min nitelikleri, iki tamsayı değerinin büyük ve küçük olanını belirlemek için yararlı olur. Bu konuda bir uygulama, aşağıda görülmektedir.

with Ada.Text_IO;
with Ada.Integer_Text_IO;

procedure b3_2_3_1_uyg_2 is

 Birinci_Değer : Constant Integer := 45_345;

İkinci_Değer : Integer;

begin

İkinci_Değer := 3500E5 - Birinci_Değer;

Ada.Text_IO.Put(Item => "Birinci Değer :  ");

Ada.Integer_Text_IO.Put(Item => Birinci_Değer , Width => 35);

Ada.Text_IO.New_Line;

Ada.Text_IO.Put(Item => "İkinci Değer :  ");

Ada.Integer_Text_IO.Put(Item => İkinci_Değer , Width => 31);

Ada.Text_IO.New_Line;

Ada.Text_IO.Put(Item => "Büyük Olan Değer :  ");

Ada.Integer_Text_IO.Put(Item => Integer'Max(Birinci_Değer , İkinci_Değer) , Width => 20);

Ada.Text_IO.New_Line;

Ada.Text_IO.Put(Item => "Küçük Olan Değer :  ");

Ada.Integer_Text_IO.Put(Item => Integer'Min(Birinci_Değer , İkinci_Değer) , Width => 25);

end b3_2_3_1_uyg_2;


Bu programın sonucu, 

Birinci Değer :                                 45345
İkinci Değer :                          349954655
Büyük Olan Değer :                 349954655
Küçük Olan Değer :                         45345

olmaktadır.
		

Tamsayı tiplerinin sayılabilir veri tipi olarak da düşünülebileceğini belirtmiştik. Tamsayı veri tipleri elemanları birbirini aralıksız izleyen sayılabilir veri tipleri olarak düşünülebilir. Bunun kanıtı, tamsayı veri tiplerinde, öndeki değer, (Succ) arkadaki değer (Pred) niteliklerin bulunmasıdır. Eğer, kapsam sınırının en altındaki değerin bir olmayan bir ardındaki değer sorgulanırsa, kapsam sınırı hatası ile karşılaşılır. Aynı sonuç, kapsam üst sınırını izleyen eleman sorgulanırsa da yaşanır. Tamsayı tiplerinin ekran görüntüleri, imaj niteliklerinden yararlanılarak alınabilir. Aşağıda görülen prosedürde, sınırlarda olmayan bir Integer değerinin önündeki ve ardındaki değerler, imaj niteliğinden yararlanılarak görüntülenmektedir.

 

with Ada.Text_IO;

procedure b3_2_3_1_uyg_3 is

Tamsayı : constant  Integer := 26;

begin

    Ada.Text_IO.Put_Line(" Bir Önceki Değer :   " & Integer'Image(Integer'Pred(Tamsayı)));

    Ada.Text_IO.Put_Line(" Değer :                      " & Integer'Image(Tamsayı));

    Ada.Text_IO.Put_Line(" Bir Sonraki Değer :  " & Integer'Image(Integer'Succ(Tamsayı)));

end b3_2_3_1_uyg_3;


Bu programın sonucu, 

Bir Önceki Değer :      25
Değer :                      26
Bir Sonraki Değer :     27

olmaktadır.
		

Yukarıdaki prosedürde, alınan sonuçlar, Integer veri tipinin bir skaler ve ayrık veri tipi olmanın yanında, bir sayılabilir veri tipi olarak, da düşünülebileceğini belirtmektedir. Integer veri tipinin sayılabilir karakteri, Pos ve Val niteliklerinin Integer veri tipine de uygulanabilmesinden anlaşılmaktadır. Integer veri tipinin Pos niteliğinin değeri ile Val niteliğinin sonuçları kendisidir. Bu sonuçlar, aşağıdaki, prosedürün sonuçlarından da görülebilmektedir.

 

with Ada.Text_IO;

procedure b3_2_3_1_uyg_4 is

Tamsayı : constant  Integer := 26382;

begin

   Ada.Text_IO.Set_Col(To => 10);

   Ada.Text_IO.Put(" Tamsayı Değeri:");

   Ada.Text_IO.Set_Col(To => 80);
   
   Ada.Text_IO.Put_Line(Integer'Image(Tamsayı));
   
   
   Ada.Text_IO.Set_Col(To => 10);

   Ada.Text_IO.Put("Integer'Pos(Tamsayı Değeri):");

   Ada.Text_IO.Set_Col(To => 70);
    
   Ada.Text_IO.Put_Line(Integer'Image(Integer'Pos(Tamsayı)));
   
   
    
   Ada.Text_IO.Set_Col(To => 10);

   Ada.Text_IO.Put("Integer'Val(Integer'Pos(Tamsayı)) Değeri:");
   
   Ada.Text_IO.Set_Col(To => 61);
    
   Ada.Text_IO.Put_Line(Integer'Image(Integer'Val(Integer'Pos(Tamsayı))));


end b3_2_3_1_uyg_4;


Bu programın sonucu, 

          Tamsayı Değeri:                                                  26382
          Integer'Pos(Tamsayı Değeri):                               26382
          Integer'Val(Integer'Pos(Tamsayı)) Değeri:            26382

olmaktadır.
		

Yukarıdaki prosedürde, sonuçlarından da görülebildiği gibi Integer veri tipinin sayılabilir bir veri tipi karakteri de bulunmaktadır.

Integer veri tipinin Size niteliği, bu veri tipinin yerleşim genişliğini, yani 16 veya 32 bit genişliğin uygulanmış olduğunu açıklayan önemli bir göstergedir. Yine önemli olan width,Wide_Width ve Wide_Wide_Width nitelikleri, Intger veri tipinin sözel imajının alınması için başvurulan Image, Wide_Image ve Wide_Wide_Image niteliklerinin Integer verileri sözel imajlarına dönüştürürken kullanacakları maksimum karakter genişliğini bit cinsinden açıklamaktadır. Aşağıda, bu niteliklerin sorgulandığı bir prosedür ve sonuçları görülmektedir.

 

   with Ada.Text_IO;

   procedure b3_2_3_1_uyg_5 is
   
   begin
   
      Ada.Text_IO.Set_Col(To => 10);
   
      Ada.Text_IO.Put("Integer'Size Değeri:");
   
      Ada.Text_IO.Set_Col(To => 62);
   
      Ada.Text_IO.Put_Line(Integer'Image(Integer'Size));
   
   
   
      Ada.Text_IO.Set_Col(To => 10);
   
      Ada.Text_IO.Put("Integer'Width Değeri");
   
      Ada.Text_IO.Set_Col(To => 60);
    
      Ada.Text_IO.Put_Line(Integer'Image(Integer'Width));
   
    
      Ada.Text_IO.Set_Col(To => 10);
   
      Ada.Text_IO.Put("Integer'Wide_Width Değeri");
   
      Ada.Text_IO.Set_Col(To => 55);
    
      Ada.Text_IO.Put_Line(Integer'Image(Integer'Wide_Width));
   
   
   
      Ada.Text_IO.Set_Col(To => 10);
   
      Ada.Text_IO.Put("Integer'Wide_Wide_Width Değeri");
   
      Ada.Text_IO.Set_Col(To => 50);
    
      Ada.Text_IO.Put_Line(Integer'Image(Integer'Wide_Wide_Width));
      
      
      Ada.Text_IO.Set_Col(To => 10);
   
      Ada.Text_IO.Put("Long_Integer'Size Değeri:");
   
      Ada.Text_IO.Set_Col(To => 62);
   
      Ada.Text_IO.Put_Line(Integer'Image(Long_Integer'Size));
   
   
   
      Ada.Text_IO.Set_Col(To => 10);
   
      Ada.Text_IO.Put("Long_Integer'Width Değeri");
   
      Ada.Text_IO.Set_Col(To => 60);
    
      Ada.Text_IO.Put_Line(Integer'Image(Long_Integer'Width));
   
    
      Ada.Text_IO.Set_Col(To => 10);
   
      Ada.Text_IO.Put("Long_Integer'Wide_Width Değeri");
   
      Ada.Text_IO.Set_Col(To => 55);
    
      Ada.Text_IO.Put_Line(Integer'Image(Long_Integer'Wide_Width));
   
   
   
      Ada.Text_IO.Set_Col(To => 10);
   
      Ada.Text_IO.Put("Long_Integer'Wide_Wide_Width Değeri");
   
      Ada.Text_IO.Set_Col(To => 50);
    
      Ada.Text_IO.Put_Line(Integer'Image(Long_Integer'Wide_Wide_Width));
      
      
      
      Ada.Text_IO.Set_Col(To => 10);
   
      Ada.Text_IO.Put("Long_Long_Integer'Size Değeri:");
   
      Ada.Text_IO.Set_Col(To => 62);
   
      Ada.Text_IO.Put_Line(Integer'Image(Long_Long_Integer'Size));
      
      
      Ada.Text_IO.Set_Col(To => 10);
   
      Ada.Text_IO.Put("Long_Long_Integer'Width Değeri");
   
      Ada.Text_IO.Set_Col(To => 60);
    
      Ada.Text_IO.Put_Line(Integer'Image(Long_Long_Integer'Width));
   
    
      Ada.Text_IO.Set_Col(To => 10);
   
      Ada.Text_IO.Put("Long_Long_Integer'Wide_Width Değeri");
   
      Ada.Text_IO.Set_Col(To => 55);
    
      Ada.Text_IO.Put_Line(Integer'Image(Long_Long_Integer'Wide_Width));
   
   
   
      Ada.Text_IO.Set_Col(To => 10);
   
      Ada.Text_IO.Put("Long_Long_Integer'Wide_Wide_Width Değeri");
   
      Ada.Text_IO.Set_Col(To => 50);
    
      Ada.Text_IO.Put_Line(Integer'Image(Long_Long_Integer'Wide_Wide_Width));
   
   
   end b3_2_3_1_uyg_5;

Bu programın sonucu,

Integer'Size Değeri:                                 32
Integer'Width Değeri                                11
Integer'Wide_Width Değeri                       11
Integer'Wide_Wide_Width Değeri              11

Long_Integer'Size Değeri:                                 32
Long_Integer'Width Değeri                                11
Long_Integer'Wide_Width Değeri                       11
Long_Integer'Wide_Wide_Width Değeri              11

Long_Long_Integer'Size Değeri:                                 64
Long_Long_Integer'Width Değeri                                20
Long_Long_Integer'Wide_Width Değeri                       20
Long_Long_Integer'Wide_Wide_Width Değeri              20

olmaktadır.
		

Yukarıdaki prosedür sonuçları, GNAT 2012 derleyicisinde, Integer veri tipinin 32 bit genişliğinde bir veri tipi olarak yerleştirildiğini belirtmektedir. Bu önemli bir bilgidir ve artık tüm Integer veri tiplerinin 32 bit genişliğinde yerleştirildiğini, kapsam genişliğinin -2 147 483 648 ile 2 147 483 647 arası olacağını, açıklmaktadır. Integer veri tipi, bu kapsam aralığında tüm sistemlerde desteklenip taşınma sorunu yaratmayacaktır. Artık 32 bitlik Long_Integer veri tipine gerek olmadığı, açıkça ortadadır. Bu nedenle Long_Integer veri tipi, Standart paketten çıkarılmış ve desteklenmesi derleyicinin seçimine bırakılmıştır. GNAT derleyicisi eskiye uyum amacı ile halen Long_Integer veri tipinin desteklemekte fakat kullanımı teşvik edilmemektedir. Integer veri tipinin kapasitesinin yeterli olmadığı durumlarda, kullanıcılar çok daha geniş, kapsam aralığında kendi tamsayı tiplerini tanımlayıp kullanabilirler.

Long_Long_Integer veri tipinin durumu farklıdır. Long_Long Integer veri tipi, 64 bitlik tanım genişliği ile, Integer ve Long_Integer veri tiplerine göre üstünlük göstermektedir. Yine de kullanıcıların bu genişlikte tamsayı veri tipine gereksinmeleri olduğunda, kendi özgün tiplerini yaratıp uygulamaları daha iyi bir seçim olacaktır. Standart olmayan bu tipleri kullanmak yerine, kendi özgün veri tipimize güvenmek, kalıcı programlar yaratmak için daha uygun olacaktır.

Integer veri tipi ile en çok kullanılan nitelikler burada incelenmiştir. Başka niteliklerin de uygulanması gekirse, ek 4 deki nitelikler listesinden uygulanabilecek bir nitelik seçilerek spesifikasyonuna uygun olarak uygulanabilir.