Bu sayfadaki yazılar
Sayfanın metni
Sayfa 33
Geçen ay yapısal programlar için gerekli olan akış-kontrol elemanlarının, karar ifadelerini kontrol eden (if), çıkış testi başlangıçta olan (while, for), çıkış testi sonda olan (do), çeşitli olasılıklardan bir tanesini seçmemize yarayan (switch) ve bu komutların akışını etkileyen (break, continue) komutlarını öğrenmiştik. Bu komutlar C dilinin en önemli konu serisini oluşturmaktaydı. Bu nedenle bu komutları ve kullanımlarını çok iyi irdelemelisiniz. Çünkü bu ay C’de ayrı bir önemi olan fonksiyonları ve C’nin program yapısını öğreneceğiz. Bunları öğrendikten sonra da bu komutları bol bol kullanacağız. Şimdi C'nin program yapısını ve fonksiyonların C’de kullanımını öğrenmeye başlayalım.
C'nin program yapısı fonksiyonları çağırarak oluşturulur. Fonksiyonları çağırmadan önce, varsa fonksiyonun istediği parametreler hazırlanır. C'de her işlem fonksiyonlara bölünerek programlanmaktadır. Bildiğiniz gibi, bütün C programlarımızda eksik etmediğimiz main() fonksiyonu da, bu fonksiyonların en başını oluşturmaktadır. Programımız çalışır çalışmaz main() fonksiyonuna atlar ve diğer alt fonksiyonlara sıçrar. Böylece fonksiyonlardan oluşmuş, yani, yapısal bir program çalışmaya başlar. Önce main(), sonra temel fonksiyonlar, daha sonra fonksiyonların alt fonksiyonları ve diğerleri; işte C'nin genel program yapısı. Gördünüz mü? Ne kadar kolay!..
C'de her hangi bir fonksiyon kendi kendini çağırabilir (recursion). Aşağıdaki örneğin kullanımına dikkat edin.
int n; {
int i;
if(n<0) {
putcharf-'); n=-n; } if((i=nz10)!=0)
printd(i); putchar(n%10+'0'); } Fonksiyonlar çağırıldıktan sonra ilk ola- rak, varsa, kendi parametrelerini alırlar ve içlerinde kullanacakları değişkenleri ta- nımlarlar.
Main() {
int i; float f; char c;
i=55; f=52.34; c='a';
printi(i); printfl(f); printc(c); }
printi(a) int a; {
printf("%d\n",a); }
printfl(a) float a; {
printf("%An",a); }
printc(a) char a; {
printf("%c\n",a); }
Yukarıdaki örnekten de anlaşılacağı gibi her farklı tipteki değişkenler için ayrı bir print alt programı yazılmıştır. Burada dikkatinizi çektiyse, bu alt programların parametreleri farklı tiplerdedir. Fonksiyonlarda parametreleri tanımlarken verilen parametrenin aynı tipini tanımlamak gerekir. Aksi taktirde programınız hatalı çalışacaktır.
Fonksiyonun içinde tanımlanan değişkenler otomatiktir, yani fonksiyon işlemini bitirdikten sonra otomatikman bellekten silinir. Burada değişkenler bir fonksiyona aittir. Fakat değişkenler, bütün fonksiyonların kullanabileceği şekilde (global) tanımlanabilir. Global değişkenleri kullanırken dikkatli olmak gerekir. Genel olarak global değişkenler bir döngünün kontrol değişkeni olarak kullanılmaz. Çünkü bu döngünün içinde kullanılan bir fonksiyon varsa ve bu fonksiyon da aynı değişkeni kullanıyorsa; bu, programın çalışmasını kontrolden çıkarabilir. Bunun dışında global değişkenler parametre sayısını azaltır. Bu, bazen oldukça yararlı olmaktadır.
Şimdi her bir fonksiyonun kullanım formuna bir göz atalım.
isim(değişken listesi) değişken tanımlamaları { tanımlamalar ve cümleler, } fikir vermek amacıyla, fonksiyonu minimal fonksiyon olarak kullanabiliriz. Yani burada sahte bir fonksiyon mevcuttur.
Dummy() { }
Fonksiyonun işlevi bittikten sonra, fonksiyonda olup bitenleri bildirmek amacıyla bir dönüş kodu yollanabilir. Bunu yapmamızı sağlayan komut:
return(sayı)
komutudur. Return komutu fonksiyonlarda sık sık kullanılır. Ayrıca return komutunun yalnızca fonksiyonun sonunda olmasına gerek yoktur. Fonksiyonun herhangi bir bölümünden bir dönüş koduyla ya da kodsuz çıkılabilir. ___________________
main()
{ int i;
for(i=0;i<=10;i++) printf("2A%d=%d\n",i,power(2,i)); }
power(j,k) int j,k; {
int r,m;
r=1;
for(m=l;m<=k;m++) r*=j;
return(r); }
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 32
KONUĞU VARDI...
yorsunuz dünyanın her yerinde korsan gruplar mevcut. Siz ve firmanız bu gruplara nasıl bakıyorsunuz?
- Korsan grupların yaptığı aslında büyük bir suç. Çünkü firmalar bir programı çıkartabilmek için hayli yüklü yatırımlar yapıyorlar. Bir oyunun sadece reklamı, gerekli hakları ve pazarlama giderleri bile çok yüksek meblağlar tutuyor. Firmalar bu giderleri ilk satışlarında çıkaramazlarsa iflas ederler. Zaten birçok firma bu sebeple piyasadan çekiliyor.
Ancak, korsan olayının önüne geçmek mümkün değil. Sadece firmalar kendi ürünlerini cazip hale getirdiklerinde korsan gruplar azalır. Şöyle bir örnek vereyim: Diyelim ki siz Pink Floyd hayranısınız ve elinizde iki alternatif var. Birincisi orijinalini almanız, ikincisi de kopyasını çektirmeniz. Siz bu gruba gerçekten değer veriyorsanız ve aldığınız plağı uzun yıllar saklamak istiyorsanız, tabii ki orijinali alırsınız; çünkü orijinalde, kopyasında bulamadığınız unsurlar vardır.
Bunu orijinal oyun olayına uygularsak, aynı tablo ortaya çıkıyor. Orijinal oyun aldığınızda, kitabıyla, özel kutusuyla ve ayrıntılı açıklamalarıyla oynamanın daha çok hoşunuza gideceği kesin. Ayrıca bu her zaman saklayıp koleksiyonunuza koyabileceğiniz bir program olacak.
* Türkiye'ye de şu ana kadar tüm programlar buradaki korsan gruplar tarafından getirildi. Avrupa'da korsan gruplar için ne tür önlemler alınıyor?
- Bakın bir oyunu çıkarmak sanıldığı kadar kolay değil. İyi bir koordinasyon ve tasarım gerekli. Tabii bir de işin maliyet yönü var. Bir oyun aşağı yukarı 100.000 dolara mal olur. Bunu amorti edebilmek için yaklaşık 30.000 adet satmak gerekiyor. Bunları söylememin sebebi, olayın nasıl geliştiğini sizlere biraz göstermek. Üstelik bu bahsettiğim rakamlar daha da yukarılara çıkabilir. Örneğin 100.000 dolara mal olan oyunlar da var. Avrupa'daki firmaların hepsi pazarladıkları ürünlere kilit koyuyorlar. Fakat şimdiye kadar her kilit rahatlıkla açılabildi. Ne de olsa her kilidin bir de çözümü var. Artık Almanya'da cracker'lara 3. derece ağır suçlu yani terörist gibi davranılıyor. Yakalanan cracker'lar milyonlar düzeyinde cezalara ve hapis cezalarına çarptırılıyorlar.
Aslında sorun, bu kadar yatırım yapılan oyunları daha cazip hale getirmekle çözülüyor. Bakın daha önce bahsettiğim İspanya örneği. Orijinal oyunla kırık oyun arasındaki
PEARCE
fiyat farkının minimum olması lazım. Yani kırık oyunun bedeli 1 ise, orijinalin fiyatı 20 değil 5-6 olmalı ki herkes alabilsin ve bu zevki tadabilsin.
Bir örnek daha vereyim. Biliyorsunuz, Rolex saatlerin hem orijinali hem de sahtesi vardır, üstelik aralarındaki fiyat farkı da oldukça fazladır. Ama hala herkes orijinal bir Rolex almaya ve onun prestijini yaşamaya çalışır.
Koruma, ancak fiyat dengesinin çok iyi ayarlanması ile olur. Fiyatı pazarın durumuna göre belirlemek gerek. Zaten Türkiye'de de bu yapılacak. Yazılım korsanlığı üstesinden gelinmesi, söylediğim gibi, çok zor olan bir sorun. Biz bu sorunla uğraşmak yerine oyunlarla beraber poster, t-shirt vb. extralar vererek oyunlarımızı daha cazip hale getirmeyi planlıyoruz. Ayrıca oyunları Türkiye'de pazarlayacak Tatkom firmasının makul fiyatlar belirleyeceğinden eminim.
* Orijinal oyunlar Türkiye'de tamamen Türkçe olarak satılacak. Bu aslında iyi bir ayrıcalık. Oyunlar nasıl Türkçeleştiriliyor?
- Oyunda kullanılan tüm metin bir ASCII dosyası haline getiriliyor ve bundan sonra bu dosya Türkçe'ye çevrilip oyuna dahil ediliyor. Öte yanda, oyunların dokümantasyonları da tamamen Türkçe olacağından en rahat kullanım sağlanmış olacak. Bildiğim kadarıyla Türkiye'de ilk kez bir oyun bu şekilde satılacak.
* Türkiye'yi nasıl buldunuz? - Maalesef araba ile oradan buraya dolaşmaktan henüz bir şey göremedim. Bir iş gezisi olmasından dolayı bu gelişimde fazlaca yer gezmek gibi bir beklentim de yoktu. Ancak mutlaka ülkenizi bir fırsat bulup tanımak istiyorum.
* Teşekkür ediyor, başarılar diliyoruz. - Ben teşekkür ederim. Mark Pearce ve TATKOM Football Manager programının Türkçe uyarlamasını hazırlıyorlar. Mark, bize görüşmemizden sonra hazırlamakta olduğu oyunun demosunu gösterdi. Oyun Türkiye liglerinde oynayan tüm takımları ve futbolcuları kapsıyor. Programda 13 lig ve her ligde ortalama 20 takım var. Türkiye'deki tüm kupaları, Avrupa Kupasını ve milli maçları oynamak mümkün.
İngiltere'de Addictive tarafından pazarlanacak olan programın Türkiye'deki hakları TATKOM'a ait.
Bu güzel uğraşlarından dolayı Amiga Dünyası olarak teşekkür ediyor, başarılar diliyoruz.