Provided by: manpages-tr_1.0.5.1-2_all bug

İSİM

       bc - Keyfî duyarlılıkta hesaplama dili

KULLANIM

       bc [ -hlwsqv ] [ uzun-seenekler ] [ dosya ... ]

SÜRÜM

       Bu kullanım kılavuzu, GNU bc sürüm 1.06'ya göre hazırlanmıştır.

AÇIKLAMA

       bc,  girilen  deyimleri  işleterek  keyfi  uzunlukta  ve duyarlılıktaki
       sayılar  üzerinde  matematiksel   işlemler   yapmaya   imkan   sağlayan
       etkileşimli  bir  ortam  ve  bir  yazılım geliştirme dilidir. Sözdizimi
       açısından   C   yazılım   geliştirme   dilini   andıran    benzerlikler
       sözkonusudur.  Komut  satırından belirtmek suretiyle kullanabileceğimiz
       standart bir math  kütüphanesine de sahiptir. Eğer  gerekli  ise;  math
       kütüphanesi,  belirtilen  dosyalardan  daha  önce ele alınır. bc işleme
       tabi tutarken dosyaları komut  satırında  belirtilen  sıraya  göre  ele
       alır. Belirtilen dosyaların tümü ele alınıp işlendikten sonra, standart
       girdiden  girişler  okunmaya  başlar.  Kodlar  nasıl  okunuyorlarsa  bu
       halleriyle  işletilirler. (Eğer belirtilen dosyalardan herhangi birinde
       bc'yi sonlandıracak  bir  komut  yer  alırsa,  bc  sonlanır,  bir  daha
       standart girdiden okuyamaz.)

       bc'nin   bu  sürümü,  geleneksel  bc  uygulamalarına  ve  POSIX  taslak
       standardına  göre  ilave  oluşumlar  içermektedir.   Komut   satırından
       belirtilecek  bir seçenekle bu genişletmeler kullanıma dahil edilebilir
       veya edilmeyebilir. Bu kılavuzda GNU bc  anlatılacak  ve  ek  oluşumlar
       yeri gelince belirtilecektir.

   SEÇENEKLER
       -h, --help
              Bir kullanım iletisi basar ve çıkar.

       -i, --interactive
              Etkileşimli kipe geçilir.

       -l, --mathlib
              Standart math kütüphanesini kullanıma sokar.

       -w, --warn
              POSIX bc'ye ek oluşumlar için uyarılar verir.

       -s, --standard
              Standart POSIX bc diline uygun olarak işlem yapar.

       -q, --quiet
              Normalde gelen, GNU bc hoşgeldiniz iletisini görüntülemez.

       -v, --version
              Sürüm ve telif hakkı bilgilerini gösterir ve çıkar.

   SAYILAR
       bc'deki  en  temel  eleman sayılardır. Sayılar keyfi duyarlılıkta ifade
       edilirler. Yani bc'de bir sayı, tamsayı kısım ve ondalık  kısım  olarak
       ifade  edilir. Tüm sayılar normalde iç hesaplamalarda onluk tabanda ele
       alınırlar ve tüm işlemler onluk  taban  üzerinden  gerçekleştirilirler.
       (Bu  sürüm,  bölme ve çarpma işlemlerinde sayıların ondalık kısımlarını
       belli uzunluktan  sonra  kesmektedir.)  bc'de  sayıların  iki  özelliği
       vardır:  uzunluk  ve bölüntü. Uzunluk, sayıdaki tüm anlamlı rakamların,
       bölüntü ise ondalık noktadan sonraki rakamların adedidir.

       Örneğin:

       0.0000010 sayısının uzunluğu 7 ve bölüntüsü 6'dır.
       01935.000 sayısının uzunluğu 7 ve bölüntüsü 3'tür.

       Uzunluk  açısından;  en  sağdaki  sıfır  anlamlı,  en   soldaki   sıfır
       anlamsızdır.

   DEĞİŞKENLER
       Sayılar   iki  farklı  türde  değişken  olarak  saklanabilirler:  basit
       değişkenler ve diziler. Her iki  değişken  türü  için  de  değişkenlere
       birer  ad  verilir.  Değişkenler  bir  harfle  başlarlar  ve sonrasında
       harfler, rakamlar ve  altçizgi  karakteri  içerebilirler.  Tüm  harfler
       küçük  harf  olmak  zorundadır.  (Değişkenlere  uzun isim verebilme bir
       genişletmedir. Çünkü, POSIX  bc'de  değişken  isimleri  tek  bir  küçük
       harftir.)  Dizi  değişkenleri ise isimden sonra [] (köşeli parantezler)
       alırlar.

       bc'de dört tane özel değişken vardır. Bunlar; scale,  ibase,  obase  ve
       last'dır.  scale,  işlemlerde sayılarda ondalık noktadan sonra kaç tane
       rakamın kullanılacağını belirtir. Öntanımlı scale değeri  0'dır.  ibase
       (input  base)  ve  obase (output base) değişkenleri, sayılarda girdi ve
       çıktı için tabanları belirtir.  Örneğin,  ibase=10  ve  obase=2  olursa
       sayılar  onluk  tabanda  girilir  ve  sonuçlar  ekrana  ikilik  tabanda
       yazdırılırlar.  Öntanımlı  ibase  ve  obase  değerleri   10'dur.   last
       değişkeni  (bu  bir genişletmedir) ise, en son ekrana yazdırılan sayıyı
       içeren bir  değişkendir.  Bu  değişkenlere  yeni  değerler  atanabilir.
       Bunlar ileride daha ayrıntılı olarak ele alınacaktır.

   AÇIKLAMALAR
       bc'de  açıklama satırları /* karakterleri ile başlar ve */ karakterleri
       ile biter. Açıklamalar herhangi bir yerde başlayabilir ve  girdide  tek
       bir boşluk gibi ele alınır. (Yani, bu da açıklamaların girdi elemanları
       arasında bir ayraç olarak  yorumlandığını  gösterir.  Dolayısıyla,  bir
       değişken ismi içerisinde açıklama yer alamaz anlamındadır.) Açıklamalar
       satırsonu karakteri içerebilirler.

       Ayrıca bc'de  betiklerin  kullanılmasını  sağlamak  için  tek  satırlık
       açıklamalar  desteklenmektedir  ve  bu  bir genişletmedir. Tek satırlık
       açıklama # karakterinden sonra başlar ve satır sonuna kadar devam eder.
       Satırsonu karakteri açıklamaya dahil değildir ve normal karakter olarak
       ele alınır.

   İFADELER
       Sayılar, ifadelerle  ve  deyimlerle  birlikte  kullanılırlar.  Bu  dil,
       etkileşimli  bir  çalışma  ortamı  olarak tasarlandığı için deyimler ve
       ifadeler de  etkileşimli  olarak  işletilebilirler.  bc'de  bir  'main'
       işlevi   kavramı   yoktur.  Bunun  yerine  kod,  olduğu  haliyle  hemen
       yorumlanarak  işletilir.  (İşlevler,  önce  tanımlanırlar  ve  sonradan
       kullanılabilirler -ileride ele alınacaklar-).

       En basit ifade bir 'sabit'tir. bc, ibase değişkeniyle belirtilen o anki
       girdi tabanını kullanarak sayıyı dahili onluk tabana  çevirir.  (Ancak,
       işlevler için bir istisna vardır.) ibase değişkeninin geçerli değerleri
       2'den  16'ya  kadardır.   Bu   aralığın   dışında   değerler   atanırsa
       kendiliğinden  2  veya 16 olarak yeniden ayarlanır. Sayılar girilirken,
       0-9 arası rakamlar ve A-F arası harfler ile kullanılabilir.  (Not:  A-F
       büyük   harf   olmalıdır.   Çünkü,   küçük   harfler  değişkenler  için
       kullanılıyorlar.) Tek rakamlı sayılar, ibase ne olursa olsun, her zaman
       rakamın  ifade ettiği değere sahip olurlar (örn, A=10)). bc çok rakamlı
       sayılarda, ibase değerine eşit veya daha büyük rakamları derhal ibase-1
       tabanında  ele alarak sayının değerini hesaplar. Bu FFF sayısını daima,
       girdi tabanındaki en büyük 3 haneli sayı yapar.

       İfadeler, diğer yüksek-düzeyli dillerdekilere oldukça benzerler.  bc'de
       sayılar  için  farklı türler olmadığı için karışık türler için kurallar
       yoktur. Bunun yerine, sadece ifadelerin  bölüntüleri  üzerine  kurallar
       vardır.  Her  ifadenin  bir  bölüntüsü  vardır.  Bu, orijinal sayıların
       bölüntülerinden, gerçekleştirilen işlemden ve  çoğu  durumda  da  scale
       değişkeninin  değerinden  elde  edilir.  scale değişkeninin alabileceği
       değerler, 0 (sıfır)  ile  C'deki  tamsayı  türü  ile  ifade  edilebilen
       tamsayı aralığındadır.

       Aşağıdaki geçerli ifadelerin açıklamalarında "ifade" komple bir ifadeyi
       ve "değişken" ise sıradan  bir  değişkeni  veya  bir  dizi  değişkenini
       göstermektedir. Bir basit değişken

       isim

       şeklinde ve bir dizi değişkeni ise aşağıdaki gibi belirtilir:

       isim[ifade]

       Özel  olarak söz edilmediyse sonucun bölüntüsü, ilgili ifadelerin azami
       bölüntüsü olur.

       -ifade Sonuç, ifade'nin negatifi olur.

       ++deiken
              deiken'in değerine önce 'bir' eklenir ve yeni  değer  ifadenin
              sonucu olur.

       --deiken
              deiken'in  değeri önce 'bir' eksiltilir ve yeni değer ifadenin
              sonucu olur.

       deiken++
              İfadenin  sonucu  değişkenin  değerine  göre  hesaplanır,  sonra
              deiken'in değeri 'bir' artırılır.

       deiken--
              İfadenin  sonucu  değişkenin  değerine  göre  hesaplanır,  sonra
              deiken'in değeri 'bir' eksiltilir.

       ifade + ifade
              Sonuç, iki ifade'nin toplamıdır.

       ifade - ifade
              Sonuç, iki ifade'nin farkıdır.

       ifade * ifade
              Sonuç, iki ifade'nin çarpımıdır.

       ifade / ifade
              Sonuç,  iki  ifade'nin  bölümüdür.   Sonucun   bölüntüsü   scale
              değişkeninin değeridir.

       ifade % ifade
              Sonuç,   "kalan"ı   verir   ve  şu  şekilde  hesaplanır.  a%b'yi
              hesaplarken,  ilk  önce  a/b  scale  haneli  olarak  hesaplanır.
              scale+scale(b) ve scale(a)'dan hangisi daha büyükse bu bölüntüye
              göre a-(a/b)*b ifadesi  sonucu hesaplamak için kullanılır.  Eğer
              scale  0'a eşitlenirse ve her iki ifade de tamsayı ise, bu ifade
              tamsayı kalan işlevidir.

       ifade ^ ifade
              İfadenin sonucu, birincinin ikinciye göre üssüdür. İkinci  ifade
              bir  tamsayı olmalıdır. (Eğer ikinci ifade tamsayı değilse, önce
              ekrana bir uyarı gelir ve ifade tamsayı olacak şekilde  kesilir,
              yani  ikinci  ifadenin tam kısmı alınır). Sonucun bölüntüsü ise,
              eğer üs negatif ise  scale'dir.  Üs  pozitif  ise  scale(a^b)  =
              min(scale(a)*b,  max(scale,  scale(a)))'dır.  Unutulmamalıdır ki
              ifade^0 ifadesinin sonucu her zaman "1" olur.

       ( ifade )
              Parantezler,  ifadenin  değeri  bulunurken   standart   önceliği
              değiştirir  ve parantez içine alınan ifade daha önce hesaplanır.

       deiken = ifade
              İfadenin sonucu değişkene atanır.

       deiken <ile>= ifade
              Bu, "deiken = deiken <ile> ifade" ile eşdeğerdir ancak bir
              farkla;  deiken'in  değeri  sadece  bir kere elde edilir. Eğer
              deiken bir dizi ise, işlemin bir kere yapılacağı  gözden  uzak
              tutulmamalıdır.

       İlişkisel  ifadeler  (karşılaştırma  ifadeleri),  sonuçları her zaman 0
       veya 1 olan özel ifadelerdir. 0, yanlış  (false)  ve  1,  doğru  (true)
       olarak   yorumlanır.   Bunlar   herhangi   bir   ifade  içerisinde  yer
       alabilirler. (POSIX bc'de ise ilişkisel ifadeler sadece  if,  while  ve
       for  deyimlerinde  kullanılabilir  ve  sadece bir tane ilişkisel sınama
       olabilir.) İlişkisel işleçler şunlardır:

       ifade1 < ifade2
              Sonuç, eğer ifade1, ifade2'den küçükse  1  olur.  Aksi  halde  0
              olur.

       ifade1 <= ifade2
              Sonuç,  eğer  ifade1, ifade2'den küçük ya da eşitse 1 olur. Aksi
              halde 0 olur.

       ifade1 > ifade2
              Sonuç, eğer ifade1, ifade2'den büyükse  1  olur.  Aksi  halde  0
              olur.

       ifade1 >= ifade2
              Sonuç,  eğer  ifade1, ifade2'den büyük ya da eşitse 1 olur. Aksi
              halde 0 olur.

       ifade1 == ifade2
              Sonuç, eğer ifade1, ifade2'ye eşitse 1 olur. Aksi halde 0  olur.

       ifade1 == ifade2
              Sonuç,  eğer  ifade1,  ifade2'den farklıysa 1 olur. Aksi halde 0
              olur.

       bc'de   mantıksal  (boolean)  işlemler  de  geçerlidir.  (POSIX   bc'de
       mantıksal  işlemler  yoktur.)  Mantıksal  işlemlerin  sonucu, ilişkisel
       işlemlerde olduğu gibi, 0 (false) yada 1 (true)  olmaktadır.  Mantıksal
       işleçler şunlardır:

       !ifade ifade 0 ise sonuç 1'dir. Aksi halde 0 olur.

       ifade && ifade
              ifade'lerin ikiside sıfırdan farklıysa sonuç 1'dir. Aksi halde 0
              olur.

       ifade || ifade
              ifade'lerden biri sıfırdan farklıysa sonuç 1'dir. Aksi  halde  0
              olur.

       İşleçlerin işlem öncelik sırası şöyledir (küçükten büyüğe):

       || işleci, önce sol taraf
       && işleci, önce sol taraf
       ! işleci, tarafsız
       İlişkisel işleçler, önce sol taraf
       Atama işleci, önce sağ taraf
       + and - işleci, önce sol taraf
       *, / ve % işleci, önce sol taraf
       ^ işleci, önce sağ taraf
       tek terimli - işleci
       ++ ve -- işleci

       Bu  önceliğin seçilmesinin nedeni, POSIX uyumlu bc yazılımlarının doğru
       çalışması  içindir.  Ancak,  ilişkisel  ve  mantıksal  işleçler,  atama
       ifadelerinde  kullanıldığında elverişsiz ve çok farklı bir durum ortaya
       çıkmaktadır. Aşağıdaki ifadeyi ele alalım:

       a = 3 < 5

       C programcıları  bu  ifadeyi  ele  alırken,  önce  3<5   (sonuç  1'dir)
       ifadesini  gerçekleştirir,  ardından  sonucu  "a"  değişkenine atarlar.
       bc'de ise önce "a"ya 3 atanır ve ardından 5 ile karşılaştırma  yapılır.
       Buna  dikkat  etmek  gerekir. En iyisi, ilişkisel ve mantıksal işleçler
       ile atama işleci aynı ifadede kullanıldığında  karmaşayı  önlemek  için
       parantezleri kullanmaktır.

       bc'de  desteklenen  biraz  daha  özel ifadeler vardır. Bunlar, standart
       işlevler ve kullanıcı tanımlı işlevlerde, "isim(parametreler)" şeklinde
       görülmektedirler.  Ayrıntılı  bilgi için İŞLEVLER bölümündeki kullanıcı
       tanımlı işlevlere bakınız. Yerleşik işlevler şunlardır:

       length ( ifade )
              length işlevinin değeri, ifade'deki anlamlı rakamların adedidir.

       read ( )
              read   işlevi  (bu  bir  genişletmedir),  nerede  kullanıldığına
              bakılmaksızın,  standart   girdiden   bir   sayı   okumak   için
              kullanılır.  Ancak,  standart  girdiden veri ve yazılım birlikte
              okunurken  problemlere  neden  olabileceğinden  dikkatli   olmak
              gerekir. Bu işlevin en iyi kullanım şekli, asla kullanıcıdan kod
              girmeyi gerektiren  yerlerde  değil,  evvelce  geliştirilen  bir
              yazılım   için   kullanıcıdan   bir   girdi   bekleyen  yerlerde
              kullanmaktır. read işlevinin değeri,  standart  girdiden  okunan
              sayının ibase tabanındaki değeridir.

       scale ( ifade )
              scale işlevinin değeri, ifade'denin sonucu olan sayıdaki ondalık
              hanelerin sayısıdır.

       sqrt ( ifade )
              sqrt işlevinin değeri, ifade'nin kareköküdür.  ifade'nin  sonucu
              negatif bir sayı ise bir çalışma anı hatası üretilir.

   DEYİMLER
       Deyimler,   birçok  cebirsel  dilde  olduğu  gibi,  ifadelerin  sırayla
       değerlendirilmelerini  sağlarlar.  bc'de  deyimler  "mümkün  olduğunca"
       işletilirler.  İşletim,  bir  ya  da  daha fazla tam deyimden sonra bir
       satırsonu  karakteri  girildiğinde  gerçekleşir.  Bu   bakımdan   bc'de
       satırsonu  karakterleri  çok önemlidir. Aslında, deyimleri ayırmak için
       bir satırsonu karakteri ve bir noktalı  virgül  gerekir.  Yanlış  yerde
       kullanılmış  bir satırsonu karakteri bir sözdizimi hatasına sebep olur.
       Satır sonu karakteri deyimler için bir ayraç olduğundan, bir satır sonu
       karakterini  gizlemek için ters bölü karakteri kullanılabilir. Tersbölü
       karakterinden sonra gelen bir satırsonu karakterinden  oluşan  karakter
       çiftini  bc  boşluk  karakteri olarak değerlendirir. Bir deyim listesi,
       noktalı virgül ve satırsonu  karakteri  ile  sonlandırımış  deyimlerden
       oluşur.  Aşağıdaki  listede  bc'deki deyimler ve bunların ne yaptıkları
       anlatılmaktadır (Köşeli parantezler  ([ ]) arasına  alınanlar,  deyimin
       isteğe bağlı kısımlarıdır.):

       ifade  Bu deyim iki şeyden birini yapar. Eğer ifade "<değişken> <atama>
              ..." şeklinde başlıyorsa, bunun bir atama deyimi olduğunu  kabul
              eder.  Eğer  ifade  bir atama deyimi değil ise, ifade'nin değeri
              bulunur  ve  çıktıya  yazdırılır.  Sayının  ardından   satırsonu
              karakteri  yazdırılır.  Örneğin,  a=1  ifadesi  bariz  bir atama
              deyimidir; ve (a=1) içinde bir atama deyimi olan  bir  ifadedir.
              Çıktılanan  tüm  sayılar  obase değişkeni ile belirtilen tabanda
              yazdırılırlar. obase değişkeninin  alabileceği  değerler  2  ile
              BC_BASE_MAX arasındadır. (Ayrıntılı bilgi için SINIRLAR bölümüne
              bakınız.)

              2 ile 16 arasındaki  tabanlar  için  çıktı  bildiğimiz  yöntemle
              yazdırılır.  16'dan  daha  büyük  tabanlar  için ise, bc her bir
              haneyi  yazdırmak  için  10'luk  tabanda  birden  çok   karakter
              kullanır  ve  haneler arasında boşluk bırakır. Her hane, obase-1
              değerini 10'luk düzende yazmak için gereken sayı kadar  rakamdan
              oluşur. Örneğin, obase=20 için 65 sayısı ekrana "03 05" şeklinde
              yazdırılır. Eğer  obase=101  olsaydı,  25  sayısı  ekrana  "025"
              şeklinde   yazdırılacaktı.   Sayılar   keyfi   duyarlılıkta  ele
              alındıkları için, bazı  sayılar  ekrana  yazdırılırken  tek  bir
              satıra  sığmayabilirler.  Bu  uzun  sayılar yazdırılırken ekrana
              satırların  sonuna  "\"  (tersbölü)  karakteri  gelir.  Her  bir
              satırda  en fazla 70 karakter yazdırılabilir. bc'nin etkileşimli
              doğasından dolayı yazılan en son değer, özel  last  değişkeninde
              saklanır  ki  aynı  sayıyı  bir  daha elde etmek için bir önceki
              ifade'yi tekrar yazmaya gerek  kalmaz.  last  değişkenine  atama
              yapılması  da  geçerlidir  ve  atanan  değer son yazılan değerin
              üzerine yazılır. Yeni atanan  değer,  yeni  bir  değer  yazılana
              kadar  ya  da  last  değişkenine  yeni  bir atama yapılana kadar
              geçerli kalır. (Bazı kurulumlar last için  bir  kısaltma  olarak
              bir sayının parçası olmayan tek bir nokta (.) kullanımını mümkün
              kılabilir.)

       dizge  dizge çıktıya yazdırılır. Çift tırnak "..." arasına  alınan  her
              şey  (satırsonu karakteri de dahil) dizge olarak kabul edilir ve
              ekrana aynen yazdırılırlar. dizge yazdırıldıktan sonra satırsonu
              karakteri  yazdırılmaz  (yani  aşağı satıra geçilmez, bu nedenle
              satırsonu karakteri dizge'nin içine yerleştirilmelidir).

       print liste
              print deyimi (bu bir genişletmedir) çıktıya birşeyler  yazdırmak
              için   kullanılan   diğer   bir   yöntemdir.  liste  parametresi
              zorunludur,  aralarına  virgül  (,)  konularak  dizgelerden   ve
              ifadelerden   oluşur.  liste'deki  her  bir  dizge  veya  ifade,
              yazıldıkları sıraya göre ekrana yazdırılır. Eğer belirtilmediyse
              satır   sonunda   satırsonu  karakteri  yazdırılmaz.  İfadelerin
              değerleri bulunduktan  sonra  sonuçları  ekrana  yazdırılır.  Bu
              esnada  ekrana en son yazdırılan sayının değeri last değişkenine
              atanır. print deyimi içindeki  dizgeler  çıktıya  yazdırılır  ve
              özel anlamı olan karakterleri de içerebilirler. Özel karakterler
              tersbölü  karakteri  ile  başlar.  bc  tarafından  tanınan  özel
              karakterler; "a" (uyarı; bip sesi), "b" (gerisilme),  "f" (sayfa
              ileri), "n" (satırsonu), "q" (çift tırnak), "t" (sekme)  ve  "\"
              (tersbölü)   karakterleridir.   Bunların  dışındaki  karakterler
              gözardı edilir.

       { deyim_listesi }
              Bu,  bir  birleşik  deyimdir.  Bu  yapı,   birden   çok   deyimi
              gruplandırarak  birlikte  çalıştırmak  için kullanılır. Deyimler
              arasında yukarıda anlatılan ayraçlar yer alırlar.

       if ( ifade ) deyim1 [ else deyim2 ]
              if deyimi ifade'nin değerini bulur ve iifade'nin  sonucuna  göre
              deyim1'i  veya  deyim2'yi  çalıştırır. ifade'nin sonucu sıfırdan
              farklı  ise  deyim1  işletilir.  Eğer  deyim2  belirtilmişse  ve
              ifade'nin  sonucu  da  sıfır ise, deyim2 işletilir (else sözcüğü
              bir genişletmedir).

       while ( ifade ) deyim
              while deyimi, ifade'nin değeri sıfırdan farklı  olduğu  müddetçe
              deyim'i  tekrar  tekrar  işletir.  Döngüde  her  yinelemede önce
              ifade'nin  değeri  bulunur,  sonuç  sıfırdan  farklı  ise  deyim
              işletilir.  ifade'nin  sıfır  olması  durumunda veya çıkmak için
              break deyimi kullanıldığında döngü sonlanır.

       for ( [ifade1] ; [ifade2] ; [ifade3] ) deyim
              for deyimi, deyim'in tekrar tekrar çalıştırılmasını sağlar.  İlk
              başta (yani döngü başlamadan önce) ifade1 işletilir. Döngüde her
              yinelemede deyim işletilmeden önce  ifade2'nin  değeri  bulunur.
              Eğer  sonuç  sıfırdan  farklı  ise  deyim yerine getirilir, eğer
              sonuç  sıfır  ise  döngü  sonlandırılır.  Döngüde  deyim  yerine
              getirildikten  sonra  ifade3  işletilir  ve  ardından ifade2'nin
              değeri tekrar bulunur. Ta ki ifade2'nin  değeri  sıfır  oluncaya
              kadar...  Döngüyü  daha  erken  sonlandırmak  için  break deyimi
              kullanılabilir. Eğer  ifade1  veya  ifade3  kullanılmamışsa,  bu
              noktada   değerlendirilecek  hiçbir  şey  olmadığından  bir  şey
              yapılmaz.  Eğer  ifade2  kullanılmamışsa,  ifade2'nin  değeri  1
              olarak  kabul  edilir.  (POSIX bc'de her üç ifadeyi de belirtmek
              mecburidir. Bunların seçimlik kullanılması, bir  genişletmedir.)
              for deyimine karşılık gelen deyimler şunlardır:

              ifade1;
              while (ifade2) {
                deyim;
                ifade3;
              }

       break  İçinde yer aldığı son while veya for döngüsünü sonlandırır.

       continue
              continue  deyimi,  (bir genişletmedir) içinde yer aldığı son for
              döngüsünü kendinden sonra gelen  deyimler  işletilmeden  sonraki
              yinelemeden başlatır.

       halt   halt  deyimi,  (bir  genişletmedir)  bc'yi  sonladırır. quit'ten
              farkı, halt deyimi kesinkes değil, şart  sağlandığında  çalışır.
              Örneğin,  "if  (0==1) halt" deyimi bc'yi sonladırmaz; çünkü şart
              sağlanmadığı için halt deyimi işletilmez.

       return Bir işlevden 0 (sıfır) döndürerek çıkar. (Ayrıntılı  bilgi  için
              İŞLEVLER bölümüne bakınız.)

       return ( ifade )
              Bir  işlevden  ifade'nin  değerini  döndürerek çıkar. (Ayrıntılı
              bilgi için İŞLEVLER bölümüne  bakınız.)  Bir  genişletme  olarak
              parantezler gerekli değildir.

   YARDIMCI DEYİMLER
       Yardımcı  deyimler,  bildiğimiz  klasik  anlamda işletilebilir deyimler
       değildirler. Bunlar "derleme" zamanında ele alınırlar.

       limits bc'nin yerel sürümü tarafından zorlanan yerel  sınırları  basar.
              Bu bir genişletmedir.

       quit   Her  nerede  ve  her  ne şekilde kullanılırsa kullanılsın, bc'yi
              kesinkes sonlandırır. Örneğin, "if  (0==1)  quit"  deyimi,  şart
              sağlanmasa da bc'yi sonlandıracaktır.

       warranty
              Uzun bir garanti iletisi basar. Bu bir genişletmedir.

   İŞLEVLER
       İşlevler,  daha  sonra  çalıştırılmak üzere hesaplamaların tanımlandığı
       bir yöntem sunar. bc'deki işlevler  daima  bir  değer  hesaplayıp  bunu
       çağrıcıya  döndürürler.  İşlev  tanımları "özdevimli"dir; yani, girdide
       saptanana kadar bir işlev tanımsızdır. Bu tanımlama, aynı  isimde  yeni
       bir  işlev tanımlanıncaya kadar geçerlidir. Yeni işlev tanımı eskisinin
       yerine geçer. Bir işlev aşağıdaki gibi tanımlanır.

       define isim ( parametreler ) { satırsonu
             auto_listesi   deyim_listesi }

       Bir işlev çağrısı ise "isim(parametreler)" biçiminde bir ifadedir.

       Parametreler  sayılar  ya  da   dizilerdir   (dizi   parametreler   bir
       genişletmedir). İşlev tanımında sıfır ya da daha fazla sayıda parametre
       verilebilir ve bunlar aralarına virgül  konularak  ayrılmış  isimlerden
       oluşan   bir  liste  olarak  tanımlanır.  Sayılar  sadece  değerleriyle
       çağrılan   parametrelerdir.   Diziler   ise   sadece    değişkenleriyle
       çağrılırlar. Diziler, parametre tanımında "isim[]" şeklinde belirtilir.
       İşlev çağrısında asıl  parametreler,  sayı  türünde  ifadelerdir.  Aynı
       yazım şekli, dizi parametrelerin tanımı olarak dizilerin aktarılmasında
       da kullanılır. Bir isimli dizi  bir  işleve  değişkeni  ile  aktarılır.
       İşlev  tanımları  özdevimli  olduklarından, parametre sayısı ve türleri
       işlev  çağrıldığında   kontrol   edilir.   Parametrelerin   sayısı   ve
       türlerindeki  herhangi  bir  uyumsuzluk  bir çalışma anı hatasına sebep
       olur. Ayrıca, tanımsız  bir  işlevin  çağrılması  da  bir  çalışma  anı
       hatasına sebep olacaktır.

       auto_listesi,   "yerel"   kullanım   için  isteğe  bağlı  bir  değişken
       listesidir. auto_listesi'nin (eğer varsa) sözdizimi  "auto  isim,   ...
       ;"  şeklindedir  (Sondaki noktalı virgül isteğe bağlıdır). Her isim bir
       auto değişkenin ismidir. Diziler, parametrelerde  kullanılan  sözdizimi
       ile   belirtilebilir.   Bu  değişkenlerin  sıfır  ile  ilklendirilerek,
       değerleri, işlevin  başlangıcında  yığıta  basılır  ve  işlevin  icrası
       boyunca  kullanılır.  İşlevden  çıkışta  bu  değerler yığıttan çekilir,
       böylece değişkenler  işlevin  başlangıcındaki  ilk  değerlerine  dönmüş
       olur. Parametreler gerçekte, işlev çağrısı sırasında ilklendirilen auto
       değişkenlerdir.  auto  değişkenler,  geleneksel  yerel   değişkenlerden
       farklıdır.   A  işlevi,  B  işlevini  çağırdığında,  A  işlevinin  auto
       değişkenlerine,   B   işlevinde   onlar   auto    değişkenler    olarak
       çağrılmadıkça,  B işlevi aynı isimlerle erişebilir. auto değişkenler ve
       parametreler  yığıta  basıldıklarından  dolayı  bc   kendini   çağrılan
       işlevleri destekler.

       İşlevin  gövdesi  bir  bc  deyimleri  listesidir.  Tekrar belitelim ki,
       deyimler noktalı virgül ve satırsonu  karakterleri  ile  birbirlerinden
       ayrılır.  return  deyimi  işlevin  sonlandırılmasına  sebep olur ve bir
       değer döndürür.  return  deyiminin  iki  sürümü  vardır.  ilk  şeklinde
       "return" ifadesi işlevi çağıran ifadeye sıfır değerini döndürür. İkinci
       şeklinde, "return (  ifade  )",  ifade'nin  değeri  hesaplanıp  çağıran
       ifadeye  sonucu  döndürülür.  Her  işlevin  sonunda  kendiliğinden  bir
       return(0) vardır. Böylece bir işlevin sonunda açıkça bir return  deyimi
       kullanmaya gerek kalmaksızın işlev sıfır değeri döndürerek sonlanır.

       İşlevler  ayrıca,  ibase  değişkeninin kullanımını da değiştirir. İşlev
       gövdesindeki tüm sabitler, işlev çağrısı sırasında  ibase  değişkeninin
       değeri   kullanılarak   dönüştürülür.  Sayıların  dönüşümü  için  daima
       ibase'in o anki değerini kullanan yerleşik read işlevi  dışında,  işlev
       icrası sırasında ibase değişiklikleri gözardı edilecektir.

       Bir  geliştirme  olarak,  tanım biçimi pek az esnektir. Standart, işlev
       gövdesini oluşturan  ilk  kuyruklu  ayracın  define  ile  aynı  satırda
       olmasını  ve kalan her şeyin alt satırlarda olmasını gerektirir. bc'nin
       bu sürümünde ilk kaşlı ayraçın öncesinde  ya  da  sonrasında  satırsonu
       karakteri  kullanabilmeyi  mümkün  kılar.  Örneğin  aşağıdaki  tanımlar
       geçerli tanımlardır:

       define d (n) { return (2*n); }
       define d (n)
         { return (2*n); }

   MATH KÜTÜPHANESİ
       bc, -l seçeneği ile çalıştırıldığında   math  kütüphanesini  yükler  ve
       öntanımlı  bölüntü  20  yapılır.  math  işlvleri,  çağrıldıkları sırada
       geçerli  olan  bölüntüye  göre  sonuç  döndürürler.  math   kütüphanesi
       aşağıdaki işlevleri tanımlar:

       s (x)  Radyan cinsinden verilen x'in sinüsü.

       c (x)  Radyan cinsinden verilen x'in kosinüsü.

       a (x)  x'in arktanjantı; radyan cinsinden döner.

       l (x)  x'in tabii logaritması.

       e (x)  e üssü x.

       j (n,x)
              x tamsayısına göre n. dereceden Bessel işlevi.

   ÖRNEKLER
       /bin/sh'da aşağıdaki atama, kabul değişkeni pi'ye pi değerini atar.

       pi=$(echo "scale=10; 4*a(1)" | bc -l)

       Aşağıdaki  örnekte, math kütüphanesinde kullanılan üstel işlevin tanımı
       vardır. Bu işlev POSIX bc'de yazılmıştır.

       scale = 20

       /* e^x = (e^(x/2))^2 formülü kullanılıyor
         x yeterinde küçükse, bu seriyi kullanabiliriz:
           e^x = 1 + x + x^2/2! + x^3/3! + ...
       */

       define e(x) {
         auto  a, d, e, f, i, m, v, z

         /* x'in işaretine bakalım. */
         if (x<0) {
           m = 1
           x = -x
         }

         /* x için önkoşul. */
         z = scale;
         scale = 4 + z + .44*x;
         while (x > 1) {
           f += 1;
           x /= 2;
         }

         /* Değişkenleri ilklendirelim. */
         v = 1+x
         a = x
         d = 1

         for (i=2; 1; i++) {
           e = (a *= x) / (d *= i)
           if (e == 0) {
             if (f>0) while (f--)  v = v*v;
             scale = z
             if (m) return (1/v);
             return (v/1);
           }
           v += e
         }
       }

       Aşağıdaki örnekte,  çek  defteri  (checkbook)  bakiyelerini  hesaplayan
       basit  bir  yazılım verilmektedir. Yazılımı bir kez yazarak bir dosyaya
       kaydedebilirsiniz  ve  sonraları  her  seferinde  yeniden   yazmaksızın
       istediğiniz zaman kullanabilirsiniz.

       scale=2
       print "\nÇek defteri yazılımı!\n"
       print "  Hatırlatma: Depozitolar negatif miktarlardır.\n"
       print "  Çıkış için 0 yazın.\n\n"

       print "Başlangıçtaki bakiye? "; bal = read()
       bal /= 1
       print "\n"
       while (1) {
         "şu anki bakiye = "; bal
         "çekilecek miktar? "; trans = read()
         if (trans == 0) break;
         bal -= trans
         bal /= 1
       }
       quit

       Aşağıdaki  örnekte  ise, kendi kendini çağıran bir faktöriyel hesaplama
       işlevi tanımlanmaktadır.

       define f (x) {
         if (x <= 1) return (1);
         return (f(x-1) * x);
       }

   READLINE ve LIBEDIT SEÇENEKLERİ
       GNU bc (bir yapılandırma seçeneği ile), GNU readline  kütüphanesini  ya
       da  BSD  libedit  kütüphanesini kullanacak şekilde derlenebilir. Bu ise
       kullanıcıya, bc'ye göndermeden önce birden çok satır üzerinde düzenleme
       yapma  imkanı  sunar.  Ayrıca,  daha  önceden girilen satırlar için bir
       geçmiş de tutar. Bu seçenek seçilirse, bc bir özel değişkene daha sahip
       olur.  Bu  özel  history  değişkeni,  bellekte tutulacak satır sayısını
       tutar. -1  değeri sınırsız (bellek yettiği müddetçe) sayıda eski  komut
       tutulacağını  belirtir  ve  varsayılan değeri 100'dür. Eğer pozitif bir
       tamsayı belirtilirse, liste bu  belirtilen  sayı  ile  sınırlandırılmış
       olur. 0 değeri ise liste tutulmayacağını belirtir.

       Daha  ayrıntılı  bilgi  için, GNU readline, history kütüphanesi ile BSD
       libedit kütüphanesi hakkındaki belgeleri  okuyunuz.  bc,   readline  ve
       libedit kütüphaneleri aynı anda etkin olacak şekilde derlenemez.

   FARKLILIKLAR
       bc'nin  bu  sürümü,  POSIX  P1003.2/D11  taslağından  uyarlanmıştır  ve
       taslağa  göre  ve  geleneksel  bc   uygulamalarına   göre   bir   takım
       farklılıklar    sözkonusudur.    dc(1)kullanılan    geleneksel    yolla
       gerçekleştirilmemiştir. Bu sürüm, yazılımın kodlarını ayrıştırarak bayt
       koda   çevirdikten  sonra  tek  bir  süreç   olarak  çalıştırır.  Komut
       satırından verilen  ve  belgelendirilmemiş  -c  seçeneği  ile,  yazılım
       çalıştırılmaz, onun yerinee bayt kodları ekrana listelenir. Bu, aslında
       etkileşimli olarak ayrıştırıcının hatalarını  görmek/gidermek  ve  math
       kütüphanesini hazırlamak için kullanılır.

       POSIX   bc'deki   farklılıkların   yanında   bir   de  yeni  özellikler
       eklenmiştir, bunlara da genişletmeler demekteyiz.  Aşağıda,  bahsedilen
       farklılıkların ve genişletmelerin bir listesi yer almaktadır:

       LANG   Bu  sürüm  LANG  ve  LC_  ile   başlayan  ortam  değişkenlerinin
              işlenmesinde POSIX standardına uyumlu değildir.

       isimler
              Geleneksel ve POSIX bc değişkenler,  diziler  ve  işlevler  için
              sadece  tek  harften  oluşan isimleri mümkün kılar. GNU bc'de bu
              isimler için çok karakterli isimler kullanılabilir. Bir isim bir
              harf  ile  başlar  ve harfler, rakamlar ile altçizgi karakterini
              içerebilir.

       dizgeler
              Dizgelerde boş karakter kullanılmasına  izin  verilmez,  POSIX'e
              göre dizgelerde tüm karakterler kullanılabilmelidir.

       last   POSIX   bc'de   bir   last   değişkeni   yoktur.   bc'nin   bazı
              gerçeklemelerinde bunun yerine nokta (.) kullanılır.

       karşılaştırmalar
              POSIX bc'de karşılaştırmalar sadece if,  while  deyimlerinde  ve
              for   deyiminin  ikinci  ifadesinde  kullanılabilir.  Ayrıca  bu
              deyimlerde sadece bir ilişkisel işleme izin verilir.

       if deyimi ve else sözcüğü
              POSIX bc'de else sözcüğü yoktur.

       for deyimi
              POSIX bc'de tüm ifadelerin deyim içinde kullanılması gereklidir.

       &&, ||, !
              POSIX bc'de mantıksal işleçler yoktur.

       read işlevi
              POSIX bc'de read işlevi yoktur.

       print deyimi
              POSIX bc'de print deyimi yoktur.

       continue deyimi
              POSIX bc'de continue deyimi yoktur.

       return deyimi
              POSIX   bc,   return   ifadesinin   parantez   içine  alınmasını
              gerektirir.

       dizi parametreler
              POSIX    bc'de    (şimdilik)    dizi    parametreler     tamamen
              desteklenmemektedir.   POSIX  sözdiziminde,  işlev  tanımlarında
              dizilere izin veriliyor, ancak bir dizinin bir işleve  parametre
              olarak aktarılması desteklenmiyor. (Bu, aslında gözden kaçan bir
              dikkatsizliğin   sonucudur.)   Geleneksel   bc   gerçeklemeleri,
              dizileri       sadece      elemanlarının      değerleri      ile
              çağırabilmektedirler.

       işlev biçimi
              POSIX bc ilk kaşlı ayracın define anahtar  sözcüğünün  bulunduğu
              satırda,  auto  anahtar  sözcüğünün  de  alt  satırında olmasını
              gerektirir.

       =+, =-, =*, =/, =%, =^
              POSIX  bc  bu  "eski  tarz"  atama  işleçlerinin  tanımlanmasını
              gerektirmez.  Bu  sürüm bu "eski tarz" atamalara izin verebilir.
              limits  deyimini  kullanarak   kurulu   sürümün   bu   atamaları
              desekleyip      desteklemediğini      öğrenebilirsiniz.     Eğer
              destekliyorsa, "a =- 1" atamasında a değişkenine -1 atanmayacak,
              a değişkeninin değeri bir eksiltilecektir.

       sayılardaki boşluklar
              bc'nin  diğer  gerçeklemeleri  sayıların  içinde boşluklara izin
              verir. "x=1  3"  ataması,  "x=13"  olarak  değerlendirilecektir.
              Aynı ifade bu sürümde bir sözdizimi hatasına sebep olacaktır.

       çalıştırma ve hatalar
              Bu  bc,  yazılım içerinde sözdizimi ve diğer hataların bulunması
              durumunda kodun işletilmesi konusunda diğer gerçeklemelere  göre
              oldukça  farklılıklar  içermektedir.  Eğer bir işlev tanımlarken
              bir  sözdizimi  hatası  yapılmışsa,  hata  düzeltme  mekanizması
              deyimin başlangıcını bulmaya çalışır, ilk hatalı satırı bulur ve
              satır numarasını ekrana yazar; sonra yine de işlevin geri  kalan
              kısımlarını  ayrıştırmaya  devam  eder. İşlev içinde birkez bile
              hata yapılmışsa, o  işlev  'çağrılamaz'  addedilir  ve  tanımsız
              olur.

              Etkileşimli  ortamda  çalışırken bir sözdizimi hatası yapılırsa,
              bir uyarı gelir ve çalıştırılacak  olan  o  anki  blok  geçersiz
              sayılır. İşletim bloğu, yazılışı tamamlanmış basit veya birleşik
              bir deyimden sonra satırsonu karakteri bulunan yapıdır. Örneğin,

              a = 1
              b = 2

              iki ayrı işletim bloğudur. Ancak,

              { a = 1
                b = 2 }

              tek  işletim  bloğudur.  Oluşan  herhangi bir çalışma anı hatası
              (error), o  anki  işletim  bloğunu  sonlandırır.  Ancak,  oluşan
              herhangi  bir  çalışma  anı  uyarısı  (warning)  işletim bloğunu
              sonlandırmaz.

       kesmeler
              Bir etkileşimli  oturumda,  SIGINT  sinyali  (genelde  klavyeden
              Ctrl-C'ye  basıldığında  üretilir)   o  anda  işletilmekte  olan
              bloğun yarıda  kesilmesine  neden  olur.  Hangi  işlevin  yarıda
              kesildiğini  belirten  bir çalışma anı hatası ekrana yazdırılır.
              Ardından,  tüm   çalışma   anı   yapılarının   "temizlenme"sinin
              ardından,  bc'nin  yeni girdiler almak için hazır olduğunu yazan
              bir mesaj belirir. Önceden  tanımlanmış  olan  tüm  işlevler  ve
              auto-olmayan  değişkenler  bu noktadan önceki değerleriyle aynen
              kalırlar.  Tüm  auto  değişkenler  ve  işlev  parametreleri   bu
              "temizleme" işlemi esnasında silinirler. Etkileşimli olmayan bir
              oturumda ise  SIGINT  sinyali,bc'nin  çalışmasını  sonlandırarak
              kontrolü sisteme devredecektir.

   SINIRLAR
       Aşağıda  bc'nin  işlem  yapabileceği  sınırlar  verilmiştir.  Bunlardan
       bazıları aslında her bir kurulum için farklı farklı olabilir.  Bunların
       geçerli değerlerini öğrenmek için limits deyimini kullanın.

       BC_BASE_MAX
              Azami çıktı tabanı, 999 dur. Azami girdi tabanı ise 16 dır.

       BC_DIM_MAX
              Dizilerde   indisleme   sınırı,   keyfi   olarak   65535  olarak
              belirlenmiştir. Kurulumunuzda farklı olabilir.

       BC_SCALE_MAX
              Sayılarda ondalık  noktadan  sonraki  hane  sayısı  INT_MAX  ile
              sınırlanmıştır.  Ayrıca  ondalık  noktadan önceki hane sayısı da
              INT_MAX ile sınırlanmıştır.

       BC_STRING_MAX
              Dizgelerin   içerebileceği   karakter   sayısı    INT_MAX    ile
              sınırlanmıştır.

       üs     Üstel değerlerde üssün sınırı LONG_MAX'tır.

       değişken isimleri
              Basit  değişken,  dizi  ve işlev isimlerinin her biri için eşsiz
              isim sayısı 32767 ile sınırlanmıştır.

ORTAM DEĞİŞKENLERİ

       bc tarafından tanınan ortam değişkenleri şunlardır:

       POSIXLY_CORRECT
              -s seçeneği ile aynıdır.

       BC_ENV_ARGS
              Bu,  bc'nin  argümanları  almak  için   kullandığı   diğer   bir
              mekanizmadır. Biçimi komut satırı argümanlarında olduğu gibidir.
              Bu argümanlar, belirtilen dosyalardan önce işlem  görürler.  Bu,
              kullanıcıya  "standart"  seçenekleri  ayarlama  imkanını  sunar.
              Ortam değişkenlerinde belirtilen dosyalar tipik olarak içlerinde
              kullanıcının  tanımladığı işlevler olan dosyalardır. Bu ayarlama
              ile artık, bc her çalıştırıldığında belirtilen  dosyalar  işleme
              sokulurlar.

       BC_LINE_LENGTH
              Bu,  sayılar  ekrana  yazdırılırken  bir  satırda  kaç  karakter
              olacağını  belirten  bir  tamsayıdır.  Uzun  (yani,  tek  satıra
              sığmayan) sayılar için \ (tersbölü) ve satırsonu karakterleri bu
              miktara dahildir.

HATA AYIKLAMA

       Eğer komut satırında belirtilen dosyalardan  biri  açılamazsa  bc  bunu
       raporlar  ve hemen sonlanır. Ayrıca, derleme ve çalışma-anı hatalarında
       bunlar ekrana hata numaraları ile birlikte yazdırılırlar ve  bu  esnada
       açıklayıcı bilgiler verilir.

YAZILIM HATALARI

       Hata bulma/düzeltme henüz çok iyi değil.

       Hataları  rapor  etmek  için  konu  alanına  "bc"  yazarak <bug-bc (at)
       gnu.org> adresine e-posta atınız.

YAZAN

       Philip A. Nelson <philnelson (at) acm.org>

TEŞEKKÜRLER

       Yazar kodun sınanmasındaki geniş yardımlarından dolayı Steve  Sommars'a
       <Steve.Sommars  (at) att.com> teşekkürlerinin kabulünü rica ediyor. Bir
       çok öneride bulundu ve onun katılımıyla bu çok daha iyi bir ürün  oldu.

ÇEVİRENLER

       Adem Güneş  <adem (at) alaeddin.cc.selcuk.edu.tr>, Eylül 1999, v1.04
       Nilgün Belma Bugüner  <nilgun (at) belgeler·gen·tr>, Ocak 2004, v1.06