13 Ocak 2014 Pazartesi

Pascal Programlama - 7

Bu yazımda Pascal Programlamada alt programlar konusunu inceleyeceğiz.

Alt programlar, isimlerinden anlaşılacağı gibi programlar içinde yer alan ve belli bir görevi bulunan kod bloklarıdır. Alt programları prosedürler ve fonksiyonlar olmak üzere iki farklı şekilde göreceğiz. Bu kavramlara metot da denmektedir.

Alt programlar kullanımı ile, karmaşık kodlamalar ve kod tekrarlamaları giderilir. Bu sayede daha okunabilir programlar ortaya çıkar ve hata ayıklama kolaylaşır.

Prosedürler:

Program içinde çok kez kullanılacak bir işlem için bir kez yazılıp, programın devamında istenildiği kadar kullanılabilir.

Geriye değer döndürmez ancak kendilerine gönderilen parametrelerin değerlerini değiştirebilirler.

Prosedürlere gönderdiğimiz parametrelerin ana programdaki değerlerinin değişmesini istemiyorsak değer ile çağırma (call by value), değişmesini istiyorsak referans ile çağırma (call by reference) yapılmalıdır.

Aşağıda prosedür tanımlama örneği verilmiştir.

procedure isim(parametre:veritipi);
var ...;
begin
    ...
end;

Fonksiyonlar:

Fonksiyonlar prosedürlerden farklı olarak çağrıldıkları programa bir değer döndürürler. Fonksiyon tanımlanırken geriye döndüreceği değerin tipi belirtilmelidir.

Aşağıda fonksiyon tanımlama örneği verilmiştir.

function isim(Parametre:veritipi):veritipi;
var ...;
begin
    ...
    isim:değer;
    ...
end;

Şimdi örneklerimizi inleyelim.

uses crt;
var 
    sayi,i,top:integer;
procedure fakto(sayi:integer);
begin
    top:=1;
    for i:=1 to sayi do
         begin
            top:=top*i;
         end;
    writeln(sayi,' sayisinin faktorüyeli:',top);
end;
begin
    clrscr;
    writeln('bir sayi girin');
    readln(sayi);
    fakto(sayi);
    readln;
end.

Bu örnekte, prosedür kullanılarak girilen sayının faktöriyeli hesaplanmıştır.

uses crt;
function f(n:real):real;
begin
    if n<2 then
        f:=n
    else 
        f:=f(n-2)+f(n-1);
end;
var
    n:real;
begin
    clrscr;
    repeat
        readln(n);
    until (n=trunc(n)) and (n>=0);
    
    writeln(n:0:0,'.fibonacci sayisi:',f(n):0:0);
    readln;
end.

Bu örnekte de, fonksiyon kullanılarak istenilen sıradaki fibonacci sayısı bulunmaktadır.


11 Ocak 2014 Cumartesi

Pascal Programlama - 6

Merhaba,

Bu yazımda Pascal programlamada dizi (array) konusu inceleyeceğiz.

Programlamada dizi kavramı çok önemlidir. Daha kapsamlı işlemler yapmanın ilk adımlarından biri de dizi kullanımıdır.

Dizi, aynı tipten birçok verinin bir araya geldiği bir yapıdır. Basit bir veri yapısı örneğidir. Dizi kullanımı sayesinde programımızın performansını artırırız.


Diziler bir ya da daha fazla boyutta tanımlanabilir. İki boyutlu dizilere matris adı verilmektedir.

var
    dizi ismi:array[ilk değer..son değer] of veri tipi
begin

end.

Dizi tanımla yukarıda görüldüğü gibi yapılmaktadır.

            A:array[1..5] of integer;
            B:array[1.99] of string;

Bu tanımla ve örnekler tek boyutlu diziler için geçerlidir. Şimdi iki boyutlu dizilerin (matris)  nasıl tanımlandığını görelim.


var
    dizi ismi:array[ilk değer..son değer, ilk değer..son değer] of veri tipi
begin

end.

A:array[1..3,1..4] of integer;
B:array[1..38,1..40] of string;

