Add to Technorati Favorites

30 Temmuz 2008 Çarşamba

Döngüler

Başlığımız biraz genel oldu ama temiz oldu:)..Arkadaşlar, programlama mevcut işleri kolaylaştırmak ve onları tıkırında götürebilmek için kullanılmaya başlanılmış bir araçtır.Böyle bir araç programcıya da aynı güler yüzü göstermelidir, gösteriyor da.Örneğin kullanıcıdan 10 öğrencinin 1er notunu okumak istiyorken 10 kere read komutu kullanacak olsak bu bir acımasızlık olurdu işte bu yüzdendir ki tekrar eden işlemlerin yapılması döngülerle olmaktadır.

Döngü, içerisindeki işlemi bir durma noktasına kadar devam ettiren bir yapıdır.Bu durumda ise döngüleri ikiye ayırmak zorunda kalırız; adım sayısı belli olan ve olmayan döngüler.Misal yukarıda 10 öğrencinin notunu okumaktan bahsettik.Gördüğünüz gibi bu işlemin adım sayısı belli 10 öğrencinin notu 10 aşamada okunur.İşte böyle adım sayısı belli olan işlemler for döngüsü içinde yapılır ve kodu temel olarak;

>>> for i:=1 to n do şeklindedir.Bunun kalıp olmayan taraflarını kalın olarak yazdım.Burada hiçbir kalıp yok diyebilirsiniz. :) Şöyle ki orada i başlangıç değişkenidir i olmak zorunda değildir j de olabilir.1 başlangıç değeridir o da 2 3 v.s. olabilir. “to” artımı belirtir yani burada 1’den başlayarak n’e ulaşmadığımız müddetçe i’nin değeri 1 arttırılır, bu down to da olabilir o da değeri 1’er 1’er azaltır.N ise m de olabilir durma noktasıdır.

Toparlamak gerekirse i ile belirtilen başlangıç değişkeninin değerinden başlayan döngü, içerisinde bulunan işlemleri bitirdikten sonra değerini bir arttırır ve N’e ulaşıp ulaşmadığına bakar ve de N’ ulaştığında döngüye son kez girer.N’e ulaştığında çekip gitmez, for döngüsünün özelliği budur.

Yukarıdaki şekilde, özel olarak emek sarfetmediğim YTÜ BBG-1 dersinin notlarında bulunan, bir sayının herhangi bir kuvvetini bulan bir örneği görüyoruz, anlatmadan önce alıntı olduğunu belirtmek istedim. Gördüğümüz gibi kullanıcıdan sayı ve kuvvet diye iki değişken okuyoruz. Deger değişkenimiz dışarı dönderecek olduğumuz değişken ve programın başında 1 atamışız.Bu 1 atama işlemi şu an gereksiz gözükebilir ama ilerki aşamalarda, çok daha fazla satırdan oluşan bir program içerisinde "deger" daha önce kullanılmışsa buna işlenmiş bir bilgi olabilir ve biz bunu 1 olarak değiştirmeliyiz. Ardından for döngüsünün diyagramda ifade edilme tarzını görüyoruz.Burada i»1 i'nin 1'den başladığını, oranın hemen yanındaki 1; 1er 1er arttığını, alttaki "kuvvet" ise kuvvet değişkeninin değerine kadar, döngünün, içerisindeki işlemi yapacağını gösterir.Örneğin 3 üssü 4ü hesaplarken içerideki işlem deger=deger*3=3* 3=9* 3=27* 3=81 şeklinde gerçekleşir Kodlarımız;

Program usalma(input,output);
Var
-Sayi,kuvvet,deger,i:integer; {i dahil olmak üzere değişkenlerin tiplerini ifade ettik}
Begin
-Writeln(‘sayiyi giriniz’);
-Readln(sayi);
-Writeln(‘Kuvveti giriniz’);
-Readln(kuvvet);
-deger:=1; {deger’e en başta 1 atadık}
-For:=1 to kuvvet do {for döngümüzün kalıbını görüyoruz, for kalıbından sonra ; yok}
--deger:=deger*sayi; {tek bir işlem olduğu için for’un begin endi yok.}
-writeln(deger);
-readln;
End.
-
Bir dahaki yazımda adım sayısı belli olmayan döngülerden bahsedeceğim görüşmek üzere...

