Gönderen Konu: Pascal'da char değişken tipi  (Okunma sayısı 1550 defa)

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

Çevrimdışı asi kaptan

  • Deneyimli Üye
  • *
  • İleti: 332
  • Rep Gücü : 205
  • Cinsiyet: Bay
  • "Oyun bitince, şah da piyon da aynı kutuya konur''
    • Profili Görüntüle
    • İLLEGALPC
Pascal'da char değişken tipi
« : Ağustos 04, 2009, 12:45:05 ÖÖ »

Char Degişken Tipi

String degiskenler 255 karakterlik veri alabiliyordu. Char ise tahmin edeceginiz gibi daha fazla karakter almiyor! Char tipinde bir degisken yanlizca bir adet karakter alabilir ve bir byte yer kaplar hafizada. Yine string tipindeki gibi deger atamasinda iki apostrof isareti arasina en fazla 1 karakter olabilecek sekilde yazilir. Örnek bir program yapalim daha iyi anlariz.

Program Char_Tipinde_alistirma;Uses crt;varc: char;isim: string;a: byte;beginclrscr;write('Yine adinizi girin bakalim....: ');readln(isim);write('Simdi en fazla ',length(isim),' olacak sekilde sifindan büyük bir sayi giriniz: '); readln(a);c:=isim[a];writeln('Sizin isminizin ',a,'. harfi "',c,'"');readln;end.
Bu örnek simdiye kadar yaptiklarimizin en karisigi gibi gözükebilir ama biraz dikkat ederseniz anlayacaginiz kesin. clrscr; komutuna kadar olan yeri biliyorsunuz. Ondan sonra isim adli degiskene ekrandan (daha sonra ayrintili olarak anlatacagimiz sekilde) bilgi girilmesi isteniyor. Ondan sonra yazilan write ifadesinde bilmedigimiz birsey var. Length fonksyonu bir string tipli ifadenin kaç karakter uzunlugunda oldugunu verir. Bunu da daha sonra anlatacagiz. Ondan sonra c:=isim[a]; ifadesinde c adli char degiskene isim degikeninin a. karakterini atiyoruz. Mesela isminiz "Osman" ise ve a degerine de 3 girdiyseniz c:= ifadesinin karsisindaki deger 'm' olur. Yani c degiskeninin degerine 'm' harfini (karakterini) atamis oluruz. Programi birkaç defa çalistirarak daha iyi anlayabilirsiniz.
Tabii bu sekilde bizim pek isimize yaramayabilir ama özellikle bir char tipindeki degiskeni readkey komutuyla kullanilarak faydalanabiliriz. Bunlara ilerde deginecegiz.
Bunlarin disinda su anda hemen kullanamayacak olsak da diger tiplere de kisaca deginelim.
Boolean Tipli degiskenler:

Degeri ya TRUE (dogru) ya da FALSE (yanlis) olabilen degiskenlerdir. Mantiksal karsilastirmalarda kullanilabilir. Hafizada 1 byte alan kaplar.
Bundan sonraki tipdeki olan dizi ve record tipleri için sonraki derslerde özel bir bölüm açip anlatacagi çünkü kullanim alanlari çok genis.
Dizi (Array) tipli degiskenler:

Dizi degisken genelde benzer bilgileri bulunduran degiskenlerdir. Örnek verirsek daha iyi anlasilir. Önceki programlarimizin birisinde hatirlarsaniz bir ögrencinin üç notunun ortalamasini bulmustuk. Peki 1 degil de 100 ögrenci varsa ne olacak. Her birisi için üç not ve bir ortalama olmak üzere 4 degisken tanimlarsak toplam 400 degisken tanimlamamiz lazim. Bu hem çok uzun zaman alir, hem de degisken isimlerini birbirine karistirmamiz olasidir. Bunun yerine 100 ögrencinin 3'er notunu ve ortalamasini sadece 2 degisken kullanarak kolayca tutabiliriz. Bunun için degisken tanimlarimiz

Varnotlar: Array[1..100,1..3] of byte;ortalama: Array[1..100] of real;
seklinde olmalidir. Simdilik bunlari nasil kullanacagimiz fazla deginmeden geçelim çünkü diziler diye ayri bir bölümde hepsini anlatacagim.
Kayit (Record) tipli degiskenler:

Simdiye kadar bir ögrencinin adi, notlari ve ortalamasi için ayri degiskenler kullandik. Peki bunlarin hepsini bir ana degiskenin alt degiskenleri olarak tutsak daha kolay ve anlasilir olmaz mi? Özellikle bu tip degiskenler dosyalama konusunda çok isimize yarayacak. Genel olarak tanimlamasi su sekildedir:

Typekayit_tipi=Recorddegiskenler...end;
Varkayit_adi = kayit_tipi;
Gördügünüz gibi bu tip bir degiskeni tanimlamak için type etiketini kullaniyoruz ve yeni bir tip olusturuyoruz ilk önce. Sonra bir degiskeni tipi bu olacak sekilde tanimliyoruz. Hemen örnek bir program yazalim. Bunu kendi ellerinizle yazmalisiniz (ben de hep öyle yapiyorum):

Program Filiz;uses crt;typeogrenci_tipi=Recordisim: string[40];not1: byte;not2: byte;not3: byte;orta: real;end;Varogrenci: ogrenci_tipi;Begin clrscr;write('Isminiz:');readln(ogrenci.isim);writ e('1. Sinavin sonucu:');readln(ogrenci.not1);write('2. Sinavin sonucu:');readln(ogrenci.not2);write('3. Sinavin sonucu:');readln(ogrenci.not3);ogrenci.orta:=(ogre nci.not1+ogrenci.not2+ogrenci.not3)/3;write('Ortalamaniz: ');write(ogrenci.orta);readln;end.
Gördügünüz gibi kayit tipindeki bir degiskenin alt degiskenini nokta ile ayirarak kayit_degiskeni.alt_degisken seklinde yaziyoruz. Isterseniz with deyimini kullanarak alt degisken isimlerini direk de kullanabilirsiniz:

yastik;uses crt;typeogrenci_tipi=Recordisim: string[40];not1: byte;not2: byte;not3: byte;orta: real;end;Varogrenci: ogrenci_tipi;Begin clrscr;with ogrenci do beginwrite('Isminiz:');readln(isim);write('1. Sinavin sonucu:');readln(not1);write('2. Sinavin sonucu:');readln(not2);write('3. Sinavin sonucu:');readln(not3);orta:=(not1+not2+not3)/3;write('Ortalamaniz: ');write(orta:5:2);end;readln;end.
Bu iki program de birbirinin aynisi islemleri yapar. With Türkçe'de "ile, beraber" demektir. Simdilik bu record tipinin üzerinde fazla durmayalim. Dosyalar konusunda ayrintili olarak görecegiz zaten.