Döngü

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Laz61
Üye
Mesajlar: 135
Kayıt: 03 Eki 2007 11:51
Konum: Almanya

Döngü

Mesaj gönderen Laz61 »

Arkadaşlar Merhaba

Bir Döngü kurmam gerektiğini biliyorum. Ama bir çok denememe rağmen başaramadım. Umarım yardımcı olursunuz.

A--------------C-----------B--------------------D-------------------E

Döngü 'A' dan başlayarak 'B' ye kadar okumalı. 'B' den tekrar başa (A) dönerek 'C' ye kadar okumalı. 'C-B' arasını okumadan, 'B' ye atlamalı. B-D arasını tekrarlayarak ve D-E arasını da tekrarlayarak sonlanmalı. Bu döngü Richeditte çalışmalı.

Selam ve dua ile...
Hayat tüm olumsuzluklara rağmen yaşamaya değer.
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: Döngü

Mesaj gönderen aslangeri »

s.a.
ne yapmak istediğini anlayamadım.
daha açıklayıcı bi şekilde anlatırsan iyi olur.
amacın nedir önce onu söyle.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
Battosai
Üye
Mesajlar: 1316
Kayıt: 01 Eki 2007 12:02
Konum: Ankara

Re: Döngü

Mesaj gönderen Battosai »

Tam olarak ne yapmak istediğini yazsaydın mesele A---B arası okunacak olan ne? ve nerden okunacak :twisted:
Laz61
Üye
Mesajlar: 135
Kayıt: 03 Eki 2007 11:51
Konum: Almanya

Re: Döngü

Mesaj gönderen Laz61 »

Selamlar

Program Türkçe harfleri okuma programı. A-B harfleri iki farklı işarettir. Richeditte 1. A-B arasındaki harfleri okuduktan sonra, tekrar 1. B'den A'ya atlayarak C'ye kadar okumalı. 1. C-B arasını okumadan atlamalı. Diğer kısımlarıda (2,3) atlamadan tekrarlayarak sonlanmalı.

1. A--------C>------<B 2. A---------<>-----------B 3. A-------<>---------B Son

Selam ve dua ile...
Hayat tüm olumsuzluklara rağmen yaşamaya değer.
ikutluay
Üye
Mesajlar: 2341
Kayıt: 03 Tem 2007 10:13

Re: Döngü

Mesaj gönderen ikutluay »

Laz61 yazdı:Selamlar

Program Türkçe harfleri okuma programı. A-B harfleri iki farklı işarettir. Richeditte 1. A-B arasındaki harfleri okuduktan sonra, tekrar 1. B'den A'ya atlayarak C'ye kadar okumalı. 1. C-B arasını okumadan atlamalı. Diğer kısımlarıda (2,3) atlamadan tekrarlayarak sonlanmalı.

1. A--------C>------<B 2. A---------<>-----------B 3. A-------<>---------B Son

Selam ve dua ile...
yapmaya çalıştığın richeditteki semboller arasındaki bilgilerle isim adres gibi tanımlı alanlaları değiştirip form yapmak değilmi ?
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
Laz61
Üye
Mesajlar: 135
Kayıt: 03 Eki 2007 11:51
Konum: Almanya

Re: Döngü

Mesaj gönderen Laz61 »

Selamlar

Önce ilginizden doalayı teşekkür ederim...

Cümleleri kurarken anlaşılır olmasına çok dikkat ediyorum ve yazdıklarımı defalarca okuyorum. Ama algılamalar yine de faklı olabiliyor. Özür... Yapmak istediğim şu:

A1234567(C)8910B***A69rtyhuj1257893B***A'^%+&()/%?=B Son

Richeditte bir satıra yazılmış A-B harfleri arasındaki sayıları birden başlayarak 10' kadar sesli okumalı. 10 rakamını okuduktan sonra tekrar başa dönmeli. Yani, tekrar 1den başlayarak 1,2,3,4,5,6,7'ye kadar okumalı. 8,9,10 numaraları okumadan atlayarak diğer kısımları okumalı. Diğer kısımlar atlanmadan ikişer defa okunarak sonlanmalı. A-B harfleri burada statik, hiç değişmiyor. Değişen A-B harfleri arasındaki harfler. İkinci ve üçüncü şıkdakiler gibi.

