KlavyeSende.CoM
Kasım 23, 2008, 01:43:36 ÖS *
Merhaba, Ziyaretçi. Lütfen giriş yapın veya üye olun.

Kullanıcı adınızı, parolanızı ve aktif kalma süresini giriniz
  KlavyeSende.Com | Artık Klavye Sende !
 
Ana Sayfa Yardım Ara Admin Admin Admin Giriş Yap Kayıt  
Sayfa: 1 [2]
  Yazdır  
Gönderen Konu: Pascal Dersleri...  (Okunma Sayısı 546 defa)
0 Üye ve 1 Ziyaretçi konuyu incelemekte.
Ocak 22, 2007, 05:00:02 ÖS  |  Uyarı : Dikkat bu Administrator mesajıdır |
ChaR
Administrator
********

Üye Bilgileri
Üye ID: 1

Mesaj Sayısı: 2622

Nerden: Bilmem Sence Nerden ;)

Cinsiyet: Bay

Rep : 138


« Not Found Keyboard »

Durumum:


Üyelik Bilgileri WWW

Admin

Repeat - Until Döngüsü:

Repeat Türkçe olarak "Tekrar" (burada "Tekrar et" amacindadir), Until ise "-e kadar" demektir (bir sey oluncaya kadar.. gibi). Repeat Until döngüsü de tahmin ettiginiz gibi sizin belirteceginiz bir sert dogru oluncaya kadar Repeat ile Until arasina yazacaginiz bütün komutlari tekrar tekrar basa giderek çalistirir. Ta ki until ile belirttiginiz sart dogru oluncaya kadar. Genel kullanimi:

Repeat
Islem 1
Islem 2
Islem 3
...
...
Until (sart);
sart olarak yine sonucu true ya da false olabilen her seyi verebilirsiniz. Mesela "Until 1=2" derseniz 1 hiçbir zaman 2'ye esit olmayacagina göre (ve dolayisiyla da sart yanlis olacagina göre) döngü sonsuza kadar gider. Simdi basit bir örnek program yapalim:

Program Repeat_dongusu;
Uses crt;
var
a:=longint;
begin clrscr;
a:=0;
repeat
a:=a+1;
writeln(a);
until a=100;
readln;
end.
Gördügünüz gibi programimiz (goto ile yaptigimiza göre) birhayli kisaldi ve kolaylasti. Repeat..Until döngüsünü bir (ya da birkaç) sart gerkeçlesinceye kadar olan bir döngü kurmak için kullanacagimizi söylemistik. Mesela bir program yapalim. Bu program girilen sayinin karesini ekrana yazsin. Ta ki sayi yerine 1 girilene kadar. Yani 1 yazarsaniz program biter. Iste kodlari:

Program Filiz;
uses crt;
var
sayi:longint;
begin clrscr;
repeat
write('Bir Sayi Giriniz: ');Readln(sayi);
writeln('Karesi: ', sayi*sayi);
until sayi=1;
end.
Yavas yavas döngülerin avantajlarini görüyoruz. Döngüsüz bu basit programi yapmak imkansizdir. Çok daha iyi örnekler verecegim ama bilmedigimiz komutlari kullanmak istemiyorum. En iyisi ögrendigimiz zaman kullanalim. Peki bir de 1 ile 10 arasindaki sayilarin karesini yazalim:

Program KARAKARTAL;
uses crt;
var
sayi:longint;
begin clrscr;
sayi:=1;
repeat
writeln('Sayi: ',sayi,' Karesi: ', sayi*sayi);
sayi := sayi + 1 ;
until sayi > 10;
end.
Ayrica iç içe yine istediginiz kadar döngü kurabilirsiniz. Zaten Pascal'da (ve diger bütün programlama dillerinde) bu tip iç içe istediginiz her seyi yapabilirsiniz. Mesela iç içe 2 repeat until döngüsü kurarak 1 ile 10 arasindaki sayilarin birbirleri ile çarpimini yazdiralim. Yani ekrana çarpim tablosunu yazdiralim. Tabii alt alta yazinca ekrana sigmayacagindan her 10 sayida bir enter'a basilmasi gerekiyor:

Program canavar;
uses crt;
var
a,b:byte;
begin clrscr;
a:=0;
repeat
a:=a+1;
b:=0;
repeat
b:=b+1;
writeln(a:2,' x ',b:2,' = ',(a*b):3);
until b=10;
readln;
clrscr;
until a=10;
end.
Gördügünüz gibi tam 100 tane çarpma ve sonucunu yazdirma islemini bu kadar kisa bir programla yapabiliyoruz. For döngüsünü anlatinca bundan daha da kisa olacak. Burada a'nin ve b'nin ilk degerleri 0 oluyor ve her döngüde bir artiriliyor. Ama 0 iken birsey yazilmiyor dikkat ederseniz. Ayrica a'nin degerinin her 1 artiriminda b'ninki 10 defa artirilip yaziliyor. a da 10 defa artirildigina göre toplam 100 islem yapiliyor. until b=10; komutundan sonraki readln; ve clrscr; ise a'nin her deger degistirmesinde enter'a basilmasini bekliyor ve ekrani temizliyor. Program ekrana çarpma islemlerini yazarken dikkat edin her ekranda a sabit, be degisiyor. Ama her ekran degistirilmesinde bu sefer a degisiyor ve b yine 1'den 10'a kadar degerler aliyor. Bu programin görsel olarak pek iyi olmadigini düsünüyorsaniz ve ilkokuldaki defterlerinizin arkasindaki çarpim tablolari gibi sütun sütun ve bütün çarpmalarin ayni ekranda olmasini istiyorsaniz biraz daha ugrasmaniz gerekecek. Bunun için (yani ekranda istedigimiz yere yazdirmak için) gotoxy komutunu kullanacagiz. Bu arada 10 sütunun da ekrana sigmayacagini göz önünde tutarsak bir de if kullanabiliriz. Neyse, iste program, yazin ve çalistirin:

Program Carpim_Tablosu;
uses crt;
var
a,b:byte;
begin clrscr;
gotoxy(27,1);write('Ç A R P I M T A B L O S U');
a:=0;
repeat
a:=a+1;
b:=0;
repeat
b:=b+1;
if a<=5 then gotoxy(a*16-15,b+2) else gotoxy((a-5)*16-15,b+13);
write(a:2,' x ',b:2,' = ',(a*b):3);
until b=10;
until a=10;
readln;
end.
Programimiz bir öncekine göre uzunluk olarak degismedi. Eminim siz çok daha uzun bir program bekliyordunuz. 2 komut çikardi, 1 komut ekledik. Ekledigimiz komut olan

if a<=5 then gotoxy(a*16-15,b+2) else gotoxy((a-5)*16-15,b+13);
komutuna bakalim. Eger diyor a 6'dan küçükse (yani 5'e esit veya 5'ten küçükse) a*16-15 numarali kolona, ve b+2 numarali satira, degilse (yani 5'den büyükse) (a-5)*16-15 numarali kolon ve b+13 numarali satira git. Bundan sonra da write ile oraya gerekli islemi yaziyoruz. Peki bu sayilari nasil belirledim? Ekranin 80 kolon ve 24 satir oldugunu söylemistik. Buna göre hesapladim. Birinci islem için kolon 1 olacak sekilde her islemde kolon numarasi 16 artsin dedim. Zaten a'nin 1 oldugu durumda a*16-15 sonucu 1, 2 oldugu durumda 17, 3 oldugu durumda 33... oluyor. a'nin ve b'nin bütün degerleri için yerine koyunca da ortaya düzgün bir tablo çikiyor. Eger tam olarak anlamadiysaniz elinize bir kagit ve kalem alin ve kendinizi bilgisayar, kagidi da ekran yerine koyun ve programin dedigi her seyi tek tek yapin. Çizdiginiz tablo ekrandaki ile ayni olacaktir.
Repeat döngüsüne son olarak digerlerinden daha basit bir örnek verelim ve diger döngülere geçelim:

Program dongumuz;
uses crt;
var
basilan_tus: char;
begin
clrscr;
repeat
writeln('Merhaba!!!! Çikmak için Escape tusuna basin...');
basilan_tus:=readkey;
until basilan_tus=#27;
end.
Burada program çalisinca Esc hariç bir tusa basarsaniz ekrana sürekli ayni mesaj çikar. Esc'ye basinca da program sona erer. #27, ESC demektir. Klavyedeki her tusun (alt, ctrl ve shift hariç) bir kodu vardir. Mesela A'nin kodu #65, C'nin kodu #67, Enter tusunun kodu #13'tür. Bir programda writeln(#65); yazarsaniz ekrana A yazar. Yani basilan_tus:='A'; ile basilan_tus:=#65; aynidir. Bu repeat until döngüsünde de until'e sart olarak tusun escape'e (yani #27'ye) esit olup olmadigi kontrol ediliyor. Diger özel tuslarin (ok tuslari, delete, backspace, home.. vb) kodlarini toplu olarak verecegiz.
Logged

Herşeyi Sana Yazdım , Herşeye Seni YazdımResimlerin Görüntülenmesine İzin Verilmiyor
Resimleri Görebilmek İçin Üye Ol veya Giriş Yap

( N Resimlerin Görüntülenmesine İzin Verilmiyor
Resimleri Görebilmek İçin Üye Ol veya Giriş Yap D )
Ocak 22, 2007, 05:00:19 ÖS  |  Uyarı : Dikkat bu Administrator mesajıdır |
ChaR
Administrator
********

Üye Bilgileri
Üye ID: 1

Mesaj Sayısı: 2622

Nerden: Bilmem Sence Nerden ;)

Cinsiyet: Bay

Rep : 138


« Not Found Keyboard »

Durumum:


Üyelik Bilgileri WWW

Admin

While - Do Döngüsü:
While döngüsünün mantigi da aslinda Repeat'a benzer. Repeat'a "Su sart olana kadar döngüyü sürdür" diyorsak While'a da "Su sart oldugu sürece döngüyü sürdür" diyoruz. While kelimesinin anlami "iken", do kelimesinin anlami ise "yap" demektir. Bu durumda "While sart do" ise "sart dogru iken yap" anlamindadir. While döngüsünün Genel Kullanimi;

while (sart ya da sartlar) do islem...
seklinde olup birden çok islem yaptirilmak istendiginde begin-end blogu kullanilir:

while (sart ya da sartlar) do begin
islem 1
islem 2
islem 3
...
...
end;
Simdi repeat ile yaptigimiza 1'den 10'a kadar sayilari yazdirma islemini while ile yapalim:

Program while_denemesi;
uses crt;
Var
sayi:byte;
begin clrscr;
sayi:=1;
while (sayi<=10) do begin
writeln(sayi);
sayi:=sayi+1; {Sayi'nin degeri 1 artiriliyor}
end;{While dongusunun sonu}
readln;{Enter'a basilmasi bekleniyor...}
end.{Programin Sonu}
Bu progarmdaki döngü Türkçe'ye "sayi 10'dan küçük ya da 10'a esit oldugu sürece begin ile end arasindaki islemleri yap" ya da "sayi 11'den küçük iken su islemleri yap.." diye tercüme edilebilir.
Logged

Herşeyi Sana Yazdım , Herşeye Seni YazdımResimlerin Görüntülenmesine İzin Verilmiyor
Resimleri Görebilmek İçin Üye Ol veya Giriş Yap

( N Resimlerin Görüntülenmesine İzin Verilmiyor
Resimleri Görebilmek İçin Üye Ol veya Giriş Yap D )
Ocak 22, 2007, 05:00:58 ÖS  |  Uyarı : Dikkat bu Administrator mesajıdır |
ChaR
Administrator
********

Üye Bilgileri
Üye ID: 1

Mesaj Sayısı: 2622

Nerden: Bilmem Sence Nerden ;)

Cinsiyet: Bay

Rep : 138


« Not Found Keyboard »

Durumum:


Üyelik Bilgileri WWW

Admin

For - to [downto] - do Döngüsü:
Eger bir sayinin degerini belirli bir degerden baslayip yine belirli bir degere kadar 1'er 1'er artirmak ve her artirma isleminde de istenilen islemleri yapmak isterseniz bu döngüyü kullanabilirsiniz. Cümle biraz karisik olmus olabilir ama komutun kullanimi gayet basit:

For degisken:=baslangiç_degeri to bitis_degeri do islem...
ya da birden çok islem yapacaksaniz:

For degisken:=baslangiç_degeri to bitis_degeri do Begin
islem 1
islem 2
islem 3
...
...
End;
seklinde kullanabilirsiniz. Burada her seferinde sayi:=sayi+1 isleminden kurtulmus oluyoruz. For döngüsü (bitis_degeri - baslangiç_degeri+1) kadar yapilacaktir. Mesela baslangiç degeri 3, bitis degeri 7 ise döngü (7-3) 5 defa yapilir. Çünkü döngü 3'den basliyor ve 3,4,5,6,7 olmak üzere 5 deger aliyor. Bu durumda 5 defa yapilir ve her seferinde degiskenin degeri degisir. Lafi uzatmadan 1'den 10'a kadar olan sayilari ekrana yazdiralim:

Program GercekDongu;
Uses crt;
var
a:integer;
begin clrscr;
for a:=1 to 10 do writeln(a);
readln;
end.
Iste size çok kisa bir program. Repeat ile daha uzun yazdigimizi hatirlayin. Peki bir de bu sayilarin karesini de yazalim:

Program GercekDongu2;
Uses crt;
var
a,kare:integer;
begin clrscr;
for a:=1 to 10 do begin
kare:=a*a;
writeln(a,' -> ',kare);
end; {For döngüsünün sonu}
readln;
end.
hatta buna bile gerek duymadan

Program GercekDongu3;
Uses crt;
var
a:integer;
begin clrscr;
for a:=1 to 10 do writeln(a,' -> ',a*a);
readln;
end.
yapabilirsiniz. Peki simdi de bir sayinin faktoriyelini bulalim. Faktoriyel'i biliyorsunuzdur herhalde. Mesela 3 faktoriyel demek 1x2x3 demektir ve sonucu 6 olur. 5 faktoriyel ise 1x2x3x4x5 demektir ve sonucu 120 olur. Simdi girilen bir sayinin faktoriyelini bulalim:

Program GercekDongu_FaktoriyelBul;
Uses crt;
var
a, sayi:integer;
fakt:longint;
begin clrscr;
write('Kaç faktoriyel olsun: ');readln(sayi);
fakt:=1;
for a:=1 to sayi do fakt:=fakt*a;
writeln(sayi,'! = ',fakt);
end.
Simdiye kadar neredeyse hep matematiksel islemler yaptik. Simdi de görsel birsey yapalim. Mesela bir yaziyi ekranin sol üst kösesinden baslayarak saga dogru kaydiran bir program yapalim:

Program Yaziyi_Kaydir;
Uses crt;
var
a:byte;
yazi:string;
begin clrscr;
yazi:='Linklerin Görülmesine İzin Verilmiyor
Linki Görebilmek İçin Üye Ol veya Giriş Yap
www.seckin.canavari.com
';
for a:=1 to 50 do begin
gotoxy(a,1);write(yazi);delay(50);clrscr;
end;
end.
Eger yazi çok hizli kayiyorsa delay(50); degerini artirin, yavas kayiyorsa azaltin. Delay'i sonra anlatiriz. Simdi de bir yaziyi çapraz olarak ekrana yazalim. Ama yazi en fazla 24 harf olsun:

Program Yazdir_Bakalim;
Uses crt;
var
a:byte;
yazi:string;
uz:byte;
begin clrscr;
write('Bir yazi yazin (En fazla 24 harf): ');readln(yazi);
uz:=length(yazi);
clrscr;
for a:=1 to uz do begin
gotoxy(a,a);write(yazi[a]);
gotoxy(80-a,a);write(yazi[a]);
gotoxy(40,a);write(yazi[a]);
end;
readln;
end.
Yaziyi ekrana üç farkli sekilde yazdiriyoruz. Burada kullandigimiza yazi[a] 'yi önceden anlatmistik. mesela yazi[5] o yazinin 5. harfidir. Örnegin yazi:='Seckin'; ise yazi[2]='e' olur.
For döngüsünün ikinci kullanimi da to yerine downto iledir. Bu sekilde sayi 1'er 1'er artacaginza 1'er 1'er azalir. Bunun için baslangiç degeri bitis degerinden büyük olmalidir. Simdi de 200'dan 1'e kadar olan sayilari yan yana yazalim.

Program asagigit;
uses crt;
var
a:byte;
begin clrscr;
for a:=200 downto 1 do write(a:4);
readln;
end.
Bir de girilen 10 tane sayidan 10'dan büyük olan sayilar ile 10'dan küçük olan sayilarin sayisini bulan programi yapalim:

Program bul_bakalim;
Uses crt;
var
b,k,o:byte;
a:byte;
sayi:byte;
begin clrscr;
k:=0;b:=0;o:=0;
for a:=1 to 10 do begin
write('Bir sayi giriniz: ');readln(sayi);
if sayi<10 then k:=k+1;
if sayi>10 then b:=b+1;
if sayi=10 then o:=o+1;
end;
clrscr;
writeln('10''dan küçük olanlar: ',k,' tane.');
writeln('10''dan büyük olanlar: ',b,' tane.');
writeln('Girilen 10 sayisi: ',o,' tane.');
readln;
end.


ALINTIDIR...
Logged

Herşeyi Sana Yazdım , Herşeye Seni YazdımResimlerin Görüntülenmesine İzin Verilmiyor
Resimleri Görebilmek İçin Üye Ol veya Giriş Yap

( N Resimlerin Görüntülenmesine İzin Verilmiyor
Resimleri Görebilmek İçin Üye Ol veya Giriş Yap D )
Ekim 02, 2007, 01:58:51 ÖS
anaconda_
BanneD
*
Avatar Yok

Üye Bilgileri
Üye ID: 2214

Mesaj Sayısı: 1911

Nerden: anaconda'nın yanından

Cinsiyet: Bay

Rep : 26


AnaCoNDaa

Durumum:


Üyelik Bilgileri WWW


bilqi için tşk
Logged
Ocak 07, 2008, 10:15:22 ÖÖ
AssAssiN
Cry'n With Scream'n
Asistan Yönetici
*****

Üye Bilgileri
Üye ID: 34

Mesaj Sayısı: 1839

Nerden: Anywhere

Cinsiyet: Bay

Rep : 41


I've been living a lie, there's nothing inside..

Durumum:


Üyelik Bilgileri


Saolasın hocam yararını görüyorum. Anlatım dışı biraz daha örnek versen daha süper olacak..
Logged
Sayfa: 1 [2]
  Yazdır  
Pascal Dersleri...
 
Gitmek istediğiniz yer:  

MySQL ile Güçlendirildi PHP ile Güçlendirildi Powered by SMF 1.1.2 | SMF © 2006, Simple Machines LLC
Seo4Smf v0.2 © Webmaster's Talks
XHTML 1.0 Geçerli! CSS Geçerli!