29 Temmuz 2008 Salı

Mutlak Değer Bulan Program


Merhabalar arkadaşlar,
-
Basit bir akışı ve bu akışın pascal dilinde kodlanmış halini size göstermek istiyorum.Bunun ardından bir sonraki yazıda döngülere geçerek az daha kımıl kımıl sorulara bakacağız :)..
-
Bu basit diyagramda dışarıdan A değişkenine bir değer okumuşuz.Bu değerin sıfırdan küçük olması durumunda değer - ile çarpılarak dışarı çıkarılmış.Büyük olma durumunda malumunuz sadece değer mutlak isimli değişkene atanmış, başka birşey yapılmamış.Sonuç olarak da ekrana A değeri değil Mutlak isimli değişkenin değeri yazdırılmış çünkü biz sonucu Mutlak isimli değişkende tuttuk.
-
Programda kullanacağımız if-then-else yapısı hakkında bilgi vermek gerekirse; if'teki durumun doğruluğu kontrol edilir eğer doğruysa yalnızca then kolundaki işlemler yanlışsa yalnızca else kolundaki işlemler yapılır.Yani if bir tür yol ayrımıdır, burada verdiğiniz işleme göre program yolunu belirleyecektir.Her if'in theni olmak zorundadır ama else kolu mecburi değildir..
-
Then ve Else kollarında birden fazla işlem varsa ana programmış gibi then'den sonra begin konulur ve then end ile bitirilir aynı şey else için de yapılır.Bu programda kollarda tek işlem olmasına rağmen ben "begin, end" koyarak neyi kastettiğimi göstermek istedim.
-
Gelin şimdi programımızı pascal dilinde kodlayalım.- işaretlerini işlemler net gözüksün diye kullanıyorum.
Program mutlak(input,output);
Var
-Mutlak,a:integer; {bu kısımda tipler : ile atanır.Aynı tipte değişkenler böyle yazılabilir.}
Begin
-Writeln('Mutlak degeri alinacak sayiyi giriniz..'); {Tek tırnak içindeki ifade aynen yazılır}
-Readln(A);
IF A<0>{if dediğimiz kalıp}
-Then
-Begin {şu an tek işlem olduğu için gerek yok ama kullanımını görelim}
--Mutlak:=-A {end'den önceki satırda ; koymak şart değildir.}
-End {else'ten önceki satır ; ile bitirilmez}
-Else
-Begin
--Mutlak:=A
-End;
-writeln(A,' sayisinin mutlak degeri ',Mutlak) {tırnak dışındaki isimleri değişken olarak algılar ve değerlerini yazar.}
End.
-
-
Not:if, then, else, begin ifadelerinden sonra ; kullanılmaz, yani bunlar satırlar gibi ; ile kapatılmaz, daha önce birkaçını söylemiştim ama ara sıra hatırlatmakta fayda var.Bir sonraki yazıda görüşmek dileğiyle..
-

28 Temmuz 2008 Pazartesi

Aritmetik İşlemler, Operatörler ve Bazı Önemli Durumlar

Bu yazımda basit manada aritmetik işlemler ve önceliklerinden, atama ve karşılaştırma operatörlerinden ve de pascalda program kodlamakla alakalı bir iki husustan bahsedeceğim.

Aritmetik İşlemler ve Öncelik Sıralaması

+, -, *, /, mod birkaç tane işlem operatörümüzdür.Bunlar kendi aralarında bir öncelik dizimindedirler. Öncelikleri sıralarsak;

( ) >> En yüksek
* / mod >> Parantezden sonra
+ - >> En düşük

Aynı öncelikli işlem operatörlerinde işlemler soldan başlanarak yapılır.Örneğin;
b*b-4*a*c >> 1.işlem b ile b'nin çarpılması
-------------- 2.işlem 4*a=4a
-------------- 3.işlem 4a*c=4ac
-------------- 4.işlem b²-4ac
-
Karşılaştırma ve Atama Operatörleri
-
>, <, >=, <=, = » malum durumlar; büyük mü, küçük mü, büyük eşit mi, küçük eşit mi, eşit mi?
<> » farklı mı?
and, or » ve , veya
:= » Atama operatörü; x:=a*b dediğimizde çarpımı x'e atar. Sadece = eşit mi kontrolü yaparken bu işaret atamayı yapar.
xor » durumlardan yalnızca biri doğruyken yani diğeri yanlışken geçerli olan bir koşul
ayrıca lojikte de bir kapı olarak;
-
a b çıkış
1 1 0
1 0 1 Farklı durumlarda 1 çıkışını verir.Şimdilik bilgi olsun sadece.
0 1 1
0 0 0
-
Birkaç Husus
-
*Değerleri tuttuğumuz değişken isimleri rakamla başlayamaz.
*Pascal'ın sabit kalıpları, döngüleri dışındaki satırlar birkaç istisna dışında ; ile bitirilmelidir.Kalıp, döngü ile kastetmek istediğimşeyi yazayım; değişkenleri tanımlayacağım var'dan sonra, if, for, begin, while, repeat'ten sonra ; konulmaz.Şimdilik biraz karışık gibi gözükebilir program yazdıkça çok basit şeyler olarak gözükecek ama basit gözüktükleri için ; koymayı unuttuğunuz zamanlar olacak mutlaka.
*End'den önceki satıra ; koymak şart değildir, eski derleyicilerde koymamak da şart olabiliyor, koymamak en iyisi bence,
*Else'den önceki satıra ; koymamalısınız.
*Program begin ile başlar End. ile biter.
*For döngüsünün içinde, if'in ayrı ayrı then ve else kolunun içinde birden fazla işlem varsa bu kalıplar begin ile açılıp end ile kapatılır ana program gibi.Bunu daha sonra göreceğiz.
*Her begin bir end ile sonlanmalıdır.Bazı durumlarda end sayısıyla begin sayısı uyuşsa bile bazı yerlere begin end koymadınız diye hata vermez ve bu yerler muhtemelen begin end isteyen yerlerdir.Program güzelce derlenir ama baktığınızda programın mantık hataları olduğunu görürsünüz.
--
Örneğin begin end koymadığınız bir for döngüsünün birkaç işlemi döngü dışında algılanır ve de bu yüzden işlemleriniz yanlış sonuç verir ama program derlenir ve çalışır siz de derlenmiş bir programın hatasını aramakla uğraşırsınız.
--
Şimdilik bu kadar dostlar bir dahaki yazıdan itibaren sanırım program örnekleri yazmaya başlayacağım.Pascal basit bir dil gibi gözükse de günümüz Türkiyesi'nde for döngüsünü bile bilmeye gerek olmadan besin döngüsünü bilerek bilgisayar mühendisliği kazanıldığı için(yanlış anlaşılmasın ben de öyle kazandım) pascal gibi insan diline çok yakın high level lang. dediğimiz bir dilin geçiş aşamasında öğretilmesi ve daha çok programlama zekasının açığa çıkarılmaya çalışılması bence önemlidir.Tabi bunun 1 sene öğretilmesi ne derece doğrudur tartışılır.Bu kelamın konusu YTÜ'dür..:)..Daha fazla uzatmayalım, görüşmek üzere ;)

