Hackrogroups

PASCAL GİRİŞ / ÇIKIŞ KOMUTLARI

09.05.2010 14:03

 

 

Konuya geçmeden önce kısaca birkaç şeyden bahsetmek istiyorum. Bundan önceki yazılarda anlatılanlar aşağı yukarı tüm programlama dillerinde aynı prensiplere dayanır. Bu yazıyla birlikte Pascal programlama diline özel komutları göreceğiz. Her ne kadar ben, Pascal ’a özel dediysem de elbette ki bu komutların bazılarının diğer dillerdeki komutlara benzediğini görebilirsiniz.

Bu komutlar anlatılırken, komutun procedure veya function mı olduğunu belirtilecek, ayrıca [ ] iki köşeli parantez içinde yazanlar bu bilginin kullanılmasının zorunlu olmadığı anlamına gelecektir. | işareti ise iki veya daha fazla seçenekten birinin seçileceğini belirtmek amacıyla kullanılacaktır. Eveeet, artık konumuza dönebiliriz.


Kullanıcının programa bilgi girmesini, dosyadan ve bellekten bilgilerin okunmasını ve program içindeki bilgilerin ekranda gösterilmesini, dosyaya, belleğe bilgi yazılmasını, yazıcıya bilgi gönderilmesini sağlayan komutlara giriş / çıkış komutları diyoruz. Şimdilik sadece ekrana bilgi yazdırmayı ve kullanıcının ekrana girdiği bilgiyi okumayı göreceğiz. Dosyadan, yazıcıdan vs. bilgi okunmasını ve yazılmasını ileriki konularda daha detaylı ele alacağız. Bu komutları kullanabilmek için programınızın başında bu komutlara ihtiyaç duyduğunuzu belirtmelisiniz. Bunu “uses crt;” (windows için wincrt kullanmalısınız) komutuyla hallettikten sonra geriye bir problem kalmıyor.


A)READ – READLN (Procedure):

Read([dosya değişkeni],değişken1,değişken2,....,değişkenN)

Readln([dosya değişkeni],değişken1,değişken2,....,değişkenN)

dosya değişkeni: Bilgi okunacak dosyanın adını tutan değişken.

Her ne kadar bu iki procedure aynı işi yapıyor gibi görünse de aralarında fark var. Readln, bilgi girişi yapılması için programın akışını geçici olarak durdurur ve giriş yapıldıktan sonra programın kaldığı yerden devam etmesini sağlar.

Read komutuyla birden fazla değişken bilgisi almak problem oluşturabilir çünkü alfa sayısal değişkenlerin tanımlandıkları uzunlukta, sayısal değişkenlerin ise başlangıcında ve bitiminde birer boşluk bırakılması gerekmektedir. Bu yüzden biz, Read komutu yerine Readln komutunu kullanacağız. Birden fazla değişken bilgisi alırken değişkenler arasına virgül koymak yeterli olacaktır.

Ayrıca Readln komutunu tek başına kullanırsanız, programın akışı enter tuşuna basılıncaya kadar durdurulur. Enter tuşuna bastıktan sonra, program kaldığı yerden işlemlere devam edecektir. Bunu daha çok Turbo Pascal editöründe yazdığınız kodları derlerken kullanabilirsiniz. Böylece programınızın sonuçlarını ekrandan daha rahat takip edebilirsiniz. Aksi halde programın işlenmesi biter bitmez hemen editöre geri dönersiniz ve eğer programınız ekranda bir şeyler gösteriyorsa göremezsiniz. Yazdığınız programın en sonuna bu komutu eklemeniz yeterli olacaktır.

Konuyla ilgili birkaç örnek verelim;

var
a,b:integer;
Begin
Readln(a);
Readln(b);
.........
.........
Readln;
End.
{ a ve b değişkenlerinin değerlerini kullanıcının }
{ klavyeden girmesini sağlıyoruz. Daha sonra bu }
{ değişkenlerle ne istersek yapabiliriz. End. den }
{ önceki readln komutuyla da programın tüm işlemleri }
{ bitirdikten sonra beklemesini sağlıyoruz ki ne olmuş }
{ ne bitmiş görelim. }

 

B) WRITE – WRITELN (Procedure):

Write([dosya değişkeni],değişken1,değişken2,değişkenN
[:alan uzunluğu:ondalık uzunluğu]);

Writeln([dosya değişkeni],değişken1,değişken2,değişkenN
[:alan uzunluğu:ondalık uzunluğu]);

dosya değişkeni: Bilgi yazılacak dosyanın adını tutan değişken.
Alan uzunluğu: Sayısal ifadelerin toplam hane sayısı.
Ondalık uzunluğu: Sayısal ifadelerin ondalıklı kısmının uzunluğunu belirten ifade.

Bu iki komut da aynı gibi görünüyor fakat farklılıkları olan komutlar. Write komutu işlemini bitirdikten sonra bir alt satıra geçmez. Kursör yazılan bilginin sonuna konumlanır. Writeln komutuyla bilgi yazdırıldıktan sonra kursör bir alt satıra geçer.

Yazılmak istenen mesajlar ‘’ apostrof (shift + 2 tuş kombinasyonu) işaretleri arasına yazılır. Bu işaretin içine yazılan bilgiler olduğu gibi ekranda gözükür. Birden fazla bilgi yazdırmak istersek mesajların yada değişkenlerin arasına virgül koymak yeterli olacaktır.


