For döngüsü problemi ?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
spectermun
Üye
Mesajlar: 36
Kayıt: 06 Ara 2014 07:17

For döngüsü problemi ?

Mesaj gönderen spectermun »

Arkadaşlar iyi geceler saatlerdir bir kodu çözemedim for döngüsü yapıyorum sadece değişkene denk gelen son itemde döngü yapıyor ben hepsinde tek tek döngü yapmasını istiyorum yazdığım kod şu

Kod: Tümünü seç

var
i:integer;
sayi:string;
begin
sayi:='0';
for i=0 to memo1.lines.count-1 do  begin
if sayi='10' then sayi:='20'; edit1.text:=inttostr(i)+'.item döngü 1'; end else;
if sayi='20' then sayi:='30'; edit1.text:=inttostr(i)+'.item döngü 2'; end else;
if sayi='30' then sayi:='40'; edit1.text:=inttostr(i)+'.item döngü 3'; end else;

end;
end;
edit içindeki değişken memonun item sayısı biliyorsunuz. Örnek ilk itemdeyken count 0 , yani 0.item döngü 1, 0.item döngü 2, 0.item döngü 3 yaptıkdan sonra diyelim memoda 3 tane item var en son 3.item döngü 3 yazıp sonlandırmak istedim beceremedim :( bu ifleri her bir iteme nasıl forluyacam ben işin içinden çıkamadım yardımcı olurmusunuz acaba .!
Kullanıcı avatarı
m_ekici
Kıdemli Üye
Mesajlar: 563
Kayıt: 11 Haz 2003 06:49
Konum: Adana
İletişim:

Re: For döngüsü problemi ?

Mesaj gönderen m_ekici »

if lerin sonundaki ; işaretini kaldır veya iflerin sırasını değiştir. 30, 20, 10 sırasında olsun.
thelvaci
Kıdemli Üye
Mesajlar: 770
Kayıt: 11 Tem 2010 07:17
Konum: Istanbul
İletişim:

Re: For döngüsü problemi ?

Mesaj gönderen thelvaci »

spectermun yazdı:Arkadaşlar iyi geceler saatlerdir bir kodu çözemedim for döngüsü yapıyorum sadece değişkene denk gelen son itemde döngü yapıyor ben hepsinde tek tek döngü yapmasını istiyorum yazdığım kod şu

Kod: Tümünü seç

var
i:integer;
sayi:string;
begin
sayi:='0';
for i=0 to memo1.lines.count-1 do  begin
if sayi='10' then sayi:='20'; edit1.text:=inttostr(i)+'.item döngü 1'; end else;
if sayi='20' then sayi:='30'; edit1.text:=inttostr(i)+'.item döngü 2'; end else;
if sayi='30' then sayi:='40'; edit1.text:=inttostr(i)+'.item döngü 3'; end else;

end;
end;
edit içindeki değişken memonun item sayısı biliyorsunuz. Örnek ilk itemdeyken count 0 , yani 0.item döngü 1, 0.item döngü 2, 0.item döngü 3 yaptıkdan sonra diyelim memoda 3 tane item var en son 3.item döngü 3 yazıp sonlandırmak istedim beceremedim :( bu ifleri her bir iteme nasıl forluyacam ben işin içinden çıkamadım yardımcı olurmusunuz acaba .!
Birincisi bu döngü zaten çalışmaz hata verir çünkü i:= değil i= yazıyor kodda. İkincisi döngüye girmeden önce adı sayi olup içeriği string olan değişkeninizin değerini '0' a setliyorsunuz ve döngü içinde bu değişkeni karşılaştırıyorsunuz; sayi değişkeniniz '0' olduğu için asla koşul sağlanmaz döngünüzün içinde. Bana kalırsa ne yapmak istediğinizi tam olarak izah edin; başka çözümlerde sunulabilir bu durumda.
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: For döngüsü problemi ?

Mesaj gönderen SimaWB »

Ben de bir ekleme yapayım: begin sayısı end sayına eşit değilse sorun vardır :)

Kod: Tümünü seç

if ( Count('begin') <> Count('end') ) then
  raise Exception.Create('Bir yerlerde hata var!');
There's no place like 127.0.0.1
spectermun
Üye
Mesajlar: 36
Kayıt: 06 Ara 2014 07:17

Re: For döngüsü problemi ?

Mesaj gönderen spectermun »

thelvaci arkadaşım i=0 olmak zorunda çünkü değer integer string değil ikincisi sayi:=0 for döngüsünün dışında ben for döngüsünde 10 ar arttırmaısnı istedim döngü çalıyor yalnız memo da diyelim 5 tane count var gidiyor sadece 5 ci döngüyü gerçekleştiriyor ilk 4 ü atlıyor ama tek olduğunda sorun yok . benim amacım memo daki count kadar if leri her bir memo counttun da sırayla for lamak yeterince çık olabildim mi?
Kullanıcı avatarı
esistem
Üye
Mesajlar: 464
Kayıt: 02 Eki 2007 11:22
İletişim:

Re: For döngüsü problemi ?

Mesaj gönderen esistem »

selam,
spectermun yazdı:thelvaci arkadaşım i=0 olmak zorunda çünkü değer integer string değil ikincisi sayi:=0 for döngüsünün dışında ben for döngüsünde 10 ar arttırmaısnı istedim döngü çalıyor yalnız memo da diyelim 5 tane count var gidiyor sadece 5 ci döngüyü gerçekleştiriyor ilk 4 ü atlıyor ama tek olduğunda sorun yok . benim amacım memo daki count kadar if leri her bir memo counttun da sırayla for lamak yeterince çık olabildim mi?
arkadaşım i=0 olmak zorunda ise eğer i:=0 olmak zorundadır demek istiyor tuğrul bey. Ayrıca kodda sayi:='0' demişsiniz zaten, for döngüsü doğru çalışsa bile if sayi='10' then sayi:='20' gibi bir kod hiçbir zaman çalışmıcaktır çünkü kodun başlangıcında sayi:='0' zaten. Yok eğer memonun içinde satır satır rakamlar varsa bunu döngü içersinde herhangi bir değişkene atamamışsınız zaten, ki onu kontrol edebilesiniz. Bu kod bloğu çalışsa bile yapacağı şey şu olacaktır;

i:=0 olarak döngüye başla,
if sayi='10' olmadığı için hiçbişi yapma. bu arada edit1.text'e "0.item döngü 1" yaz,
end else; ye gelince hata ver, programı kır. (tabii bu arada bu kodu derleyebilirseniz, gerçi en başta for i=0 dongusune de başlamadan kod kırılacaktır.)

Siz sanırım şunu yapmaya çalışıyorsunuz.

Kod: Tümünü seç

var
i:integer;
sayi:integer;
begin
sayi:=0;
for i:=0 to memo1.lines.count-1 do  begin
inc(sayi);
if sayi=10 then edit1.text:=inttostr(i)+'.item döngü 1'; // bu satır 10 defa döndüğünü gösterir inttostr(i) yerinede 9 yazar
if sayi=20 then edit1.text:=inttostr(i)+'.item döngü 2'; // bu satır 20 defa döndüğünü gösterir inttostr(i) yerinede 19 yazar
if sayi=30 then edit1.text:=inttostr(i)+'.item döngü 3'; // bu satır 30 defa döndüğünü gösterir inttostr(i) yerinede 29 yazar
end;
end;
thelvaci
Kıdemli Üye
Mesajlar: 770
Kayıt: 11 Tem 2010 07:17
Konum: Istanbul
İletişim:

Re: For döngüsü problemi ?

Mesaj gönderen thelvaci »

spectermun yazdı:thelvaci arkadaşım i=0 olmak zorunda çünkü değer integer string değil ikincisi sayi:=0 for döngüsünün dışında ben for döngüsünde 10 ar arttırmaısnı istedim döngü çalıyor yalnız memo da diyelim 5 tane count var gidiyor sadece 5 ci döngüyü gerçekleştiriyor ilk 4 ü atlıyor ama tek olduğunda sorun yok . benim amacım memo daki count kadar if leri her bir memo counttun da sırayla for lamak yeterince çık olabildim mi?
Sevgili kardeşim; i değişkeninin integer olarak tanımlandığını görebiliyorum bunun üstüne basmanıza gerek yok. Ancak sanırım siz dile biraz yabancısınız, burada paylaştığınız kod derlenmez demek istiyoruz çeşitli nedenlerden ötürü. Bu nedenleri de izah ettik sanıyorum. Ancak yinelemekte belki fayda olabilir;

1- Sayi isimli değişkeninizi string olarak tanımlamışsınız ve ilk değerini '0' vermişsiniz; eğer bu değişkeni bir değerin arttırımı için kullanacaksanız; yani sadece sayısal veriler içerecek ise bu değişkeninizi o zaman string olarak tanımlamanız hatalı olmuş. Integer olarak tanımlamanız yerinde olur.
2- Sayi isimli değişkeninizin değerini bir döngü içinde kıyasalıyorsunuz ancak; Sayi isimli değişkeniniz içine döngü içinde herhangi bir değer ataması yapmıyorsunuz. Aslında Sayi isimli değişkenin değerinin '10', '20', '30' olması durumlarında bu işi yapıyorsunuz. Ancak bu değişken o değerlere asla ulaşamayacak ki sizin kodunuza göre. Bu durumda, Sayi isimli değişkeninizin ilk atanan değer olan, '0' dan farklı bir şey olabilmesini nasıl bekliyorsunuz ?
3- Veli bey'in söylediği gibi; kodunuzda 2 adet begin görüyorum; buna karşın 5 adet end var. Ayrıca belirtmek isterim ki; sizin döngünüz ilk if bloğundan hemen sonra sonlanıyor. Ardından Sayi = '20' ve Sayi = '30' kontrolleriniz döngü dışında çalışıyorlar.

Velhasıl paylaştığınız kodlar hatalı. Biraz daha üzerinde çalışmalı ve derleyicinin verdiği ipuçlarını dikkate almalısınız. Ayrıca, size yardımcı olabilmek için yazıyoruz; yargılamak için değil. Bu sebeple; siz de hatalarını gören bir olgunlukla yanıt yazmalısınız. Hâla neyi neden yapmak istediğinizi anlamamakla birlikte; sorunlarınızı çözebilmeniz adına yeterince ipucu verebilmişizdir umarım.
spectermun
Üye
Mesajlar: 36
Kayıt: 06 Ara 2014 07:17

Re: For döngüsü problemi ?

Mesaj gönderen spectermun »

Arkadaşlar hepinize teşekkürederim sorunumu if else if yöntemiyle hallettim :) hallettiğim kodda

