Basit Bir Konuda Takıldım

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
peynir
Üye
Mesajlar: 12
Kayıt: 27 Ara 2006 04:46

Basit Bir Konuda Takıldım

Mesaj gönderen peynir »

procedure TForm1.Button11Click(Sender: TObject);
var
k,ilk,son,deger,toplam:integer;
begin
ilk:=strtoint(edit8.Text);
son:=strtoint(edit9.Text);
toplam:=0;
begin
if ilk>son then
deger:=ilk;
ilk:=son;
son:=deger;
end;
for k:= ilk to son do
begin
inc(toplam,k);
end;
form1.Caption:='sonuç= ' + inttostr(toplam);
end;
end.

Arkadaşlar ben bu kodun nasıl işlediğini anlamadım. For ile edit8 in değişkeni ile edit9 un değişkenine gelinceye kadar ne yapmasını söylüyor. Ve şu inc kafama takıldı. Bana adım adım şu kodun işleyişini anlatırmısınız. Farz-ı misal edit8 e 1 rakamını girdim. edit9 a da 5 rakamını girdim. toplam ile i yi topla sonra form1 e 1 olarak yazdır mı diyor. bu inc hangi aşamada devreye giriyor. Bu ilk değişkenine verilen değeri hafıza da tutup sonra bir sonraki aşamada topluyor mu? Hiç bir şey anlamadım. Siz de benim dediğimden bir şey anlamadınız ise sadece inc olayını ve mümkünse tam olarak aşama aşama nasıl çalıştığını yazarsanız sevinirim. Şimdiden teşekkürler.
peynir
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: Basit Bir Konuda Takıldım

Mesaj gönderen aslangeri »

s.a.
benim anladığım kadarı ile bu kod girilen birinci sayıdan ikinci sayıya kadar olan sayıların toplamlarını alıyor.

inc comutu artırma(yani toplama) için kullanılıyor.
inc üzerine gelip f1 e bastığınız zaman ne işe yaradığını söyler.

Kod: Tümünü seç

procedure Inc(var X [ ; N: Longint ] );
x indeğerini N kadar arttırır. Eğer N parametresi verilmezse 1 arttırı.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
peynir
Üye
Mesajlar: 12
Kayıt: 27 Ara 2006 04:46

Re: Basit Bir Konuda Takıldım

Mesaj gönderen peynir »

Arkadaşlar teşekkürler. Yalnız ben bu kodların ne işe yradığını biliyorum. Ama aşama aşama anlatırsanız sevinirim. Aslında benim kafama takılan inc bölümü toplam o k değeri ne oluyr. toplam ile k toplanıyor toplandıktan sonra inc komutu ile ikinci defa mı artırılıyor. Bu inc in çalışma prensibini anlamadım.
peynir
Kullanıcı avatarı
bulutsuzluk_35
Üye
Mesajlar: 124
Kayıt: 06 Eki 2007 04:14
Konum: İzmir-Ankara-İstanbul-Antalya
İletişim:

Re: Basit Bir Konuda Takıldım

Mesaj gönderen bulutsuzluk_35 »

ya arkadaşlar yani hiç delphi kitaplarına eğitimlere bakmadan bu delphi sanki bi paint gibiymişte kurcalaya kurcalaya öğrenilecekmiş gibi hafife almanız ne kadar doğru ne kadar yanlış bilmiyorum.Arkadaş gelip bu foruma yazacağın konuyu bir araştır yahu.Yani şu kodun ne olduğunu program nasıl adım adım çalıştırılır onu bile öğrensen çözersin..
Yani acaba çokmu ukalaca yaklaştım bilmiyorum ama neyse artık yazdımmm...

Kod: Tümünü seç

try
  try
    inc(Bilgi);
  except
    sabir;
  end;
finally
  inc(Mutluluk);
end;
peynir
Üye
Mesajlar: 12
Kayıt: 27 Ara 2006 04:46

Re: Basit Bir Konuda Takıldım

Mesaj gönderen peynir »

Arkadaşım senin araştırmaktan kastın nedir? Elimde bir kitap var ve o kitap haricinde bir şey yok. Ben de kitapta yazmayan şeyi size soruyorum. Araştırıyorum işte. Bu yaptığım araştırmaya girmiyor mu? Bu delphi'nin nasıl çalıştığıyla ilgili aşağı yukarı bilgim var ama daha acemiyim gene de. Sen benden iyi biliyorsun diye azarlamana gerek var mı?
peynir
palandoken
Üye
Mesajlar: 151
Kayıt: 16 Eki 2006 10:43
Konum: ERZURUM