Eğer Writeln komutunu tek başına kullanırsanız kursör hiçbir şey yazmadan bir alt satıra geçecektir. Ayrıca bu komut içinde matematiksel işlemleri de yapabilirsiniz. Eğer bu işlem bölmeyse veya işleme giren değişkenlerden birinin tipi real ise bu işlemin sonucunu formatlı olarak yazdırmak daha anlaşılır olmasını sağlayacaktır. Örneklerle açıklamak daha kolay olacaktır sanırım;

Write(‘Merhaba ‘);
Write(‘dünyalılar.’);
Write(‘Biz dostuz!’);
{ Bu komutların yaptığı işi tek bir komutla yapabilirdik }
{ Bize göstereceği mesaj Merhaba dünyalılar.Biz dostuz! }

Write(‘Merhaba demiştim ama’);
Writeln(‘ neyse tekrar merhaba.’);
Writeln(‘Burası’,’ çok’,’ sessiz.’);
Writeln;
{ Merhaba dünya demiştim ama neyse tekrar merhaba. }
{ Burası çok sessiz. }
{ }
{ Bu komutlar ekrana yukarıdaki mesajı yazdırıyor. }
{ Sanırım Write ile Writeln arasındaki fark anlaşıldı}

Writeln(2134);
{ Bu komutla ekrana 2134 yazdırırız. Dikkat ettiyseniz }
{ apostrof işaretini kullanmadım. Bu da yazdırılan }
{ bilginin sayısal bir bilgi olduğunu gösteriyor. }

Writeln(2134:4);
Writeln(2:4);
Writeln(21:4);
Writeln(213:4);
Writeln(2134:4);
{ 2134 }
{ 2 }
{ 21 }
{ 213 }
{ 2134 }
{ Tam sayı ifadesinin 4 hane içinde sağa dayalı }
{ olarak yazdırılmasını sağladık. }

Writeln(12*5+4-2);
{ Komutun içindeki matematik işlemleri yapılır ve }
{ ekrana 62 yazdırılır. }

Writeln(‘İşlemin sonucu= ’,12*5+4-2);
{ Bu sefer ekrana İşlemin sonucu= 62 yazdırılır. }

Writeln(15.5*3);
{ Bu komut ekrana 4.6500000000E+01 yazdırır. }
{ Bunun ne anlama geldiğini herkes anlamayabilir. }
{ Bu yüzden bu bilgiyi anlaşılır hale getirip yazdıralım }

Writeln(‘12345678901234567890’);
Writeln(‘Sonuç : ’,15.5*3:8:3);
{ İlk baştaki komutu bize referans olsun diye koydum. }
{ Bu referansı ekranınızdaki sütunlar olarak düşünün }
{ Programın işlenmesi sonucunda şöyle bir sonuç çıkar }
{ 12345678901234567890 }
{ Sonuç : 46.500 }


En son örnekte gördüğünüz gibi Writeln komutunun içindeki matematiksel işlemlerden sonra :8:3 diye iki ifade yazdık. Bunlardan ilki ondalıklı kısım dahil toplam hane sayısını, ikinci kısım ise ondalıklı hane sayısını belirtiyor. Toplam Hane sayısını hesaplanırken tam sayı kısım ile ondalık kısmı ayıran nokta da dahil edilmelidir.

Bizim örneğimizdeki gibi ondalıklı kısımda sadece tek rakam varsa ve bu alana ayrılan hane sayısı fazla ise geri kalan haneler sıfır ile doldurulur. Birkaç örnek daha versem iyi olur sanırım;

Writeln(‘1234567890’);
Writeln(10.111*3:8:3);
{ 1234567890 }
{ 30.333 }

Writeln(‘1234567890’);
Writeln(10.111*3:8:2);
{ 1234567890 }
{ 30.33 }

Writeln(‘1234567890’);
Writeln(10.113*3:8:3);
{ 1234567890 }
{ 30.339 }

Writeln(‘1234567890’);
Writeln(10.111*3:8:2);
{ 1234567890 }
{ 30.34 }

İlk iki örneğimizde yaptığımız işlem 10.111x3=30.333. Bu işlemin sonucunu ilk örnekte ondalıklı hane sayısı 3 olarak yazdırıyoruz. İkinci örnekte ise aynı işlemin sonucunu ondalıklı basamak sayısı 2 olarak yazdırıyoruz. Her iki sonuçta da ondalıklı kısımdaki sayıların değerleri değişmiyor.

Son iki örnekte ise yaptığımız işlem 10.113x3=30.119. Bu işlemin sonucunu üçüncü örnekte hane sayısı 3 olarak, dördüncü örnekte hane sayısı 2 olarak yazdırıyoruz. Ancak ondalıklı kısımdaki üçüncü basamak 5’den büyük olduğu için ikinci basamağı büyüterek 3 yerine 4 yazıyor.


Şimdiye kadar öğrendiklerimizle ufak programlar yazabiliriz. Size tavsiyem, ne kadar işe yaramaz gibi görünse de bu tip ufak programlar yazın. Bence bir dili iyi ve çabuk öğrenmenin yolu o dili çokça kullanmaktan geçer.

program faktoriyel_hesabi;
uses crt;
var
n,f,i:longint;
Begin
f:=1;
Write('Faktoriyel Hesabi Icin Sayi Giriniz(n!) : ');
readln(n);
for i:=1 to n do
begin
F:=f*i;
end;
writeln('Girilen Sayi(n!)..:',n);
writeln('Sonuc.............:',f);
readln;
end.

Bu programcık ile kullanıcıdan bir sayı girmesi isteniyor ve girdiği sayının faktoriyeli hesaplanıp ekrana yazdırılıyor. Siz de bu tip programcıklar yazabilirsiniz. Şimdiden kolay gelsin.

 

 

Geri

Sitede ara

Copyrıght by HACKRO.© 2010-2011 All rıght reserved.