Yenilenen Yüzü İle FrmHigH.Com Sizlerle..
register


FrmHigh.com l ANASAYFA »ForumHigh - Programlama ve Webmaster »Yazılım Mimarisi »Pascal » Pascal Temel Dersleri

Pascal Temel Dersleri

Pascal kategorisi içerisinden Pascal Temel Dersleri konusunu görüntülemektesiniz, Gotoxy: Simdiye kadar yaptigimiz programlarda hep ekranin sol üst kösesinden baslayarak bilgileri yazdirdik. Ancak sizin de akliniza "Yahu bu ekranin istedigimiz yerine bir seyler yazdiramaz miyiz?" sorusunuz geldigini tahmin ediyorum. …


Cevapla

 

LinkBack Seçenekler Stil
Alt 12-13-2007, 14:28   #11 (permalink)
Profil Bilgileri
Banlı Üye

SanalsysteM - ait Kullanıcı Resmi (Avatar)
 
Durumu: Çıkış Yapmış
Üyelik tarihi: Oct 2007
Üye No: 54
Mesajlar: 1,609
Tecrübe Puanı: 0
Rep Puani: 1670
Rep Derecesi: SanalsysteM seviye 1SanalsysteM seviye 1SanalsysteM seviye 1SanalsysteM seviye 1SanalsysteM seviye 1SanalsysteM seviye 1SanalsysteM seviye 1SanalsysteM seviye 1SanalsysteM seviye 1SanalsysteM seviye 1SanalsysteM seviye 1
Standart

Gotoxy:
Simdiye kadar yaptigimiz programlarda hep ekranin sol üst kösesinden baslayarak bilgileri yazdirdik. Ancak sizin de akliniza "Yahu bu ekranin istedigimiz yerine bir seyler yazdiramaz miyiz?" sorusunuz geldigini tahmin ediyorum. Pascal'da ekranin istenilen yerine gitmek için gotoxy komutu kullanilir. "Gitmek" ten kastim imleci istenilen yere götürmektir. Zaten ekrana write ile bir seyler yazarken imlecin bulundugu yerden itibaren yazildigini söylemistik. Bu komutun kullanimi

gotoxy(X,Y);
seklindedir. Burada X yerine kaçinci kolona gidilmesi isteniyorsa o kolonun numarasi, Y yerine ise kaçinci satira gidilmesi isteniyorsa o satirin numarasi yazilir. Normal bir ekranda 80 kolon ve 24 satir (25'e çikartilabilir) vardir. Gotoxy komutunu kullanirken buna dikkat etmelisiniz. Yani gotoxy(83,12); komutunu yazarsaniz büyük olasilikla istediginiz görüntüyü elde edemezsiniz! Bu komut genelde write ifadesinden önce kullanilir. Zaten amaci da ekranin istenilen yerine yazi yazdirmak degil mi? Bir örnek yapalim:

Program git_bakalim;
uses crt;
begin clrscr;
gotoxy(30,13);write('www.kalkan.cjb.net');
readln;
end.
gotoxy(X,Y); komutunda X ve Y yerine degisken de koyabiliriz. Tabii ki bir tam sayi tipli degisken (byte, integer, longint.. gibi). Bu durumda degiskenin degeri neyse ona göre islem yapilir. Mesela küçük bir program yapalim:

Program citir;
uses crt;
var
x,y:byte;
ad:string;
begin clrscr;
write('Adiniz: ');readln(ad);
write('X kordinati: ');readln(x);
write('Y kordinati: ');readln(y);
clrscr;
gotoxy(10,23);
write('Bu program Seckin YASTIKCILAR tarafindan yapildi!');
gotoxy(x,y);
write(ad);
readln;
end.
Gotoxy komutunu programlarimizin içinde sikça kullanacagiz.
  Alıntı ile Cevapla
Alt 12-13-2007, 14:29   #12 (permalink)
Profil Bilgileri
Banlı Üye

SanalsysteM - ait Kullanıcı Resmi (Avatar)
 
Durumu: Çıkış Yapmış
Üyelik tarihi: Oct 2007
Üye No: 54
Mesajlar: 1,609
Tecrübe Puanı: 0
Rep Puani: 1670
Rep Derecesi: SanalsysteM seviye 1SanalsysteM seviye 1SanalsysteM seviye 1SanalsysteM seviye 1SanalsysteM seviye 1SanalsysteM seviye 1SanalsysteM seviye 1SanalsysteM seviye 1SanalsysteM seviye 1SanalsysteM seviye 1SanalsysteM seviye 1
Standart

Programlamanin en zevkli yani bir seyleri karsilastirip sonucuna göre bir islem yapmak ya da yapmamaktir diyebilirim. Aslinda programlama da zaten budur. Programlamaya ilk baslarken algoritmalar konusunda bir örnek vermistik. Orada "Eger hava yagmurluysa semsiyeni al" demistik. Bu islemi simdiye kadar ögrendigimiz komutlarla yaptirmamiz olanaksizdir.
Karsilastirma ve karar verme islemleri olmasa program ilk satirindan itibaren satir satir çalisir ve en sonunda "End." komutuyla biter. Yani program içerisinde belirli sartlarda programin akisi degistirilemez. Pascal'da (ve neredeyse bütün programlama dillerinde ve scriptlerinde) kontrol deyimi if..then..else seklindedir. Ayrica Pascal'da baska kontrol deyimleri de vardir. If...then...else deyiminin genel kullanimi:

if
(sart ya da sartlar) then
sart dogruysa yapilacak islem
else
sart yanlissa yapilacak islem
gibidir. Tabii ki hepsi bir satirda da kullanilabilir. Ayrica sartin dogru olmasi (ya da yanlis olmasi) durumunda birden çok islem yaptirilmak isteniyorsa bu islemlerin hepsi begin ile end arasina su sekilde yazilir:

if
(sart ya da sartlar) then begin
sart dogruysa yapilacak islemler
end else
sart yanlissa yapilacak islemler
end;
begin ve end;'i birazdan anlatacagim. Simdi çok basit bir örnek yapalim:

Program
Deneme;
Uses Crt;
Var
notu:integer;
Begin Clrscr;
write('Matematik Dersinden Aldiginiz Notu Giriniz: ');Readln(notu);
clrscr;
if notu>69 then write('Aferin Geçtiniz!') else write('Malesef Kaldiniz!');
write(readkey);
end.
Bu program sinavdan aldiginiz notu belirli bir islemden geçiriyor ve sonucuna göre bir seyler yazdiriyor. Simdi biraz daha ayrintili görelim. if komutuna kadar olan her seyi daha önce gördük. Readln komutuyla sayisal bir bilgi olan sinav sonucu notu degiskenine aktariliyor. Ondan sonra ekran siliniyor. Sonra su komut var:

if
notu>69 then write('Aferin Geçtiniz!') else write('Malesef Kaldiniz!');
Ilk önce bu komutla ne yapilmak istendigine bakalim. Amaç eger notu degiskeninin degeri 69'dan büyükse ekrana 'Aferin Geçtiniz!', eger degilse (yani notu degiskeninin degeri 69'a esit ya da daha küçükse) ekrana 'Maalesef Kaldiniz' yazdirmaktan ibarettir. Yani bu komutun Türkçe meali:
Eger notu degiskeninin degeri 69'dan büyük ise Aferin Geçtiniz! yaz, degilse Malesef Kaldiniz! yaz.
notu>69 ifadesini parantez içerisine de yazabilirsiniz. Zaten birden fazla sart varsa parantez kullanmak mecburidir. Dikkat edin write('Aferin Geçtiniz!') ifadesinde noktali virgül yok. Neden? Çünkü komut daha bitmedi. Derslerin basinda "Pascal'da her komutun sonuna noktali virgül konulur" demistim.
Programlamada notu>69 ifadesinin degeri ya TRUE (dogru) olur ya da FALSE (yanlis). Burada notu'nun degeri 69'dan büyükse bu sart TRUE, degilse FALSE olur. Eger Sart true ise THEN ifadesinden sonraki islemler, eger sartin sonucu false ise ELSE ifadesinden sonraki islemler yapilir. Biraz düsünürseniz burada aslinda else deyimi kullanilmadan da program yapilabilir. Nasil mi? Iste böyle:

Program
Deneme;
Uses Crt;
Var
notu:integer;
Begin Clrscr;
write('Matematik Dersinden Aldiginiz Notu Giriniz: ');Readln(notu);
clrscr;
if notu>=70 then write('Aferin Geçtiniz!');
if notu<70 then write('Malesef Kaldiniz!');
write(readkey);
end.
Burada sarti 69 yerine 70 yaptik. Bir sey fark etmez. Maksat degisiklik olsun. Bu arada eger write(readkey); de ne diyorsaniz bir önceki konuya göz atin. Gördügünüz gibi

if
(notu>=70) then write('Aferin Geçtiniz!');
if (notu<70) then write('Malesef Kaldiniz!');

ile

if
(notu>=70) then write('Aferin Geçtiniz!') else write('Malesef Kaldiniz!');
ifadeleri ayni isi yapiyorlar. Tabii ki else kullanmak daha mantikli. if deyimine genel olarak anladiysak (ve kendimiz de biraz örnek yaptiysak) simdi karsilastirma islemlerine bir göz atalim:
Pascal Temel Dersleri
Buradaki dogru (True) ya da yanlis (False) kavramlarini belirtmistim. Program akisi bunlara göre belirlenir. Simdiye kadar ögrendiklerimizle bir ögrencinin Matematik dersinden 100 üzerinden aldigi sinav notunu 5'lik sisteme çeviren programi yapalim. Beslik sistemin ne oldugunu biliyorsunuzdur:

0-44 arasi 1
45-54 arasi 2
55-69 arasi 3
70-84 arasi 4
85-100 arasi 5
seklindedir. Buradan ögrencilerin 5 alamamasina kizan velilere duyurulur. Simdi programimizi yazalim:

Program
Denemedir;
Uses Crt;
Var
yuzluk, beslik:byte;
Begin Clrscr;
write('Matematik sinavinin sonucu (0 ile 100 arasi)..: ');readln(yuzluk);
if yuzluk<=44 then beslik:=1;
if (yuzluk>=45) and (yuzluk<=54) then beslik:=2;
if (yuzluk>=55) and (yuzluk<=69) then beslik:=3;
if (yuzluk>=70) and (yuzluk<=84) then beslik:=4;
if yuzluk>=85 then beslik:=5;
clrscr;
writeln('Yüz üzerinden.....: ',yuzluk);
writeln('Bes üzerinden.....: ',beslik);
readln;
end.
Gördügünüz gibi artik ögrenciler her sinavdan sonra aldiklari notun 5'lik sistemde kaça denk geldigini kara kara düsünmeyecekler. Açacaklar programi yazacaklar notlarini, bilgisayar hesaplayacak Pascal Temel Dersleri Bu arada bu and kelimesinin nereden ve neden geldigini anlatacagim, simdiden panige kapilmayin.
Bu arada simdiye kadar yaptigimiz programlarimizi EXE yaptiniz mi bilmiyorum. Eger hala denemediyseniz bunu yapin mesela. Açin programinizi ve ilk derslerde anlattigi gibi exe yapin. Muhtelemen exe dosyaniz pascal'in bulundugu dizinde olusacaktir. Ordan bulabilirsiniz. Exe dosyaniz olustugu halde bulamiyorsaniz Baslat menüsünden Bul/Dosya ve Klasörler seçeneginden dosya adini yazarak arayabilirsiniz. Dosyanizi nasil exe yapacaginizi unuttuysaniz "Pascal editörü'nün kullanimi" adli derse bakin. Programi exe yapmayi basardiysaniz Windows'ta çift tiklayarak çalistirabilirsiniz artik. If then else kalibina genel bir giris yaptik. Sidmi devam edelim..
if then else kalibinin genel olarak "if (sart ya da sartlar) then begin islemler.. end else begin islemler.. end;" seklinde oldugunu söyledik. Yani if ile birden çok sarti da sinayabiliriz. Aslinda basta if kalibinin mantiksal karsilastirma oldugunu söylemek gerekirdi ama zaten sizin anladiginizi saniyorum. Yani siz bu if kalibini kullaninca bilgisayara bir mantiksal karsilastirma yaptiriyorsunuz. Bir önceki örnegimizde if ile birlikte iki sart kullandik. Sartimiz söyle idi:

if
(notu>=55) and (notu<=69) then beslik:=3;
Burada and kelimesiyle (Türkçe'si "ve" demektir) yanlizca iki sartin da dogru oldugu durumlarda bu islemi yapmasini söylüyoruz. (Bu arada tahmin ettiginiz gibi else'in kullanimi zorunlu degil.) Yukardaki sartin Türkçesi söyledir:
Eger notu degiskeninin degeri 55'ten büyük ya da 55'e esit VE notu degiskeninin degeri 69'dan küçük ya da 69'a esit ise beslik degiskeninin degerini 3 yap.
Burada >= ve <= kullandigimizdan cümle biraz karisik oldu. Baska bir örnegi Türkçe'ye çevirelim. Örnegin;

if
(notu>54) and (notu<70) then beslik:=3;
Kalibinin Türkçe'si daha sade olur ve yukardaki örnekle aslinda ayni isi yapar (Sayilara dikkat ederseniz bunu görürsünüz):

Eger
notu 54'den büyük VE 70'den küçük ise beslik degiskeninin degerini 3 yap.
Yani burada aslinda bilgisayara notu degiskeninin degerinin 55 ile 69 arasinda oldugu durumlardan bahsediyoruz. Zaten notu degiskeninin degeri 54'den büyükse ve 70'den küçükse bunlardan baska bir sayi olamaz. Peki ilk derslerimizde ögrendigimiz Set (yeni Küme) tipinde bir veri kullanarak bunu daha kisa ve anlasilir olarak yapamaz miyiz. Mesela bilgisayara direk olarak "Eger notu 55 ile 69 arasindaysa beslik degiskeninin degerini 3 yap" diyemez miyiz? Deminki örnekte And kullanmistik, burdada Türkçesi içerisinde, içinde anlaminda olan in kelimesini kullanacagiz. Yani notu degiskeninin degerinin "55 ile 69 arasindaki tüm sayilari kapsayan bir küme" içerisinde olup olmadigini kontrol edecegiz. Nasil mi? Iste böyle:

if
notu in [55..69] then beslik:=3;
Gördünüz mü ne kadar kisa ve anlasilir oldu! Burada kümemiz [55..69] 'dur. Bunu daha önce anlatmistik. Ama birazdan in ifadesiyle kullanimini özel olarak ele alacagiz. Simdi and ve in gibi diger ifadelerin hepsine bir göz atalim:
Pascal Temel Dersleri
Ifade Anlami AND Ve demektir. Arasina konuldugu iki (ya da daha fazla) sartin hepsinin dogru oldugu durumlarda sonuç dogru, aksi halde yanlis olur. OR Veya anlamindadir. Arasina konuldugu iki (ya da daha fazla) sartin en az birisinin dogru oldugu durumlarda sonuç dogru, aksi halde, yani hepsi yanlis ise sonuç yanlis olur. NOT Degil manasindadir. Bir ya da daha fazla sartin soluna konuldugunda sartlarin sonucunun tersini yapar. Yani sonuç true ise false, false ise true olur. In ifadesi bunlarin içerisine girmiyor. Zaten onu bir önceki sayfadaki tabloda vermistik. Ayrica bir de az kullanilan xor var ama ben simdiye kadar onu hiç kullanmadim. Gerekirse ilerde anlatiriz. Anlami "veya degil"dir.
  Alıntı ile Cevapla
Alt 12-13-2007, 14:29   #13 (permalink)
Profil Bilgileri
Banlı Üye

SanalsysteM - ait Kullanıcı Resmi (Avatar)
 
Durumu: Çıkış Yapmış
Üyelik tarihi: Oct 2007
Üye No: 54
Mesajlar: 1,609
Tecrübe Puanı: 0
Rep Puani: 1670
Rep Derecesi: SanalsysteM seviye 1SanalsysteM seviye 1SanalsysteM seviye 1SanalsysteM seviye 1SanalsysteM seviye 1SanalsysteM seviye 1SanalsysteM seviye 1SanalsysteM seviye 1SanalsysteM seviye 1SanalsysteM seviye 1SanalsysteM seviye 1
Standart