Re: Basit Bir Konuda Takıldım

Mesaj gönderen palandoken »

Merhaba ,

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var
   k,ilk,son,deger,toplam:integer;
begin
   ilk:=strtoint(edit8.Text);//döngü başlangıç değeri
   son:=strtoint(edit9.Text);//döngü bitiş değeri
   toplam:=0;
   if ilk>son then //başlangıç değeri bitiş değerinden büyükse
      begin
         deger:=ilk;   //
         ilk:=son;     // bu üç satıra neden gerek duyulmuş anlamadım?
         son:=deger;   //
      end;
   for k:= ilk to son do//döngü başlangıcı
      begin
         inc(toplam,k);
         {
         Burada toplam başlangıçta 0 ' dı.her döngüde toplamın değerini k kadar artıracak.
         yani toplamı her döngüde k ile toplayacak.
         }
      end;
   form1.Caption:='sonuç= ' + inttostr(toplam);//toplamın caption ' a yazılması.

end;
kodun sadeleştirilmişi

Kod: Tümünü seç

   toplam := 0 ;
   if StrToInt(Edit9.Text) > StrToInt(Edit8.Text) then
      for k := StrToInt(Edit8.Text) to StrToInt(Edit9.Text) do
         Inc(toplam , k);
   Caption := IntToStr(toplam)

Kolay gelsin.
akıllanma , aklını başına toplama , toparlanma , kendisini derleme bu dünyaya ait bir vazife.
ahirette nasıl olsa aklın başına gelecek.
peynir
Üye
Mesajlar: 12
Kayıt: 27 Ara 2006 04:46

Re: Basit Bir Konuda Takıldım

Mesaj gönderen peynir »

palandoken yazdı:Merhaba ,

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var
   k,ilk,son,deger,toplam:integer;
begin
   ilk:=strtoint(edit8.Text);//döngü başlangıç değeri
   son:=strtoint(edit9.Text);//döngü bitiş değeri
   toplam:=0;
   if ilk>son then //başlangıç değeri bitiş değerinden büyükse
      begin
         deger:=ilk;   //
         ilk:=son;     // bu üç satıra neden gerek duyulmuş anlamadım?
         son:=deger;   //
      end;
   for k:= ilk to son do//döngü başlangıcı
      begin
         inc(toplam,k);
         {
         Burada toplam başlangıçta 0 ' dı.her döngüde toplamın değerini k kadar artıracak.
         yani toplamı her döngüde k ile toplayacak.
         }
      end;
   form1.Caption:='sonuç= ' + inttostr(toplam);//toplamın caption ' a yazılması.

end;
kodun sadeleştirilmişi

Kod: Tümünü seç

   toplam := 0 ;
   if StrToInt(Edit9.Text) > StrToInt(Edit8.Text) then
      for k := StrToInt(Edit8.Text) to StrToInt(Edit9.Text) do
         Inc(toplam , k);
   Caption := IntToStr(toplam)

Kolay gelsin.
Arkadaşlar işn gerçeği ben bu drece kolay soruları size sorarken geriliyorum. Çünkü tepki alıyorum ama bir konuyu anlayamadım. Şimdi for k:= ilk to son do //derken ilk değerden son değere kadar aşağıdakileri işlet diyor. Ben şunu anlamıyorum. Buradaki döngüye başlarken k değeri ilk aşamada hangi değeri alıyor. Mesela ilk değere 1 diyelim. Son değere 3 diyelim. Burada k değeri ilk aşamada 1 değerini alıyor sonra toplam ile toplanıyor ve sonuç olarak 1 değerini mi yazıyor. Yoksa k değeri inc vasıtasıyla 2 değerini mi alıyor. Sonraki aşama da böyle mi oluyor. Bunu öğrenmek istiyorum.
Kardeş sen de o ortadaki değişimji anlamamışsın. O ortadaki değişim, eğer ilk değer ikinci değerden büyükse ilk değer ile son değeri değiştir diyor. Teşekkürler.
peynir
Kullanıcı avatarı
unicorn64
Üye
Mesajlar: 919
Kayıt: 04 Nis 2006 08:56
Konum: yine yeniden Ankara ^_^