Selam ve dua ile...
Hayat tüm olumsuzluklara rağmen yaşamaya değer.
akdatilla
Üye
Mesajlar: 292
Kayıt: 02 Nis 2006 06:04
Konum: Antalya

Re: Döngü

Mesaj gönderen akdatilla »

S.A:
Anladıklarıma göre şöyle bir fonksiyon yaptım.
Belki üzerinde değişiklik yaparak kullanabilirsin.
Kolay gelsin.

Kod: Tümünü seç

function TForm1.isle(v:string):String;
var
   karakterno1,karakterno2,karakterno3,j:integer;
   s,sb:string;
   procedure karakterkullan(ch:Char);
   begin
        Result:=Result+ch;
   end;
begin
     Result:='';
     s:=v;
     karakterno1:=-1;
     while true do
     begin
          karakterno1:=Pos('A',s);
          if karakterno1<1 then break;
          karakterno2:=Pos('B',s);
          if karakterno2<=karakterno1 then break;
          sb:=copy(s,karakterno1+1,karakterno2-karakterno1-1);
          for j := 1 to length(sb) do
              karakterkullan(sb[j]);
          karakterno3:=Pos('C',sb);
          if karakterno3>0 then
          Begin
               sb:=Copy(sb,1,karakterno3-1);
               for j := 1 to length(sb) do
               karakterkullan(sb[j]);
          end;
          Delete(s,1,KarakterNo2);
     end;
end;
Kullanıcı avatarı
unicorn64
Üye
Mesajlar: 919
Kayıt: 04 Nis 2006 08:56
Konum: yine yeniden Ankara ^_^

Re: Döngü

Mesaj gönderen unicorn64 »

okumak derken bilgisayarın seslendirmesinden mi bahsediyoruz??

microsoft sam amca yani :lol:
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
Laz61
Üye
Mesajlar: 135
Kayıt: 03 Eki 2007 11:51
Konum: Almanya

Re: Döngü

Mesaj gönderen Laz61 »

Selamlar

Önce ilgi ve emekleriniz için teşekkür...

Okuma derken şunu kasdediyorum:

if RichEdit1.Text[RichEdit1.SelStart-1+1] = '1' then
PlaySound('c:\1E.wav',0,snd_Async);
.....
.....

if RichEdit1.Text[RichEdit1.SelStart-1+1] = 'A' then
Richedit1.selstart:=0;

Selam ve dua ile...
Hayat tüm olumsuzluklara rağmen yaşamaya değer.
Laz61
Üye
Mesajlar: 135
Kayıt: 03 Eki 2007 11:51
Konum: Almanya

Re: Döngü

Mesaj gönderen Laz61 »

Merhabalar

akdatilla, fonksiyon için teşekkürler. Fonksiyonlarla aram iyi olduğu söylenemez. Çalıştırdım, ama ne yaptığını anlayamadım. Mantık olarak koddan bazı çıkarımlar yaptım.

Kodla küçük bir örneklendirme yaparsanız sevinirim.

Selam ve Dua ile...
Hayat tüm olumsuzluklara rağmen yaşamaya değer.
akdatilla
Üye
Mesajlar: 292
Kayıt: 02 Nis 2006 06:04
Konum: Antalya

Re: Döngü

Mesaj gönderen akdatilla »