Simdi and, or ve not ifadelerini tek tek ve birlikte kullanan örnekler yapalim. Ilk önce and ile ilgili basit bir örnek yapalim. Bu programi and'in kullanimina örnek olmasi için yapiyoruz. Yoksa program pek bir ise yaramaz:

Program and_ornegi;
Uses Crt;
Var
sayi1, sayi2 : integer;
Begin Clrscr;
writeln('Asagiya 1 ile 10 arasi 2 sayi giriniz');
write('Birinci Sayi:');Readln(sayi1);
write('Ikinci Sayi:');Readln(sayi2);
clrscr;
if (sayi1 in[1..10]) and (sayi2 in[1..10]) then writeln('Sayilari dogru girdiniz')
else writeln('Sayilari Yanlis Girdiniz...');
readln;
end.
Programi TP'da yazip çalistirin ve birkaç sayi girin. Gördügünüz gibi ancak sayilarin ikisi de 1 ile 10 arasindaysa sonuç dogru oluyor, aksi halde (sayilarin birisi bile 1 ile 10'un disinda olsa) sonuç yanlis oluyor. Çünkü VE (and) kullandik. Peki bunun yerine sayilardan en az birisinin 1 ile 10 arasinda olmasini istesek ne yapariz. O zaman or (veya) kullaniriz:

Program and_ornegi;
Uses Crt;
Var
sayi1, sayi2 : integer;
Begin Clrscr;
writeln('Asagiya 1 ile 10 arasi 2 sayi giriniz');
write('Birinci Sayi:');Readln(sayi1);
write('Ikinci Sayi:');Readln(sayi2);
clrscr;
if (sayi1 in[1..10]) or (sayi2 in[1..10]) then writeln('Sayilari dogru girdiniz')
else writeln('Sayilari Yanlis Girdiniz...');
readln;
end.
Bu programi çalistirdiginizda iki sayidan birisini 1 ile 10 arasinda girerseniz, digerini ne girerseniz girin sonuç dogru olur. Eger ikisi birden 1 ile 10 arasinda degilse sonuç yanlis olur. Peki simdi de and ile or'u birlikte kullanarak kullanicidan 1,2,3,4,5,11 sayilarindan birisini yazmasini isteyelim. Eger bu yazilan iki sayi da bu sayilarin içindeyse sonuçta dogru yazsin, birisi bile bu sayilarin disindaysa sonuçta yanlis yazsin:

Program and_ornegi;
Uses Crt;
Var
sayi1, sayi2 : integer;
Begin Clrscr;
writeln('Asagiya 1,2,3,4,5,11 sayilarindan birisi olmak sartiyla 2 sayi giriniz');
write('Birinci Sayi:');Readln(sayi1);
write('Ikinci Sayi:');Readln(sayi2);
clrscr;
if ((sayi1 in[1..5]) or (sayi1=11)) and ((sayi2 in[1..10]) or (sayi2=11)) then writeln('Sayilari dogru girdiniz')
else writeln('Sayilari Yanlis Girdiniz...');
readln;
end.
Burada ilk önce sayi1'in 1 ile 5 arasinda olup olmadigina bakilir. Eger dogruysa zaten and kelimesinin solundaki iki sarti kapsayan sart dogru olur. Yani sayi ya 1 ile 5 arasindadir, ya da 11'dir. Eger sayi1 1 ile 5 arasinda degilse sart yanlis olur ama bir de or'un sagindakine bakilir. Eger sayi 11'e esitse bu sart dogru (true) olacagindan yine genel sart dogru olur. Bu durumda and kelimesinin solundaki sart dogru olmus olur. Eger and'in solundaki iki sart da yanlis ise sonuç otomatik olarak yanlis olur. Sag taraf için de (sayi2 için) ayni islemler yapildiktan sonra eger genel sart dogruysa sonuç dogru olur. Kendiniz birkaç örnek yaparak bunlari görebilirsiniz.
Simdi basit bir örnek daha yapalim. Bu program kullaniciya bir toplama islemi sorsun. Eger kullanici sonucu dogru girerse "Tebrikler, bildiniz" yazsin, aksi halde dogru sonucu ekrana yazsin. Yani ilk defa ciddi bir program yapiyoruz Pascal Temel Dersleri

Program Toplama_Programi;
Uses Crt;
var
s1,s2:integer;
toplam:integer;
Begin Clrscr;
{Rastgele iki sayi seciliyor...}
randomize;
s1:=random(100);
s2:=random(100);
{...0 ile 99 arasinda rastgele 2 sayi secildi}
writeln('Asagidaki toplama isleminin sonucunu yaziniz...');
writeln;
write(s1,' + ',s2,' = ');readln(toplam);
if (toplam=s1+s2) then writeln('Tebrikler, bildiniz...')
else writeln('Yanlis Sonuc! Cevap ',s1+s2,' olmaliydi.');
readln;
end.
Gördügünüz gibi if deyiminde sart olarak iki sayinin toplamini da verebiliriz. Hatta baska islemler bile yapabiliriz. Mesela sart olarak (toplam=(s1*21)/(s2+4)*11+9-s2*s1) gibi uzun bir aritmetik islem birle yazabiliriz. Ayrica esittir isaretinin sag ile solu yer degistirebilir. ((s1*21)/(s2+4)*11+9-s2*s1=toplam) gibi. Buralarda parantezlere dikkat etmelisiniz. Simdilik rastgele sayinin nasil bulundugunu ögrenmedik. Onun için o kisimlari kafaniza takmayin. Yukaridaki örnekte and ya da or kullanmadik ama faydali bir program oldugunu düsünüyorum. Not operatörü ise sonuç dogru ise yanlis, yanlis ise dogru yapar. Bununla ilgili bir program yapmistik ama daha iyi anlasilmasi için basit bir örnek daha yapalim. Bu program da 1 ile 5 arasinda bir sayi yazilmasini istesin. Eger sayi 1 ile 5 arasinda ise dogru, degilse yanlis yazsin:

Program deneme;
uses crt;
var
sayi:integer;
begin clrscr;
write('1 ile 5 arasi bir sayi giriniz: ');readln(sayi);
if not (sayi in [1..5]) then writeln('Yanlis!') else writeln('Dogru.');
readln;
end.
Buraya kadar genelde sayilarla ilgili islemler yaptik ama bunun mecbur olmadigini söylemistim zaten...
Programlamada karsilastirma ve (sonucuna göre) karar verme islemleri çok önemli ve genis kullanimlidir. Diger kullanim alanlarini görmeye devam edecegiz. Ama önce simdiye kadar pascal hakkinda ögrendiklerimizin hepsini birden kullanan ve nihayet bir ise yarayan bir oyun yapalim. Bu oyunda bilgisayar 1 ile 1000 arasinda rastgele bir sayi tutsun. Biz bir tahmin yapalim. Eger tahminimiz bilgisayarin tuttugu sayidan küçükse ekrana ÇIK, küçükse IN yazilsin ve bu islemler biz sayiyi dogru tahmin edene kadar sürsün. Hani bir oyun yapiyoruz ya -hiç gerek yok ama- bir de algoritmasini yapalim ki belki daha iyi anlasilir. Algoritmamiz söyle olabilir:

1) Rastgele (1 ile 1000 arasi) bir sayi tut.
2) Kullaniciya bir sayi sor.
3) Eger kullanicinin cevabi senin tuttugun sayidan büyükse ekrana "in" yaz.
4) Eger kullanicinin cevabi senin tuttugun sayidan küçükse ekrana "çik" yaz.
5) Eger kullanicinin cevabi senin tuttugun sayiya esitse ekrana "Aferin Bildin!" yaz.
6) Eger kullanicinin cevabi senin tuttugun sayiya esit degilse 2. adima git.
7) Programi bitir.
Bu algoritmayi kendinize göre yapabilirsiniz tabii. Zaten programciligin en zevkli yanlarindan birisi de ayni programi yapmak için çok fazla seçeneginiz ve çözüm yolunuz olmasidir. Simdi de programi yazalim. Programimiz söyle olabilir:

Program Tahmin_et_bakalim;
uses crt;
label en_bas;
var
sayi, tahmin, ts : integer;
begin clrscr;
ts:=0;
randomize;
sayi:=random(1000)+1;
gotoxy(1,1);write('1 ile 1000 arasi bir sayi giriniz...');
gotoxy(1,5);write('Islem: ');
en_bas:
gotoxy(13,3);write(' '); {Eski tahmini ekrandan siliyoruz}
gotoxy(1,3);write('Tahmininiz: ');readln(tahmin); {bir tahmin isteniyor}
ts:=ts+1; {Tahmin sayisi artiriliyor}

gotoxy(8,5);
if tahmin<sayi then write('Çik');
if sayi<tahmin then write('In ');
if sayi=tahmin then begin
writeln('Aferin Bildin!');
writeln('Tahmin Sayisi: ',ts);
end else goto en_bas; {tahmin yanlissa basa gidiliyor}


readln;
end.
Programi TP'da yazip çalistirin. Iste size güzel bir oyun! Programda asil dikkat etmemiz gereken yerleri kalin yaptim. Isterseniz size bu oyunu gelistirelim ve bu sefer biz içimizden bir sayi tutalim, bilgisayar bulsun! O zaman asagidaki programi pascal'da yazip çalistirin ve sonra da satir satir inceleyin. Ama programi çalistirdiginizda hile yapmayin. Yani aklinizdan tuttugunuz sayi 430 ise ve program 420'yi tahmin ederse in demek yok! Ona göre. Bu programi Pascal'da elinizle yazin. Yani kopyala/yapistir yapmayin. O zaman daha kolay ögrenirsiniz. Program söyle:

Program Tahmin_et_bakalim;
uses crt;
label en_bas;
var
tahmin, ts : integer;
alt,ust:integer;
tus:char;
begin clrscr;
writeln('Simdi aklinizdan bir sayi tutun ve eger benim söyledigim sayi');
writeln('sizin tuttugunuz sayidan küçükse çik anlaminda "ç" harfine, büyükse');
writeln('in anlamindaki "i" harfine bir defa basin.');
writeln;
writeln('Not: Sayi 1 ile 100 arasinda olmali!');
writeln;
writeln('Hazirsaniz Enter''a basin..');
readln;
clrscr;
alt:=1;
ust:=1000;
ts:=0;
gotoxy(1,1);write('Benim Tahminim...: ');
gotoxy(1,3);write('Ne yapiyim (i/ç).: ');
tahmin:=500;
en_bas:
gotoxy(20,1);write(tahmin);
gotoxy(20,3);
repeat
tus:=readkey;
until tus in['i','I','ç','Ç','D','d'];
if tus in['i','I'] then begin
ust:=tahmin;
tahmin:=(alt+ust) div 2;
end;
if tus in['ç','Ç'] then begin
alt:=tahmin;
tahmin:=(alt+ust) div 2;
end;
ts:=ts+1;
if tus in['d','D'] then begin
gotoxy(1,5);write('Aferin Bana!');
gotoxy(1,6);write('Tahmin Sayim: ',ts);
end else goto en_bas;
readln;
end.
Burada bilmedigimiz iki sey var. Birincisi repeat...until döngüsü. Ikincisi div islemi. Div (Ingilizcesi division) bölmek manasindadir ve solundaki sayiyi sagindaki sayiya bölüm küsurati atar. Yani mesela 6 div 3 = 2'dir ve 15 div 4 = 3'dür. Döngüler konusunu anlatacagiz. Programin çalisma mantigi gayet basit. Ama yeni programlamaya baslayan birisine karisik gelebilir. Program siz in dediginizde kendi kendine "Demek ki sayi bundan küçük, o zaman bundan sonra en fazla söyleyecegim sayi bu olsun, yani üst limit bu olsun" diyor ve ust:=tahmin ifadesi ile de bunu yapiyor. alt'in da mantigi ayni. Tahminini yaparken de alt ve ust degiskenlerini topluyor ve ikiye bölüyor. Programi çalistirdiginizda fark etmissinizdir zaten. Ilk tahmin hep 500 oluyor. Ondan sonra in derseniz 250, çik derseniz 750 oluyor... Tahmin sayisinin nasil hesaplandigi da gayet basit. Her sayi tahmininde tahmin sayisi bir artiriliyor.
  Alıntı ile Cevapla
Alt 12-13-2007, 14:30   #14 (permalink)
Profil Bilgileri
Banlı Üye

SanalsysteM - ait Kullanıcı Resmi (Avatar)
 
Durumu: Çıkış Yapmış
Üyelik tarihi: Oct 2007
Üye No: 54
Mesajlar: 1,609
Tecrübe Puanı: 0
Rep Puani: 1670
Rep Derecesi: SanalsysteM seviye 1SanalsysteM seviye 1SanalsysteM seviye 1SanalsysteM seviye 1SanalsysteM seviye 1SanalsysteM seviye 1SanalsysteM seviye 1SanalsysteM seviye 1SanalsysteM seviye 1SanalsysteM seviye 1SanalsysteM seviye 1
Standart

Eger simdiye kadar anlamadiginiz birsey yoksa ve kendiniz de biraz örnek yaptiysaniz artik baya bir Pascal biliyorsunuz demektir. Simdiye kadar iyi bir program yapamamamizin sebebi daha döngülere girmememizden kaynaklaniyor. if kalibini anlattik ama Pascal'da sadece karar verme komutu if degildir. Bir de Case-of deyimi var ki bazi durumlarda if'e göre çok daha kisa kod ile ayni isi yapmanizi saglar. Ayrica kullanimi da çok basittir. Mesela bir degiskenimiz var ve bu degiskenin aldigi 10 tane degisik deger için 10 ayri islem yaptirmak istiyoruz. Bunu if ile yapmak hem çok uzun olur hem de hata yapma sansimiz yüksek olur. Ama Case of kullanirsak çok daha anlasilir ve kisa yapabiliriz. Case'in genel kullanimi söyledir:

Case degisken of
deger 1 : islem 1;
deger 2 : islem 2;
deger 3 : islem 3;
...
...
End;
Tabii yine if'de (ve Pascal'in heryerinde) oldugu gibi birden çok islem yaptiracaksak begin ile and arasina aliriz. Sunun gibi:

Case degisken of
deger 1 : begin
islemler...
end;
deger 2 : begin
islemler...
end;
...
...
end;
Ayrica birden çok deger için bir islem yapilacaksa söyle kullanilir:

Case degisken of
deger 1, deger 2, deger 3 : islem 1;
deger 4 : islem 2;
deger 5, deger 6 : islem 3;
...
...
End;
Simdi güzel bir program yapalim. Kullanicidan bir sayi istesin ve ekranda bir menü olsun. Seçime göre belirli islemler yapilsin. Programi yazmaya baslayalim:

Program SF;
Uses Crt;
Label
en_bas;
var
sayi:longint;
secim:char;
cikis:boolean;
begin clrscr;
cikis:=false;
write('1 ile 1000 arasi bir sayi giriniz: ');readln(sayi);
en_bas:
clrscr;
gotoxy(30,8);write('::: Menü :::');
gotoxy(30,10);write('[1] Sayinin Karesini yaz');
gotoxy(30,11);write('[2] Sayinin Karekökünü yaz');
gotoxy(30,12);write('[3] Sayinin Kübünü yaz');
gotoxy(30,13);write('[4] Programdan çik');
gotoxy(20,18);write('Seçiminizin önündeki sayiya basiniz');
gotoxy(30,15);write('Seçiminiz: ');
secim:=readkey;
case secim of
'1': begin
clrscr;
gotoxy(30,10);
write(sayi,'''nin Karesi= ',sayi*sayi);
secim:=readkey;
end;
'2': begin
clrscr;
gotoxy(30,10);
write(sayi,'''nin Karekökü= ',sqrt(sayi)104);
secim:=readkey;
end;
'3': begin
clrscr;
gotoxy(30,10);
write(sayi,'''nin Kübü= ',sayi*sayi*sayi);
secim:=readkey;
end;
'4': cikis:=true;
end; {Case'in sonu}
if (not cikis) then goto en_bas;
clrscr;
writeln('Güle Güle... writen by [Üye Olmayanlar Forumdaki Linkleri Göremezler.Ücretsiz Üye Olmak İçin Tıklayın]
end.
Gördügünüz gibi secim:=readkey; komutuyla bir tusa basilmasini bekliyor ve case secim of ile de bu tusun '1', '2', '3' veya '4' olmasi durumunda yapilacak islemler belirtiliyor. '4' olmasi durumunda cikis:=true ile cikis isimli boolean degiseknin degeri true oluyor. if (not cikis) then goto en_bas; ile de eger cikis'in degeri false ise (ki '4'e basilmadikça hep false olur, çünkü programin basinda false yaptik) en_nas; labelinin oldugu yere gidiyor. Dolayisiyla da true olunca programdan çikilmis oluyor. Artik programlarimizda menü yapmaya da bir örnek vermis olduk. Tabii hareketli menü yapmayi da anlatacagiz ama o daha çok ilerde.. Bu örnek karisik geldiyse konunun daha iyi anlasilmasi için basit bir örnek daha yapalim:

Program FS;
Uses Crt;
var
sayi:longint;
begin clrscr;
write('Bir Sayi Giriniz: ');readln(sayi);
case sayi of
0..9: writeln('Bu sayi 1 basamaklidir');
10..99: writeln('Bu sayi 2 basamaklidir');
100..999: writeln('Bu sayi 3 basamaklidir');
else writeln('Bu sayi 3''den çok basamaklidir');
end;{Case'in sonu}
end.
Burda case ile birlikte else'in de kullanimini gördük. Eger case ile belirttigimiz hiçbir sart dogru degilse bir islem yapmasini isteyebiliriz. Bu durumda bütün sartlarin sonuna else.. koyariz. Yine case kullanirken iki nokta üst üste (Pascal Temel Dersleri isaretinin soluna araya virgül koyarak birden çok sart da koyabilirsiniz.

case
sayi of
13, 17, 4, 10, 9: writeln('Bu sayi benim sevdigim sayilardan birisidir!');
else writeln('Bu sayilari hiç sevmem Pascal Temel Dersleri');
end;
gibi.. Case komutunu genelde bir degiskenin birden çok sonucuna göre farkli islemler yaptirmak istediginizde kullanabilirsiniz. Dikkat etmeniz gereken case degisken of kalibinda belirttiginiz degisken ile alabilecegi degerlerin ayni tipte olmasidir. Yani degisken sayi tipindeyse herhalde degeri 'D' olamaz! Ya da char tipindeyse degeri 5 olamaz, '5' olabilir. Ikisinin arasindaki farki anlatmistim. Önceki sayi, sonraki karakterdir.
Pascal'da (ve diger bütün programlama dillerinde) iç içe istediginiz kadar if kullanabilirsiniz. Mesela:

if a>b then begin
if a=0 then writeln('B 0''dan küçük');
if b=0 then writeln('A 0''dan büyük');
end;
gibi olabilir. Ya da asagidaki 3 if deyimi ayni isi yapar:

1)
if a>1 then begin
if a<7 then
writeln('A degiskeninin degeri 1 ile 7 arasindadir.');
end;

2)
if a>1 then if a<7 then writeln('A degiskeninin degeri 1 ile 7 arasindadir.');

3)
if (a>1) and (a<7) then
writeln('A degiskeninin degeri 1 ile 7 arasindadir.');
Programci siz oldugunuza göre (ve amaç problemi en basit ve kisa yoldan çözmek olduguna göre) hangisini kullanacaginiza karar vermek size kalmis. 2. örnekte if a>1 then ifadesinden sonraki mavi yazili yerin tamami bir komuttur. Bunu daha önceden söylemistik. Öyleyse then'den sonraki komut bu olabilir. Burada iç içe iki if kullanilmistir.
  Alıntı ile Cevapla
Alt 12-13-2007, 14:31   #15 (permalink)
Profil Bilgileri
Banlı Üye

SanalsysteM - ait Kullanıcı Resmi (Avatar)
 
Durumu: Çıkış Yapmış
Üyelik tarihi: Oct 2007
Üye No: 54
Mesajlar: 1,609
Tecrübe Puanı: 0
Rep Puani: 1670
Rep Derecesi: SanalsysteM seviye 1SanalsysteM seviye 1SanalsysteM seviye 1SanalsysteM seviye 1SanalsysteM seviye 1SanalsysteM seviye 1SanalsysteM seviye 1SanalsysteM seviye 1SanalsysteM seviye 1SanalsysteM seviye 1SanalsysteM seviye 1
Standart

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.
  Alıntı ile Cevapla
Alt 12-13-2007, 14:31   #16 (permalink)
Profil Bilgileri
Banlı Üye

SanalsysteM - ait Kullanıcı Resmi (Avatar)
 
Durumu: Çıkış Yapmış
Üyelik tarihi: Oct 2007
Üye No: 54
Mesajlar: 1,609
Tecrübe Puanı: 0
Rep Puani: 1670
Rep Derecesi: SanalsysteM seviye 1SanalsysteM seviye 1SanalsysteM seviye 1SanalsysteM seviye 1SanalsysteM seviye 1SanalsysteM seviye 1SanalsysteM seviye 1SanalsysteM seviye 1SanalsysteM seviye 1SanalsysteM seviye 1SanalsysteM seviye 1
Standart

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.
  Alıntı ile Cevapla
Alt 12-13-2007, 14:32   #17 (permalink)
Profil Bilgileri
Banlı Üye

SanalsysteM - ait Kullanıcı Resmi (Avatar)
 
Durumu: Çıkış Yapmış
Üyelik tarihi: Oct 2007
Üye No: 54
Mesajlar: 1,609
Tecrübe Puanı: 0
Rep Puani: 1670
Rep Derecesi: SanalsysteM seviye 1SanalsysteM seviye 1SanalsysteM seviye 1SanalsysteM seviye 1SanalsysteM seviye 1SanalsysteM seviye 1SanalsysteM seviye 1SanalsysteM seviye 1SanalsysteM seviye 1SanalsysteM seviye 1SanalsysteM seviye 1
Standart

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.
  Alıntı ile Cevapla
Alt 12-13-2007, 14:32   #18 (permalink)
Profil Bilgileri
Banlı Üye

SanalsysteM - ait Kullanıcı Resmi (Avatar)
 
Durumu: Çıkış Yapmış
Üyelik tarihi: Oct 2007
Üye No: 54
Mesajlar: 1,609
Tecrübe Puanı: 0
Rep Puani: 1670
Rep Derecesi: SanalsysteM seviye 1SanalsysteM seviye 1SanalsysteM seviye 1SanalsysteM seviye 1SanalsysteM seviye 1SanalsysteM seviye 1SanalsysteM seviye 1SanalsysteM seviye 1SanalsysteM seviye 1SanalsysteM seviye 1SanalsysteM seviye 1
Standart

Evet, simdi, simdiye kadar yaptigimiz en iyi programi yapacagiz. Bir oyun yapacagiz. Bu oyunda bilgisayar ekranin rastgele biryerine * isareti koyacak. Biz de kolon numarasini ve satir numarasini (yani *'in kordinatlarini) tahmin etmeye çalisacagiz. Dogru kordinati bulana kadar oyun devam edecek. Bulunca da kaç tahminde buldugumuzu ekrana yazacak. Size bir ipucu: Kolon numarasi 2 ile 79 arasi, Satir numarasi 2 ile 20 arasi bir deger. Asagidaki programi yazip çalistirin. Iyi eglenceler:


Program Hedefi_bul
;
Uses crt;
Label
tekrar_gir;
var
x,y:byte;
satir,sutun:byte;
a,ts:byte;
begin
{ekranda rastgele bir kordinat seçiliyor...}
randomize;
x:=random(78)+2;
y:=random(19)+2;
{..rastgele korditanlar Seçildi}
ts:=0; {Tahmin Sayisi}
tekrar_gir:
clrscr;
{Çerçeve çizlmeye basliyor...}
for a:=1 to 80 do begin
gotoxy(a,1);write('.');
gotoxy(a,21);write('.');
end;
for a:=1 to 21 do begin
gotoxy(1,a);write('.');
gotoxy(80,a);write('.');
end;
{...Çerçeve çizildi}
gotoxy(1,23);write('Tahmininizi Giriniz->');
gotoxy(30,23);write('Sutun No...:');
gotoxy(50,23);write('Satir No...:');
gotoxy(x,y);write('*');
gotoxy(43,23);readln(sutun);
gotoxy(63,23);readln(satir);
if (not (satir in [2..20])) or (not (sutun in [2..79])) then goto tekrar_gir;
ts:=ts+1; {Tahmin sayisi artiriliyor}
if (satir=y) and (sutun=x) then begin
gotoxy(30,12);write('Aferin Bildiniz!');
gotoxy(30,13);write('Tahmin Sayisi: ',ts);
end else begin
gotoxy(sutun,satir);write('X');
delay(1000);
gotoxy(sutun,satir);write(' ');
goto tekrar_gir;
end;
readln;
end.
Programi çalistirdiginizda yanlis tahmin yapinca ekrana bir X koyar, biraz bekler ve geri sile bu X harfini. Eger bunu göremiyorsaniz ya da çok kisa süreli görebiliyorsaniz delay(1000); degerini artirin. Programda kullandigim ve simdiye kadar ögrenmedigimiz ikinci komut da randomize ve random. Diger bütün komutlari ve deyimleri biliyorsunuz. Bu programi iyi inceleyin. Çünkü benim Pascal ögrenmek istememdeki ilk vesile bu program olmustu. Döngülerle ilgili olarak da ekrana nasil noktalar ile çerçeve çizdigimize bakin. Programi belki daha güzel yapabilirdik ama elimden geldigince bilmedigimiz komutlari kullanmamaya çalistim.
  Alıntı ile Cevapla
Cevapla

Seçenekler
Stil

Yetkileriniz
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Açık
Smileler Açık
[IMG] Kodları Açık
HTML-KodlarıKapalı
Trackbacks are Açık
Pingbacks are Açık
Refbacks are Açık


Benzer Konular

Konu Konuyu Başlatan Forum Cevaplar Son Mesaj
Pascal LampaRd* Bilim Adamları 0 12-04-2007 21:11
Hızlı Okuma Dersleri RoKeDoN Genel 0 10-11-2007 15:37
Pascal DeRSiMLee Bilim Adamları 0 10-05-2007 01:06


Bütün Zaman Ayarları WEZ +3 olarak düzenlenmiştir. Şu Anki Saat: 11:44 .


Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.3.0
FrmHigh.Com

Web Stats