Turbo Pascal 7.0 Öğr. Gör. İrfan MACİT Endüstri Mühendisliği Bölümü Üretim Yazılımları Laboratuarı Adana,2002 Giriş Kaynak Kodlar Object Kodlar Hata Kontrolü Hatasız Object Kodlar Derlenmiş Kodlar Çalıştırılabilir Kodlar (*.exe, *.com) .... (Enter) Giriş cd c:\turbo\bin (Enter) Turbo (Enter) Menuler Kısa yol tuşları Alt Menuler Pascal Program Genel Yapısı Her Program program prog_adı; İle başlar. Örneğin, program merhaba; program merhaba(input, output); program deneme; program deneme (input, output); bildirimleri aynıdır. Değişken atama, var değişken; şeklindedir. Örnek Kaynak Kodlar program Hello (Input, Output); {Her pascal bilgisayar programın üç kısımdan oluşur.} var { 1. Kısım değişken tanımlama bloğu,burada değişkenler tanımlanır} Letter1, Letter2, Letter3 : Char; {üç karakter tanımlanmış} sayi: integer; {2. Kısım, fonksiyon ve alt program tanımlama bloğu, burada programın ana bloğu içerisinde kullanılacak fonksiyon ve alt programlar yazılır.} begin {3. Kısım programın ana bloğu, program bloğu başlar } WriteLn (‘Programam üç adet karakter ve bir sayı girin >'); ReadLn (Letter1, Letter2, Letter3); WriteLn (‘Merhaba ', Letter1, Letter2, Letter3, sayi); WriteLn (az önce klavyeden bunları yazdınız...‘') end. {program bloğu biter} Değişkenler ve Fonksiyonlar Pascal bilgisayar programlama dilinde değişkenler yazılan bilgisayar programına veri göndermek ve sonuç almak için kullanılırlar. Fonksiyonlar program içerisinde tanımlanan ve hesaplanan bir değeri sadece bir kez kullanan program parçacıklarıdır. Fonksiyonlar tek başlarına derlenemez ve kullanılamaz Alt Programlar (procedure) Alt programlar programın içerisinde kullanılacak verilerin birkaç defa ve her defasında ayrı sonuç alması beklenen durumlarda kullanılır. Alt programlar da fonksiyonlar gibi tek olarak derlenemez ve çalıştırılamaz. Alt programlar (procedure() ) ve fonksiyonlar (function() ) ana program bloğu içerisinden çağrılırlar. Program Tanımlama Bloğu Pascal bilgisayar programında program tarafından kullanılacak çevre değişkenlerine ait bildirimler ve programın çalışması sırasında hangi çevresel birimleri nasıl kullanacağını gösteren bildirimdir. – – – – – – – Uses Label Type Const Procedure Function var Pascal Programlamada Önemli Hususları Program prog_adı ile başlar. Programda kullanılacak değişkenler var kısmında tanımlanmalıdır Program içerisinde değişmeyen sabitler Const kısmında tanımlanır Programın ana bloğu begin ile başlar ve end. ile biter. Fonksiyon ve alt programlar end ile biter sadece programın kendi end ifadesinde nokta vardır. Begin ifadesinden sonra ; kullanılmaz Türkçe karakterler programın bildirim ve komut durumlarında parametre olarak kullanılmaz. Açıklama { ... } içerisinde program ile ilgili açıklamalar yapılır ve Türkçe karakterler kullanılabilir. Değişken Bildirimleri (Integer) Tam sayı değişkenlerinin tanımlanması var değişken_adı : integer; Tam sayı değişkenleri program içerisinde pozitif veya negatif tam sayı kullanılacağı durumlarda tanımlanır Boyutları Tip shortint Integer Longint byte word Sınır -128, 127 - 32768, 32767 -2147483648, 21474483647 0,255 0,65535 Büyüklük 8 bit 16 bit 32 bit 8 bit 16 bit Değişken Bildirimleri (Real) Real türü değişken tipi ondalıklı sayıları program içerisinde kullanmak gerektiğinde tanımlanır var maas :Real; Tip Real Single Double Extented Sinir 2.9e-39,1.7e38 1.5e-45,3.4e38 5.0e-324, 1.7e308 3.4e-4932,1.1e4932 Büyüklük 6 byte 4 byte 8 byte 10 byte Değişken Bildirimleri (String) String türü değişken veri tipinde program içerisinde kullanılarak karakter dizisi şeklindeki türler için kullanılır. var evet, hayır : string; Karakter kümesi için tanımlama var adı, soyadı: string[15]; Değişken Bildirimleri (Char) Char türü değişken veri tipinde program içerisinde kullanılarak tek karakter şeklindeki türler için kullanılır. var cevap:char; Değişken Bildirimleri (Programcı tipi) Programcı türü değişken veri tipinde program içerisinde programcı tarafından tanımlanarak kullanılacak türler için kullanılır. Programcı tarafından tanımlanan bu türdeki veri tipleri diğer veri tipleri gibi tanımlanacak olan değişkenleri tanımlamakta da kullanılır. İlkel nesne tabanı olarak bilinir. Değişken Bildirimleri (Programcı tipi) Type type gunler = (Pazartesi, Sali, Carsamba, Persembe, Cuma); aylik_gun = 1..31; var calis_gun : gunler; aylik_hesap_gun: aylik_gun; Diziler Birden fazla değer alabilecek değişkenlerin içeriğinde değer saklamak için kullanılan değişken tipidir. Vektörler, Matrisler, sayi küpleri. Type multidim = array[index] of veri_tipi; Örnek: Type yil_aylik = array[1..12]of type integer; Diziler (Devam) Örneğin, yıllık olarak okul ayları göstermek için; Type Ogr_ay = [Ekim, Kasim, Aralik, Ocak, Mart, Nisan, Mayis, Haziran] of String Var Ay: ogr_ay; Diğer örnek; Type butce_egitim = (konaklama, yemek, eglence,kitap, harc); harcama = array of [butce_egitim] of real; Var masraf:harcama; Şart Yapıları Belirli bir durumda veya şartın gerçekleşmesi durumunda çalışması istenen program kodları için yazılır. Birinci tip şart yapısı If şart then Durum; Şeklindedir çalışması istenen tek durum vardır aksi şart gerçekleşmesi halinde durum kodları çalışmaz. Örneğin; If x < 0.0 then Deger:= x*x; Şart Yapıları (Devam) İkinci tip şart yapılarında gerçekleşecek durum iki veya fazladır. duruma gerçekleşmemesi halinde diğer durumb kodlarının çalışır. If Şart then duruma Else Durumb ; Örneğin ; If x > 0 then Writeln(‘x pozitif’) Else Writeln(‘x negatif’); Case durum Seçici Case durum seçici birkaç değişik durumi arasından sadece birinin seçilmesi için kullanılır. Case durumi of seçim1 : kodlar; seçim1 : kodlar; seçim1 : kodlar; . . seçimn :kodlar; end Case durum Seçici (Devam) Case not of 1, 50 : writeln(‘ümitsiz vaka’); 51, 65 : writeln(‘biraz gayret’); 66, 70 : writeln (‘hadi iyine yirttin’); 71, 85 : writeln (‘iyisin iyi’); 86,100 : writeln (‘tebrikler’); End {case için end ...!} Döngüler Bir komut veya durumun birden fazla gerçekleştirilmesi istendiği durumlarda kullanılır. İki tip döngüden bahsedilebilir. Döngü için gerekli şartların birisi gerçekleşmesi durumunda çalıştırılacak kodlar ve durum, diğeri ise şart gerçekleştiği sürece çalıştırılacak durum ve kodlar. Döngüler (while .. do) while ifade/şart do Durum/kodlar Döngüsü bir durum gerçekleştiği sürece çalıştırılacak kodlar için kullanılır While say < 10 do begin sayi:=say + sayi; end {while} Döngüler (for .. do) for sayac:= başlangıç_değeri to bitiş_değeri do durum/kodlar Döngüsü şart gerçekleşinceye kadar durum/kodların çalışması için kullanılır For i := 1 to 10 do begin readln(sayi); say:= say + sayi; writeln(‘girilen sayilar toplami’,say); end;{for do için} Önemli Noktalar Pascal bilgisayar program kodlarını yazarken dikkat edilecek noktaların başında genel şablonuna ve yapısına uygun şekilde yazmalı Program çalışması esnasında programın ne yaptığı yazılmalı Gerekli açıklamalar program kodları içerisine yazılmalı Değişkenlere değer atamak için uygun mesajlar verilmeli Sonuçlar aktarılacak ortamlara istenen şekilde aktarılmalı Hata Ayıklama (Debuging) Hata oluşturan kodlar(bug) Yazım hataları (Syntax error) Mantık hataları (Logical error) Parametre hataları (Parameter error) Yanlış tip bildirimi (Typing error) Algoritmik hatalar (Algorithm error) Sayısal hatalar (Numeric error) Dosya İşlemleri Dosya giriş/çıkış değişkenlerinin tanımlanması Dosya değişkenlerinin tiplerinin bildirimi Dosya açma/kapama – okuma/yazma Dosya yeniden açma Dosya formatlı yazma Dosya İşlemleri (Devam) Pascal programlama dilinde dosyalar yapılarına göre ikiye ayrılır: 1. TEXT (Sıralı erişim) dosyaları 2. BİNARY (İkilik) dosyalar a. TİPLİ (Doğrudan erişimli) dosyalar b. TİPSİZ (Rasgele erişimli) dosyalar Dosya İşlemleri 1. Text Dosyaları Dosya okuma ve yazma için farklı olarak açılır. Kayıtlar dosyaya sırayla yazılır. Kayıtlar sırayla okunur. Önceki kayıtlara dönmek için tekrar dan açılmalıdır. Text dosyalarda bilgiler ana bellekte bulunan geçici bir tampon bellek aracılığı ile kalıcı ortamlara aktarılır. Bilgiler, tampon bellek dolunca veya dosya kapatılınca kalıcı ortamlara aktarılır. Dosya İşlemleri 1. Text Dosyaları (Devam) ASSIGN: Dosya değişkenine dosya ismi atamak için kullanılır. Yazım: ASSIGN(Dsy.Değ., Dsy.Adı); Örn: ASSIGN(D,’TEL.DAT’); ASSIGN(Dosya,’yazi.txt’); REWRITE: Dosya oluşturmak ve kayıt eklemek için kullanılır. Dosya daha önceden mevcutsa kayıtlar silinir. Yazım: REWRITE(Dosya Değ.); Örn: REWRITE(D); REWRITE(Dosya); Dosya İşlemleri 1. Text Dosyaları (Devam) APPEND: Dosyaya kayıt eklemek için kullanılır. Önceden mevcut dosyanın sonuna kayıtlar eklenir. Yazım: APPEND(Dosya Değ.); Örn: APPEND(D); APPEND(Dosya); RESET: Dosyadan kayıt okumak için kullanılır. Önceden mevcut dosyadan kayıtlar sırayla okunur. Yazım: RESET(Dosya Değ.); Örn: RESET(D); RESET(Dosya); Dosya İşlemleri 1. Text Dosyaları (Devam) CLOSE: Açık olan dosyayı kapatmak için kullanılır. Yazım: CLOSE(Dosya Değ.); Örn: CLOSE(D); CLOSE(Dosya); WRITE: Dosyaya EOLN bilgileri olmayan bir kayıt yazmak için kullanılır. Yazım: WRITE(Dsy.Dğ,değ1[,değ2.]); Örn: WRITE(D,adi,soyadi,tel); WRITE(Dosya,bilgi); WRITELN: Dosyaya EOLN bilgileri olan bir kayıt yazmak için kullanılır. Yazım: WRITELN(Dsy.Değ,değ1,değ2...]); Örn: WRITELN(D,adi,soyadi,tel); WRITE(Dosya,bilgi); Dosya İşlemleri 1. Text Dosyaları (Devam) READ: Dosyadan EOLN bilgileri de dahil bir kayıt okumak için kullanılır. Yazım: READ(Dsy.Değ.,değ1[,değ2...]); Örn: READ(D,adi,soyadi,tel); READ(Dosya,bilgi); READLN: Dosyadan EOLN bilgileri hariç bir kayıt okumak için kullanılır. Yazım: READLN(Dsy.Değ.,değ1 ,değ2...]); Örn: READLN(D,adi,soyadi,tel); READLN(Dosya,bilgi); Dosya İşlemleri 1. Text Dosyaları (Devam) EOF: Dosya sonunu kontrol etmek için kullanılır. Dosya işaretçisi dosya sonu bilgisine ulaşınca değeri TRUE olur. Yazım: EOF(Dosya Değ.) Örn: EOF(D) EOF(Dosya) EOLN: Satır sonunu kontrol etmek için kullanılır. Dosya işaretçisi satır sonu bilgisine ulaşınca değeri TRUE olur. Yazım: EOLN(Dosya Değ.) Örn: EOLN(D) EOLN(Dosya) FLUSH: Tampon bellek dolmadan bilgilerin kalıcı ortamlara yazılmasını sağlar. Yazım: FLUSH(Dosya Değ.); Örn: FLUSH(D); FLUSH(Dosya); Dosya İşlemleri 1. Text Dosyaları (Devam) SETTEXTBUF: Tampon bellek alanının değiştirilmesini sağlar. Normalde 128 Byte tır. Alan uzunluğu tanımı char tipli bir dizidir. Örn: var alan:array[1..256] of char; Yazım:SETTEXTBUF(Dsy.Değ,Alan Değ.); Örn:SETTEXTBUF(D,alan); IORESULT: Okuma/Yazma işlemlerinde hata kontrolü için kullanılır. Fonksiyonun dönüş değeri tamsayıdır. Sıfır ise hata yoktur. Yazım:IORESULT {$I-} ve {$I+} derleme direktifleri ile hata sonucu programın kırılması önlenir. ERASE: Tanımlanan dosyayı kalıcı birimden (disk,disket...) silmek için kullanılır.Yazım: ERASE(Dsy.Değ); Örn:ERASE(D); ERASE(Dosya); RENAME: Tanımlanan dosyanın adını değiştirmek için kullanılır. Yazım:RENAME(Dsy.Değ,Yeni isim); Örn:RENAME(D,’YEDEK.DAT’); RENAME(Dosya,’C:\TEL2.TXT’); Dosya İşlemleri 1. Text Dosyaları Örnek Program program dosya; var d:TEXT; s:string; Begin s:=‘Cukurova’; Assign(d,'deneme.dat'); {Dosya açılıyor} Rewrite(d); write(d,s); writeln(d,’ÜNİVERSİTESİ'); write(d,’Mühendislik'); writeln(d,‘Fakültesi'); Close(d);{ Dosya kapanıyor } end. Dosya İşlemleri 1. Text Dosyaları Örnek Program program dosya_veri_oku; {Bu program dosyadan satır verisi okur } var d:TEXT; satir:string; begin assign(d,'C:\Dene.dat'); reset(d); readln(d,satir); writeln(satir); close(d); end. Dosya İşlemleri 1. Text Dosyaları Örnek Program program dosya_veri_oku; {Bu program tüm dosya verisini okur} var d:TEXT; satir:string; begin assign(d,'C:\Dene.dat’); reset(d); while not d(eof) do begin readln(d,satir); writeln(satir); end; close(d); end. Dosya İşlemleri 2. Binary Dosyalar a.Kayıt Tipi belirli (Doğrudan erişimli) dosyalar: Kayıtlar ASCII veya Byte olrak kaydedilebilir. Kayıtlar dosyaya aynı uzunlukta ve düzenli olarak kaydedilir. Böylece alanlar birbirinden rahatlıkla ayırt edilebilir ve herhangi bir kayıta direkt olarak erişilebilir. Özellikleri: -Bir editör ile düzenlenemez. -Dosya okuma ve yazma için aynı modla açılır. -Satır sonu işaretçisi olmaz. -Her kaydın başına 0-32767 arasında kayıt numarası yazılır. Tanımlama: Dosya değişkenleri VAR tanımlama bloğunda FILE OF <TipAdı> kullanılarak tanımlanır. Tip Adları: 1. Integer : Her kayıt dosyada 2 Byte lık yer kaplar. Örn: var dosya : file of integer; 2. Real : Her kayıt dosyada 6 Byte lık yer kaplar. Örn: var dosya : file of real; 3. Record : Tanımlanan alan tipleri ve uzunluklarına bağlı olarak kapladığı alan boyutu değişir. Record tipi Type tanımlama bloğunda tanımlanır. Dosya İşlemleri 2. Binary Dosyalar (Devam) Type kayittipi=record isim:string[30]; adres:string[50]; tel:string[10]; borc:real; end; var dosya : type of kayittipi; Dosya İşlemleri 2. Binary Dosyalar (Devam) ASSIGN: Dosya değişkenine dosya ismi atamak için kullanılır. Yazım: ASSIGN(Dsy.Değ., Dsy.Adı); Örn: ASSIGN(D,’TEL.DAT’); ASSIGN(Dosya,’STOK.DAT’); REWRITE: Dosya oluşturmak , kayıt eklemek ve okumak için kullanılır. Dosya daha önceden mevcutsa kayıtlar silinir. Yazım: REWRITE(Dosya Değ.); Örn: REWRITE(D); REWRITE(Dosya); RESET: Dosyadan kayıt okumak ve dosyaya kayıt yazmak için kullanılır. Dosya önceden mevcut olmalıdır. Yazım: RESET(Dosya Değ.); Örn: RESET(D); RESET(Dosya); Dosya İşlemleri 2. Binary Dosyalar (Devam) CLOSE: Açık olan dosyayı kapatmak için kullanılır. Yazım: CLOSE(Dosya Değ.); Örn: CLOSE(D); CLOSE(Dosya); WRITE: Dosyada bulunulan konuma kayıt yazmak için kullanılır. Yazım: WRITE(Dsy.Dğ,KayıtDeğ.]); Örn: WRITE(D,kayit); WRITE(Dosya,bilgi); READ: Dosyada bulunulan konumdan kayıt okumak için kullanılır. Yazım: READ(Dsy.Değ., KayıtDeğ.); Örn: READ(D,kayit); READ(Dosya,bilgi); Dosya İşlemleri 2. Binary Dosyalar (Fonksiyonlar) IORESULT: Okuma/Yazma işlemlerinde hata kontrolü için kullanılır. Fonksiyonun dönüş değeri tamsayıdır. Sıfır ise hata yoktur. Yazım: IORESULT {$I-} ve {$I+} derleme direktifleri ile hata sonucu programın kırılması önlenir. FILESIZE: Dosyadaki mevcut kayıt sayısını verir. Yazım: FILESIZE(DosyaDeğişkeni); Örn: FILESIZE(d); FILESIZE(Dosya); SEEK: Dosyada istenilen kayıt numarasına konumlanmak için kullanılır. Sıfır ile kayıt sayısının bir eksiği (FileSize()-1) arasında değer alabilir. Kayıt sayısındaki konum dosyanın sonudur. Yazım: SEEK(Dsy.Değ.,KayıtNo); Örn: SEEK(d,filesize(d)); SEEK(d,sira-1); SEEK(d,0); Dosya İşlemleri 2. Binary Dosyalar (Fonksiyonlar) FILEPOS: Dosyada o anda üzerinde bulunulan kaydın numarasını verir. Sonuç LongInt türündedir. Yazım: FILEPOS(DosyaDeğişkeni); Örn: FILEPOS(d); FILEPOS(Dosya); TRUNCATE: Dosya sonu işaretçisini (EOF) Bulunulan konuma yerleştirir. Yazım: TRUNCATE(DosyaDeğişkeni); Örn: TRUNCATE(d); TRUNCATE(Dosya); Dosya İşlemleri 2. Binary Dosyalar (Fonksiyonlar) WITH-DO: Kayıt tipi değişkenlerin alt değişkenlerini kayıt değişkenini kullanmadan kullanmak için kullanılan bir komuttur. Örnek: kayit.isim:=‘dene’; kayit. adres:=‘deneme’; kayit. borc:=1000000; yerine; with kayit do isim:=‘ahmet’; adres:=‘sebelek’; borc:=1000000; end; Dosya İşlemleri 2. Binary Dosyalar (örnek program) type kt=record a:string[10]; b:real; end; var d:file of kt; k:kt; Begin Assign(d,‘DeneRand.dat'); rewrite(d); k.a:='Ahmet Kara'; k.b:=123000; write(d,k); k.a:='Hasan Sebelek'; k.b:=1; write(d,k); close(d); end. Dosya İşlemleri 2. Binary Dosyalar b. Kayıt Tipi Belirli Olmayan Dosyalar: Kayıtların yapısı belli değildir. Kayıtlar belirli uzunluktaki byte’lar halinde blok blok okunur veya yazılır. Bu nedenle BYTE dosyalar da denir. Okuma ve yazma için byte tipinde tanımlanan bir dizi değişken tampon hafıza olarak kullanılır. Tipli dosyalardaki tüm komutlar WRITE ve READ hariç geçerlidir. Tanımlama: Dosya değişkenleri VAR tanımlama bloğunda FILE kullanılarak tanımlanır. Örn: var dosya : file; Dosya İşlemleri 2. Binary Dosyalar REWRITE: Bilirli uzunlukta bilgi yazmak ve okumak üzere dosyayı oluşturmak için kullanılır. Uzunluk verilmezse 128 Byte Yazım : REWRITE(Dsy.Değ,uzunluk); Örn : ReWrite(d,1); ReWrite(dosya,1024); RESET: Bilirli uzunlukta bilgi okumak veya yazmak üzere dosyayı açmak için kullanılır. Uzunluk verilmezse 128 Byte Yazım : RESET(Dsy.Değ,uzunluk); Örn : Reset(d,1); Reset(dosya,256); BLOCKREAD: Dosyadan bilirli uzunlukta bilgi okumak için kullanılır. Yazım : BLOCKREAD(Dsy.Değ,bellek, okunacak uzunluk,okunabilen uzunluk); Örn :BlockRead(d,tb,SizeOf(tb),ok); (SizeOf:Bellek değişkeninin uzunluğunu verir.) Dosya İşlemleri 2. Binary Dosyalar BLOCKWRITE: Dosyaya bilirli uzunlukta bilgi yazmak için kullanılır. Yazım : BLOCKWRITE(Dsy.Değ,bellek, yazılacak uzunluk,yazılabilen uzunluk); Örn :BlockWrite(d,tb,ok,yk); var okudosya,yazdosya:file; okukayit,yazkayit:word; bellek:array[1..256] of char; dosya1,dosya2:string; Begin write(’Okunacak dosya..:'); readln(dosya1); write('Yazılacak dosya..:'); readln(dosya2); Assign(okudosya,dosya1); Reset(okudosya,1); Assign(yazdosya,dosya2); rewrite(yazdosya,1); Repeat blockread(okudosya,bellek,sizeof(bellek),okukayit); blockwrite(yazdosya,bellek,okukayit,yazkayit); until (okukayit=0) or (okukayit<>yazkayit); close(okudosya); close(yazdosya); end.