27 Temmuz 2008 Pazar

koşul içeren diyagram

Bu yazımda neyi anlatacağıma pek karar verememiştim.Bir önceki akış diyagramında koşul için kullanılan kutucuğa yer vermemiştik.Bir tane de onla ilgili bir akış verip gelecek yazıda, bir önceki yazımda belirttiğim pascal programlama diline giriş bilgilerine, operatörlere değineceğim.

Bu akış diyagramı için de bir iki kelam edersek; en başta kullanıcıdan 3 değer alıyor görüldüğü gibi ve de bu üç değer arasında kıyaslama yaparak üçgenin tipini belirliyoruz. Kontrol kutucuğumuzu görüyoruz.A=B mi demişiz en başta eşitse A veya B farketmez eşit mi C'ye eşitse eşitkenar üçgen diye ekrana yazdırmışız değilse de diğer ikisi eşit olduğu için ikizkenar demişiz.

A=B değilse ne olacak A=C mi eğer böyleyse üçgen yine ikizkenar diye ekrana yazdırmışız.Şimdi çok basit bir örneği bile ele alıyor olsak bunun da az görülen bir noktası olabilir ki var o da A'nın C'ye de eşit olmadığı durum o zaman üçgenimiz çeşitkenar diyip ekrana yazdırmışız.Çok basit bir örneğimiz de olsa burada çeşitkenar durumunu unutmamak ileride bir dosya komutunda dosyayı 2 kişiden başka kimsenin açmaması istendiğinde, bu duruma kolayca çözüm üretebilmek için gerekli bir adımdır bence.