Ben sizin yazınızda geçen "okuma" ifadesini anlayamamıştım.
Bir ses olarak okunacakmış demek.
Benim yaptığım örnek şu işi yapıyor:
Fonksiyonun bir v parametresi var. Bu parametreye rich edit nesnesinin Lines.Text bilgisini gönderebilirsiniz.
Fonksiyon v parametresinden aldığı string bilgiden, sürekli olarak A..B karakterleri arası değerleri okuyarak parçalar halinde işliyor.
Örnek bir Text ifade:
A1234567(C)8910B***A69rtyhuj1257893B***A'^%+&()/%?=B Son
işlem:
1) ilk "A".."B" karakterlerinin arasında "1234567(C)8910" bilgisini çıktıya ekler.
2) ilk "A".."B" karakterler arasındaki bilginin içinde "C" karakterine kadar olan bilgiyi çıktıya ekler.
3) ikinci "A".."B" karakterlerinin arasında bulunan "'^%+&()/%?=" karakterlerini çıktıya ekler.
4) ikinci "A".."B" karakterlerinin arasındaki bilginin içinde "C" karakterini arar. "C" bulunmadığı için sonraki adıma geçer.
5) üçüncü "A".."B" karakter aralığını bulmaya çalışır. Bulamadığı için fonksiyon sonlanır.
Fonksiyon Sonucu:
1234567(C)89101234567(69rtyhuj1257893'^%+&()/%?=

Fonksiyon çıktı eklerken "karakterkullan" isimli bir prosedür çağırıyor. Sanırım bu prosedürün içeriğini karakteri ekrana yazdırma değil de
karakteri okuma PlaySound(karakter) gibi bir prosedür şeklinde değiştirirsen istediğin sonuca yaklaşmış olursun.
Yalnız karakterlerin tek tek okunması ile kelimeler çıkartmak o kadar kolay olmasa gerek. Yapmak istediğin sadece rakamları tek tek okutmak ise
belki bu şekilde kullanabilirsin.
Laz61
Üye
Mesajlar: 135
Kayıt: 03 Eki 2007 11:51
Konum: Almanya

Re: Döngü

Mesaj gönderen Laz61 »

Selamlar

Meramımı anlatamadım, tavsiyelerden hareketlede çözemedim. Kodla meramımı anlatacağımı sanıyorum.

procedure TForm1.RichEdit1SelectionChange(Sender: TObject);
const
i:integer=0;
begin
i:=i+1;
Form1.caption:=inttostr(i);
if Richedit1.text[Richedit1.selstart-1+1] =#58 then
Richedit1.selstart:=0;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Richedit1.selstart:=0;
Richedit1.Focused;
end;
end.

Bu kod sağ yön tuşuna basıldığında, '':'' dan sonra başa dönerek bu kısmı devamlı tekrarlıyor. Ben ikinci tekrardan sonra, tekrar başa dönmeden, diğer kısma atlamasını istiyorum. Yani: imleç ikinci sefer '':'' noktayı gördüğünde başa dönmeden devam etmeli. Şayet iki nokta yoksa Richeditteki satırın sonuna kadar tekrarlamadan devam etmeli. Tekrarlar A-B harfleri arasında olmalı.

Selam ve Dua ile...
Hayat tüm olumsuzluklara rağmen yaşamaya değer.
recepuncu
Üye
Mesajlar: 66
Kayıt: 04 Nis 2006 08:22
Konum: Çorum

Re: Döngü

Mesaj gönderen recepuncu »

Merhaba arkadaş birde şunu dene bakam:

Kod: Tümünü seç

var
  Form1: TForm1;
  i,x:integer;
implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
Richedit1.selstart:=0;
Richedit1.Focused;
i := 0; x := 0;
end;

procedure TForm1.RichEdit1SelectionChange(Sender: TObject);
begin
Form1.caption:=inttostr(i);
i:=i+1;
  if (Richedit1.text[Richedit1.selstart-1+1] =#58)and(x=0) then begin
     Richedit1.selstart:=0; x := x + 1;
  end;
end;
İyi çalışmalar.
"Şu deredeki su,kaç kere değişti,yıldızların akisleri hep yerinde."
Laz61
Üye
Mesajlar: 135
Kayıt: 03 Eki 2007 11:51
Konum: Almanya

Re: Döngü

Mesaj gönderen Laz61 »

Selamlar

recepuncu eline, gönlüne sağlık. Buna benzer bir kodu ben de yapmıştım. Ama satırdaki diğer tekrarları başaramamıştım. Çünkü satırdaki cümlelerin yapsına göre birçok tekrar olabiliyor.

Meramımı anladığına göre, satırdaki diğer tekrarları nasıl tekrarlattırabilirim. Mesale 1. A......B arası birinci tekrar, 2. A....b arası ikinci tekrar, 3. A.......B arası üçüncü tekrar vs. Programın kontrolü hiç değişmeyen A-B lerle olmalı. Umarım sıkmıyorumdur...

Selam ve Dua ile...
Hayat tüm olumsuzluklara rağmen yaşamaya değer.
Cevapla