• 05-04-2020, 15:05:20
    #1
    ÇÖZÜLDÜ @BenimWebim; teşekkürler
    foreach($elemanlar as $eleman){
    if( (strlen($gecici.$eleman)) >= $limit ){
    $eklenenler[] = $gecici;
    $gecici = $eleman;
    }else{
    $gecici .= $eleman;
    }
    }
     $eklenenler[] = $gecici;
    Merhaba,
    Bir algoritma yazmak istiyorum fakat şu an kafam çok dolu bir türlü yapamadım.
    Kısaca bahsediyorum,
    Numaralar diye bir dizimiz var dizinin integer değerinde elemanlarımız var , dizinin eleman sayısı değişkendir, 5 te olabilir 10 de olabilir.
    Örneğin;
    5 elemanlı bir dizimiz var diyelim
    Lİmit değişkenimiz 150 olsun
    1 eleman sayısı 150 den fazla olamaz
    Algoritma
    • 1. ve 2. elemanı topluyoruz, toplamı 150 den küçük ise sıradaki elemanla topluyoruz, büyük olsaydı 1. elemanı eklenenler adında diziye atıp . 2. elemanı sıradak eleman ile toplayacaktık.
    • 1.ve2. eleman 150 den büyük olmadığı için iki elemanı topladık 100+30 = 130 etti, 1.ve .2elemanı 3. eleman ile topluyoruz 205 yaptı, 150 den büyük olduğu için, birinci ve ikinci elemanı eklenenler dizine atıyoruz. 1 ve 2. elemanla işimiz kalmadı
    • 3. eleman ve 4. elemanı topluyoruz 175 yaptı, 150 den büyük olduğu için 3. elemanı eklenenler dizine atıyoruz,3. eleman ile işimiz kalmadı
    • 4. eleman ile 5. elemanı topluyoruz 150 yaptı, 150 den büyük olduğu için 4. elemanı eklenenler dizine atıyoruz , 4. eleman ile işimiz kalmadı
    • 5. eleman son eleman tek başına 150 den büyük olamayacağı için onuda eklenenler dizine atıyoruz
    1. elaman ile ikinci elemanın toplamı 150 den az ise iki elemanı topluyoruz, örn(1. ve 2. eleman 130 ), 150 den fazla ise ilk elemanı eklenenler adlı diziye ekliyoruz, değillse sıradaki eleman ile topluyoruz
    yani sıradaki 3.elemanımız var, 1ile 2 yi toplamıstık 130 etmişti, 3.elemanıda üzerine ekliyoruz 130+ 75 = 205 karakter yaptı, 150 yi aştı, toplamayacak, 1.ve2. elemanı eklenenler adlı diziye ekliyoruz
    daha sonra 3. ve 4. elemanın toplam karakter 175 ,birleştirmiyoruz, 3. satırı eklenenler adında bir diziye atıyoruz
    4. satır ve 5. satıra bakıyoruz 100+50 = 150 karakter, 150 den küçük değil birleştirmiyoruz 4. elemanı ekleneler dizisine atıyoruz, 5. elemanda 150 den küçük ve başka eleman yok eklenenler dizisine atıyoruz

    NUMARALAR DIZISI
    1.eleman- 30
    2.eleman- 100
    3.eleman- 75
    4.eleman- 100
    5.eleman - 50

    ALGORITMA SONUCU CIKTISI

    EKLENENLER DIZI
    1. Eleman 100+30 VEYA 130
    2. eleman 75
    3. eleman 100
    4. eleman 50
    ilgilenen arkadaşlara şimdiden teşekkürler
    EDİT: ANLATIMDA HATA YAPMISIM DUZELTTIM

    $elemanlar = array("30","100","75","100","50");
    $limit = 150;
  • 05-04-2020, 15:13:48
    #2
    Algoritma tamam zaten, kodu mu lazım ?
  • 05-04-2020, 15:16:10
    #3
    BenimWebim adlı üyeden alıntı: mesajı görüntüle
    Algoritma tamam zaten, kodu mu lazım ?
    Evet hocam kodu lazım
  • 05-04-2020, 15:28:50
    #4
    Mobilim

    array_unique ile dupe olan değerleri temizle
    Foreach ile limitden yüksek olanları çıkar (unset)
    Array_values ile reindex at hocam

    Not örneğe bakarak yazdım içeriği okumadım
  • 05-04-2020, 15:31:46
    #5
    L0pht adlı üyeden alıntı: mesajı görüntüle
    Mobilim

    array_unique ile dupe olan değerleri temizle
    Foreach ile limitden yüksek olanları çıkar (unset)
    Array_values ile reindex at hocam

    Not örneğe bakarak yazdım içeriği okumadım
    Hocam aslında bu değerler bir stringin karakter uzunluğu daha fazla karışık gözükmesin diye rakam olarak belirttim,
  • 05-04-2020, 15:35:09
    #6
    WebGun adlı üyeden alıntı: mesajı görüntüle
    Hocam aslında bu değerler bir stringin karakter uzunluğu daha fazla karışık gözükmesin diye rakam olarak belirttim,
    Farketmez ki, strlen ile bakıyorsun muhtemel. Tam kod istiyorsan PC geçince bakabilirim. Ne yapıyorsun tam olarak? Bir içeriği alıp önce cümlelere sonra harf sayısına mı bakıyorsun? Devamını oku tarzında bir şey mi bu yani?
  • 05-04-2020, 15:44:00
    #7
    <?php

    $gecici = 0;
    $eklenenler = array();
    foreach($elemanlar as $eleman){
    $gecici += $eleman;
    if($gecici > 150){
    $eklenenler[] = $gecici;
    $gecici = $eleman;
    }
    }
    ?>
  • 05-04-2020, 16:00:28
    #8
    BenimWebim adlı üyeden alıntı: mesajı görüntüle
    <?php

    $gecici = 0;
    $eklenenler = array();
    foreach($elemanlar as $eleman){
    $gecici += $eleman;
    if($gecici > 150){
    $eklenenler[] = $gecici;
    $gecici = $eleman;
    }
    }
    ?>
    Hocam öncelikle teşekkürler fakat eklenenler dizisi sonucu bu sekilde veriyor
    Array ( [0] => 205 [1] => 175 )

    sonuc bu şekilde olması lazım
    1. Eleman 100+30 VEYA 130
    2. eleman 75
    3. eleman 100
    4. eleman 50



    L0pht adlı üyeden alıntı: mesajı görüntüle
    Farketmez ki, strlen ile bakıyorsun muhtemel. Tam kod istiyorsan PC geçince bakabiglirim. Ne yapıyorsun tam olarak? Bir içeriği alıp önce cümlelere sonra harf sayısına mı bakıyorsun? Devamını oku tarzında bir şey mi bu yani?
    Yapmak istediğim elimde satır satır string tipinde veriler var.Bir makalenin içeriği gibi düşünebilirsin.Her satır bir dizi elemanı diyebiliriz.
    Bir kontrol mekanizması var, gönderilen string tipinde verinin karakter sayısı 150 den büyük ise işlem yapmıyor, 150 den küçük ise yapıyor.
    satır satır validationa göndermek istemiyorum , satırları sırasıyla birleştirip mümkün oldugunca 150 karaktere yakın olacak şekilde validationa göndermek istiyorum.
    Yapmak istediğim kısacası bu hocam , 10 satırım varsa işlemi 10 kere değilde mümkün oldugunca aza indirmek istiyorum
  • 05-04-2020, 16:13:49
    #9
    <?php
    
    $gecici = 0;
    $eklenenler = array();
    foreach($elemanlar as $eleman){
       if(($gecici + $eleman) > $limit){
          $eklenenler[] = $gecici;
          $gecici = $eleman;
       }else{
          $gecici += $eleman;
       }
    }
    ?>