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:='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.