Görüntüde yazılar seçilemiyor olabilir, elimdeki kağıtları kullanmak istedim lakin çözünürlüğünü koruyarak oynayamadım üzerinde umarım yararlı olur..Bir dahaki yazımda dediğim gibi dil olarak birkaç hususa değinerek programların kodlanmasına geçeceğim..



26 Temmuz 2008 Cumartesi

INETA SUMMER HIT


Arkadaşlar merhaba,

Bu sıcak yaz günlerinde tatile gidemeyen yazılımcılara bir hafta sonu dopingi hazırladık; INETA Summer Hit 2008!

2-3 Ağustos tarihlerinde Yıldız Üniversitesi Beşiktaş Kampüsünde, Oditoryum’da gerçekleştirilecek bu etkinliğe katılanları ise farklı hediyeler bekliyor olacak.

Silverlight 2.0, Team Foundation Server, IE 8.0 Yenilikleri, Web Client Software Factory, LINQ ve Web 3.0 gibi konuların yer alacağı etkinliğin konuşmacıları ise; MVP’ler ve MSP’ler olacak.

Katılımın ücretsiz olduğu etkinliğin, detay programına ve kayıt sayfasına http://tinyurl.com/inetasummerhit adresi üzerinden erişebilirsiniz.

Bilgilerinize sunarız.
Sevgiler,
Ali R. Babaoğlan
-
-
2-3 Ağustosta yukarıdaki metinde de anlatıldığı gibi, biz YTÜ Bilişim Kulübünün ev sahipliğinde, güzel bir haftasonu etkinliğimiz var.Gelmek isteyenler link üzerinden kaydolmayı unutmasınlar..

örnek bir akış