İki boyutlu da görüldüğü virgül ile ayrılarak boyut sayısı arttırılabilir. Boyut sayısı programınızın ihtiyacına göre ve bilgisayarınızın bellek büyüklüğüne göre değişkenlik gösterebilir.

Şimdi ilk örneğimizi yapma vakti geldi.


uses crt;
var
    A:array[1..5] of integer;
    i,j,hafiza:integer;
begin
    clrscr;
    write('Sayilari Girin:');
    for i:=1 to 5 do
        read(A[i]);
    for i:=1 to 4 do
      for j:=i+1 to 5 do
         if A[i]<A[j] then
            begin
               hafiza:=A[i];
               A[i]:=A[j];
               A[j]:=hafiza;
             end;
    readln;
    writeln('Azalan Siralama');
    for i:=1 to 5 do
        write(A[i],' ');
    readln;
end.

Yukarıdaki örnekte girilen 5 sayı sıralayan program döngü ve dizi kullanarak yazılmıştır. Daha önceki yazımda if-else yapısını incelerken girilen 3 sayıyı sıralan program örneği vermiştik. If-else kullanımı ile 3 sayıyı sıralarken çok karmaşık bir program ortaya çıktı. Bu nedenle girilen sayı arttıkça programımız daha karmaşık hale gelecektir. Dizi ve döngü kullanımı ile sadece sayı değerlerini değiştirerek çok sayıda girilen sayıları sıralayabiliriz.

for i:=1 to 5 do
read(A[i]);

Yukarıdaki kodlar girilen sayıları 5 elemanlı diziye sırasıyla atar. Daha sonraki iki for döngüsü en büyük değeri bulup A[1] dizi elemanına yazar ve bu şekilde devam eder. Kodun kafanızda şekillenmesi için işlemleri adım adım kağıt üzerinde yapmanızı tavsiye ederim.

Şimdi de diğer örneğimize geçelim.

uses crt;
var
    A        :array[1..2,1..2] of integer;
    B        :array[1..2,1..3] of integer;
    C        :array[1..2,1..3] of integer;
    i,j,z    :integer;
begin
    clrscr;
    write('Birinci dizinin elemanlarini girin:');
    for i:=1 to 2 do
        for j:=1 to 2 do
            read(A[i,j]);
            
    write('Ikinci dizinin elemanlarini girin:');
    for j:=1 to 2 do
        for z:=1 to 3 do
            read(B[j,z]);
    
    writeln('Birinci Dizi:');
    for i:=1 to 2 do
        begin
            for j:=1 to 2 do
                begin
                    write(A[i,j],' ');
                end;
            writeln;
        end;
    writeln('Ikinci Dizi:');
    
    for j:=1 to 2 do
        begin
            for z:=1 to 3 do
                begin
                    write(B[j,z],' ');
                end;
            writeln;
        end;
    
    for i:=1 to 2 do
        begin
            for j:=1 to 2 do
                begin
                    for z:=1 to 3 do
                        begin
                            C[i,z]:=C[i,z]+(A[i,j]*B[j,z]);
                        end;
                end;
        end;
    
    writeln('CARPIM!');
    
    for i:=1 to 2 do
        begin
            for z:=1 to 3 do
                begin
                    write(C[i,j],' ');
                end;
            writeln;
        end;
    readln;
    readln;
end.

Yukarıdaki örnekte iki boyutlu diziler kullanılarak matrisler de çarpma işleminin programı yazılmıştır. Eğer matrisler de çarpma işleminin nasıl yapıldığını bilmiyorsanız öncelikle bunu öğrenmeniz gerekmektedir. Ardından kodu inceleyebilirsiniz.

İlk örneğimizde olduğu gibi mantık aynıdır. A(2x2) ve B(2x3) matrisleri için kullanıcıdan değerler girilmesi istenip ardında da oluşan matrisler ekrana yazılmıştır. Ekrana yazdırma işleminin ardından çarpma işlemi yapılmaktadır. Bu kısımda bildiğimiz matris çarpma işlemi for döngüsü ile adım adım yapılmıştır. Yine, Kodun kafanızda şekillenmesi için işlemleri adım adım kağıt üzerinde yapmanızı tavsiye ederim.