Kod: Tümünü seç

procedure TForm1.Button3Click(Sender: TObject);
var
sayi:string;
begin

if (listbox1.itemindex = strtoint(edit2.text)) then  begin
if Edit1.Text = '10' then begin edit1.Text:='20'; end else
if Edit1.Text = '20' then begin edit1.Text:='30'; end else
if Edit1.Text = '30' then begin edit1.Text:='40'; end else
if Edit1.Text = '40' then begin edit1.Text:='50'; end else
if Edit1.Text = '50' then begin edit1.Text:='60'; listbox1.ItemIndex:=listbox1.ItemIndex+1; edit2.text:=inttostr(listbox1.itemindex); edit1.text:='10';
if edit2.Text = edit3.Text then begin  timer1.Enabled:=false; end;
end;
end;
bu şekilde memo'dan listboxa aktarıp sırayla istediğim döngüyü aldım.
spectermun
Üye
Mesajlar: 36
Kayıt: 06 Ara 2014 07:17

Re: For döngüsü problemi ?

Mesaj gönderen spectermun »

arkadaşlar birşey daha danışmak istiyorum listview de ki içeriği exel olarak nasıl kaydedebilirim ?
Kullanıcı avatarı
unicorn64
Üye
Mesajlar: 919
Kayıt: 04 Nis 2006 08:56
Konum: yine yeniden Ankara ^_^

Re: For döngüsü problemi ?

Mesaj gönderen unicorn64 »

excele veri aktarmayla ilgili çeşitli çözümler mevcut forumda arama yaparak ulaşabilirsiniz,
ayrıca html table formatında string hazırlayıp bunu uzantısı xls olarak kaydederseniz, excelle bu dosyayı açabilirsiniz
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
spectermun
Üye
Mesajlar: 36
Kayıt: 06 Ara 2014 07:17

Re: For döngüsü problemi ?

Mesaj gönderen spectermun »

çok teşekkürederim unicorn hemen deniyorum
Cevapla