Re: Basit Bir Konuda Takıldım

Mesaj gönderen unicorn64 »

palandoken yazdı:

Kod: Tümünü seç

   ilk:=strtoint(edit8.Text);//döngü başlangıç değeri
   son:=strtoint(edit9.Text);//döngü bitiş değeri
   if ilk>son then //başlangıç değeri bitiş değerinden büyükse
      begin
         deger:=ilk;   //
         ilk:=son;     // bu üç satıra neden gerek duyulmuş anlamadım?
         son:=deger;   //
      end;

 for k:= ilk to son do//döngü başlangıcı
      begin
         inc(toplam,k);
         {
         Burada toplam başlangıçta 0 ' dı.her döngüde toplamın değerini k kadar artıracak.
         yani toplamı her döngüde k ile toplayacak.
         }
      end;
edit8 deki değer edit9 daki değerden büyükse alttaki döngüye hiç girmeyecektir. bu durum kontrol edilerek, küçük olan değerden büyük olan değere kadar bir döngü kurulmuş
bazen yükselmek için önce dibi görmek gerekir...

forumda soru sormadan önce bakılmalı bence
daha fazlası için...

yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...

Resim
mehmetcan
Üye
Mesajlar: 63
Kayıt: 14 Tem 2008 05:19

Re: Basit Bir Konuda Takıldım

Mesaj gönderen mehmetcan »

peynir şöyle anlatayım:


for k:= 3 to 10 do
dersen k önce 3 olur, sonra 4, sonra 5 ... sonra 10 olarak devam eder.

for k:=ilk to son do

dersen k önce ilk degiskeni neyse o olur, sonra son degiskenden küçükse ilk+1 olur, sonra ilk+2, sonra ilk+3 bu k=son olana kadar devam eder.


for k:=ilk to son do
inc(toplam,k );

diyelim ilk=4, son=9 ve toplam= 0 olsun; inc(toplam,k) yi i da şöyle yazabiliriz toplam:=toplam+k;

k->4, toplam:=0+4 ; ---- > toplam:=4;
k->5 toplam:=4+5 ; ---- > toplam:=9;
k->6, toplam:=9+6 ; ---- > toplam:=15;
k->7 toplam:=15+7 ; ---- > toplam:=22;
k->8, toplam:=22+8 ; ---- > toplam:=30;
k->9 toplam:=30+9 ; ---- > toplam:=39;

k artık son deger olan 9 dan büyük olacagı için burada döngü biter.

Bunlar çok temel bilgilerdir. Öncelikle bu konuları anlaman lazım, yoksa işin çok zor.
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: Basit Bir Konuda Takıldım

Mesaj gönderen aslangeri »

s.a.
Burada k değeri ilk aşamada 1 değerini alıyor sonra toplam ile toplanıyor ve sonuç olarak 1 değerini mi yazıyor. Yoksa k değeri inc vasıtasıyla 2 değerini mi alıyor. Sonraki aşama da böyle mi oluyor. Bunu öğrenmek istiyorum.
bu sorunun cevabını öğrenmek için yapılması gereken işlemler.
1.For satırına gelinip breakpoint koyulur.
2.program çalıştırılır.
3.program break pointin olduğu satıra gelince durur bu aşamada değerlerini öğrenmek istediğimiz değişkenlerin üzerine tıklayım Ctrl+F5 tuşlarına basarız.
Böylece delphi bu değişkeni "watch list" ealır. Bu işlem değerini görmek istediğimiz düm değişkenler için tekrarlanır.
4.watchlist üzerinde sağ tıklanıp "stay on top" seçilir.
5.watchlist kodları kapatmayacak şekilde kenera çekilir.
6.F8 ile kodlar satır satır çalıştırılmaya başlanır.
7. Watch list e bakılıp "hımmm. demek bu değeri alıyormuş" denilir.

Not:
aslangeri yazdı: procedure Inc(var X [ ; N: Longint ] );
x indeğerini N kadar arttırır. Eğer N parametresi verilmezse 1 arttırı.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
peynir
Üye
Mesajlar: 12
Kayıt: 27 Ara 2006 04:46

Re: Basit Bir Konuda Takıldım

Mesaj gönderen peynir »

Teşekkürler.
peynir
Cevapla