Bu forum çerez kullanır
Bu forum, kayıtlıysanız oturum açma bilgilerinizi ve değilseniz son ziyaretinizi saklamak için tanımlama bilgilerini kullanır. Çerezler, bilgisayarınızda depolanan küçük metin dokümanlardır; Bu forum tarafından oluşturulan çerezler yalnızca bu web sitesinde kullanılabilir ve güvenlik riski oluşturmaz. Bu forumdaki tanımlama bilgileri ayrıca okuduğunuz belirli konuları ve bunları en son ne zaman okuduğunuzu da izler. Lütfen bu çerezleri kabul edip etmediğinizi onaylayın.

Bu sorunun tekrar sorulmasını önlemek için, seçeneğinize bakılmaksızın tarayıcınızda bir çerez saklanacaktır. Altbilgideki bağlantıyı kullanarak istediğiniz zaman çerez ayarlarınızı değiştirebilirsiniz.

Hoşgeldin, Ziyaretçi
Sitemizden yararlanabilmek için kayıt olmalısınız.

Kullanıcı Adı
  

Şifreniz
  





Forumda Ara

(Gelişmiş Arama)

Forum İstatistikleri
» Toplam Üyeler 82,130
» Son Üye GeorgeBak
» Toplam Konular 18,409
» Toplam Yorumlar 79,460

Detaylı İstatistikler

Kimler Çevrimiçi
Şu anda 434 aktif kullanıcı var.
» (0 Üye - 433 Ziyaretçi)
Bing

Son Yazılanlar
Satılık HP 840 G2
Forum: İkinci El Satılık
Son Yorum: admin
26-07-2025, 10:50
» Yorum 1
» Okunma 43
AMD Ryzen 10000 Serisi Ze...
Forum: Kullanıcıların gönderdiği haberler
Son Yorum: admin
08-06-2025, 18:44
» Yorum 1
» Okunma 191
Samsung S24FE alınır mı?
Forum: Cep Telefonu
Son Yorum: admin
02-06-2025, 11:28
» Yorum 1
» Okunma 211
Google Pixel Cihazlarında...
Forum: Android ve Andorid Uygulamaları
Son Yorum: Aviatorder
26-05-2025, 18:52
» Yorum 1
» Okunma 2,747
Apple ios 19 ne zaman çık...
Forum: Donanım Haberleri
Son Yorum: admin
26-05-2025, 16:12
» Yorum 0
» Okunma 96
Linux Mint 22.2 Zara
Forum: Kullanıcıların gönderdiği haberler
Son Yorum: tekken29
26-05-2025, 11:50
» Yorum 1
» Okunma 134
Amiga Sensible World of S...
Forum: Commodore 64 Amiga Oyunları
Son Yorum: admin
19-05-2025, 00:43
» Yorum 0
» Okunma 150
Discord giremiyorum DNS o...
Forum: Online İletisim Araclari
Son Yorum: admin
19-05-2025, 00:33
» Yorum 1
» Okunma 168
Motor plakamı kaybettim d...
Forum: KONU DISI
Son Yorum: admin
17-05-2025, 19:23
» Yorum 3
» Okunma 200
Doğru tansiyon aleti nası...
Forum: Donanım İnceleme
Son Yorum: ademc
17-05-2025, 13:08
» Yorum 1
» Okunma 8,704

 
  Bilgisayarınızın bakımını nasıl yaparsınız
Yazar: x_FB_cagri - 10-05-2006, 22:57 - Forum: KONU DISI - Yorum (12)

Bilgisayarınızın bakımını nasıl yaparsınız :?:

Bu konuyu yazdır

  C Dili
Yazar: x_FB_cagri - 10-05-2006, 22:50 - Forum: Programlama - Yorum Yok

C DİLİ KULLANARAK
BİLGİSAYAR PROGRAMLAMA



ERCİYES ÜNİVERSİTESİ
KONTROL VE BİLGİSAYAR MÜHENDİSLİÐİ

GiRiÞ

Bilgisayar, verileri saklayan , bunlar üzerinde çok hızlı işlem yapan ve istenen verileri sunan bir aygıttır.
Donanım (hardware) ve yazılım(software) diye iki bölüme ayrlır. Donanım bilgisayarın fiziksel bileşenleridir. Yazılım ise donanımı oluşturan bileşenlerin çalışmasını ve işlevlerini yerine getirmesini sağlayan programlardır.

İşlemci


Denetim Aritmetik Girdi
Birimi Mantık Çıktı
Birimi Ana Bellek
Yan Bellek


Girdi birimleri : Veri ve program girilmesini sağlar. Klavye, fare, kart okuyucu ...
Çıktı birimleri : İstenen verilerin kullanıcıya sunulduğu ortam. Ekran, yazıcı...
Ana Bellek : Programların ve işlenen verilerin geçici olarak saklandığı birim.
Yan bellek : Bilgilerin (veri, program) kalıcı olarak saklandığı ortamlar. Disket, disk, manyetik şerit.

Bilgisayar broşuründe olan kavramlar, bit, byte, ... RAM, ROM...

Bu günkü anlamda ilk bilgisayar ENIAC [Electronic Numeric integrator and computer]
30 ton, kablolar ile programlama
1842, Charles Babbag , analitik makine tasarlıyor. Programlanabilir bir cihaz Öncesi Hesap Makinesi. Ada Agusta programcısı.


Bilgisayarlar :
Kusak 39 - 58 Vakum tüp ile çalışıyor
Kusak 58 - 64 Transistör
Kusak 64 - 75 Entegre
Kusak 75 - --- Yüksek ölçekli entegre



Micro computer ( PC ) ( bu gün 50 - MIPS)
Workstation
Mini Computer
Main Frame (50 lerde 50 IPS)
Super Computer
Bilgisayarın yapısı
Bellek (...., birimi byte bit)
CPU ( Bilgiyi işleyen kısım bellekten okur - yazar)
Denetim Birimi ( Hangi işlem, ne zaman yapılacak, belirler (gerekli işaretleri üretir))
Giriş/Çıkış : klavye (veya benzer)
: ekran (veya benzer)
İkincil ( yardımcı ) bellek (Kütük olarak saklı bilgiler.)
Hardware - Software

Bilgisayarlar kendisine sorulan sorulara hemen cevap veren, bir sürü problemi çözen bir aygıt değildir. Bilgisayarda yapılan her tür iş, ilk önce insan aklının süzgecinden geçiyor, insanlar tarafından etraflıca tasarlanıyor, planlanıp programlanıyor [1].

ilk yapılan bilgisayarın karşına geçip hemen
en eski soruyu sormuşlar "Tanrı var mı".
Bilgisayar kısa bir düşünmeden sonra "Evet artık var".

Bu nedenle, önce bilgisayara problemin çözümü öğretilmelidir. Fakat bunun için bizim problemi çözmemiz gerekir. Ve daha sonra bir programlama dili ile bu çözüm bilgisayara aktarılmalıdır.










1- Problem Çözme ve Algoritmalar
1.1 Problem Çözme
Problem çözmede, soruna hemen girişmek yerine, dikkatli ve sistematik yaklaşım ilke olmalıdır. Problem iyice anlaşılmalı ve mümkün olduğu kadar küçük parçalara ayırılmaladır.
Descartes tarafından "Discourse on Method" isimli kitabında anlatılan problem çözme teknikleri;[2]

1. Doğruluğu kesin olarak kanıtlanmadıkça, hiçbir şeyi doğru olarak kabul etmeyin; tahmin ve önyargılardan kaçının.
2. Karşılaştığınız her güçlüğü mümkün olduğu kadar çok parçaya bölün.
3. Düzenli bir biçimde düşünün; anlaşılması en kolay olan şeylerle başlayıp yavaş yavaş daha zor ve karmaşık olanlara doğru ilerleyiniz.
4. Olaya bakışınız çok genel, hazırladığınız ayrıntılı liste ise hiçbir şeyi dışarıda bırakmayacak kadar kusursuz ve eksiksiz olsun.

1.2 Algoritmalar
Belirli bir görevi yerine getiren sonlu sayıdaki işlemler dizisidir.
İ.S. 9.yy da İranlı Musaoğlu Horzumlu Mehmet
(Alharezmi adını araplar takmıştır) problemlerin çözümü için genel kurallar oluşturdu. Algoritma Alharezmi'nin Latince okunuşu.
Her algoritma aşağıdaki kriterleri sağlamalıdır.
1. Girdi: Sıfır veya daha fazla değer dışarıdan verilmeli.
2. Çıktı: En azından bir değer üretilmeli.
3. Açıklık: Her işlem (komut) açık olmalı ve farklı anlamlar içermemeli.
4. Sonluluk: Her türlü olasılık için algoritma sonlu adımda bitmeli.
5. Etkinlik: Her komut kişinin kalem ve kağıt ile yürütebileceği kadar basit olmalıdır.
Not: Bir program için 4. özellik geçerli değil. işletim sistemleri gibi program sonsuza dek çalışırlar .

Örnek 1.2.1 : 1'den 100'e kadar olan sayıların toplamını veren algoritma.
1. Toplam T, sayılar da i diye çağırılsın.
2. Başlangıçta T'nin değeri 0 ve i'nin değeri 1 olsun.
3. i'nin değerini T'ye ekle.
4. i'nin değerini 1 arttır.
5. Eğer i'nin değeri 100'den büyük değil ise 3. adıma git.
6. T'nin değerini yaz.
Algoritmaların yazım dili değişik olabilir. Günlük konuşma diline yakın bir dil olabileceği gibi simgelere dayalı da olabilir. Akış şeması eskiden beri kullanıla gelen bir yapıdır. Algoritmayı yazarken farklı anlamlar taşıyan değişik şekildeki kutulardan yararlanılır. Yine aynı amaç için kullanılan programlama diline yakın bir (sözde kod = pseudo code) dil , bu kendimize özgü de olabilir, kullanılabilir.

Aynı algoritmayı aşağıdaki gibi yazabiliriz.
1. T=0 ve i=0
2. i'nin değerini T'ye ekle.
3. i'yi 1 arttır.
4. i<101 ise 2.adıma git.
5. T'nin değerini yaz.

Algoritmayı bir de akış şeması ile gerçekleyelim.

T=0
İ=0

İ’nin Değrini T’ye ekle

İ’yi bir arttır


İ<101


T’yi yaz

Örnek 1.2.2 : ax2+bx+c=0 tipi bir denklemin köklerini veren algoritma.
Girdi : a, b ve c katsayıları Çıktı : denklemin kökleri
1. a, b ve c katsayılarını al.
2. D = b2-4ac değerini hesapla.
3. D<0 ise gerçel kök yok. 7. adıma git.
4.
5 .
6. değerlerini yaz.
7. Dur.
Döngü Gösterimi
Tekrarlanan adımlar
Koşul sağlandığı sürece
n.1 ...
n.2 ... tekrarlanan adımlar
n.3 ...

Örnek 1.2.3 : İki tamsayının çarpma işlemini sadece toplama işlemi kullanarak gerçekleyin.
Girdi : iki tamsayı
Çıktı : sayıların çarpımı
a ve b sayılarını oku
c =0
b>0 olduğu sürece tekrarla
.3.1. c=c + a
3.2. b = b-1
4. c değerini yaz ve dur

Örnek 1.2.4 : Bir tamsayının faktoriyelini hesaplayınız.
Girdi : Bir tamsayı
Çıktı : sayının faktoriyel
İlgili formul: Faktoriyel(n)=1*2*...*n
n değerini oku
F=1
n >1 olduğu sürece tekrarla
.3.1. F=F*n
3.2. n= n-1
F değerini yaz
Örnek 1.2.5 : İki tamsayının bölme işlemini sadece çıkarma işlemi kullanarak gerçekleyin. Bölüm ve kalanın ne olduğu bulunacak.
1. a ve b değerlerini oku
2. m=0
3. a>=b olduğu sürece tekrarla
a=a-b
m = m + 1
4. kalan a ve bölüm m 'yi yaz

Örnek 1.2.6 : 100 tane sayıyı okuyup, ortalamasını bul
T=0, i=0
i<101 olduğu sürece tekrarla
m değerini oku
T = T + m
i = i + 1
T = T / 100
Ortalama T ‘yi yaz
Dur

Örnek 1.2.7 : Bir sınava giren öğrencilerin not ortalamasının hesaplanması
Tüm sınav kağıtlarını inceleyip notların toplamını hesapla
Ortalamayı notların toplamını incelenen sınav kağıdına bölerek hesapla
Ortalamayı yaz.

Notların toplamını ve incelenen sınav kağıdı sayısını sıfır kabul et
Sıradaki sınav kağıdının notunu notların toplamına ekle
İncelenen sınav kağıdı sayısını Bir arttır
İncelenecek sınav kağıdı var ise 2. Adıma git
Ortalamayı notların toplamını incelenen sınav kağıdına bölerek hasapla
Ortalamayı yaz

Notların toplamını ve incelenen sınav kağıdı sayısını sıfır kabul et
Her bir sınav kağıdı için
Sıradaki sınav kağıdının notunu notların toplamına ekle
İncelenen sınav kağıdı sayısını bir arttır
Ortalamayı notların toplamını incelenen sınav kağıdına bölerek hesapla
Ortalamayı yaz








Koşul Gösterimi

Koşul doğru ise
n.D.1
n.D.2 doğru olduğunda işlenen adımlar
n.D.3
aksi halde
n.Y.1
n.Y.2 yanlış olduğunda işlenen adımlar
n.Y.3

Kök bulma örneğinde 3. Adımı tekrar yazarsak
D>=0 ise
3.D.1
3.D.2
aksi halde
3.Y.1 Reel kök yoktur


Sorular:
* Girilen üç sayıdan en büyüğünü bulan algoritmayı yazınız.
* Tamsayılarda üs alma işlemini gerçekleştiren algoritmayı yazınız ( ab ).
* 1-100 arasında tutulan bir sayıyı tahmin eden algoritmayı yazınız.

Örnek 1.2.8 : Aracın otopark ücretinin hesaplanması. Araçların en fazla 24 saat kaldığını varsayın.
0 - 2 saat 150 bin
2 - 8 saat 300 bin
8-24 saat 500 bin


Aracın kaç saat kaldığını öğren ( t olsun ).
t <= 2 ise
2.D.1. ücret = 150 bin
Aksi halde
2.Y.1. t<=8 ise
2.Y.1.D.1. ücret = 300 bin
Aksi halde
2.Y.1.Y.1. ücret = 500 bin

ücreti yaz
Dur

Örnek 1.2.9: Sınavdaki en büyük notun bulan algoritma.

En büyük = ilk sınav kağıdındaki not (ya da olabilecek en düşük değer kabul edilebilir).
İncelenecek sınav kağıdı var ise
Sınav kağıdındaki not > En büyük ise En büyük = Sınav kağıdındaki not

En büyük değerini yaz.
Dur


Algoritmanın yazımı daha simgesel olabilir. Ni i. Öğrencinin notu olsun.

EB = N1
i = 2
İncelenecek sınav kağıdı var ise
Ni>EB => EB = Ni
i = i + 1

EB’ yi yaz.
Dur



Örnek 1.2.10 : Programın C dili ile yazılıp çalışır hale getirilmesi.


Programı bilgisayara gir
Kaynak dosya olarak kaydet
Kaynak dosyayı derle ( compile)
Derleme sonucunda hata var ise
Hataları düzelt
3. Adıma git
Oluşan amaç dosyasına diğer dosyaları bağla (link)
Bağlama sonucunda hata var ise
Hataları düzelt
Hatalar kaynak dosya ile ilgili ise 2. adıma aksi halde 5. adıma git
Program çalıştırılmaya hazır












2- Programlamaya Giriş

Program : Belirli bir problemi çözmek için bir bilgisayar dili kullanılarak yazılmış deyimler dizisi.
Önceki bölümde bir problemin çözümü ile ilgili teknikler sunmuştuk. Bir problemi bilgisayar ile çözmek için geliştireceğimiz programın yazımında izleyeceğimiz adımlar:

i) Problemin ne olduğunu kavra. Çözüm için gereksinimleri belirle.
ii) Problemin girdilerini, çıktılarını ve diğer kısıtlama ve gereksinimleri belirle ( bilgilerin giriş ve çıkış biçimlerinin nasıl olacağına kadar).
iii) Problemin çözümünü veren algoritmayı yaz.
iv) Algoritmayı bir programla dili ile yaz.
v) Programın doğru çalışıp çalışmadığını test et. Bu testi değişik veriler (girdiler) için tekrarla.


2.1 İlk Program Örneği
#include <stdio.h> Kullanılan işlevler ile ilgili başlık dosyası
main()
{
int i ; Değişken tanımı
scanf("%d",&i); Programın gövdesi
i:=i*i;
printf("%d",i);
}

BCPL à B (1967 Ken Thompson) à C (Denis Ritchie unix i yazmak için)

az sayıda saklı sözcük
kısa ve etkin program
çok sayıda işleç
assembler e yakın kod
taşınabilir kod kullanıcıya bırakılan kontroller (dizinin boyutu gibi )
düşük okunabilirlik

source -----> compiler -----> object -----> link
kaynak derleyeci amaç bağlama
kaynak kod : C dili ile yazılmış olan program.
derleyeci : Kaynak kodu makina koduna çevirir
amaç kodu : Kaynak kodun makina dilindeki karşılığı
bağlama : Birden fazla amaç kodu dosyasının tek dosyada birleştirilmesi
2.2 Veri Tipleri

Veri tiplerini vermeden önce yazılan bir programın geçtiği aşamalara göz atalım.

2.2.1 Int Tip
Integer = Tamsayı
Tamsayıları içerir. Bellekte 2 Byte tutar.
5 , -19 , 25000 gibi
Minimum : -231 = -32768
Maksimum : 231-1 = 32767

2.2.2 Gerçel Tipler (Float, Double)
Gerçel sayıları içerirler.
float : Bellekte 4 Byte yer tutar. 3.4E-38 ile 3.4E+38 aralığında değer alır. Hassasiyet 7-8 basamaktır.
double : Bellekte 8 Byte ter tutar. 1.7E-308 ile 1.7E308 aralığında değer alır. Hassasiyet 15-16 basamaktır.

218.1 , -5.2 , 4.0

Bilimsel gösterim biçimi 2.5*103 = 2.5E3 2.5*10-3 = 2.5E-3

2.2.3 Char Tip
Char : Karakter : Alfanumerik karakterleri içerir.
'5' , '*' , 'K'

2.3 Sabitler (CONST)

