For İle While Farkı?

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Mylitta
    Mylitta's avatar
    Kayıt Tarihi: 13/Nisan/2008
    Erkek

    Selam arkadaşlar, hobi olarak C# öğrenmeye devam ediyorum. While döngüsünü öğrendim bugün. 

    for ile çok benzettim, parantezin içinde değişken tanımlaması yapılamayan for sanki. Bir yazılımcı da şöyle bir yazı yazmış.

    Kafam karıştı, sizin görüşlerinizi almak istedim. Saygı ve sevgiler.

     

    "Merhaba sevgili programlamaya başlayan arkadaşlar. C programlama dilini öğrenmeye başladım. Döngüler konusuna gelince while ve for döngüleri arasında kaldım. Sonuçta ikisi de döngü, istediğimiz zaman istediğimizi kullanabiliyoruz. Ama kafama takılan şu; neden iki tane döngü var bunların arasında hiç bir fark yok mu ? Bu sorudan yola çıkarak başladım araştırmaya ve bazı bilgiler öğrendim.

    Şimdi öncelikle şunu belirtmeliyim ki for döngüsü while döngüsünden sonra ortaya çıkmış bir döngüdür. Bu durumun beraberinde getirdiği bazı kolaylıklar bulunmaktadır.

    Örnek verecek olursak;

    while döngüsü ile i‘yi öncelikle döngünün dışarısında tanımlamamız gerekiyor daha sonra yine döngünün dışında i’ye bir değer atamamız gerekiyor ve i‘yi döngü her döndüğünde 1 arttırmak için döngünün içerisinde kullanmamız gerekiyor.

    1 int i;
    2  
    3 i = 0;
    4  
    5 while (i <20){
    6  
    7 // işlemler
    8  
    9 i++
    10 }

    for döngüsünde ise bunları ayrı ayrı yazmaya gerek yok çünkü aşağıdaki gibi direk olarak parantezlerin içerisinde tanımlayabiliyoruz;

    1 int i;
    2  
    3 for ( i = 0; i <20; i++){
    4 // islemler
    5 }

    Yani hem zamandan hem de kod yığınından tasarruf yapabiliyoruz. "


    Ayılıp bayılıp ayılıyoruz, bütün sokakları ayıkıyoruz
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Cosmic
    Cosmic's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    for da bir başlangıç değeri ve bitiş değeri verirsin o döner geçer.

    while da koşul verirsin koşul sağlandığı sürece döner. yani a=20 while(a<=30) dediğinde while sürekli çalışır taki sen içerisinde a yı 30  dan büyük yapana kadar. şöyle basit bir örnek verirsem;

    mesela elinde bi data listesi var. Title,SkipNext        şimdi bu datalistesinde skipNext değeri true yada false olsun. eğer true olan satır var ise o satırdan sonra ki 2 satırı döndürmek istemiyorum o zaman index değerini while içinde 2 arttırıp arada ki satırları hiç işleme dahil etmem.  bunu while ile yapabilirsin. ama for verdiğin koşula göre dönmeye devam eder.

    c# bilmediğimden kod yanlış olabilir ama mantık olarak anlarsın herhal;

    i=0;

    dataList=[.....];

    while(i<count(dataList)){

    bi işlem

    if(dataList[i][skipNext]){
    i=i+2;
    }else{

    i++;
    }
    }


    Bittik biz bittik
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    PcK0
    PcK0's avatar
    Kayıt Tarihi: 13/Nisan/2007
    Erkek

    Derleme sırasında, çeşitli farkları olsa da, bazı dillerde for'daki initialization ile scope yapısından uzaklaştırma gibi durumlar olsa da for while'ın gelişmiş halidir olarak yaklaşılabilir.

    Forun tanımı: for (initializer; condition; iterator) initializer başladığı anda çalıştırılacak kod, condition çalışma şartı kodumuz, iterator her tekrar başlamadan önce çalıştırılacak kod

    Bazı yazılım dillerinde for yapısı initializer, condition1, condition2, condition3, ..., iterator olarak birden fazla şart ile kullanabiliyorsun.

     

    Örnek ifade:

    for(int i = 0; i < 10; i++) { // initializer; condition; iterator
      // ..
    }

    Örnek ifadenin eş değeri:

    int i = 0; // initializer 
    while(i < 10) { // condition
      i++; // iterator
      // ..
    }

    For'da i değerini döngünün içinde değiştirip for'dan çıkabildiğimiz bir örnek yazayım:

    for(int i = 0; i < 10; i++) {
      Console.WriteLine(i);

      if(i > 2) { i = 100; }

      Console.WriteLine(i);
    }

    Programın vereceği çıktı:
    0
    0
    1
    1
    2
    2
    3
    100

     

     

    PcK0 tarafından 23/Nis/20 09:01 tarihinde düzenlenmiştir

    Sadece bi imza..
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unbalanced
    unbalanced's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    bir de foreach döngüsü var :)

    ve yine while'in yaninda do-while döngüsü de var :) hocam bunlar hep ihtiyaca göre sekillenen seyler..

    Arkadaslara katki olarak

    Genelde kullanilan döng for döngüsü, cünkü baslangic ve bitis degerlerin belli oldugu icin daha rahat.. foreach'e girmeyecegim ama kisaca o da enumarable türünü döngüye sokuyor ve elemanlari [i] gibi deger vermeden direk erisebiliyorsun döngü icinde

    while ile do-while arasinda ince bir fark var. While döngüsü ilk olarak sarta bakar, sart (parantez icindeki) dogruysa döngü calisir yani sart ilk durumda yanlissa döngüye girmeden cikar. Ancak bazi durumlarda kodun bir kere calismasini ve duruma göre döngüye sokmak istemen halinde do-while kullanilir.

    var isim= "";
    do{
    Console.Write("Lutfen isminizi girin: "):
    isim = Console.ReadLine();
    if(!isim.Trim().Equals("")) //isim bos degilse döngüyü kir
    break;
    
    Console.WriteLine("Isminizi girmediniz!!"); 
    
    }while (isim.Trim().Equals("")) //isim bos oldukca tekrar sor

     

    üsttekileri ögrenince fikir vermesi acisindan simdiden yaziyorum :)

    Kisaca: birden fazla döngüler var ve hepsinin kullanim amaci farkli. Foreach, for döngüsüne göre daha rahattir ama ayni zamanda daha yavas calisir.. Bunlarin da birer maliyeti var :)

    kolay gelsin basarilar

    Edit: kücük bir teknik detay. Evet foreach enumarable'lerde kullanilir ve evet c#'daki arrayler de IEnumarable dan türemistir.

     

     

    unbalanced tarafından 23/Nis/20 10:24 tarihinde düzenlenmiştir

    Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Elif - Efe
    rakkoc
    rakkoc's avatar
    Kayıt Tarihi: 19/Aralık/2003
    Homo

    o bahsedilen yazılımcı arkadas while ile for dongusu nasil kullanılırı aslında anlarmış. aynı sebebden kullanacaksan git for kullan.

    ama while'in unbalanced'in da anlattiği gibi cok daha farkli kulllanım alanları vardır. while , genellik ile kaç defa döneceğini bilmediğin işlerde kullanılır (onun için  yaratılmıştır) 

    adam bir datayi girip girmediğin kontrolu, 

    okudugun bir stream'in  devamlılığı,

    Biraz saçma  belki ama;

    var strText = "bu    bir bosluk lu     metin   yazısı bosluk   topla";
    while (strText.indexOf("  ") > -1)
    {
    strText = strText.Replace("  "," ");
    }

    ( edit : en fazla boşluk olan "lu     metin" kısmı için değerlendirme yapıyorum)
    metnin içinde ki cift boslukları tek boşluğa cektim ama 5 bosluk olan bir yerde;
    ilk dönüşünde;
    ilk 2 boslugu tek bosluga cevirdi.  ikinci 2 boslugu tek bosluga cevirdi. (5 bosluk olan yer, 3 bosluga döndü) while şartı sağlanıyor tekrar dönecek
    ikinci dönüşünde
    ilk 2 boslugu tek boşluğa cevirdi. (3 bosluk vardı, 2 tane bosluk kaldı) while şartı sağlanıyor tekrar dönecek
    üçüncü dönüşünde
    tek çift boşluk var, onu tek boşluğa cevirdi ve  while şarti hala sağlanmıyor, donguden cikti.

     

    rakkoc tarafından 23/Nis/20 10:39 tarihinde düzenlenmiştir

    Bu aralar fazla yogunum. Unuttugum seyler oluyorsa affola. DM vs atın.
  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    İnce Memed
    ComputerWolf
    ComputerWolf's avatar
    Üstün Hizmet Madalyası
    Kayıt Tarihi: 26/Mart/2003
    Erkek

    Döngüleri karşılaştığın sorunların çözümüne göre seçersin, evirip çevirirsin.

    Şunu bırakayım :)


    Hep denedin. Hep yenildin. Olsun yine dene , yine yenil ama daha iyi yenil !
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    MaviGozluDev
    MaviGozluDev's avatar
    Kayıt Tarihi: 05/Eylül/2005
    Erkek
    ComputerWolf bunu yazdı

    Döngüleri karşılaştığın sorunların çözümüne göre seçersin, evirip çevirirsin.

    Şunu bırakayım :)

     

    süpermiş, şöyle anlatanımız olmamıştı bizim :)

     


    .
  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    RitmFarbRacourci
    RitmFarbRacourci's avatar
    Kayıt Tarihi: 14/Mart/2008
    Erkek
    MaviGozluDev bunu yazdı
    ComputerWolf bunu yazdı

    Döngüleri karşılaştığın sorunların çözümüne göre seçersin, evirip çevirirsin.

    Şunu bırakayım :)

    süpermiş, şöyle anlatanımız olmamıştı bizim :)

    sinirlerim bozuldu. ^^D`

    İhtiyaca göre,

    boşluk,

    ,.

    (NoktalıVirgül: ., (yatay))

    (Ula mâdem alıntı içerisindeki fotoları sildiniz, boşlukları da sileydiniz ya) {kefir, kefir tanesi, keçi sütü,  PreBiotik/ProBiotik}

    RitmFarbRacourci tarafından 23/Nis/20 15:23 tarihinde düzenlenmiştir

    I'şıkY'ılı;^^`) Zk't^^` RnSySyTk.Ödl.SpRtÇzBşBkYd Kryptia.agogE Sa'd-l'Suûd az.ç'k 'lmyn'Dşn Pnct'tnAnNttn Blgi,YpBlgi 'Ct'nDrm.CmdyDrm.MdrnDrm hRşYdşR ClptcPth'Strsm M'nPhs' Ld,X/Y YrYnZmnGrçklk,AlgBzklğ KrzFrst'tr Tiytr' Pugchv,Jtrn,İmmlmn,FllngLef,Pik' SuprmcySprrty CoBehTh elFnmno:NzrioRonldo AdnKy TkSs,TkHrf(?) .RtNsTk.KvMp.Mk.TrmDyn ScklkNmRzgr ŞkHcBy ccp.kky Snrlr'Çz SnaSnLzmsn 'NsnKsknçtr BgDppr.MagllnCl'ds.S'thCro's Ch'kW'ng CreazioneDiAdamo^^`, Arctrs.Spic' ArcScnd,YySnye TrbProp,TrbJet,TrbFan ~3.10^5km/sn~343m/sn ~900-1240m/snMacH RamJt,ScRamJt Przdi^^' Tbu.XL Prsek MAtv^^` mLAT G'dWllHnting(f). 3id't^^` TareZmenPr ParaMotor TrflrVArsİlşklr (-)+.(/)*,~ ZminŞkil . ..Bu imza @SubZero tarafindan degistirilmistir. "Bu kadar uzun karmakarisik bir imza yapma diye uyardim ama heeheeeey(^^D)_hey kim söylüyor, kim dinliyor." Imzanizi SubZero'ya bilgi vermeden degistirmeyiniz. Tesekkurler...
  9. KısayolKısayol reportŞikayet pmÖzel Mesaj
    RitmFarbRacourci
    RitmFarbRacourci's avatar
    Kayıt Tarihi: 14/Mart/2008
    Erkek
    ComputerWolf bunu yazdı

    Döngüleri karşılaştığın sorunların çözümüne göre seçersin, evirip çevirirsin.

    Şunu bırakayım :)

    aslında özelden de sorabilirdim ama, buradan da sorayım ( gülerek başlamak güne güzel oluyor, bir de ^^D` {durup durup gülüyorum}). Bu tarz karikatürlerin olduğu bir TeleGram hesabı,grubu vs. var mı? 

    bir tane vardı, ama tekrâra bağlayınca, unuttum gitti. ( www.t.me/ProgrammerJokes gibi birşeydi. Gerçi, int. sitesi de olur.)

    şimdi düşündüm de @PcK0'nun şu ifâdesi de güzelmiş "    For'un tanımı: for (initializer; condition; iterator) :initializer, başladığı anda çalıştırılacak kod; condition, çalışma şartı kod'umuz; iterator, her tekrar başlamadan önce, çalıştırılacak kod .   "

    ~@~

    @whopper , niye ya, her yıl yeni (konuya dair fikri olmayan)çocuk doğuyor, fikirlere aç. İnsan, yeni alanlara yelken açıyor. Güzel anlatan bulunmuyor. yada anlattığı şeyi güzel anlatamıyor sayfasında. Belki de arama handikap'lıdır. ... diye uzâaar  gider.

     

    RitmFarbRacourci tarafından 24/Nis/20 14:11 tarihinde düzenlenmiştir

    I'şıkY'ılı;^^`) Zk't^^` RnSySyTk.Ödl.SpRtÇzBşBkYd Kryptia.agogE Sa'd-l'Suûd az.ç'k 'lmyn'Dşn Pnct'tnAnNttn Blgi,YpBlgi 'Ct'nDrm.CmdyDrm.MdrnDrm hRşYdşR ClptcPth'Strsm M'nPhs' Ld,X/Y YrYnZmnGrçklk,AlgBzklğ KrzFrst'tr Tiytr' Pugchv,Jtrn,İmmlmn,FllngLef,Pik' SuprmcySprrty CoBehTh elFnmno:NzrioRonldo AdnKy TkSs,TkHrf(?) .RtNsTk.KvMp.Mk.TrmDyn ScklkNmRzgr ŞkHcBy ccp.kky Snrlr'Çz SnaSnLzmsn 'NsnKsknçtr BgDppr.MagllnCl'ds.S'thCro's Ch'kW'ng CreazioneDiAdamo^^`, Arctrs.Spic' ArcScnd,YySnye TrbProp,TrbJet,TrbFan ~3.10^5km/sn~343m/sn ~900-1240m/snMacH RamJt,ScRamJt Przdi^^' Tbu.XL Prsek MAtv^^` mLAT G'dWllHnting(f). 3id't^^` TareZmenPr ParaMotor TrflrVArsİlşklr (-)+.(/)*,~ ZminŞkil . ..Bu imza @SubZero tarafindan degistirilmistir. "Bu kadar uzun karmakarisik bir imza yapma diye uyardim ama heeheeeey(^^D)_hey kim söylüyor, kim dinliyor." Imzanizi SubZero'ya bilgi vermeden degistirmeyiniz. Tesekkurler...
  10. KısayolKısayol reportŞikayet pmÖzel Mesaj
    whopper
    whopper's avatar
    Kayıt Tarihi: 26/Haziran/2008
    Erkek

    yıl oldu 2020 hala şu sorulara konu açılıyor vay arkadaş :D

  11. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Mylitta
    Mylitta's avatar
    Kayıt Tarihi: 13/Nisan/2008
    Erkek
    whopper bunu yazdı

    yıl oldu 2020 hala şu sorulara konu açılıyor vay arkadaş :D

    Ne alaka yılla, herkes programlamayı ana karnında mı öğrendi?


    Ayılıp bayılıp ayılıyoruz, bütün sokakları ayıkıyoruz
Toplam Hit: 4170 Toplam Mesaj: 17
for while