Basit manada bir akış örneği şekilde gözüküyor.Kısaca özetlemek gerekirse start'la programın başladığını göstermiş, dışarıdan a,b değişkenlerini okumuş.Yani kullanıcı a,b değişkenlerinin değerini girmiş.Buradan sonra c değişkenine bu a ile b'nin toplamını atamış.Daha sonra c'yi ekrana yazdırmış ve programı stop'la bitirmiş.
-
Bu programı pascal dilinde kodlarsak;
-
Program toplam (input,output); {input,output artık gerekli olan bir terim değil ama yazalım.Burada programın ismini koyduk}
uses crt; {crt kütüphanesini çağırdık aşağıda kullandığımız clrscr komutu için gerekli bu kütüphane.}
var {variable yani değişkenlerin tanımlandığı bölüm}
a,b,c:integer; {a,b,c tamsayı ise yani 1,2,3 gibi değerlerse integer olarak tanımlanır, integer zaten türkçe manasıyla tamsayı demektir.}
Begin {programımız ana metninin başladığı yerdir}
Clrscr; {ekranı temizlemek için kullandık.program çalışmadan önce ms-dos ekranında yukarılarda birşeyler yazıyorsa temiz bir sayfa açmış olduk:) }
Writeln('iki sayi giriniz'); {Bu komutla ekrana iki tırnak arasındaki metni yazarız ve de bir sonraki satıra geçeriz.Eğer write ile yazsaydık alt satıra geçmezdi.}
Readln(a,b); {dışarıdan iki sayı okuyacağız.Readln yazdığımız için 1.sayı ardından enter, 2.sayı ardından enter şeklinde girilir.Ama read yazsaydık 1.sayı boşluk 2. sayı enter diyerek girebilecektik. }
c:=a+b; {dışarıdan okuduğumuz a,b değişkenlerini toplayıp c'ye atıyoruz.Atama soldaki değişkene yapılır.}
writeln(c); {c değişkenini ekrana yazdırıyoruz ve alt satıra geçiyoruz}
readln; {programı exe dosyasından açtığımız durumlarda işlemlerden sonra hemen kapanmasın biz bir tuşa basana kadar beklesin diye bu komutu koyuyoruz.Program bittikten sonra ekranı kapatmak için bizi bekliyor :) }
End. {programımızı sonlandırıyoruz ve noktamızı koyuyoruz.}
Program kodunu akışla beraber vermek istedim ama burada noktalı virgülleri itinayla koymak gerektiğine, :='de iki noktayı yanlışlıkla koymadığıma = işlemi operatörünün böyle olduğuna v.s.'ye değinmedim ama onları ve diğerlerini de daha sonra belirteceğim..{belirttin zaten demeyelim var biraz daha :)) }

25 Temmuz 2008 Cuma

Akış diyagramı, flow chart

Evet arkadaşlar uzun bir aradan sonra tekrar pascal dilini anlatabilecek vakit bulabildim.Eğer bir terslik olmazsa pascal diliyle beraber bilgisayarda karşılaşabileceğiniz sorunların çözümlerine de bu alanda yer vereceğim.


Pascal dilinden genel manada bahsetmiştim önceki 2 yazımda. Burada ise akış diyagaramının öğelerini görüyoruz.Akış diyagramı daha çok başlangıç aşamasında kullanılan bir uygulamadır. Programın tasarımı olarak nitelendirebiliriz. Kafanız sıkıştığı zaman akış diyagramında neyin nereye gittiğini görerek sıkıntıdan kurtulabilirsiniz. Ama 1000 satır kodla yazılacak bir programın akışını çizmek kolay olmayacağı için orta seviyeden sonra kullanmak istemez çoğu kimse.Ama genel bir diyagram bile olsa diyagram çizmek bence önemlidir. Çünkü programda sıkıştığınız zaman bu yol gösterici çok işinize yarayacaktır.


Şimdi akışta şekillerin ne anlam ifade ettiğini anlatayım.


Bu biraz kare gibi olmuş olsa da aslen kenarları biraz daha yuvarlak çizilebilir.:)..Ama çok da mühim değil.Programın başlangıcını ve bitimini gösterir..(start-stop).


Her türlü hesaplama atama işlemi bu kutunun içerisinde gösterilir.Örneğin alan diye bir değişkenimizi alan=piXr² işlemiyle burada değiştiririz.


Bu işaretimiz ise dışarıdan bilgi okuduğumuzu gösterir.Bunun içinde "a"
isimli değişken varsa dışardan a'nın karşılığını, değerini burada okuyoruz demektir.


Bilgi çıkışı bu işaretle gösterilir yani bir önceki işaretin tam tersi.İçinde "a" isimli bir değişken varsa diyelim ki değer 25 olsun; burada 25 ekrana yazdırılır.


Kodumuzda geçecek olan karşılaştırmaları bu kutuyla gösteriyoruz bunun içinde a=b yazıyorsa karşılaştırdığımız durum a b'ye eşit mi durumudur, program; eşitlikte T(true), farklı değer durumunda F(false) kolunu izleyecektir.

Bu bilgileri bir sonraki yazıda program akışında anlatacağım.Orada daha güzel gözükeceğini umuyorum.

Akış diyagramının parçalarını Byte Online yazarı olan Mustafa Menteşoğlu'ndan aldım alıntıdır diyelim.Ama metin el emeği göz nurudur :))..