#include <stdio.h>
main()
{
const float PI=3.14; Tanımlama kısmı
float r, Alan;
scanf("%f",r);
alan := PI*r*r;
printf(('Alan = %f', alan);
}
CONST (sabit) : Değeri programın çalışması boyunca değiştirilemez. Kullanım biçimi
const tip Belirleyici=değeri;
const float PI=3.14;
Tip belirtilmez ise tamsayı kabul edilir.

2.4 Değişkenler
Değeri programın çalışması boyunca değiştirilekir. Kullanım biçimi:
Tip Belirleyici [,Belirleyici] ;
int i;
float alan;

2.5 Belirleyiciler (Identifier)
Bileşenlere isim verme. (Sabit, değişken, altprogram, etiket, tipler (kullanıcı tanımlı)).

2.5.1 Kısıtlamalar
. İlk karakteri rakam olamaz
. Sadece harfler, rakamlar ve _ (underscore) karakterinin birleşiminden oluşabilir.
. C diline ait saklı (reserved) sözcükler kullanılamaz.
. En fazla 31 karakter olabilir.
. Küçük - büyük harf ayırımı vardır.

2.5.2 isimlerin Seçimi
. Belirleyicinin kullanım amacına uygun anlamlı isim seçin. (Hungarian notation)
. Ne fazla kısa ne de fazla uzun olsun. 3 - 10 karakter uzunluğunda olmasını alışkanlı edinin.
2.6 Matematiksel ifadeler
Matematiksel ifadeleri günlük hayattaki biçimde bilgisayarda yazamadığımız için belli bir kurallar uymamız gerekir. Kullandığımız matematiksel işlemler ve anlamları şöyledir:
+ , - , * , / toplama, çıkarma, çarpma, bölme
% tamsayı bölme sonucundaki kalanı verir (modulus)
7. / 2 ---> 3.5 (nokta sayının gerçel yorumlanmasını sağlar)
7 / 2 ---> 3 (sayılar int kabul edilip sonuçta int tipine dönüştürülür)
7 % 2 ---> 1
2 % 7 ---> 2
2 / 7 ---> 0
Matematiksel ifadeler hesaplanırken izlenen adımlar:
1. Önce parantez içindeki ifadeler hesaplanır. İçiçe parantezler var ise hesaplamaya en içteki parantezden başlanır.
2. ilk önce * , / ve % işlemleri daha sonra + ve - işlemleri yapılır.
Öncelik sırası aynı olan işlemlerde hesaplama soldan sağa doğru yapılır. 5./2*3 --> 7.5


Bir C Programının Genel Yapısı

başlık dosyaları. Kullanılan deyimler ile ilgili
main()
{
sabitler ; sabitlerin tanımlama bölümü
değişkenler; değişkenleri tanımlama bölümü
deyimler; Program gövdesi
}

2.7 Atama Deyimi (Assignment)
Bir değişkene bir değer(sabit, değişken, ifade) vermek.
DeğişkenAdı = değer;
x = 8 ;
y = x + 15 ;
y = (8 - x) / (2 - x) ;


Örnek 2.7.1: 5x2+2 fonksiyonunun x=4.8 noktasındaki değerini
main()
{
float x, y ;
x = 4.8;
y = 5 * x * x + 2;
}
Örnek 2.7.2: Vize ve final notlarınından geçme notu
main()
{
float vize, final, ort;
vize = 50;
final = 60;
ort = vize * 0.4 + final * 0.6;
}
Örnek 2.7.3: 1998 yılına kadar geçen gün sayısı
main()
{
float gun;
int yil = 1996;
gun = 365 * (yil - 1);
gun = gun + (yil -1 ) / 4;
}


2.8 printf işlevi
Program içinde istenen değerleri çıktı birimlerine göndermek için kullanılır. Normal kullanımında çıktı birimi olarak ekran kabul edilir. Kullanım biçimi:

prinf( kontrol, <parametreler>)
<kontrol> ile belirtilen bilgiye göre parametreleri yazar. Kontrol metini iki kısımdan oluşur.
o sıradan karakterler: doğrudan yazılırlar.
o dönüşüm/biçim belirleyici karakterler: Değerlerin nasıl yazılacağı bildirilir.

printf(" sonuç = %d", k);
--- integer değer yazılacaktır
--------- ekrana aynen aktarılır

Dönüşüm belirlemek için önce % karakteri ve ardından dönüşümün nasıl
olacağını belirten karakter verilir. Bu karakterlerden bazıları:

d : decimal (integer)
u : unsigned decimal
c : char (tek karakter)
s : string
e : float/double sayıyı bilimsel gösterimde yaz
f : float/double sayıyı [-] mmm.nnnnn biçiminde yaz
ld : long integer
lu : unsigned long integer
Le,Lf : long double

ESC dizileri : \n : satır başı, \a : zil , \t : tab, \b : bir karakter geri


program parçası ekranda görünen / imleçin konumu
i = 5 ;
printf("%d",i) ; 5
printf("'i=%d",i) ; i=5
printf("i=") ;
printf("%d",i) ; i=5 -

printf("i=\n") ; i=
printf("%d",i) ; 5 alt satıra geçer

printf('i=%d\n",i) ; i=5 alt satıra geçer

printf("%d - %d",i, 5*i); 5 - 25



Biçimli yazdırma
% karakteri ile dönüşüm karakteri arasına aşağıdaki karakterler de kullanılabilir.

- : sola dayalı yaz
m : yazılacak değer için ayırılan alan
n : değerin kaç karekteri yazılacağı

s = "ABCDEF"
printf("%10s ",s); . . . . A B C D E F

printf("%10.3s ",s); . . . . . . . A B C

x = 128.5 ;
printf("%7.2f",x) ; # 128.50

x = 85.47 ;
printf("%6.3f",x) ; 85.470

printf("%6.1f",x) ; ## 85.5

Örnek 2.8.1 : Yarıçapı belli dairenin alanını hesaplayan programı yazınız. (ilk yazılan program)
#include <stdio.h>
main()
{
const float PI=3.14;
float r, alan;
r = 7;
alan := PI*r*r;
printf(('Alan = %f', alan);
}

Örnek 2.8.2 : En fazla dört basamak olabilen sayının basamak değerlerini yazdır. % ve / işlemlerinin kullanımı.
#include <stdio.h>
main()
{
int i,y;

y=1985;
i= y / 1000;
printf("%d",i);
y= y-i*1000;
i= y / 100;
printf(" %d",i);
y = y-i*100;
i= y / 10;
printf(" %d",i);
y = y-i*10;
printf(" %d\n",y);
i = 1985;
printf("%d ",i / 1000);
printf("%d ",(i / 100) % 10);
printf("%d ",(i / 10) % 10);
printf("%d\n",i % 10);
}

Örnek 2.8.3: ax2+bx+c=0 tipi bir denklemin köklerini veren programı yazınız.
Girdi : a, b ve c katsayıları
Çıktı : denklemim kökleri
Algoritma :
1. a, b ve c katsayılarını oku.
2. Delta= değerini hesapla.
3. x1 ve x2 değerlerini hesapla.
4. Kökleri yaz.

Programın kodlanması:

#include <stdio.h> /* printf işlevi için */
#include <math.h> /* sqrt işlevi için */
main()
{
float a, b, c;
float x1, x2;
float d;

a = 1;
b = -3;
c = 2;
d = b * b - 4 * a * c;
x1 = (-b + sqrt(d)) / (2 * a);
x2 = (-b - sqrt(d)) / (2 * a);

printf("Kökler = %f , %f",x1, x2);
}
C dilinde karekök almak için bir deyim yoktur. Örnekte bunu yerine getiren C diline eklenmiş olan sqrt() fonksiyonu kullanılmştır. Aşağıda buna benzer artık C derleyecilerinde standart olmuş bazı fonksiyonlar verilmiştir. Bu işlevler math.h başlık dosyasında tanımlıdır.
Fonksiyon x ,y Sonuç
abs(x) int int x'in mutlak değeri
fabs(x) double double x'in mutlak değeri
pow(x, y) double double xy
sqrt(x) double double x'in karekökü
exp(x) double double ex değeri
log(x) double double ln(x) değeri
log10(x) double double log10(x) değeri
ceil(x) double double x ten büyük ilk tamsayı
floor(x) double double x ten küçük ilk tamsayı


Örnekler:
ceil(5) 5
ceil(5.2) 6
ceil(-5.2) -5
floor(5) 5
floor(5.2) 5
floor(-5.2) -6

2.9 scanf İşlevi
Klavyeden veri okumak için kullanılır. Yapı olarak printf işlevi ile hemen hemen aynıdır. Kullanım biçimi:

scanf( kontrol, <değişkenler>)

Girilen karakterler <kontrol> metininde belirtilen biçimlere göre değişkenlere aktarılır.
Değişkenler işaretçi tipinde olmalıdır. Yani parametre olarak değişkenin adresi gönderilmelidir.
Ayırıcılar boşluk, tab, enter

scanf("%f %f %f ", &a, &b, &c);

scanf işlevinin değeri
0 ise hiçbir değişkene değer atanmamış
>0 ise başarılı bir şekilde değer atanan değişken sayısı
int a,b,c;
float m,n;
scanf("%d", &a); Klavyeden tamsayı okur. Girilen değer a değişkenine aktarılır.
scanf("%d %d",&a,&b) Klavyeden girilen ilk değer a değişkenine, ikinci değer b değişkenine aktarılır.
scanf("%f %d", &m, &a); Klavyeden ilki gerçel, ikincisi tamsayı olmak üzere iki değer okur.

İkinci dereceden denklem çözümünün yapıldığı örnekte katsayıları klavyeden okutmak istersek

scanf("%f %f %f ", &a, &b, &c);

Farklı kullanıcı arayüzünde yazarsak

printf(“Katsayıları sırasıyla giriniz (a b c) :” ); scanf("%f %f %f ", &a, &b, &c);

printf(“a katsayısını giriniz : “Wink; scanf(“%f”, &a);
printf(“b katsayısını giriniz : “Wink; scanf(“%f”, &b);
printf(“c katsayısını giriniz : “Wink; scanf(“%f”, &c);

Örnek 2.9.1: Vize ve final notlarınından ortalamayı hesaplayan programda değerlerin klavyeden okunmuş hali.
main()
{
float vize, final, ort;
printf(“Vize notunu giriniz “Wink; scanf(“%f”, &vize);
printf(“Final notunu giriniz “Wink; scanf(“%f”, &final);
ort = vize * 0.4 + final * 0.6;
printf(“Ortalaması = &f\n”, ort);
}

2.10 Mantıksal ifadeler
Sonucu Doğru veya Yanlış olan ifadelerdir. Sonuç sıfır ise yanlış aksi halde doğru kabul edilir.
İlişkisel işleçler(operatör) : iki değer arasındaki ilişkiyi test etmek için kullanılır.
işleç anlamı
> büyük
>= büyük - eşit
== eşit
< küçük
<= küçük - eşit
!= eşit değil

x=8, y=5 için
x > y Doğru
x < y Yanlış
x !=y Doğru

Mantıksal işleçler : İki mantıksal ifade arasındaki ilişki üzerindeki ilişkide kullanılır.
! DEÐİL (NOT)
&& VE (AND)
|| VEYA (OR)

(X>0) && (X>Y)
(X>0) || (Y>0)

İfadelerde işleçlerin yürütülme sırası
işleç Önceliği
( ) en yüksek (ilk yürütülür)
!
*, /, %
+, -
<, <=, >=, >
==, !=
&&, ||
= en düşük (son yürütülür)
= işleci sağdan sola, diğerleri soldan sağa doğru yürütülür.
Görüldüğü gibi ifadelerde matematiksel ve mantıksal işlemler bittikten sonra ilişki test edilir.
X=50, Y=80, Z=45 için
( ( X / 4 + Y / 4 + Z / 2 ) >= 50 ) && ( Z >= 50 )








3 - Döngü ve Koşul Deyimleri

Programlar (algoritmalar) üç temel blok kullanılarak gerçekleştirilebilirler. Bunlar; ardarda, bir koşula bağlı olarak ve sonlu sayıda yineleme (döngü) dir.

3.1 Koşul Deyimleri

Birkaç seçenekten birini seçmek veya bir deyimin bir koşula bağlı olarak işlemek için kulanılır.


3.1.1 if-then-else Deyimi

if (<mantıksal ifade>)
blok_doğru;
else
blok_yanlış;

Mantıksal ifade doğru ise blok_doğru, yanlış ise else sözcüğünden sonraki blok_yanlış yürütülür. else kısmı seçimlidir, gerekmiyorsa kullanılmayabilir.


Örnek 3.1. 1.1 Girilen sayının tek/çift olduğunu yazan program
#include <stdio.h>
main()
{
int i;
scanf("%d", &i);
if ( i % 2 == 1)
printf("Tek");
else
printf("Çift");
}

Bileşik (Compound) Deyimler

{ ve } karakterleri ile sınırlandırılmış bir dizi deyimden oluşur.
{
i = 5;
j = i/2;
k = i+1;
}

Eğer bloklarda birden fazla deyim kullanmak gerektiğinde bileşik deyim kullanılır.

if (yil % 4 == 0) {
subat =29;
gunyil = 366;
}
else {
subat =28;
gunyil = 365;
}
Örnek 3.1.1.2 : İkinci dereceden denklemin köklerinin bulunması.

if (delta<0)
printf("Gerçel kök yoktur.\n");
else
{
x1 = (-b + sqrt(delta)) / (2 * a);
x2 = (-b - sqrt(delta)) / (2 * a);
printf("Birinci kök = %f\n" , x1);
printf("ikinci kök = %f\n" , x2);
}


Örnek 3. 1.1.3 : Klavyeden girilen karakterin rakam olduğunun tesbiti.

char c;
c = getch();
if ((c>='0') && (c<='9')
printf("Rakam girdiniz.");


Örnek 3. 1.1.4 : Girilen üç sayıdan en küçüğünün bulunması (İçiçe IF kullanımı).

scanf("%d%d%d", &s1, &s2, &s3);
if ((s1<s2) && (s1<s3))
ek =s1;
else
if (s2<s3)
ek =s2;
else
ek = s3;
printf('En küçük olanı = %f", ek);

II. yol :
scanf("%d%d%d", &s1, &s2, &s3);
ek = s1;
if (ek>s2)
ek =s2;
if (ek>s3)
ek =s3;
printf('En küçük olanı = %f", ek);











Örnek 3. 1.1.5: Fonksiyonun girilen t değeri için aldığı değeri hesaplayıp yazan program.




main()
{
float y, x;

printf(“x değerini giriniz”Wink;
scanf(“%f”, &x);
if (x > -1 && x<2)
y = 2/3 * (x + 1);
else
if (x>2 && x<=3)
y = 2;
else
y = 0;

printf(“Fonksiyonun değeri = &f”, y);
}






Örnek 3. 1.1.6: Vergi iadesini hesaplan programı yazınız. (elseif yapısı)
(0-60 bin : %10, 60-120 bin : %,120-200 bin : %12,>200 bin : %5)

main()
{
float fat_top, vergi_iade;
printf("Fatura toplamlarını giriniz ");
scanf("%f", &fat_top);
if (fat_top < 60000)
vergi_iade = fat_top * 0.10;
else if (fat_top < 120000)
vergi_iade = 6000 + (fat_top - 60000) * 0.20;
else if(fat_top < 200000)
vergi_iade = 18000 + (fat_top - 120000) * 0.12;
else
vergi_iade = 27600 + (fat_top - 200000) * 0.05;

printf("Ödenecek vergi iadesi = %f\n", vergi_iade);

}


Örnek 3. 1.1.7: Girilen tarihteki günün adını veren programı yazınız.

#include <studio.h>
main ( )
{
int gun, ay, yıl ;
long gt ;
printf(“Tarihi gir”Wink ; scanf ( “%d %d %d “,&gun)

/* oncekı yıllardakı gun sayısını hesapla */

gt=( yıl*1)*365 + yıl/4;

/* bu yildaki aylardaki gunleri ekle */

if (ay==2)
gt = gt + 31 ;
else if (ay ==3)
gt = gt + 31 + 28 ;
else if (ay ==4)
gt = gt + 31 + 28 +31;
else if (ay ==5)
gt = gt + 31 + 28 +31+ 30 ;
else if (ay ==6)
gt = gt + 31 + 28 +31+ 30 +31;
else if (ay ==7)
gt = gt + 31 + 28 +31+ 30 +31+ 30 ;
else if (ay ==8)
gt = gt + 31 + 28 +31+ 30 +31+ 30 + 31 ;
else if (ay ==9)
gt = gt + 31 + 28 +31+ 30 +31+ 30 + 31+30 ;
else if (ay ==10)
gt = gt + 31 + 28 +31+ 30 +31+ 30 + 31+30 + 31;
else if (ay ==11)
gt = gt + 31 + 28 +31+ 30 +31+ 30 + 31+30 + 31+ 30 ;
else if (ay ==12)
gt = gt + 31 + 28 +31+ 30 +31+ 30 + 31+30 + 31+ 30 +31;

/*Bu ayı ekle */
gt = gt+ gun;
if(yıl%4==0 && ay>2),
gt =gt+1;
gt=gt %7,
if(gt==1)
printf(“Pazar”Wink;
else if(gt==2)
printf(“Pazartesi”Wink;
else if(gt==3)
printf(“Salı”Wink;
else if(gt==4)
printf(“Carsamba”Wink;
else if(gt==5)
printf(“Persembe”Wink;
else if(gt==6)
printf(“Cuma”Wink;
else if(gt==7)
printf(“Cumartesi”Wink;
}


3.1.2 switch Deyimi

switch(<seçici>) {
case seçenek1 : Deyim;
case seçenek2 : Deyim;
.
.
.
default : Deyim;
}

Seçicinin aldığı değere eşit seçeneğin olup olmadığına bakar. Var ise o noktadan sonraki deyimler yürütülür. switch deyiminin sonuna gelindiğinde veya break deyimi ile karşılaşıldığında yürütme işlemi durur ve programın akışı switch deyimini izleyen deyim ile devam eder.

switch(i) {
case 1 : printf("Bir");
case 2 : printf("İki");
default : printf("Hiçbiri");
}

i=1 ise çıkış BirİkiHiçbiri
i=2 ise çıkış İkiHiçbiri

Sorunu ortadan kaldırma için her durum için break deyimi eklenmeli.

. Seçici Ordinal tiplerden biri olmalıdır (Ordinal tip: tüm değerleri listelenebilinen veri tipleri - integer, char).
. Seçici ile seçenekler aynı tipte olmalıdır.
. default kısmı seçimliktir. Seçeneklerin hiçbiri uygun değil ise yürütülür.



#include <stdio.h>
main()
{
char islem;
int s1, s2, s3;
printf("Önce işlemi sonra sayıları girin ");
scanf("%c%d%d",&islem, &s1, &s2);
switch (islem) {
case '+' : s3 = s1 + s2; break;
case '-' : s3 = s1 - s2; break;
case '*' : s3 = s1 * s2; break;
case '/' : s3 = s1 / s2; break;
default : printf ("Hatalı işlem");
}
printf("\nSonuç = %d",s3);
}

Örnek 3.1.2.1: Mevsimleri yaz.

scanf("%d", &ay);
switch (ay) {
case 3:
case 4:
case 5: printf("ilkbahar"); break;
case 6:
case 7:
case 8: printf("yaz"); break;
case 9:
case 10:
case 11: printf("sonbahar"); break;
case 12:
case 1:
case 2: printf("kış"); break;
}
switch deyimi yerine if deyimi kullanılabilir. Ancak switch deyimi programı daha okunabilir kıldığı için gerekli olduğu durumlarda kullanılmalıdır.

Örnek 3.1.2.2 : 16'lık sistemdeki rakamın 10'luk sistemdeki karşılığı (char tipinin sayı gibi davranışı).
switch© {
case '0':
case '1':
. . .
case '9': i = c - '0'; break;
case 'a':
case 'A': i = 10; break;
. . .
case 'f':
case 'F': i = 15; break;
}


Örnek 3.1.2.3: Sınav notunu harfe dönüştüren programı yazınız.
( >=90 :AA, 85-89:BA, 80-84:BB, 75-79:CB, 70-74:CC, 60-69Big Grin, <60 :F )

Örnek 3.1.2.4: Belirtilen tarihin hangi güne denk geldiğini bulan programı yazınız.
else if yapısı yerine switch kullanarak

3.2 Döngü Deyimleri (Yineli)

Bir ya da birden fazla deyimin tekrar edilemesini sağlarlar. C dilinde while, for ve do-while deyimleri döngü işlevini saşlar. Tekrar edilen deyimlere döngü gövdesi denir.


3.2.1 while Deyimi

while <mantıksal ifade>
Deyim

Mantıksal ifade doğru olduğu sürece Deyim yürütülür. Eğer yanlış ise kontrol bir sonraki deyime geçer.




Örnek 3.2.1.1 : 1'den 100'e kadar olan sayıların toplamı.


i =1
j = 0
i < 101 olduğu sürece
j = j + i
i = i + 1
4. Toplam j ‘ yi yaz
main()
{
int i, j;
i =1;
j = 0;
while (i<101) {
j =j+i;
i =i+1
}
printf("Toplam = %d",j);
}



Örnek 3.2.1.2: Toplama ve çarpma kullanarak çarpma işmeini gerçekleyiniz.

a ve b sayılarını oku
c =0
b>0 olduğu sürece tekrarla
.3.1. c=c + a
3.2. b = b-1
4. c değerini yaz ve dur main()
{
int a, b, c;
printf (“iki sayıyı giriniz “Wink; scanf(“%d%d”, &a, &b);
c = 0;
while (b > 0) {
c = c + a;
b = b - 1;
}
printf(“Sonuç = &d\n”, c);
}


Örnek 3.2.1.3: Girilen sayının faktoriyelini hesaplayan programı yazınız.

n değerini oku
F=1
n >1 olduğu sürece tekrarla
.3.1. F=F*n
3.2. n= n-1
F değerini yaz
main()
{
int n;
long f;
printf (“sayıyı giriniz “Wink; scanf(“%d”, &n);
f = 1;
while (n > 1) {
f = f * n;
n = n - 1;
}
printf(“Sonuç = &d\n”, f);
}

Örnek 3.2.1.4: Klavyeden girilen sayıları oku. Sayıların toplamı 21'den büyük veya eşit olduğu zaman dur.
main()
{
int i, j = 0;
while (j<21) {
scanf("%d",&i);
j =j+i;
}
printf("Toplam = %d",j);
}
Örnek 3.2.1.5: 1993 yılı itibarı ile ülke nüfüsu 60 milyondur. Yıllık nüfüs artış oranı %2.3 tür. Sonraki 10 yılda ülke nüfüsunu yıllara göre listeleyen program.

/* Nufus Tablosu */
#include <stdio.h>
main()
{
int i; /* sayac */
int yil; /* yillar */
float nufus; /* nufus miktari */
float artis; /* artis orani */

artis = 0.023;
yil = 1993;
nufus = 60000000;
printf("%d - %10.0f\n",yil,nufus);
i = 1;
while (i < 11)
{
nufus = nufus * (1 + artis);
printf("%d - %10.0f\n",yil + i,nufus);
i = i + 1;
}
}

Örnek 3.2.1.6 : Girilen tamsayının mükemmel sayı olup olmadığının söyleyen programı yazınız.
(mükemmel sayı = tam bölenlerin toplamı sayının kendisine eşit)

Örnek 3.2.1.7 : Girilen tamsayının kaç basamaktan oluıştuğunu söyleyen programı yazınız.

Örnek 3.2.1.8 : Girilen tamsayı içerisinde kaç tane 1 olduğunu söyleyen programı yazınız.

Örnek 3.2.1.9: Girilen tamsayının son üç basamağını yuvarlayan programı yazınız.
son üç basamağı >=500 > 1000 e, <500 ise 0 a yuvarlayacak
(2560 à 3000, 2490 à 2000 )

Örnek 3.2.1.10: Sınavın ortalamasını hesaplayan programı yazınız.
Durum : sınava giren öğrenci sayısı belli

main()
{
int i, ogr_say, not_top, not;
float ort;
not_top = 0;
i = 0;
printf(“Öğrenci sayısını giriniz “Wink; scanf(“%d”, &ogr_say);
while (i < ogr_say) {
printf”Sıradaki öğrencinin notu = “Wink; scanf(“%d”, &not);
not_top = not_top + not;
i = i + 1;
}
ort = float (not_top) / ogr_say;
printf(“Ortalama = &f\n”, ort);
}
Durum : sınava giren öğrenci sayısı belli değil

Bu durumda girişin bittiğini gösterir bir bilgiye (işarete) ihtiyaç vardır. Sınav notu için 0 dan küçük bir değer girildiğinde girme işleminin sona erdiğinin varsayalım.

ogr_say = 0;
printf”Sıradaki öğrencinin notu = “Wink; scanf(“%d”, &not);
while (not >= 0) {
not_top = not_top + not;
ogr_say = ogr_say + 1;
printf”Sıradaki öğrencinin notu = “Wink; scanf(“%d”, &not);
}


3.2.2 For Deyimi

for (ifade1 ; ifade2 ; ifade3 )
ifade;

ifade2 doğru ( veya farklı 0) olduğu sürece ifade yürütülür (bitiş koşulu).
Döngünün ilk adımından önce ifade1 yürütülür ( başlangıç adımı).
Döngünün her adımında ifade3 yürütülür (artış miktarı).

for (i = 1; i < 5; i++)
printf("%d ",i);


ifade1, ifade2 ve ifade3 seçimliktir. ifade2 belirtilmez ise herzaman
doğru olduğu ( == 1 ) kabul edilir. Yani sonsuz döngü oluşur.

for (i = 1; ; i++)
printf("%d ",i);


Örnek 3.2.2.1: 1'den 100'e kadar olan sayıların toplamı.

j =0;
for (i=1; i<=100; i=i+1)
j =j+i;
printf("Toplam %d",j);


Örnek 3.2.2.2: Girilen sayının faktöriyelini bulunuz.


fact =1;
for (j=1; j<=i; j++)
fact =fact*j;
printf("Faktöriyel =%f",fact);
}




Örnek 3.2.2.3: Çarpım tablosu. (içi içe döngüler)

main()
{
int i,j;
for (i=1; i<=10; i++) {
for (j =1; j<=10; j++)
printf("%4.0d",i*j);
printf("\n");
}
}


Örnek 3.2.2.4: ? işlevini çiziniz(0-8 noktaları arasında).


3.2.3 do-while Deyimi

Bir koşul doğru olana kadar döngü yürütülür.

do
Deyim
while (<mantıksal ifade>)

Mantıksal ifade doğru olduğu sürece döngü tekrar edilir. Yanlış olduğunda while sözcüğünden
sonraki deyim yürütülür.

5 sayısı girilene kadar oku

do
scanf("%d",&i);
while (i!=5);

i =1;
do {
printf("%d",i*i);
i =i+1;
} while (i<=10);


Örnek 3.2.3.1: Sadece +, - kullanarak * işlemini gerçekleştirme.

main()
{
int a, b;
int c;
scanf("%d%d", &a, &b);
c = 0;
do {
c = c + a;
b = b - 1;
} while (b>0);
printf("%d\n", c);
}
Karşılaştırma
while : Koşul başlangıçta test ediliyor. Döngü sıfır veya daha fazla yürütülüyor.
do-while : Koşul sonda test ediliyor. Döngüye en az bir defa kesin giriliyor.

Örnek 3.2.3.2: 0 - 100 arasında tutulan sayının tahmini.
main()
{
int tahmin; /* tahminimiz */
int min; /* Tahminin alt siniri */
int max; /* Tahminin ust siniri */
char cevap; /* Kullanicinin cevabi */
min = 0; max = 100;
do {
tahmin = (max - min) / 2 + min;
printf("Tahminim %d\n",tahmin);
printf("Buyuk / Kucuk / Esit ");
scanf("%c",&cevap);
if (cevap == 'B')
max = tahmin - 1;
else
if (cevap == 'K')
min = tahmin + 1;
} while (cevap != 'E');
}
Örnek 3.2.3.3: Sin(x) fonksiyonun belli bie x için değerini seri açılımı ile hesaplayınız. Serinin ilk 10 terimini kullanınız. n tek sayı.
main()
{
float x; /* fonksiyonun hesaplanacağı değer */
float sinx; /* sin(x) in değeri */
float xt; /* eklenen terimin payı */
float fakt; /* eklenen terimin paydası, faktoriyel */
int isaret; /* terimin +/- olmasını sağlar */
int i;
clrscr();
printf("Hesaplanacak değer : ");
scanf("%f",&x);
sinx = x;
isaret = -1;
fakt = 1;
xt = x;
for (i = 2; i<=10; i++) {
xt = xt * x * x;
fakt = fakt * (2 * i - 2) * (2 * i - 1);
sinx = sinx + isaret * xt / fakt;
isaret = -isaret;
}
printf("Değeri = %f\n",sinx);
}
Örnek 3.2.3.4 : Aynı örneği belli sayıda terim için değil, sonucu 4 basamak hassasiyetle hesaplayınız.
4 - İşlevler

Problem çözmenin ilkelerinden biri problemi mümkün olduğu kadar çok parçaya bölmek idi. Daha sonra bu parçalar bağımsız olarak düşünülüp çözümleri elde edilebilir. C'de bu bölme işlemi işlev kullanarak yapılır.
Belli bir işi gerçekleştiren program deyimlerinin karmaşık programları düzenlemek ve basitleştirmek için programın bir birimi olarak gruplandırılması.

(işlev kullanmanın temel nedenleri : divide and conquer , software reusability )

Örnek 4.1 : Bir tamsayının faktöriyelini hesaplayan işlev


main()
{
int i;
prinf(“Sayıyı giriniz “Wink; scanf(“%d”, &i);
printf(“%d\n”, fakt(i));
} long fakt ( int n)
{
int j;
long f = 1;
for ( j = 2; j < =n; j = j + 1),
f = f * j;
return f;
}


Örnek 4.2 : Bir tamsayının kübünü veren işlev
#include <stdio.h>
main()
{
int sayi;
int kub(int); /* işlevin prototipi */

printf("sayıyı gir ");
scanf("%d", &sayi);

printf("Kübü = %d\n", kub(sayi));
}

int kub(int i)
{ return i*i*i; }


İşlevin tanımlanma biçimi

dönüş_tipi işlev_adı(parametreler)
{
yerel tanımlamalar
deyimler
}

dönüş_tipi: Eğer işlev bir değer geri gönderecek ise değerin tipini belirtir. Belirtilmez ise Int kabul edilir. Eğer işlev değer göndermeyecek ise dönüş_tipi yerine void yazılır.

işlev_adı: İşlev çağırılırken kullanılacak ad (belirleyici).

parametreler: İşlev için gerekli değerleri içerir. Her parametre değişken tanımlar gibi tanımlanır. Herbirinin arasında ',' kullanmak gerekir.
yerel tanımlamalar: Bu işleve özgü(değişken,sabit) tanımlamalar.


Eğer işlev bir değer gönderecek ise bu return deyimi ile yapılır.

return değer;


İşlevin Prototipi
Tanımlana bir işlevin ana modül içerisinde prototipinin yazılması gerekir. Prototip ile işlevin dönüş değeri ve aldığı parametrelerin tipleri tanımlanır. Bu bilgiye göre C derleyecisi işlev çağırıldığında değerlerin uygun olduğunu sınar.
int kub(int) kub işlevi int bir değeri alır ve yine int bir değer üretir.

Örnek 4.3 : Üç sayıdan en büyüğünü veren işlev.
Girdi : üç tane tamsayı
Çıktı : girdilerin en büyüğü

int max(int s1, int s2, int s3)
{
if (s1>s2 && s1>s2)
return s1;
else
if (s2>s3)
return s2;
else
return s3;
}

Bu işlevi kullanan bir program
#include <stdio.h>
main()
{
int max(int, int, int);
clrscr();
printf("%d \n", max(1,2,3));
printf("%d \n", max(14,8,12));
printf("%d \n", max(1,6123,3123));
}
...
işlevin tanım bloğu
...


Örnek 4.4: Üs alma işlevini gerçekleyen işlev (üs bilgisi tamsayı).
Girdi : taban ve üs değeri
Çıktı : tabanın üs. kuvveti
float us (float a, int b)
{
int i;
float r;

r = 1;
for (i = 1; i<=b; i++)
r = r * a;
return r;
}

Fonksiyonun program içinden çağırılışı
d = us(2,3);
d = us(a, 4);
d = d * us(3,4);

Üs alma işlemini gerçeklemenin diğer yolu

ab = eblna = Exp(b * Ln(a))
Exp(x : Real) : Real ex
Ln(x : Real) : Real Ln(x)

float us (float a, float b)
{
if (a>0)
return= exp( b * log (a ));
else
return= -1;
}



Genel değişken (global): Her yerde (main ve diğer işlevler) geçerlidir, değerine erişilebilir.
Programın en başında, main işlevinin dışında tanımlanır.
Yerel değişken (local): Sadece tanımlandığı modülde geçerlidir, değerine erişilebilir.
Modül içinde tanımlanır.


int a; /*tüm işlevlerden değerine erişilebilir, değeri değiştirilebilir. (global) */

main()
{
int b; /* sadece main işlevi içerisinden erişilebilir (local ) */
...
}

islev1(...);
{
int b; /* sadece islev1 işlevi içerisinden erişilebilir. main işlevindeki değişkendan bağımsızdır (local ) */
int c; /* sadece islev1 işlevi içerisinden erişilebilir (local ) */
...
}








Örnek 4.5 : 8 bit olarak girilen bir sayıya eşlenik (parity) bitini ekleyen programı yazınız (çift eşlenik)
Eşlenik biti en düşük anlamlı bit olarak eklenecektir.

Algoritma
1. Sayıyı oku.
2. Sayıdaki birlerin sayısını bul.
3. Birlerin sayısı tek ise 1, çift ise 0 ekle.

Programı yazarken 2. ve 3. adımlar işlev olarak yazılacaktır.

/* Eşlenik biti ekleme */
int bulbir ( int );
int eklebir ( int , int );

main()
{
int girsayi, birler;

clrscr();
scanf("%d", &girsayi);
birler = bulbir(girsayi);
girsayi = eklebir(birler, girsayi);
printf("%d\n", girsayi);
}

int bulbir ( int sayi)
{
int kacbir = 0;
while (sayi>0) {
kacbir = kacbir + (sayi % 2 );
sayi = sayi / 2;
}
return kacbir;
} /* BulBir */

int eklebir ( int birler, int sayi)
{
return (2 * sayi + (birler % 2));
} /* Eklebir */


* Karşı taraf için gereken algoritmayı yaz (sayı doğru mu, doğru ise değeri).

Örnek 4.6 : A işyerindeki bir personelin hangi dilimden gelir vergisi ödeyeceğini (yüzdesini) belirten fonksiyonu yazınız.

Girdi : personelin birikmiş vergi matrahı
Çıktı : Kesinti yüzdesi
İlgili bilgi : 0-20 Milyon %25, 20-40 Milyon %30, 40-80 Milyon %35, 80-160 Milyon %40
>180 Milyon %45

int v_oran ( float bvd);
{
int i;
if (bvd < 20000000)
i = 25;
else if (bvd < 40000000)
i = 30;
else if (bvd < 80000000)
i = 35;
else if (bvd < 160000000)
i = 40;
else
i = 45;
return i;
}
Örnek 4.7 : Gelir vergisi matrahı ve önceki aylara ait birikmiş vergi matrahı belli bir personelin gelir vergisini hesaplayan fonksiyonu yazınız.
Vergi := Gelir vergisi matrahı * Vergi oranı
Not : Eğer personel bu ay dilim değiştiriyorsa gelir vergisi gerektiği şekilde eski ve yeni dilime paylaştırılarak kesinti hesaplanmalıdır.

Örnek 4.8 : Girilen harfi büyük harfe dönüştüren fonksiyon
Girdi : karakter
Çıktı : karakter ( girdi harf ise büyük harfe dönüştürülmüş)

char buyuk(char c);
{
if (c >= 'a' && c <= 'z')
return c - 32;
else
return c;
}

Örnek 4.9:
Girdi : iki sayı ve aralarındaki işlem
Çıktı: iki sayı arasındaki işlemin sonucu

int calculate(char islem, int a, ibt b, int c)
{
int s;
switch( islem )
case '+' : s = a + b ; break;
case '-' : s = a - b ; break;
case '*' : s = a * b ; break;
case '/' : s = a / b ; break;
default : s = 0;
}
return s;
}

Çağırma biçimi
a = calculate ('+',4,8');
a = calculate ('/', 4,2) * calculate ('*', 2,2);




Örnek 4.10: Bir işlevin köklerinden birini Newton yönetimi ile bulan prg. ( x2-2 )

#include <stdio.h>
#include <math.h>

double fn(double);
double fnt(double);

main()
{
double x,x0;
double hata;


hata = 0.0001; /* izin verilen hata */
x = 8; /* başlangıç değeri */
do {
x0 = x;
x = x0 - fn(x0)/fnt(x0);
} while (fabs(x-x0)>hata);

printf ("Sonuç = %f\n", x);
printf ("f(x) = %f\n", fn(x));
}

double fn(double x) /* işlevin değeri */
{
return x*x-2;
}

double fnt(double x) /* işlevin türevinin değeri */
{
return 2*x;
}


Örnek :4.11: İki sayının ortak katlarının en küçüğünü veren işlevi yazınız.

#include <stdio.h>
long okek(long, long);
main()
{
long i, j;
clrscr();
printf("İki tamsayı giriniz :");
scanf("%ld%ld", &i, &j);
printf("sayıların okeki = %ld \n" okek(i, j));

}

long okek(long p, long q)
/* p < q olmali. Degil ise yerlerini değiştir. */
{
long i, k;
if (p>q) {
i=p;
p=q;
q=i;
}

/* p nin öyle bir katını bul ki q sayısına tam bölünsün
2 sayısından itibaren taranmaya başlanabilir fakat
p/q yeterli
*/

i = q / p;
do {
k = p*i;
i = i+1;
} while ( k % q != 0);
return k;


Örnek :4.12: İstenen sayıdaki asal sayıyı listeleyen programı yazınız.

#include <stdio.h>

int asal(int);
main()
{
int i ; /* asal olup olmadığı sınanacak sayılar */
int kac; /* ilk kaç asal sayının listeleneceği bilgisi */
int j; /* listelenen asal sayıların adetini tutar */

clrscr();
printf("ilk kaç asal sayı listelenecek : ");
scanf("%d", &kac);


/* for deyiminde ifade3 kısmında döngü değişkeni yerine
farklı bir değişkenin değeri değiştiriliyor. Döngü değişkeni
ide incelenen sayı asal ise arttırılıyor
*/

i = 2;
for (j = 1; j<=kac;i++)
if (asal(i)) {
printf("%d \n", i);
j++;
}
}
int asal(int n)
/* sayı asal ise 1 değilk ise 0 değerini alır */
{
int i;
if (n % 2 == 0)
return (n==2);
if (n % 3 == 0)
return (n==3);
if (n % 5 == 0)
return (n==5);
for (i=7; i*i <= n; i+=2)
if (n % i == 0)
return 0;
return 1;
}


Örnek :4.13: Belirtilen tarihteki ayın kaç gün sürdüğünü veren işlevi yazınız.
Girdi : Ay ve yıl
Çıktı : Aydaki gün sayısı

int aydakigun(int ay, int yil)
{
int i;
switch (ay) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12 : i = 31;break;
case 2 :
if (yil % 4 == 0)
i = 29;
else
i = 28;
break;
default : i = 30;
}
return i;
}


Örnek :4.14: Önümüzdeki yılda Ramazan Bayramı nın hangi tarihte kutlanacağını hesaplayan programı yazınız. Bu yılki tarih klavyeden gün ay ve yıl olarak okunacakır.
Girdi: Bu yıl kutlanılan tarih
Çıktı : Sonraki tarih

#include <stdio.h>

int aydakigun(int, int);

main()
{
int gun,ay, yil;
int i, j ;

clrscr();
printf("Bu yılki tarihi giriniz (G A Y) : ");
scanf("%d %d %d",&gun, &ay, &yil);
yil = yil + 1;
gun = gun - 11;
if (gun < 1 ) {
ay = ay - 1;
if (ay < 1 ) {
ay = 12;
yil = yil - 1 ;
}
gun = gun + aydakigun(ay, yil);
}
printf("\nGelecek bayram = %d/%d/%d\n",gun,ay,yil);
}


Örnek :4.15: Girilen bir tamsayının basamaklarının sırasının tersinin oluşturduğu sayıyı veren işlevi yazınız.
#include <stdio.h>
long tersi(long);
main()
{
long s;
clrscr();
printf("Sayıyı giriniz : ");
scanf("%ld", &s);
printf("Basamaklarının ters çevirilmişi = %ld \n", tersi(s));
}

long tersi(long k)
{
long a, b;
a = 0;
while (k>0) {
b = k % 10;
a = a * 10 + b;
k = k / 10;
}
return a;
}

4.2 Özyineleme (Recursive) İşlevler

Kendini çağıran fonksiyonlardır.

Örnek 4.2.1: Faktoriyel hesabı

long fakt(long i)
/* fakt = i! */
{
if (i<2)
return 1;
else
return i*fakt(i-1);
}

Örneğin n=4 için fonksiyonun kendisini çağırdığı satır şöyledir:
4 * fakt(3), 3 * fakt(2), 2 * Fakt(1)
24 = 4 * 6 <-- 3 * 2 <-- 2 * 1

Örnek 4.2.2: Ortak bölenlerin en büyüğünü bulan program (Euklid yöntemi).
gcd = greatest common divisor

long gcd (long m, long n )
/* m ve n sayılarının ortak bölenlerinin en büyüğü*/
{
if (n == 0)
return m;
else
return gcd( n, m % n);
}

Örnek 4.2.3: İki sayı göreceli asal olup olmadığını veren fonksiyon (relativeli prime = gcd() = 1 )

Örnek 4.2.4: Sayının 9 un katı olup olmadığının basamak toplamlarının 9 olması ile bulunması (Özyinelemeye örnek olsun)

int kati9(long s)
{
int t;
if ( s < 10)
return ( s == 9);
else {
t = 0;
while ( s > 0) {
t = t + s % 10;
s = s / 10;
}
s = kati9(s);
}
}























5- Diziler

Þu ana kadar basit değişkenler kullandık ( her değişkinin bir değeri var).

Yapısal değişken: benzer verilerin tek bir değişken altında gruplandırılması.

Dizi veri yapısı: Aynı tip verilerin toplanıp tek isim verilmesi.

5.1 Dizi Tanımı ve Kullanımı


Tip_Adı değişken[boyut];

Örneğin

float a[100];

Bu tanımlama ile a isimli değişkeni 100 gerçel değerin saklandığı bir diziyi gösterir. Bu 100 veriye a değişkeni ile erişilir.

Dizinin herhangi bir elemanına erişmek veya değiştirmek için kaçıncı eleman olduğunu gösterir indis bilgisini vermek gerekir. İlk elemanın indisi 0 dır.

A[4] dizinin 5. elemanı
A[0] dizinin ilk elemanı
A[1] := 45; dizinin 2. elemanına 45 atanır
A[7] := A[7] + A[1]; dizinin 8. elemanına kendisi ile 2. elemanın toplamı atanır

Dizinin eleman değerler tanımlama anında yapılabilir.
int a[10] = {25, 18, 20, 0, 29, 5, 4, 8,19,13}


0 1 2 3 4 5 6 7 8 9
25 18 20 0 29 5 4 8 19 13


Dizi Kullanıma Örnekler

Örnek: Dizi elemanlarına değer ata, yazdır.

/* 1-10 arsındaki sayıların karesini dizi elemanlarına yükle yazdır */
main()
{
int a[10];
int i;

for (i=0; i<=9; i++)
a[i] = (i+1)*(i+1);

for (i=0; i<=9; i++)
printf("%d . elemanın değeri = %d\n", i, a[i]);
}

Ekranda çıkacak görüntü

0 . elemanın değeri = 1
1 . elemanın değeri = 4
...
9 . elemanın değeri = 100


Örnek : Dizide ilk 20 Fibonacci sayıyı oluştur

/* ilk 20 Fibonacci
f[0] = 0, f[1] = 1, f[i+1] = f[i] + h[i-1] */
#include <stdio.h>
main()
{
int fib[20];
int i;


fib[0] = 0;
fib[1] = 1;
for (i=2; i<=19; i++)
fib[i] = fib[i-1] + fib[i-2];


clrscr();
for (i=0; i<=19; i++)
printf("%d . Fibonacci sayısı = %d\n", i, fib[i]);
}


Ekranda çıkacak görüntü
0. Fibonacci sayısı = 0
1. Fibonacci sayısı = 1
2. Fibonacci sayısı = 1
...
19. Fibonacci sayısı = 4181

Örnek : Klavyeden 10 sayı oku. Tersten yazdır.
#include <stdio.h>
main()
{
int a[10];
int i;


for (i=0; i<=9; i++) {
printf("%d. sayıyı gir ",i);
scanf("%d", &a[i]);
}

printf("\n-----------------------\n");

for (i=9; i>=0; i--)
printf("%d . sırada girilen sayı = %d\n", 9-i, a[i]);
}

Diziyi Bir İşleve Gönderme

Þu ana kadar öğrenilen bilgi çerçevesinde işlevlere gönderilen parametrelerin içeriklerinin işlev içerisinde değiştirilmesi mümkün değildir. İşleve değişkenin değeri gönderilir. İşlev içerisindeki işlemlerden parametre etkilenmez.

Dizilerde durum böyle değildir. Normal kullanımda (şu ana kadar görülen) dizi işleve gönderildiğinde elemanlar değiştirilebilir (referans). Dizinin sadece herhangi bir elemanı gönderildiğinde ise değeri değiştirilemez (değer)

Diziyi işleve gönderirken sadece adını parametre olarak yazmak yeterlidir.

Örnek: işlev içerisnde dizi eleman değerlerinin değiştirilmesi
#include <stdio.h>
void kareleri(int []);
main()
{
int a[10];
int i;

for (i=0; i<=9; i++)
a[i] = i + 1 ;


clrscr();
printf("Dizinin elemanlarının değerleri\n");
for (i=0; i<=9; i++)
printf("%d ",a[i]);

kareleri(a);

printf("\n\nKare alma işlemi sonrası dizinin elemanlarının değerleri\n");

for (i=0; i<=9; i++)
printf("%d ",a[i]);
}

void kareleri(int a[])
{
int i;

for (i=0; i<=9; i++)
a[i] = a[i] * a[i];
}


Ekranda çıkacak görüntü
Dizinin elemanlarının değerleri
1 2 3 .. 10

Kare alma işlemi sonrası dizinin elemanlarının değerleri
1 4 9 .. 100
Notlar

* Tanımlanan dizi boyutunun dışında bir eleman kullanımı durumunda C dili hata vermez (uyarmaz).
* İlk indisin değerinin sıfır olması dolayısıyla dizinin n. elemanın indisi n değil n-1 dir.
* Gerektiği durumlarda dizi elemanlarının ilklendirilmesi (sıfırlamak) unutulmamalı
- tanımlama anında int a[10] = {13, 45 ..}; /* fazla eleman yazılırsa hata oluşur */
int a[] = { 13, 45, 56}; /* boyut belirtilen değer kadar olur */
- giriş yaptırarak scanf("%d", &a[i]);
- doğrudan değer atayarak a[i] = 4;


Dizinin Boyutunu Değişken Kılma

#define önişlemcisi direktifi (preprocessor directive)

Simgesel sabit tanımlanmasını sağlar. C dili deyimlerinden biri değildir (#include gibi). Kullanım biçimi

#define SabitAdı Değeri

Program çalıştırıldığınde derleme işlemi öncesinde program içerisinde SabitAdı simgesinim geçtiği yerlere Değeri konur.


Örnek : 25 kişilik bir sınıftaki öğrencilerin sınav sonuçlarını okuyup ortalamasını bulan program.
* not bilgilerin saklanacağı veri yapısını belirle ve tipi tanımla
* notları girdiren yöntemi yaz
* Ortalamayı bulan fonksiyonu yaz

#include <stdio.h>
#define OGR_SAY 25

void giris(int []);
float ortalama(int []);
main()
{
int ogr[OGR_SAY];

clrscr();

giris(ogr);

printf("Ortalama = %f\n", ortalama(ogr));
}

void giris(int ogr[])
{
int i;

for (i=0; i<OGR_SAY; i++) /* 0 dan başladığı için < kullanıldı */
{
printf("%d. öğrencinin notunu gir : ",i+1);
scanf("%d", &ogr[i]);
}
}
float ortalama(int ogr[])
{
float x;
int i;

x = 0;
for (i=0; i<OGR_SAY; i++)
x = x + ogr[i];
return x / OGR_SAY;
}


* 50'den küçük değerleri yazan işlev
* 50'den küçük değerlerin sayısını veren işlev
* en yüksek notu veren işlev
* Standart sapmayı veren işlen ( (abs(Xi - Xort) / OGR_SAY))


Örnek : İki dizinin toplamını üçüncü bir diziye yazan programı yazınız (A, B aynı tip dizi, C = A + B ).
Doğrudan C := A + B yazılamayacağı için dizinin ilgili elemanlarını tek tek toplamalıyız.

#include <stdio.h>
#define MAX 20
void dizitopla(int [], int [], int []);
main()
{

int a[MAX], b[MAX], c[MAX];
int i;

for (i=0; i<MAX; i++) {
a[i] = i;
b[i] = 2 * i;
}

dizitopla(a, b, c);

clrscr();
for (i=0; i<MAX; i++)
printf(" %4d + %4d = %4d \n", a[i], b[i], c[i]);
}

void dizitopla(int a[], int b[], int c[])
/* c = a +b */
{
int i;

for (i=0; i<MAX; i++)
c[i] = a[i] + b[i];
}




5.3 Sıralama
Dizi elemanlarının küçükten büyüğe veya büyükten küçüğe doğru dizilmesi işlemi. Farklı performansa sahip birçok yöntem vardır. Þimdilik en basit olanlardan biri incelenecektir.

Selection Sort (seçim)

Dizinin en küçük elemanı bulunur ve birinci eleman ile yer değiştirilir. Bu işlem (n-1). elemana kadar tekrar edilir. Her adımda en küçük eleman dizinin kalan elemanlarından bulunur. Örneğin aşağıda 4 elemanlı bir diziye yöntemin uygulanması gösterilmiştir.





Buble Sort

Bu yöntemde ardışıl iki eleman karşılaştırılır. Eğer önceki eleman sonrakinden büyük ise elemanlar yer değiştirilir. Bu şekilde dizi taranır. Eğer herhangi bir değişiklik yapılmış ise işlem tekrar edilir.



Başlangıç 1. adım 2. adım 3. adım
34 21 18 18
21 18 21 21
18 25 25 25
25 34 34 34

Görüldüğü gibi, bu yöntemde dizi sıralandıktan sonra bir defa daha taranıyor.


Selection Sort Kodlaması

1. Dizinin en küçük elemanının indisini veren işlev
2. Bu işlevi kullanarak diziyi sıralama

Bubble Sort Kodlaması



5.4 Çok Boyutlu Diziler

Çok boyutlu bilgileri veya veri tablolarını saklamak için kullanılır. İki boyutlu diziler daha sık kullanılır. Örneğin; yıllara ve aylara enflasyon rakamının takibi, matematikteki matriş işlemlerinin gerçeklenmesi, öğrenciler ve aldıkları derslerin takibi.

Tanımlama biçimi : İki türlü yapılabilir.

Tip Değişken_Adı[ indis1 ][ indis2 ][ indisn ];

Örneğin ;

float Enf[5][12];

Enf tipi iki boyutlu bir dizidir. Birinci boyut ( satır ) yılları, ikinci boyut ( sütun ) ayları gösterir.


1.Ay 2.Ay 3.Ay 4.Ay 5.Ay 6.Ay 7.Ay 8.Ay 9.Ay 10.Ay 11.Ay 12.Ay
1
2
3
4
5



C dilinde boyut sayısında bir sınır yoktur. Biligisayarın belleği boyutu sınırlar.

Dizilerin bellekte saklanma biçimi :
Erişimin kolay olması için dizinin tüm elemanları peşpeşe saklanır. Burada önce satır sonra sütunlar (tanımlanış sırasına göre) saklanır .

!!! Çok boyutlu dizileri bir işleve gönderirken ilk boyut dışındaki boyutların büyüklüklerini vermek zorunludur.

Örnek : İki boyutlu dizi üzerine.

#include <stdlib.h>

#define SATIR 5
#define SUTUN 5

double enbuyuk(double [][SUTUN], int );
void matris_oku(double [][SUTUN]);

main()
{
double a[SATIR][SUTUN];
double b[SATIR]; /* satirlardaki en buyuk elemanlar */
double c[SATIR]; /* satirlardaki sutunlarin toplami */
int i, j;

matris_oku(a);

for (i = 0; i < SATIR; i++)
b[i] = enbuyuk(a,i);

/* Satirdaki elemanlarin toplamlarinin olusturdugu matris */
for (i = 0; i < SATIR; i++)
{
c[i] = 0;
for (j = 0; j < SUTUN; j++)
c[i] = c[i] + a[i][j];
}

clrscr();

for (i = 0; i < SATIR; i++) {
for (j=0; j<SUTUN; j++)
printf("%3.0f ", a[i][j]); /* Biçimli yazdırma */

printf(" %4.0f %4.0f\n",b[i],c[i]);
}

}


double enbuyuk(double a[][SUTUN], int sat)
{
double r;
int i;

r = a[sat][0]; /* ilk eleman en buyuk */
for (i = 1; i < SUTUN; i++)
if (a[sat][i] > r)
r = a[sat][i];
return r;
} /* Function EnBuyuk */

void matris_oku(double a[][SUTUN])
{
int i, j;

for (i = 0; i < SATIR; i++)
for (j = 0; j < SUTUN; j++)
a[i][j] = random(10);
} /* matris_oku */




Örnek : Bir kare matrisin

o. Matrisin simetrik olup olmamasını sınayan program
o. Matrisin transpozesini bir diğer matrise kopyalayan program
o. İki matrisinin çarpımını gerçekleştiren program
o. köşegeninin alt kısmındaki elemanları sıfırlayan yöntemi,
o. Determinantını hesaplayan fonksiyonu,
o. M<=P ve N<=Q olmak üzere A matrisi MxN ve B matrisi PxQ boyutlarındadır. B matrisi içerisinde A matrisininin olup olmadığı belirlenecektir. A matrisinin B matrisi içerisinde kaç kez bulunduğunu ve bunların B matrisi içerisinde başlangıç konumlarını (satır ve sütun olarak) veren programı yazınız.
o. MxN elemanlı bir matrisi tek boyutlu bir diziye dönüştüren program
o. P elemanlı bir diziyi MxN boyutlu matrise dönüştüren program (P sayısı M ve N e tam bölünür).

/* Program Matris-2 */

#include <stdlib.h>

#define SATIR 3
#define SUTUN 3


void matris_oku(int [][SUTUN]);
void matris_yaz(int [][SUTUN]);
int simetrik(int [][SUTUN]); /* matrisin simetrikliğini sınar */
void transpoze(int [][SUTUN], int [][SUTUN]); /* 2. = 1.nin transpozesi */
void matris_carp(int [][SUTUN], int [][SUTUN], int [][SUTUN]); /* 3 = 1*2 */
/*
alt_ucgen_sifirla(a);

matris_yaz(a);
printf("------------------------\n");

transpoze(a, b);


matris_yaz(b);

matris_carp(a, b, c);

printf("------------------------\n");

matris_yaz©;

if (simetrik(a))
printf("Simetriktir\n");
else
printf("Simetrik değildir\n");


*/

getch();

}

void matris_oku(int a[][SUTUN])
{
int i, j;

for (i = 0; i < SATIR; i++)
for (j = 0; j < SUTUN; j++)
a[i][j] = 1 + random(5);
} /* matris_oku */

void matris_yaz(int mat[][SUTUN])
{
int i, j;

for (i = 0; i<SATIR; i++) {
for (j = 0; j<SUTUN; j++)
printf("%3d ",mat[i][j]);
printf("\n");
}
}
int simetrik(int a[][SUTUN])
{
int i,j;
int durum;

durum = 1; /*simetrik olduğunu varsay */


for (i = 0; i<SATIR; i++)
for (j = 0; j<SUTUN; j++)
if (a[i][j] != a[j][i]) {
durum = 0;
break;
}

return durum;
} /* simetrik */

void transpoze(int a[][SUTUN], int b[][SUTUN])
{
int i, j;

for (i = 0; i<SATIR; i++)
for (j = 0; j<SUTUN; j++)
b[i][j] = a[j][i];
}

void matris_carp(int a[][SUTUN], int b[][SUTUN], int c[][SUTUN])
/* c = a * b */
{
int i, j, k;

for (i = 0; i<SATIR; i++)
for (j = 0; j<SUTUN; j++) {
c[i][j] = 0;
...

Bu konuyu yazdır

  FTP
Yazar: x_FB_cagri - 10-05-2006, 22:45 - Forum: Webmaster Alanı - Web tasarımı, web programlama vs - Yorum (5)

FTP
FTP Nedir?
FTP (File Transfer Protocol) Internete bağlı bir bilgisayardan diğerine (her iki yönde de) dosya aktarımı yapmak için geliştirilen bir internet protokolü ve bu işi yapan uygulama programlarına verilen genel addır. İlk geliştirilen internet protokollerinden biridir. FTP protokolü ile bir başka bilgisayardan bir başka bilgisayara dosya aktarımı yapılırken, o bilgisayar ile etkileşimli-aynı anda (on-line) bağlantı kurulur ve protokol ile sağlanan bir dizi komutlar yardımıyla iki bilgisayar arasında dosya alma/gönderme işlemleri yapılır.
FTP yapmak için neler gerekir?
FTP yapmak, bir bilgisayara FTP protokolü ile bağlanmak eylemini anlatan yarı Türkçe yarı İngilizce bir deyimdir. FTP yapmak için,
bağlanacağımız bilgisayarın internet adresi (nümerik ya da sembolik formatta)
bağlanacağımız bilgisayarda dosyalarına ulaşmak istediğimiz hesapla ilgili kullanıcı numarası ve varsa şifresi
Internet erişimi olan, üzerinde FTP yazılımı bulunan bir bilgisayar
bağlanacağımız bilgisayarda, FTP protokol komutlarını yorumlayacak çalışır durumda bir FTP Servis programı (FTP Sitesi)
gereklidir.

FTP ile nasıl bağlantı sağlanır?

Bağlantı, tanıtıcı adı (host name) veya internet numarası kullanılarak iki biçimde yapılabilmektedir. Ancak uygulamada daha sık olarak tanıtıcı adı kullanılmaktadır. Bağlantının yapılabilmesi için; ftp bağlanılmak istenen tanıtıcı ad formatı kullanılmaktadır. Bir makinayla olan bağlantıyı kapatıp diğer bir makinaya bağlanmak için önce close ile bağlantı kesilip, open makina ismi ile yeni bağlantı kurulur. FTP ile bağlantı kurulduktan sonra temel Unix komutları kullanılarak işl emler yapılmaktadır.
FTP nasıl yapılır? Temel FTP komutları nelerdir?
Genel kullanım : ftp <ftp yapılacak makinanın adresi> şeklindedir. Bundan sonra, ilgili bilgisayara bağlanıldığında, kullanıcı numarası ve parola (password) sorulur. Daha sonra da, o kullanıcının makinasına baglanılmış olur. Bu şekilde, etkileşimli bir ortamda, (genellikle ftp> ile gösterilir) bazı komutlar verilerek iki makina arasında dosya işlemleri, ayrıca bağlanılan makinada bazı temel dosya/disk işlemleri (dizin açma, dosya silme vb) yapılabilir. Bazı temel FTP komutları ve kısa tanımları aşağıda listelenmiştir.:




Standart FTP komutları :
cd : Dizin değiştirme (cd <dizin adı>) (cd .. : bulunulan dizinden bir öndekine geçme)
pwd : Bulunulan dizinin ismini verir
dir : Bulunulan dizindeki dosyaları listeleme
ls : Bulunulan dizindeki dosyaları kisa olarak listeleme (Örnek kullanımlar : ls -lr : ayrıntılı, tersten alfabetik listeleme; ls -lr |more : sayfa sayfa listeleme (dizin içinde cok fazla sayıda dosya varsa bu kullanım oldukça yararlıdır))
get : Dosya alma (get <dosya_adı> (<alındıktan_sonraki_adı>). (<alındıktan_sonraki_adı> seçimliktir, kullanılmayabilir. Bu durumda dosya_adı aynen kullanılacaktır.
put : Dosya gönderme (put <dosya_adı> (<göndereceğimiz_yerdeki_adı>)
mget : Birden fazla dosya almak istendiğinde kullanılır. Örnek kullanımlar: mget *.zip, mget a*.* vb..
mput : Birden fazla dosya göndermek istendiğinde kullanılır.
ascii : Dosya aktarımlarında aktarım modu olarak ASCII kullanılacağını belirtme.
binary: Dosya aktarımlarında aktarım modu olarak BINARY kullanılacağını belirtme. Arşiv dosyaları (zip, arj, z, zoo, hqx vb), calıştırılabilir programlar (.exe, .com), resim formatlı programlar (gif, jpeg vb) FTP ile alınmadan/ya da gönderilmeden önce mutlaka bu komut verilmelidir.
delete: FTP yapılan yerde bir dosyayı silme (delete <dosya adı>, eğer yetkiniz varsa kullanabileceğiniz bir komuttur) mkdir : FTP yapilan yerde yeni bir dizin oluşturma (mkdir <dizin adı>, eğer yetkiniz varsa kullanabileceğiniz bir komuttur)
rmdir : FTP yapılan yerde boş bir dizini silme (rmdir <dizin adı>, eğer yetkiniz varsa kullanabileceğiniz bir komuttur) help : Kullanılabilecek komutlar ile ilgili bir yardım ekranı çıkarır.
lcd : FTP ortamından çıkmadan, kendi makinanızda dizin değiştirmenizi olanaklı kılar.
close : FTP ortamından çıkmadan, sadece ilgili bağlantıyı kapatmak için kullanılır.
quit : FTP ortamından çıkmak ve bağlantıyı kapatmak için kullanılır (bye komutu da aynı işi görür).
Bazı FTP merkezleri, tüm bir dizini sıkıştırarak gönderme kabiliyetine sahiptir. Söz gelimi, linux isimli bir alt dizini, GET linux linux.zip şeklinde sıkıştırılmış olarak alabiliriz. Ancak, bu özellik her FTP merkezinde olmayabilir.


Kütük transferi

Internet aracılığı ile kütük transferinin yapılması için get,mget, put ve mput komutları kullanılmaktadır. Ancak transfer edilecek kütük tipine bağlı olarak, transfer tipinin seçilmesi gerekmektedir. Internette iki tür transfer tipi vardır.

Ascii: Bilgisayarlar arasında text kütüklerinin transferi için uygundur.

Binary: Text içeren veya içermeyen imaj ya da program kütüklerinin transferi için kullanılır. Uzantısı z, Z, exe, zip, tar, com, sys, gz veya ps olan kütükler binary tipinde alınmalıdır. Burada z, Z, zip, tar, gz uzantıları o kütüğü n sıkıştırılmış olduğunu ps ise o dosyanın Postcript yapıda olduğunu gösterir. Uygun programlar ile bu kütüklerin transfer işleminden sonra açılmaları gerekmektedir.

Bu komutların kullanımı için iki örnek verilmiştir.
ftp> ascii
200 Type set to A. Ascii Kütük Transferi
ftp> get news.txt
200 PORT command successful.
150 Opening ASCII mode data connection for news.txt (42390 bytes).
226 Transfer complete.
42553 bytes received in 6.9 seconds (6 Kbytes/s).

ftp> binary
200 Type set to I. Binary Kütük Transferi
ftp> get news.zip
200 PORT command successful.
150 Opening BINARY mode data connection for news.txt (42390 bytes).
226 Transfer complete.
42390 bytes received in 7.2 seconds (5.8 Kbytes/s).
Kütük transferi yapılırken, "wildcard" denilen joker karakterlerin de kullanımı
mümkündür. Örneğin;
ftp>mget news*
yazılacak olursa içinde news kelimesinin bulunduğu tüm kütüklerin kopyalanmak istendiği anlaşılacak ve tek tek bu kütüklerin istenip istenmediği sorgulanarak kopyalama yapılacaktır. Eğer bu kütüklerin sorgulama yapılmadan taşınması isteniyorsa "prompt" ko mutu verilmelidir. Tekrar bu komut verilene kadar yapılacak tüm kopyalama işlemleri sorgusuz gerçekleştirilecektir. Veri transferi sırasında sıkıştırılmış kütüklerin kullanımı hem maddi hem de zaman açışından dikkate değer kazançların doğmasına yol açmaktadır. Ancak sıkıştırılmış kütüklerin hangi anlama geldiği daha doğrusu hangi programla eski haline getireleceğinin bilinmesi gereklidir. Aşağıda uzantılarına bağlı olarak sıkıştırılmış kütüklerin açılmalarına yönelik bilgiler verilmiştir.










İstenen FTP Tabanını Bulma (archie)

İstenen bir dosyayı (veya programı) ve ait olduğu FTP tabanını bulmanın en kolay ve çabuk yolu archie komutunu kullanmaktır. McGill üniversitesinde geliştirilmiş olup, kamuya açık ftp kullanımına izin veren arşivlerdeki kütük isimlerini bir veri tabanında tutan ve bunun sorgulamasını yapan bir sistemdir. Veri tabanı periyodik olarak güncellenmekte ve McGill de bulunan ana server yardımıyla diğer serverlerin uyumlu olması sağlanmaktadır. Archie komutu ile 1000'in üzerindeki anonymous FTP kaynağı taranarak, 100 gigabytes civarındaki bilgi kontrol edilmektedir. Bu komut ile kullanıcının verdiği isme uyan dosyaların bulunduğu kaynaklar seçilip, sıralı biçimde özetlenir. İstenirse yapılan arama işlemi bir text dosyasında saklanabilir. Bilgilerin bulunduğu list eler ayda bir yenilenerek güncelliği sağlanmaktadır. Kullanımı için, archie -paremetreler anahtar kelime yapısı kullanılmaktadır. Burada kullanılabilecek parametrelerden bazıları aşağıda kısaca listelenmişitir. Burada ki parametreler kullanılan bilgisayarın türüne ve archie programının özelliklerine bağlı olarak farklılıklar göstermektedir. Windows ortamında çalışan programlar kullanıldığı zaman bu parametreler ikonlar halinde yer almaktadır.

o: Sorgulama sonuçlarının saklanacağı dosya adı (tüm yazılımlarda desteklenmez)
l: Sorgulama sonuçlarının her bir satıra bir sonuç gelecek biçimde özetlenmesini sağlar.
s: Taramada büyük/küçük harf ayırımı yapmaz.
c: Taramada büyük/küçük harf ayırımı yapar.
e: Verilen anahtar kelime ile tamamen uyan isimleri tarar. Büyük/küçük harf ayırımı yapar.

Örnek: Aranmak istenilen dosyanın adı vine.tar.Z olsun,
$ archie vine.tar.Z
Host athene.uni-paderborn.de
Location: /local/X11/more_contrib
FILE -rw-r--r-- 18854 Nov 15 1990 vine.tar.Z
Host emx.utexas.edu
Location: /lpub/mnt/source/games
FILE -rw-r--r-- 12019 May 7 1988 vine.tar.Z
Host export.lcs.mit.edu
Location: /contrib
FILE -rw-r--r-- 15548 Oct 90 00:29 vine.tar.Z
biçiminde arama sonuçları listelenir.

















FTP Dosyalarının İndirilmesi

Internetin en popüler kullanımlarından biri de dosya indirmek yani Internetteki bir dosyayı kendi bilgisayarınıza aktarmaktır. Bu dosyalar birçok değişik tipte olabilir. Kendi bilgisayarınızda çalıştırabileceğiniz programlar; grafik dosyaları, dinleyebileceğiniz sese ve müzik dosyaları ya da okuyabileceğiniz metin dosyaları. Her gün Internetten onbinlerce dosya indirilir. Bunların çoğu kısaca FTP ile kendi bilgisayarınızdan Internet üzerindeki başka bilgisayara da dosya gönderebilirsiniz.

FTP diğer çoğu Internet kaynağı gibi client/server modeliyle çalışır. Internetteki bir FTP serverına bağlanmak için FTP client (kullanıcı) yazılımını çalıştırmanız gerekir. FTP serverında, FTP daemon (cin) denilen bir yazılım dosya indirmenizi ve göndermenizi sağlar.


Bir FTP sitesine girmek ve dosya indirmek için daemonun giriş izni vermesini sağlamak için bir hesap numarası (ya da kullnıcı adı) ve şifre girilmesi gerekir. Bazı siteler herkesin siteye girip, dosya indirmesine izin verirler fakat hesap numarası (ya da kullanıcı adı) ve şifre yine de girilmelidir. Genelde bu sitelere girmek için kullanıcı aıd olarak “anonymous” (isimsiz) şifre olarak da e-mail adresinizi kullanırsınız. Bu yüzden böyle sitelere anonymous FTP siteleri denir. Bazı FTP siteleri özeldir ve sadece doğru hesap
numarası ve firesi olan belirli kişilere giriş izni verirler.

FTP kullanmak oldukça basittir. Bir FTP sitesine yüklendiğinzde, mevcut dosyalar arasında directoryleri değiştirerek ilerleyebilir ve her directorydeki mevcut dosyayı görebilirsiniz. İndirmek istediğiniz bir dosya ile karşılaştığında, kullanıcı yazılım ile FTP serverına komut vererek bu dosyayı göndermesini sağlayabilirsiniz.

World Wide Web’in popüleritesi arttıkça yazılım indirmek daha da kolaylaşmaktadır. Web browser kullanılarak dosyalara olan bağlantılara tıklanır, fakat perde arkasından dosyaları indiren yine FTP ’dir. FTP Web’den ve Interneten dosya indirmenin hala en çok
kullanılan yoludur. Web’in HTTP protokolü de dosya indirmek için kullanılabilir. Fakat FTP kadar yeterli olmadığından sıkça kullanılmaz.

Internetten dosya indirmede ortaya çıkan bir problem, bazı dosyaların büyük olması ve bu dosyaların indirilmesinin çok uzun zaman almasıdır. 28.800 bps hızda bile dosya indirmek çok yavaş olabilir. Dosya transferlerini hızlandırmak ve FTP üzerinde yer tasarrufu yapmak için kullanılan yöntem sıkıştırmadır. (özel yazılımlar kullanarak dosyanın boyutlarını küçülmek). Dosya sıkıştırmak için birçok değişik metod kullanılabilir. Dosya tipine bağlı olarak, dosyalar % 10 ila 50 arasında bir oranda sıkıştırabilir. Dosyaları indirdikten sonra sıkıştırma yazılımı kullanarak, indirdiğiniz sıkıştırlmış dosyayı yeniden eski haline getirmeniz gerekir. Böylece o dosyayı kullanmak mümkün olur.









ANONYMOUS FTP nedir?
FTP işlemi sırasında, güvenlik olarak, bağlanacağımız makinadaki kullanıcı numarası (User Name) ve parola (Password) bilgilerini bilmemiz gerekir (Program, bunları bize sorar). Bağlanılan makina, kişiye özel ve parolasını sadece bizim bildiğimiz bir makina olabileceği gibi, herkese açık bir arşiv merkezi de olabilir. Böyle merkezlere herkesin kolayca erişip dosya almasını sağlamak için tek tip bir kullanıcı numarası tanımlanmıştır: anonymous ya da ftp
Bu merkezlere ftp yapıldığında kullanıcı ismi olarak anonymous (ya da ftp) girildiğinde, bizden parola olarak KENDİ E-POSTA ADRESİMİZİ girmemiz istenir. Parola yazılırken GÖRULMEZ. Bu sizi sakın şaşırtmasın !!! Þifre olarak kesinlikle kullandığınız bilgisayarın şifresini GİRMEYİN!
verilebilir. Burada, şifre olarak e-mail adresinin girilmesi genellikle istatistiksel amaçlar içindir. Web üzerinden yapılan anonymous FTP'lerde şifre girilmesine gerek kalmaz.

































Aşağıda, ftp.metu.edu.tr (ODTÜ Arşivi)'ye yapılan örnek bir anonymous ftp görülmektedir. Kullanıcının yazdığı komutlar koyu renk, diğerleri açık renk verilmiştir.
---------------------------------------------------------------------------------------------------------
ftp ftp.metu.edu.tr
Connected to 144.122.1.101, port 21
220 rorqual FTP server (Version wu-2.4(4) Mon Nov 14 12:52:17 MEST 1994) ready.
USER (identify yourself to the host):ftp
>>>USER ftp
331 Guest login ok, send your complete e-mail address as password.
Password: ******
>>>PASS xxxxxx 230-##########################################################################
230-## Welcome to the Middle East Technical University Archive ## 230-##########################################################################
230-
230-Hello ftp@term4.cc.itu.edu.tr !
230-You are the 12. anonymous user.
230-Maximum number of users allowed is 100.
230-Mirrored sites are placed under the directory /pub/mirrors
230-This archive is maintained by ftpload@ftp.metu.edu.tr
230-
230- ATTENTION!
230-
230- You can reach this archive via FSP at port 21.
230-
230- We have some aliases for directory names: `quote site alias' will list them
230- Also, you can reach these directories via `cd alias-dir' command
230- independent of your current location; e.g.,
230- `cd gnu' instead of `cd /pub/2mirrors/gnu'.
230-
230-
230-
230 Guest login ok, access restrictions apply.
ftp>dir
>>>PORT 160,75,2,203,21,15
200 PORT command successful.
>>>LIST 150 Opening ASCII mode data connection for /bin/ls.
total 72
drwxrwx---  2 276     ftp-adm   512 May  1  04:59  adm
drwxr-xr-x  2 276     ftp-adm   512 Aug 23  1994   bin
drwxr-xr-x  2 276     ftp-adm   512 May  5  08:20  dev
drwxr-xr-x  2 276     ftp-adm   512 Nov 16  08:19  etc
drwxr-xr-x  2 276     ftp-adm   512 Aug 22  1994   lib
drwxrwx---  6 276     ftp-adm   512 Apr 11  11:40  log
drwxrwxrwx  2 root    system   1024 May  5  04:52  lost+found
drwxr-sr-x 18 276     ftp-adm   512 May 11  04:56  pub
drwxr-xr-x  3 276     ftp-adm   512 Aug 22  1994   usr
226 Transfer complete.
ftp>cd pub
>>>CWD pub
250 CWD command successful.
ftp>
Web üzerinden FTP nasıl yapılır?
Son zamanlardaki genel gidiş, tüm Internet servislerine daha becerikli ve etkileşimli ortamlardan erişilmesi ve farklı servislerin etkileşimli olarak kullanılması şekilde kendini göstermektedir. Bu ortamlardan en popüleri Web (World Wide Web) 'dir. FTP de dahil olmak üzere pek çok internet servisi ve ilave pek çok özellik bu ortamlar üzerinden kullanılabilir. Dolayısıyla, FTP yapmanın bir diğer yolu da, Web üzerinden FTP yapmaktır. Bu yöntem hem kullanım açısından daha kolaydır (komutları ezberlemek /bilmek zorunda değilsiniz) hem de daha efektif sonuçlar alırsınız. Binary bir dosyayı, yanlışlıkla, standart FTP programları ile kolayca ASCII modda almanız mümkün. Bu gibi sakıncalar Web üzerinden yapılan FTP'lerde ortadan kalkmaktadır. Ayrıca, Bookmark ve cache gibi faydalı özelliklerinden dolayı da bu ortamların sağladıkları bazı kolaylıklar vardır. Çoğu Web istemcisinin sağladığı grafik ara birim özelliğini de unutmamak gerek. Böylelikle, söz gelimi standart resim formatlarında olan bir resim dosyasını aldığınız anda görüntüyü ekrana da gönderebilirsiniz. FTP yapmanın bu "farklı, kolay ve güzel" yolunu Web kısmında bulabilirsiniz.
VM/CMS üzerinden FTP yapıyorum. Anonymous FTP'lerde şifre olarak kendi e-mail adresimi veremiyorum. Problem nedir?
Problem, e-mail adreslerinde görülen "@" karakterinin default (varsayılmış) olarak VM sistemlerinde satır sonu (line end) karakteri olarak tanımlanmasindan kaynaklanıyor. FTP yapmadan once, "TERM LINEND OFF" komutunu verirseniz problem ortadan kalkacaktir. Bu komutu PROFILE EXEC dosyanızın içine ayrı bir satır olarak koyarsanız (bu durumda, tırnak icinde ('TERM LINEND OFF' olarak) vermenız gerekebilir) makinanızı heri açışınızda bu komutu yazmaktan kurtulursunuz.
Anonymous FTP yaparken bu gibi dertlerle uğraşmak ve ikide bir username ve password vermek istemiyorsanız aşağıdaki REXX ile yazılmış EXEC dosyayı "MYFTP EXEC" olarak kaydedin. Programda, queue "anonymous "userid()"@vm.cc.itu.edu.tr" satırında @ işaretinden sonra gelen vm.cc.itu.edu.tr yerine kendi domain adresinizi yazın.
MYFTP <ftp yapılacak makinanın adresi>
şeklinde daha rahat anonymous ftp yapacaksınız. (Username ve password girmek zorunda kalmayacaksınız).
------------------------> Buradan kesiniz <----------------------
/* MYFTP EXEC */
/* */
Parse Arg ftp_addr
If ftp_addr="" then signal help
queue "anonymous "userid()"@vm.cc.itu.edu.tr"
push "FTP "ftp_addr
exit
help: Say 'Kullanim Formati : MYFTP ftp-addresi'
------------------------> Buradan kesiniz <----------------------
VM/CMS üzerinden FTP yapıyorum. FTP yaptığım yerlerde bazı dosyaların isimleri çok enteresan. Bunları GET komutuyla nasıl alabilirim? (GET <dosya adı> komutu hata veriyor)
Bu problem, VM/CMS'in dosya isimlendirme sisteminin farklılığından kaynaklanıyor. VM için GET komut formatı :
GET <alinacak_dosya_adi> <alindigindaki_ismi.uzantisi.modu>
şeklinde verilebilir. Örnek olarak, bağlandığımız FTP arşivinden INDEX isimli bir dosyayi almak istersek, GET INDEX INDEX.TXT diyebiliriz. Bu durumda dosya, A diskinde INDEX TXT isminde saklanacaktır. sample-index.tar.Z isimli bir dosyayı da geçici olarak oluşturduğumuz T diskine almak isteyelim. Bu durumda uygun GET komutu; GET sample-index.tar.Z S_INDEX.TARZ.T olabilir. (Binary transfer etmeyi ve dosyanın orijinal formatının biçimini unutmayın!!!). Böylece ilgili dosya T diskine S_INDEX TARZ olarak kopyalanacaktır.
FTP yaparken, bir dosyayı nasıl almadan okuyabilirim ?
Bunu yapamazsınız. Bir dosyayı görüntülemek için onu transfer etmelisiniz. FTP ortamından çıkmadan, aldığınız bir dosyayı listeleyebilirsiniz. Bunun için, unix'te '!cat <dosya_adı>', vm/cms'te 'CMS type <dosya adı>' , dos için, '!type <dosya_adı>' kullanılır. Bu komutları FTP ortamından çıkmadan verin. Eğer Netscape, Mosaic vb gibi bir Web istemcisi ile FTP yapıyorsanız, programın "setup"ından transfer edilecek dosya tipi için bir listeleyici (viewer) program tanımlayarak (bu, txt dosya (metin dosyasi) için bir editör) dosya transferini doğrudan ekrana yönlendirebilirsiniz. Web sadece TXT dosyaların değil, diğer formatlardaki dosyaların da (ses, görüntü, video vb) transfer edilirken ekrana yönlendirilmesini sağlar.
İsmini bildiğim bir dosyanın hangi FTP merkezinde olduğunu nasıl bulabilirim?
Bu işi yapan sistem ARCHIE olarak adlandırılır. Archie ile binlerce herkese açık (anonymous) FTP merkezindeki milyonlarca dosyanın kayıtlı olduğu veri tabanları taranır ve aranan dosyanın (eğer varsa) hangi FTP merkezlerinde olduğu ilgili alt dizinleriyle birlikte sorgulayan kişiye bildirilir. ARCHIE, dünyada bulunan değişik Archie servislerine (Archie Servers) ARCHIE programı ile doğrudan, yine bu servis sağlayıcılarına Telnet ile doğrudan bağlanarak kullanılabilir ve sorgulama yapılır. Archie sorgulaması e-mail ile de yapılabilir. Kullanımı özetlemek gerekirse,
Yerel bir Archie programı ile ARCHIE kullanımı :ARCHIE eudora --> isminde eudora olan tum dosyalari/alt dizinleri bulunduklari FTP merkez isimleri ile birlikte listeler.
Gopher içinden Archie : Gopher içinden ilgili Menüyü bulur, gelen tarama menüsünde ilgili kelimeyi girerek tarama yaptırısınız. Tarama sonucunda ilgili nesneler bir menü olarak sunulur. Menüden secilen dosyalar ftp ile alınır.
Web içinden Archie : Bir kaç tane archie'yi destekleyen CGI formu var. Web icinden biraz daha yeteneklidir; archie sunucusunu, taramanın türünü seçebilirsiniz. tarama sonucunda gene ftp ile istediğiniz dosyayı alabilirsiniz.
e-mail ile Archie kullanımı : Archie servis saglayıcısına bir e-mail mesaji icinde 'help' komutu gönderilirse e-mail erişimi ile kullanılabilen komutlar hakkında bilgi alinabilir.
Telnet ile ARCHIE kullanımı : Archie servis saglayıcısına Telnet yaptıktan sonra, kullanıcı ismi olarak 'archie' girilmesi gerekir. Daha sonra, help komutu ile kullanılan komutlar hakkında bilgi alınabilir.
Bazı archie servisleri şunlardır : archie.internic.net, archie.rutgers.edu, archie.sura.net, archie.doc.ic.ac.uk, archie.funet.fi, archie.th-darmstadt.de, archie.uqam.ca, archie.ans.net
Ayrıca, web üzerinden de benzeri taramalar yapabileceğiniz iyi bir servis var: FTP Search. http://ftpsearch.ntnu.no/ftpsearch Bu servis, iyi bir kullanıcı arayüzü ve zengin seçenekleri ile, aradığımız programların bulunduğu siteleri ve dizin bilgilerini bize vermektedir.
http://www.shareware.com servisi de, benzer amaçlar için kullanılabilir.
FTP ile bir dosyayı alırken, herhangi bir nedenle, bağlantı kesildi. Daha sonra kaldığım yerden aktarıma devam edebilir miyim?
Özellikle düşük hızlı bağlantılarda ve modem ile yapılan bağlantılarda karşılaştığımız bir problem!. Dosya aktarımı yarım kalmışsa, kaldığınız yerden aktarıma devam etme şansınız herzaman olmayabilir. Standart FTP buna izin vermez. Ancak, bazı ftp siteleri "bu tip yarım aktarımlara" izin verebilir. Bu durumda, kullandığınız FTP programında da (reget, resume vb) benzeri komutlar varsa, aktarıma kaldığınız yerden devam edebilirsiniz. Eğer win95/nt altından bağlantı yapıyorsanız, CuteFTP (http://www.cuteftp.com) bu tip sorunlarınızı çözecektir. Ayrıca, BulletProof FTP de benzer işi yapar. Aynı zamanda, web (http) transferlerinizi de doğrudan bu program üzerinde yapabilirsiniz. Daha fazla bilgi için adresi : http://www.bpftp.com . Her iki program da, aynı zamanda, Raksnet Tucows arşivinden alınabilir (http://tucows.raksnet.com.tr/tucows/window95.html)
FTP yaparken dikkat edilmesi gereken hususlar var mı?
Tabii ki var!! Aşağıdaki hususlara dikkat etmemek çoğunlukla bir sürü boşa giden zamana mal olacaktır.
EXE, .ZIP vb gibi dosyaları BINARY aktarın (transfer edin). FTP'de (genellikle) varsayılan aktarım biçimi ASCII dir.
Anonymous FTP'de, bir directory içine girdiğinizde, genellikle, oradaki dosyaların isim, byte olarak büyüklük, tarih ve içeriğini belirten kısa açıklama satırlarının olduğu 'okubeni (readme)' dosyaları (bazen de INDEX dosyaları) vardır. Öncelikle bu ASCII dosyaları alıp okumak size çok yardımcı olacaktır.
Anonymous FTP'de, şifre olarak LÜTFEN e-mail adresinizi doğru olarak girin. Bazı FTP merkezleri, e-mail adresinin uygunsuz girilmesi (ya da girilmeyip boş geçilmesi) durumunda FTP yapmanıza izin vermemektedir.
Unix'te küçük/büyük harf ayrımı olduğunu her zaman akılda bulundurun. Özellikle, aktaracağınız dosyaların isimlerini tam yazın ve küçük/büyük harf ayrımlarına dikkat edip aynısını yazın.
Kullandığınız bilgisayarın işletim sistemine özgü kısıt/özellikleri de bilmekte fayda var. (yerel dosya adı vermeler, dosya içeriği görme vb gibi özellikleri kullanabilmeniz icin -söz gelimi, DOS işletim sisteminde, dosya adı ve uzantısı için birtakım kısıtlamalar var).



Anonymous FTP'de dosya gönderilmesi ve incoming dizininin kullanımı
FTP'de bağlandığımız makinaya dosya göndermek istersek, bunu PUT komutu kullanarak yapıyoruz. Anonymous FTP'lerde bağlandığımız makinaya bir dosya gönderme (yani yazma) hakkımız -genellikle- yoktur. FTP siteleri, kullanıcıların belli bir süre dosyalarını koyabilmeleri için bir dizin açmışlardır : bu dizinin adı incoming. genellikle kök (root) dizininde, ya da pub'ın altında (pub/incoming) olarak bulunur. Anonymous FTP lerde, sadece incoming dizinine yazma yetkimiz vardır. Buraya alt dizin açabilir, program kopyalayabiliriz (PUT ile). incoming özellikle, kullanıcıların internet'te buldukları ilginç programları başkaları ile paylaşabilmeleri için güzel bir ortam. Bazı sitelerde incoming kullanımı kısıtlanmış olabilir. Bu kısıtlamalar değişiktir. Dizin açma, dosya upload etme (gönderme), dosya silme, incoming içindeki dosyaları görme, incoming içindeki dosya sayısı ve uzunluk limitleri vb gibi özelliklerden bir kısmı ya da tamamı iptal edilmiş olabilir.
Incoming kullanımında uymamız gereken bazı kurallar var :
Herşeyden önce, incoming dizini herkesin kullanımına açık. Bu yüzden, fazla sayıda ve büyüklükte dosyayı bu alanda TUTMAMALIYIZ.
incoming'e koyduğumuz bir dosyayı bir süre sonra silmeyi unutmamalıyız. Ancak, başkalarının upload ettiği dosyalara dokunmamamız lazım.
incomin içinde lisanslı yazılımlar, uygunsuz dosyalar, prpoaganda içeren dosyalar vb bulundurmamalıyız.
Eğer bir program koymuşsak (söz gelimi unzip.exe), aynı isimde kısa bir açıklama dosyası da koyup programın kısa bir tanımını burada vermeliyiz (söz gelimi, unzip.txt -dosya içinde, pkzip.exe'nin ZIP dosyalarını açan bir DOS programı olduğunu söyleyebiliriz).
incoming'in uygunsuz kullanımına rastladığımızda, ilgili FTP Sitesi yöneticisine haber vermeliyiz.











Internet erişimim yok. e-mail ile FTP yapabilir miyim?
Evet, yapabilirsiniz. e-mail ile FTP komutlarının gönderildiği servisler vardır. Bu servisler, komutları mail gönderen kişinin adına işlerler ve sonucu mail ile kullanıcıya gönderirler. Eğer kullanıcı bir dosya istemişse, bu, genellikle, uuencode edilmiş olarak küçük parçalar halinde e-mail ile gönderilir (encode/decode hakkındaki bilgiyi "Elektronik Posta (e-mail)" kısmında bulabilirsiniz. Turkiye'de böyle bir servis var. Bu servisin adı 'Bilserv (Bilkent Mail Server)'. Bilserv Servisi Bilkent Üniversitesi'nde çalışmaktadır.
Bilkent Mail Server:
Mail server otomatik cevaplama yeteneği olan bir programdır. bilkent-server@bilkent.edu.tr, ve bilserv@bilkent.edu.tr, ya da mail-server@bilkent.edu.tr adreslerine bir dosya içinde gönderilen komutlara göre bazı bilgi ve/veya dosyaları belirtilen adrese gönderir. Program, komutları belirli bir syntax'ta beklemektedir; gönderilen dosya'yı okuduktan sonra şayet ciddi bir hata yoksa istenen bilgi ve/veya dosyaları gönderecektir. Program HER ZAMAN bir alındı mesaji (dosya içinde) gönderecektir: Hatanın nerede olduğunu ve cok kısa bir komut özeti gönderecektir.
Mail Server çok yetenekli bir programdır ve FTP yanında size dosya temelli pek çok hizmet sunar. Bilkent Mail Server hakkında daha ayrıntılı bilgiyi, 'bilserv@bilkent.edu.tr' adresine bir e-mail mesaji içinde HELP komutunu göndererek elde edebilirsiniz. Ayrıca,
send bilkent-arsiv.txt
end
satırlarını bu adrese gönderirseniz, Bilserv'i ve Bilkent Arşivlerini anlatan bir dökumana da erişebilirsiniz.
Grafik Arabirimli FTP ne demektir?
Klasik anlamda FTP yaparken, klavye ile bir takım komutlar yazarız. Son yıllarda geliştirilen bazı programlar kullanıcının bu komutları vermesine gerek kalmadan grafik bir ara birim ile daha kolay FTP yapmasına olanak tanırlar. FTP komutları ya pull-down/pop-up menülerden alınır; ya da tek bir fare tıklatması ile değisik FTP komutları icra edilir. Bu tip programlara bir örnek, PC/Windows altında çalışan, John Junod'un geliştirdiği WS_FTP'dir. (http://www.ipswitch.com 'dan alınabilir). Unix ortamında xftp/oftp/mftp, ftptool gibi programlar vardir. Gopher ve Web içinden yapacağınız FTP de bu tip FTP'lere benzer. Aşağıda, WS_FTP (sürüm 4.10) için klasik ekran düzeni görülmektedir. Sol taraftaki bilgiler yerel diske ait, sağ taraftakiler ise bağlandığımız yere aittir. Kullanıcı, menü sistemi yardımıyla dosya transferi ve bazı temel FTP operasyonlarını gerçekleştirir.




Bir FTP seansı nasıl yürütülür?

FTP , birçok diğer Internet kaynağı gibi client/server modeliyle çalışır. Bu durumda FTP ’yi kullanmak için bir client (kullanıcı) programın kendi bilgisayarınızzda çalışması gerekir. Bir FTP seansına başlamak için bilgisayarınızdaki kullanıcı programı çalıştırır ve indirmek istediğiniz dosyaların bulunduğu FTP serverıyla kontak kurarsınız. FTP kullanıcı yazılımını temin edebileceğiniz yüzlerce yer vardır. Bunlardan biri de ZDNetin http://www.hotfiles.comdaki yazılım kütüphanesidir.

FTP deamon’u (cin) FTP serverı üzerinde çalışır. Bu deamon bütün FTP muamelelerini halleder. FTP kullanıcı bir serverla kontak kurduğu zaman, deamon bir hesap numarası ve şifre sorar. Birçok FTP sitesi herkesin giriş yapmasına ve dosya indirmesine müsaade eder. Bu tür FTP ’lere anonymous FTP denir. Ananymous (isimsiz) FTP’lerde hesap numarası yerine “ananymous”, şifre yerine de e-mail adresi kullanılır. Bazı FTP clientleri, FTP serverına bağlanıldığında bu işlemi otomatik olarak yaparlar.

Bir FTP serverına giriş yaptığınzda, command link (komut hattı) denilen bir bağlantı, server ve bilgisayarınız arasında kurulur. Bu hat sizin servera komut göndermenizi sağlarken, serverın da size bilgi ve mesaj göndermesini sağlar.

FTP serverındaki directorylerin değiştirilmesi istendiğinde kullanıcı yazılımınız komut hattını kullanarak FTP deamonuna bir emir gönderir. Deamon directoryi değiştirir ve komut hattı üzerinden o directorydeki dosyaların listesini gönderir. Bu dosyalardan birini
indirmek istediğinizde bu talep yine komut hattından iletilir.
Bir dosyayı indirmek için komut verildiğinde veril hattı (data link) denilen ikinci bir bağlantı kurulur. Bu bağlantı iki modda olabilir: ASCII ya da binar modu. ASCII modu metin dosyaları göndermek içindir ve satır boşluklarıyla, satır başlarında değişiklik olabilir. Binar
modu binar dosyaları değişikliğe uğramadan gönderir.

Dosya serverdan bilgisayarınıza veri hattı üzerinden indirilir. Dosya indirildikten sonra veri hattı otomatikman kapanır. Dosya indirilip veri hattı kapadıktan sonra komut hattı açık kalmaya devam eder. Böylece başka directorylere bakıp başka dosyalar indirebilir. İşiniz bittiğinde, çıkış yaparsınız ve komut hattı kapanır. Artık FTP serverıyla olan bağlantı kesilmiştir.


















Dosya sıkıştırma

Sıkıştırma programları dosyaları küçülmek için algoritma-kompleks matematiksel formüller- kullanırlar. İlk aşamada algoritma sıkıştırılacak dosyayı inceler, tekrarlanmış veri desenleri arar.

Algoritma tekrarlı veri desenleri bulduğunda bunları daha ufak “işaret”lerle değiştirir. Fazla miktarda tekrarlı veri desenleri olan dosyalarda daha çok işaret olacağından bu dosyalar orijinalinden çok daha küçük bir boyuta sıkıştırabilirler.

Dosyaya istenirse bir başlık da eklenebilir. Bu başlıkta, dosya adı, dosya büyüklüğü ve sıkıştırma metodunu belirten bilgiler bulunur. Bu bilgiler dosyayı yeniden eski haline sokup, yeniden yapılanmasını sağlarken kullanılır.

PC’ler için olan PKZIP gibi bazı sıkıştırma yazılımları, birkaç sıkıştırılmış dosyayı bir araya getirerek arşiv dosyaları yaratabilirler. Ayrıca UNIX komutu olan TAR kullanılarak birçok dosya tek bir arşiv de birleştirilir.

Internette bulunduğunuz sıkıştırılmış bir dosyayı kullanmak için önce bunu Internet üzerinden kendi bilgisayarınıza transfer edin.

Bu dosyayı kullanabilmek için bunu eski haline getirecek bir yazılım gerekir. Bu yazılım başlığa bakar ve dosyadaki işaretleri (token) inceler. Bir açma algoritması kullanarak orijinal dosyayı, bilgisayarınızda kullanabileceğiniz şekilde yeniden oluşturur.

Dosya uzantıları dosyanın sıkıştırılmışsa nasıl sıkıştırıldığını belirtir.

Big Grin Big Grin Big Grin Big Grin Big Grin Big Grin Big Grin Big Grin Big Grin Big Grin Big Grin Big Grin Big Grin Big Grin Big Grin Big Grin Big Grin

Bu konuyu yazdır

  A'dan Z'ye Java
Yazar: x_FB_cagri - 10-05-2006, 22:38 - Forum: Java Script - Yorum Yok

A'dan Z'ye Java

Java sayesinde; animasyonlar, kayan yazılar, web sayfalarında chat, hesap makinesi, oyunlar, şifreleme programları, interaktif web sayfaları, müzik, kelime işlemci, küçük internet appletleri, kocaman paket programlar, resim işleme programları, tercüme programları, sipariş sistemleri, saatler, yazım kontrol programları yapılabilir.
HTML'de Java
Bir applet hazırladığınızda, bunu bir HTML dökümanına yerleştirmelisiniz. HTML 3.2 ile birlikte, Java appletlerin kullanılmasını sağlayan iki yeni eleman çıktı. Bunlar APPLET ve PARAM. Diğer HTML elemanları gibi bu iki elemanın da birçok özellikleri mevcuttur. Fakat ideali, sadece gerekli olan özelliklerin kullanılmasıdır.
APPLET Elemanının kullanılması
APPLET elemanı, HTML dökümanına yerleştirdiğiniz appletin tanımlanmasını ve özelliklerinin tanımlanmasını sağlar. Her HTML elemanı gibi, APPLET elemanının da bir başlangıç tagı <APPLET> ve bitiş tagı </APPLET> vardır.
APPLET elemanı için gerekli olan özellikler: CODE, WIDTH ve HEIGHT'tir. CODE özelliği kullanılacak appleti, WIDTH özelliği appletin genişliğini (pixel), HEIGHT özelliği ise appletin yüksekliğini (pixel) belirlemenizi sağlar. Aşağıda gerekli olan özellikleri ile bir appletin HTML dökümanına bağlanmış şeklini görüyorsunuz.
<HTML>
<HEAD>
<TITLE> Maximum Bilgi </TITLE>
</HEAD>
<BODY>
<APPLET CODE="maximumbilgi.class" WIDTH=300 HEIGHT=100>
</APPLET>
</BODY>
</HTML>
Yukarıdaki örnekte HTML dökümanı ve "maximumbilgi.class" adlı java appleti aynı dizinde bulunmalıdırlar. Þayet java appleti farklı bir dizinde ise, opsiyonel CODEBASE özelliğini kullanmanız gerekir.
CODEBASE özelliği, appletin bulunduğu URL‘yi belirtmenizi sağlar. Aşağıdaki örnek, yukarıdaki örneğin hemen hemen aynısıdır. Tek farkı, java appleti başka bir dizinde bulunduğu varsayılarak CODEBASE özelliği kullanılmıştır.
<HTML>
<HEAD>
<TITLE> Maximum Bilgi </TITLE>
</HEAD>
<BODY>
<APPLET CODE="maximumbilgi.class" CODEBASE=""http://www.maximumbilgi.com/java/classlar/"" WIDTH=300 HEIGHT=100>
</APPLET>
</BODY>
</HTML>
Diğer opsiyonel özellikleri şöyle sıralayabiliriz:
ALIGN
Appletin konumunu belirlemizi sağlar. Alabileceği değerler ABSBOTTOM, ABSMIDDLE, BASELINE, BOTTOM, CENTER, LEFT, MIDDLE, RIGHT, TEXTTOP, TOP'tır.
HSPACE
Appletin altında ve üstünde ne kadar boşluk bırakabileceğinizi belirleyebilirsiniz. HSPACE‘e vereceğiniz değer, pixel olarak işlenir. Örnek: HSPACE=10
VSPACE
Appletin sağında ve solunda ne kadar boşluk bırakabileceğinizi belirleyebilirsiniz. VSPACE‘e vereceğiniz değer pixel olarak işlenir. Örnek: VSPACE=20
ALT
Appletleri gösteremeyen browserlarda, appletin yerine alternatif bir yazı çıkmasını sağlayabilirsiniz.
NAME
Applete bir isim vermenizi sağlar.
PARAM Elemanının kullanılması
PARAM elemanı ile applete parametre gönderebilirsiniz. PARAM elemanının sadece başlangıç tagı vardır: <PARAM>. Applete göndermek istediğiniz her parametre için bir <PARAM> tagı kullanmalısınız. PARAM taglarını başlangıç tagı <APPLET> ile bitiş tagı </APPLET> arasına yerleştirmelisiniz.
Appletler, <PARAM> tagında belirtilen parametrelere "getparameter()" metodu ile ulaşırlar. <PARAM> tagının gerekli iki özelliği vardır. NAME ve VALUE. NAME özelliği ile parametrenin adı belirtilir ki "getparameter" metodu ile bu isme göre aranır. VALUE özelliği ise parametrenin değerini verir. Aşağıda, applette kullanılacak resmi, parametre ile girilen bir HTML dökümanı örneği verilmiştir.
<HTML>
<HEAD>
<TITLE> Maximum Bilgi </TITLE>
</HEAD>
<BODY>
<APPLET CODE="maximumbilgi.class" WIDTH=300 HEIGHT=100>
<PARAM NAME=Resim VALUE="logo.gif" >
</APPLET>
</BODY>
</HTML>
Java appletinde, resim parametresinin değeri; Resim_logo=getparameter("Resim") komutu ile okunur.
Veri Tipleri
Java'da her şey bir nesnedir. Tek istisna veri tipleridir. Java veri tipleri, bütün platformlarda standart büyüklüğe sahiptir. Bu standart Java'nın taşınabilirliğini sağlıyor. Aşağıda Java'da bulunan veri tipleri ve büyüklükleri listelenmiştir.

Veri tipi Büyüklük
byte 8-bit
short 16-bit
int 32-bit
long 64-bit
float 32-bit kayan nokta
double 64-bit kayan nokta
char 16-bit Unicode

Eğer C/C++ programcısı iseniz "unsigned" tipinin olmadığı dikkatinizi çekmiştir. Byte tipi ise C/C++'daki "char" tipinin yerini almıştır. Java'daki char tipi 16 bittir. Çünkü Java karakter verisinde Unicode karakter setini temel alır.
Unicode, uluslararası karakterleri destekleyen bir standarttır. Programlarınızın değişik platformlarda ve ülkelerde çalıştırılacağında Unicode çok uygundur. Yukarıdaki tabloda olmayan diğer bir veri tipi ise boolean'dır. Bir boolean, değişken numerik değere çevrilemez ve sadece iki değer alabilir. Bu değerler "true" ve "false" tur.
Literaller
Literaller, değişkenlere değer atamak için kullanılır. Integer'lara C/C++ benzer biçimde değer atanır. 25 gibi tamsayı atayabilirsiniz. Hexadecimal bir tamsayı atamak için, sayının önüne "0x" ifadesi koymanız gerekir. Örneğin, 15 sayısını hexadecimal olarak 0xF şeklinde atamalısınız. 8'lik tabanda bir sayı atamak için "0" ifadesini, sayının önüne koymalısınız.
Kayan noktalı sayıları ise direkt 5.2345 şeklinde atayabilirsiniz. Bunlar 32 bit float veya 64 bit double olarak saklanabilirler. Belirtmezseniz, varsayılan 64 bit double'dır. Belirtmek için yapacağınız tek şey, sayının arkasına float için F, double için D koymaktır. Örneğin 5.323 F veya 5.323 D.
Karakterler, tek tırnak içinde atanırlar. Örneğin 'a'gibi. Escape karakterleri için slash (\) kullanılır. Bunlar da tırnak içinde belirtilir. \t=tab, \n=satır atlama gibi. Stringler için çift tırnak kullanılır. "Maximum Bilgi" gibi. Satır atlaması yapmak istiyorsanız "Maximum Bilgi \n" kullanmalısınız.
Değişkenler
Java'da 3 tip değişken vardır: instance, class ve local. Lokal değişkenler, metodların ve blokların içinde tanımlanabilirler. Blok, "{" ile başlayan ve "}" ile biten ifadeler topluluğudur. Blok içinde tanımlanan lokal değişkenler, blok sonuna kadar geçerlidir. Genel formatı <tip> <değişken adı> şeklindedir. Örneğin double tipinde pi adlı değişkeni tanımlayalım: double pi; bir değer de atayabilirdik: double pi=3.1415.
Değişkenler; harf, sayı, dolar işareti, alt çizgi ile başlayıp bu karakterlerle devam edebilir. Ama komutlar, operatörler değişken ismi olarak kullanılamazlar.
Açıklamalar
Programlarınıza açıklama koymak için, Java'da kullanabileceğiniz iki stil vardır. Birincisi çift slash ( // ). Çift slash'tan satır sonuna kadar olan kısımda bulunan her şey açıklama olarak kabul edilir.
İkincisi ise slash ve yıldız ( /*) ile başlar yıldız ve slash ile biter. Bunlar arasındaki her şey, açıklama olarak kabul edilir. Örnek 1: double pi; // pi değişkeni double olarak tanımlandı. Örnek 1: /* Bu programın amacı sayısal loto tahmini yapmaktır.
Operatörler
Java'da bulunan operatörler aşağıdaki tabloda verilmiştir.

Kategori Operatör
Aritmetik + - * / %
İlişkisel < > >= <= == != && ||
Bit işlemeri & | ^ << >> >>> ~ &= |= ^=
Artırma ++
Azaltma --
 
Aşağıda iki değişken tanımlanıp, bunlara değer atanıyor. Daha sonra ise bu iki değişkenin içeriği toplanıyor:
int x,y ;
x= 3 ;
y=4 ;
int z=x+y ;
Z 'nin değeri yedidir. Operatörlerin öncelik sırası aşağıdaki tabloda gösterilmiştir.

[] ()
++ - ! ~
* / %
+ -
<< >> >>>
< > <= >=
== !=
& ^
|
&&
||
= ve diğerleri
Bit işlemleri

Ayrılmış Kelimeler
Aşağıdaki tabloda, Java'nın komutları olarak kullanılan kelimeler listelenmiştir. Bu kelimeler, Java için ayrılmıştır. Yani bu kelimeleri değişken ismi gibi şeyler için kullanamazsınız. Bunlar sınıf tanımlaması, değişken tipi belirleme, koşul, döngü gibi işlemler için kullanılır.

Abstract boolean
break byte
byvalue case
catch char
class const
continue default
do double
else extends
false final
finally float
for goto
if implements
import instanceof
int interface
long native
new null
package private
protected public
return short
static super
switch synchronized
this threadsafe
throw transient
true try
void while

Karşılaştırmalar
Karşılaştırmalar, genelde bir karşılaştırmanın sonucuna göre belirtilen komut veya komutları çalıştırırlar. Eğer birden fazla komut kullanılacak ise blok içinde olmalıdır. Tek bir komut için buna gerek yoktur. Örneğin; a değişkenin değerinin bir olup olmadığını kontrol ediyoruz. Eğer a=1 ise a=2, değil ise a=1.
Görüldüğü üzere karşılaştırma, boolean bir değer döndürmelidir. Yani true (doğru) veya false (yanlış) değerini döndürmelidir ki bu değere göre işlenecek komutlar belirlenebilsin. Java'da karşılaştırma yapmak için "if...else..." kullanılır. Formatı şu şekildedir:
if (karşılaştırma)
{ karşılaştırmanın sonucu
doğru ise işlencek komutlar
}
else
{ karşılaştırmanın sonucu
yanlış ise işlencek komutlar
}
Yukarıdaki örneği java formatında yazarsak :
if (a==1) // Java'da = operatörü atama için kullanılır.
// Karşılaştırma için == operatörünü kullanılır.
a=2;
else
a=1; // Tek komut olduğu için blok içine alınmasına gerek
yoktur.
Eğer birçok karşılaştırma varsa, iç içe karşılaştırmalar (if ) kullanılabilir. Sonucu nümerik olan karşılaştırmalar için "switch...case..." komutu kullanılır. Bu komut, sadece nümerik değerler için kullanılır. Formatı şu şekildedir:
switch (değişken)
{
case 1: // değişkenin değeri 1 ise
break;
case 2:{
// değişkenin değeri 2 ise
break;
}
default: // yukarıdaki değerler haricindeki değer ise
break;
}
Döngüler
Java 'da üç tane döngü işlemi vardır. "for" döngüsünün yapısı aşağıdaki şekildedir. for (ilk değer; test; değer artırma/azaltma) Bu yapıda görülen ilk değer ifadesi, değişkeninizin alacağı ilk değerdir. Test ifadesinde ise basit veya kompleks bir karşılaştırma kullanabilrisiniz. Değer arttırma veya azaltma ise değişkeninizin o anki değerini değiştirecek bir ifadedir. "for" döngüsünü örnek kullanımı:
for (sayac=0;sayac<3;sayac++)
Bu örnekte, sayaç değişkenine ilk değer olarak sıfır verilmiş ve her döngüde bir arttırılması istenmiş. Döngüden çıkma koşulu ise sayaç değişkeninin 3 ve daha yukarı değerleri olarak belirlenmiş. Bu durumda sayaç değişkeni 0,1,2 değerleri için döngüye girecektir. "for" döngüsünden sonra bir komut veya blok komutları gelebilir. "while" döngüsünün yapısı şu şekildedir: while (test). Test ifadesi "for" döngüsündeki ile eşdeğerdir. Örnek:
sayac=0;
while (sayac<3)
{
//komutlar
sayac++;
}
"do" döngüsünün yapısı:
do
{
//komutlar
} while (test);
"do" döngüsünün "while" döngüsünden farkı en az bir kere döngüye girmesidir.
Tüm döngülerde "break" komutu döngüden çıkılmasını, "continue" komutu ise bir sonraki değere geçmeyi sağlar.
Diziler
Java'da diziler nesnedirler, C'deki gibi hafızada yer kaplayan pointer değillerdir. Java 'da diziler, C 'ye göre daha güvenilirdir. Dizilerin elemanlarına gelişigüzel değerler atayamazsınız. Java, dizi elemanlarını sırasıyla kontrol eder. Dolayısıyla arada değer atanmamış bir elemana rastlanırsa hata oluşur. Bu da C'de çıkan hafıza bozulmalarını önler. Java'da dizi kullanmak için ilk önce dizinin tipi verilir. Tip verilirken dizinin büyüklüğü belirtilmez.
int numbers[]; // Integer diziler için
String myStrings[]; // String diziler için
Diğer metod ise tipin arkasına köşeli parantez koymaktır.
String[] myStrings; // String diziler için
İkisi de tanımlamada aynıdır. Her ikisi de kullanılabilir. Size hangisi daha kolay geliyorsa onu kullanın. Java dizileri örneklerden de görüldüğü üzere tüm veri tipleri için kullanılabilir. Sonraki adım ise dizinin "new" operatörü kullanılarak yaratılmasında, bu adımda dizinin büyüklüğü de belirtilir.
int numbers[] = new int[5]; // 5 büyüklüğünde integer dizi
String myStrings[] = new String[20]; // 20 büyüklüğünde string dizi.
Bu adımdan sonra diziler yaratılmış oldu. Dizinin her bir elemanına varsayılan değer atanır. Varsayılan değerler integer veri tipi için "0 (sıfır)", string veri tipi için "null" değeridir. Dizi elemanlarına bu adımdan sonra değer atamak çok kolaydır. C++ 'da olduğu gibi Java 'da da dizilerin elemanları sıfırdan başlayan tamsayı değerleridir. Dizinin ilk elemanına değer atamak için:
myStrings[0] = "ilk dizim";
numbers[0] = 10;
Java'da bir dizinin eleman sayısını (büyüklüğü) bulmak için "length" metodu kullanılır. Bu metodun döndürdüğü değer "int" tipindedir.
int boyut=numbers.length // boyut=5 olur
Java'da çok boyutlu diziler yoktur. Fakat bu tür diziler dizi içinde dizi oluşturularak simüle edilebilir.
int k[][] = new int[5][4]; // 5-4 boyutunda bir dizi
k[1][3] = 999; // Değer atama
Bilgi Alma ve Yazdırma
Ekrandan bilgi almak için BufferReader sınıfını kullanacağız. BufferReader giris=new BufferReader( new InputStreamReader (System.in)); Bu sınıfın readLine() metodunu kullanarak bilgiyi alıyoruz:
try {
String girilen=giris.readLine();
} catch (IOException e ) { System.out.prinln(e);}
try-catch bloğu olası bir hatayı yakalamak için kullanılıyor. Eğer bir hata oluşursa hatayı ekrana yazacak. Þimdi de girileni yazdıralım. Ekran birşey yazdırmak için System.out sınıfının println metodunu kullanacağız :
System.out.println ("Girdiğiniz şey : " + girilen );
println metodu ekrana verilen parametredeki yazıyı yazdıktan sonra imleci bir alt satıra geçirir. Þayet imlecin bir alt satıra geçmesini istemiyorsanız print metodunu kullanın. Ama bu metodu kullandığınızda ekrana bilginin çıkması için akabinde flush metodunuda kullanmalısınız. Þu şekilde :
System.out.print("Ali ");
System.out.flush();
Java Sertifikası
Java internet ortamına girdiğinde, javayı destekleyen browserlardaki buglar yüzünden çoğu kullanıcı java özelliğini kapatmak durumunda kalmıştı. Günümüzde javanın güvenliği artmış durumda. Bunda browserların buglarının azalmasının rolü olduğu gibi sertifika kavramınında büyük rolü vardır.
Sertikasız/İşaretsiz Appletler Neler Yapabilir?
Kullanıcıların bilgisayarında istenmeyen işlemlerin yapılmasını engellemek için, her browserın güvenlik sınırlamaları vardır. Bu güvenlik sınırlamasının türü browsera göre değişir. Günümüzdeki browserların java appletlerin için aşağıdaki güvenlik sınırlamaları vardır:
- Appletler kullanıcının bilgisayarından veri okumaz ve yazamazlar.
- Kullanıcının bilgisayarında program çalıştıramazlar.
- Ağ bağlantısı sadece appletin bulunduğu server ile kurulabilir.
- Sistem ayarlarını değiştiremezler.
Bu güvenlik sınırlamalarına bakıldığı zaman normal bir applet sadece grafik veya yazı gösterme, ses ve animasyon işlemlerini yapabilir. Büyük işler için normal appletler uygun değildir ki küçük bir veri girişi dahi olamadan dişe dokunur uygulama yapmak mümkün değildir.
Sertifikalı ve İşaretli Nedi?
Appletlerin web sayfalarını daha görsel hale getirmekten başka bir işe yaramadığı çabuk anlaşıldı. Ama daha fazlasını; mesela kulanıcıdan bilgi almak ve yazmak; yapabilmek için güvenlik sınırlamalarını kaldırmak gerekiyordu. Fakat bunun mümkün olduğu güvenli olması için, appletler yeni browserlar için işaretlenebiliyor.
Bunun için applet geliştiricisinin amacını belirten sertifaya ihtiyacı vardır. Sertifa browser okuyabileceği şekilde açıktır ve geliştiricinin adını ve kontrol kodu içerir. Bu sertifaka ile geliştirici appleti güvenli olarak işaretler. Başka hiç kimse bu sertifikayı kullanarak bir appleti işaretletyemez. Çünkü geliştirici appleti işaretlemek için sertifika ile birlikte verilen özel kodu kullanır.
Kullanıcı, appleti çalıştırdığında ( applet olan bir web sayfasını çağırdığında ) browser appletin işareti ile sertifikayı karşılaştırır. Böylece appletin işareti sertifaka ile uyumlu ise çalıştırır. Bu şu anlama geliyor: Doğru işaretli bir appletin geliştiricisini kullanıcı applet yüklenirken görür. Ama sadece applet yüklenirken.
İşaretli Appletler Neler Yapabilir?
İşaretli bir applet yüklendiğinde kullanıcının karşısına bir pencere gelir. Bu pencerede sertifika hakkında bilgiler vardır ve kullanıcı onayı istenir. Kullanıcı bu bilgiler ışığında appletin çalışmasına izin verir veya vermez. Kullanıcının çalışmasını onaylamış bir applet normal programların yapabildiği her şeyi yapabilir.
Bu Durumdaki Güvenlik
Buradaki problem onaylama işleminin ya hep ya hiç mantığında işlemesidir. Bunun anlamı onayladığınız bir appletin gerçek amacının dışındaki verileride okuyabildiği veya istenmeyen bir yere veri yazabildiğidir. Tam anlamıyla erişim haklarının belirlenmesi programcılara ağır geldiği için çoğu programcı tarafından yapılmıyor. Yine de Microsoft ve Netscape'in browserları için erişim haklarının değişik şekilde belirlenmesi karşısında programcılar minimum düzeyde erişim hakkıyle yetiniyorlar.
İkinci bir problem ise sertifikanın gerçekliğidir. Gerçek sertifikalar, programcı tarafından değil, programcının güvenilirliğine kefil olan şirketler tarafından oluşturulmuş sertifikalardır. Bu şirtketler para karşılığında sertifika oluşturmaktadır. Bir sertifika en az $200 başlayıp sertifikaya göre artmaktadır. Programcı yıllık olarak $100 başlayan fiyatlarıda ödemek zorundadır. Çoğu programcı için bu fiyatlar aşırı pahalı gelmektedir.
En azından herkes bedava kendi sertifasını oluşturabilir. Fakat böyle bir sertifa, programcının gerçekte kim olduğunu ve amacının doğruluğunu belirtmez. Hatta test sertifikaları diye anılanlar istenen herhangi bir isim ile oluşturulabilir. Her ne kadar insanı korkutsada, bilinmeyen bir shareware programı denemekten daha güvenlidir. Appleti onaylamak veya onaylamamak bizim elimizde değil mi?
Sertika Þirketleri
Gerçek sertifakalar sertifa şirketleri ( Certificate Authority kısa CA ) tarafından veriliyor. Bu şirketler programncının yada şirketlerin amacını kontrol ettikten sonra sertifika veriyorlar. En tanınmış sertifika şirketleri VeriSign, Thawte ve BelSign.
Her CA, vereceği sertifikaları kendi sertifikası altına tanımlar ki daha önceden güvenliğ belirlenmiş kendi sertifikaları gibi işlem grösünler. CA'lar kendilerine ait sertifikaları daha önceden browserlara tanımlanmış ve kurulmuştur. Maalesef bu şirketlerin verdikleri hizmetin bedeli yüksek. Bir defaya mahsus ücret $200 dan başlıyor, yıllık ücretler ise 100$ dan. Þuana kadar işaretli appletlerın yaygınlaşmamasının en büyük nedeni bu olsa gerek.
Test Setifikaları
Test sertifikası herkes tarafından beş kuruş ödenmeden oluşturulabilen sertifikalardır. Ama programcının amacını gerçek olarak ispatlamayan sertifikalar bunlar. Bu sertifikalarda browsera göre değişiyor. Bir Netscape ve birde Microsoft için oluşturmak gerekiyor. Sun'ın HotJava browserına hiç girmeyeceğim burda, belki ileride onuda ele alırım.
Microsoft Browser İçin Test Sertifakası
Microsoft browser sertifikası oluşturmak için, Microsoft'un sitesinden bedava indirebileceğiniz " Software Developer's Kit ( SDK) " e ihtiyacınız var. Bu yazılım kitinin içindeki programların tek tek indirilememesi tabii ki çok kötü bir durum. Bu kitin içindeki herhangi bir program için 20 MB büyüklüğündeki bu kiti indirmek zorunda kalıyorsunuz. Ama bu kiti CD olarakta sipariş edebiliyorsunuz.
Bu kit ile gelen ingilizce dökümantasyon tam olarak okunmalı, nitekim olmazsa olmaz birçok önemli parametre mevcut. Burada bu kitin içindeki DOS programlarıyla sertifika oluşturulmasını kısaca anlatmaya çalışacağım. Bu sadece başlangıç için yardım niteliğindedir. Gerisini dökümana bırakıyorum.
makecert ile Private/Public Key oluşturun. Sertifika için gerekli olan .cer uzantılı bir dosya oluşacaktır.
cerrt2spc ile sertifikayı oluşturun. Birinci adımda oluşturduğunuz .cer uzantılı dosyadan .spc uzantılı bir dosya oluşturur.
cabarc ile class dosyalarınızı cab dosyası haline getirin. Bu cab dosyası Internet Explorer tarafından indirilecek dosyadır.
Oluşturduğunuz cab dosyasını signcode ile işaretleyin. Bu işlem sırasında oluşturduğunuz .spc uzantılı dosyada kullanılacaktır.
Netscape Browser İçin Test Sertifakası
Netscape programcıların işini biraz daha kolaylaştırmış Microsoft'a göre, sertifika için gerekli olan "Signtool" uğraşmadan indirebilecek ve Microsoft'un kitine göre daha kolay kullanımı var. Signtool Win95 ve Unix sürümleri var. Kısaca adımlar:
signtool ile Private ve Public Key oluşturmak için -G parametresini kullanın.
Bu işlem ile x509.cacert adlı bir dosya oluşacaktır.
signtool ile class dosyalarınızı jar dosyası haline getirin.
Bu işlemleri batch dosyası ile de yapabilirsiniz.
JAVA PLUG-IN
Bundan birkaç yıl önce Sun, HotJava adlı web browserı piyasaya çıkardı. Sun'ın bu web browserı, Java'yı destekliyordu. Buda içine java nesneleri gömülebilen uygulamaların ilk örneğini teşkil ediyordu. Bunun ardından Netscape kendi web browserınada Java desteğini ekledi. Ardından da MS.
Gün geçtikce Java'nın yeni sürümleri çıktı. Bununla birlikte Netscape ve MS kendi ihtiyaçlarına uygun sınıf kütüphanelerini eklediler browserlarına. Böylece her browserın kendine özel JVM ( Java Virtual Machine ) 'i oldu. Dolayısıyla browserların içine gömülen JVM ile browserdan bağımsız olarak JVM 'i güncellemek imkansızdı.
Sun, herhangi bir ortamda Java'nın çalışabilmesi için gerekli olan her şeyi içeren ( Java VM ve sınıf kütüphaneleri ) JRE 'yi çıkardı. Eğer JRE bilgisayarınızda yüklüyse, herhangi bir uygulamaya ( örneğin browser ) gömülmüş java nesneleri çalışabiyor. Sorun, browserların sadece kendi JVM lerine bakmaları ve makinada yüklü olan JRE 'ye ulaşmak için bir mekanizmaya sahip olmamalarıydı. Sun olaya el attı : Java Plug-In
Sun'ın geliştirdiği Java Plug-In, JRE 'ye HTML sayfalarından browserı kullanarak ulaşmak için bir mekanizma. Java Plug-In, Sun'ın web sitesinden bedavaya indirilebiliyor. Sayfaya girildiğinde, istenen java sürümü kullanıcının makinasında yüklü değilse, kullanıcı Java Plug-In sayfasına yönlendirilir. Java Plug-In, Netscape'de plug-in olarak, IE 'de ise ActiveX Control olarak otomatik yüklenir.
Java Plug-In Kullanmak
Java Plug-In, Netscape'de EMBED, IE 'de ise OBJECT tagı sayesinde kullanılabilir. MIME tipi ile istenen java sürümünü belirtmelisiniz. Örneğin Java 1.2 sürümünün özelliklerini kullanan bir appletiniz varsa, MIME tipinde bunu belirterek appletinizin doğru çalışmasını sağlarsınız.

MIME Tipi Nesne Tipi / Sürüm
application/x-java-applet; Applet / Mevcut sürüm
application/x-java-applet;version=1.1 Applet / Java 1.1
application/x-java-applet;version=1.2 Applet / Java 1.2
application/x-java-bean; Bean / Mevcut sürüm
application/x-java-bean;version=1.1 Bean / Java 1.1
 
HTML sayfasına appletinizi geleneksel yöntemlerle koymak isterseniz, yani Java Plug-In kullanmak istemiyorsanız APPLET tagını kullanmanız gerekir. Java Plug-In kullanmak istiyorsanız;
Netscape için EMBED tagını kullanmalısınız :
<HTML>
<BODY>
<EMBED type="application/x-java-applet;version=1.1" width="200" height="200" code="Appletim.class" codebase="/appletler/" parametre1="2" pluginspage="http://java.sun.com/products/plugin/1.1/plugin-install.html">
<NOEMBED>
Applet Desteklenmiyor
</NOEMBED>
</EMBED>
</BODY>
</HTML>
PLUGINSPAGE ve TYPE alt tagını kullanmanız gerektiğini unutmayınız. Çünkü browser Java Plug-In yükleme sayfasını ve sürümü bilmesi gerekir. APPLET tagında kullanılan PARAM alt tagını bu durumda kullanmazsınız. Parametreleri direkt, örnekte görüldüğü gibi ( parametre1="2") direkt yazmalısınız.CODE, CODEBASE,WIDTH,HEIGHT gibi alt taglar APPLET tagında olduğu gibi kullanılır.
Internet Explorer için OBJECT tagını kullanmalısınız :
<HTML>
<BODY>

<OBJECT classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" width="200" height="200" codebase="http://java.sun.com/products/plugin/
1.1/jinstall-11-win32.cab#Version=1,1,0,0">
<PARAM NAME="code" VALUE="Appletim.class">
<PARAM NAME="codebase" VALUE="/appletler/">
<PARAM NAME="type" VALUE="application/x-java-applet;version=1.1">
<PARAM NAME="parametre1" VALUE="2">
Applet desteklenmiyor

</OBJECT>

</BODY>
</HTML>

Burada CODEBASE alt tagı gömülü nesnenin gerektirdiği ActiveX Controlünün yeridir. Java'ya ait codebase, type, code gibi taglar PARAM alt tagı ile belirtilir.
Netscape ve IE için farklı yöntemlerin kullanılması, her biri için ayrı web sayfalarımız olacağı anlamına gelmiyor. HTML kodu kullanarak her ikisi içinde geçerli bir sayfa hazırlayabilirsiniz. Fakat böyle bir HTML kodu yazmak için kendinizi kasmayın. Çünkü Sun, Java Plug-In ile beraber HTML Çeviricisi ( HTML Converter ) sunuyor. Bu çevirici sayesinde HTML sayfasında kullanılan APPLET tagları her iki browserda da kullanılabilecek şekilde çevriliyor.
Applet Neden Çalışmıyor?
Appletler, dinamik web tabanlı içerik için en ideal programcıklardır. Teorikte bir kere yaz, her bilgisayarda, her browserda ve her işletim sisteminde çalıştır; mantığını ileri süren Sun bunu "Bir kere yaz, her yerde çalıştır ( Run Once, Run Anywhere ) " sloganıyla lanse ediyor.
Pratikte, birçok java programcısı ve birçok kullanıcı Java appletlerinin başağrısına sebep olduğunu söylüyorlar. "Neden applet çalışmıyor ?" içerikli birçok mail geliyor.
Applet çalıştığı zaman tam çalışıyor, çalışmadığı zaman ise büyük bir sorun halini alıyor. Hatayı bulmak ve hatayı düzeltmek gerçekten başağrısına neden olabiliyor. Hatta Java ile program geliştirmeyi bu yüzden bırakanlar bile var. Değişik browserlar, browser sürümlerinin farklılıkları, hatta browser konfigürasyonlarındaki farklılıklar appletlerin çalışmasında rol oynayabiliyor. Browserlara gömülü Java Sanal Makinasındaki ( Java Virtual Machine ) buglar ve bilgisayarın performansıda etkili oluyor.
Þayet browser'ınız hiçbir appleti çalıştıramıyor ise, java applet ihtiva eden bir sayfayı çağırdığınızda takılıp kalıyorsa browser yazılımını tekrar kurmak çoğu zaman problemi ortadan kaldırıyor. Bu söz konusu değilde, gri bir dikdörtgenden başka bir şey göremiyorsanız bunun bir kaç sebebi olabilir.
Neden Gri Dikdörtgen?
Appletin yüklenmesi sırasında veya yüklendikten sonra çalıştırılması sırasında meydana gelen hatalardan dolayı oluşur. Java programlama dilinde bunun teknik adı "Exception" dır. Java'da hataları yakalama imkanı olduğunu biliyoruz, daha doğrusu bilinen çoğu hatayı desek daha iyi olur. Oluşan hatalar bilinmedik, beklenmedik hata veya appletden kaynaklanmayan hatalar olabildiği için bu hataları yakalama imkanı yok. Þimdi en çok karşılaşılan ve bilinen hataları inceleyelim :
Class dosyasına ulaşamama veya yükleyememe
Bilindiği gibi applet dediğimiz programcıklar, derlendikten sonra class dosyası halini alıyorlar. Appletlerin çalışması için bu class dosyalarının yüklenmesi gerekiyor. Þayet class dosyasının yeri bulunamaz veya dosya yüklenirken hata oluşur ise gri kutunun içinde class dosyasını bulunamadığına dair veya yüklenirken hata oluştuğuna dair bir hata mesajı çıkar ve applet çalışmaz. Applet çalışmadığı için, ki hata daha applet yüklenirken oluştuğu için, applet kodu içinden bu hatayı yakalamanız ve engellemeniz mümkün değildir. Bu hata çoğu durumda, <applet> tagı içinde class dosyasının bulunduğu yeri yanlış olarak belirtildiği zaman ortaya çıkıyor.
Ağ kaynaklarına erişememe
Bazı zamanlar ağ üzerinde bulunana server göçer veya herhangi bir sebepten bağlantı kurulamaz. Kullanıcı firewall arkasındadır ve Socket, DatagramSocket istekleri çalışmaz. Eğer ağ kaynaklarına erişim gerektiren bir applet yazıyorsanız, iletişim için TCP/UDP protokülü yerine HTTP protokülünü kullanın. Çünkü firewall arkasında olan kullanıcı sayısı gün geçtikçe artıyor. Karşılaşılan diğer bir hata sebebi ise, browserların appletler ile ilgili kısıtlamalarından kaynaklanıyor.
Appletviewer'da sorunsuz çalışan applet, browserda çalışmıyor. Applet sadece bulunduğu server ile bağlantı kurabilir. Birçok applet ise domain isimlerini IP adresine çevirirken hata oluşturuyorlar. Bunu önlemek için domain ismi yerine IP adresi kullanın.
Null Hataları
Çok karşılaşılan hatalardan biriside NULL hatalarıdır. Bu appletin kodundan kaynaklanan ve appletin çalışmamasını sağlayan bir hatadır. Bir değişkene bir nesne atarken, nesnenin değerinin Null ( değersiz ) olmamasına dikkat edin. Aşağıdaki örneği inceleyin:
Örnek:
String sayac = getParameter ("sayac"); //sayac parametresini al
if ( sayac == null ) // Eğer sayac null ise
sayac = "1"; // sayac değerini "1" yap.
Biraz dikkat ile, web sayfalarında önümüze çıkan gri dikdörgen kutucukları azaltabiliriz.

Bu konuyu yazdır

  Asus EAX1600Pro 0çin Sogutucu
Yazar: intikam44 - 10-05-2006, 20:25 - Forum: Donanım Teknik Destek - Yorum (1)

S.a
Ben Asus EAX1600Pro Ekarn karti aldim yalniz üzerindeki sogutucu hem yeterli degil hemde çok fazla ses çikartiyo Bu modele uygun bi ekran karti fani varmi ben biraz arastirdim ama zalman veya cooler master in hangi fanlarinin bu modele uyacagini bilmiyorum yardimci olursaniz sevinirim.

S.a

Bu konuyu yazdır

  Ekran kartı arıyorum 2, el
Yazar: x_FB_cagri - 10-05-2006, 19:19 - Forum: İkinci El Alınık - Yorum (7)

128 Mb ikinci el Agp8X ekran kartı arıyom..İstanbuldan olsun

Bu konuyu yazdır

  ADSL KOTA PROGRAMI
Yazar: x_FB_cagri - 10-05-2006, 18:40 - Forum: İndir (download) - Yorum (3)

ADSL KOTANIZI ÖÐRENMEK İÇİN DURMADAN TÜRKTELEKOMUN SİTESİNE GİRMENİZE GEREK YOK ADSL KOTA 3.2 PROGRAMI SİZİN BELİRLEDİÐİNİZ ARALIKLARLA KOTANIZ HAKINDA SİZE BİLGİ VERİYOR
http://www.adslbilgilendiricisi.com/home/

Bu konuyu yazdır

  türkiş linux anlayanlarına bir bakarmısınız?
Yazar: Erkan - 10-05-2006, 17:10 - Forum: Linux & Linux Yazılımları - Yorum (4)

arkadaşlar hdd te kurulu ntfs xp yüklü ben cd boot ettirerek türkiş yüklemek istiyorum ve kurulumu başlatıyor yokarıdan aşağıya kadar bir çok şeyleri geçerek tanıyarak bir noktaya geliyor probing device yazısı burda kalıyor ve kurulum bitmiyor.bir çare varmıdır ne istiyor acaba.teşekkürler

Bu konuyu yazdır

  dmsn
Yazar: tantumi - 10-05-2006, 17:09 - Forum: Online İletisim Araclari - Yorum (6)

arkadaşlar dmsn yi duymuş olduğunuzu farzederek engelleyeni nasıl buldunuz hakkında yardımlarınıza ihtiyacım var şimdiden saolun

Bu konuyu yazdır

  Microsoft Xbox 360 HD DVD'si ile fuarda
Yazar: çoltilkisi - 10-05-2006, 13:53 - Forum: Teknoloji - Yorum Yok

Microsoft E3'te standlarında ve düzenlediği konferanslarda Xbox360'ın HD DVD versiyonunu tanıtıyor. Blu-Ray kullanan PS3'e karşı çıkarılacak yeni versiyonun PS3 çıkış tarihiyle aynı anda piyasaya sunulacağı bildiriliyor. Birçok analist Microsoft ile Sony arasındaki rekabetin arkasında konsollardan ziyade HD DVD ve Blu-Ray savaşının yattığını savunuyor.

Microsoft'un Live platformunun geliştireceği de gelen haberler arasında. "Live Anywhere" adlı sistem Xbox Live özelliklerini daha da öteye taşıyacak. Böylece konsol Windows Vista işletim sistemine sahip her türlü PC ve notebookla ayrıca Windows Mobile kullanan tüm cep telefonlarıyla doğrudan bağlantı kurabilecek.

Bu konuyu yazdır