• 08-12-2017, 19:31:55
    #1
    Merhaba arkadaşlar
    Alışveriş uygulaması üzerinde takıldığım bir nokta var ödev konusu
    Bir üründeki kampanya; her 2 ürün aldığında 3. ürün bedava olacak.
    For Stride metodu ile listedeki 3.ürüne gelip yazıdırıyorum fakat müşteri 6 ürün aldığında diğer 3. ürünü nasıl fiyata ekleyeceğim?
  • 08-12-2017, 19:51:59
    #2
    $product = array("a","b","c","d","e","f");
    $p_count = count($product);
    $free = 3;
    foreach ($product as $key => $value){
    $key++; 
     $uc = $key/$free;
     if(is_int($uc) && $uc != 0)
    { echo '<p>Bedava</p>'; }
    else{ echo "<p>Paralı</p>"; } }
  • 08-12-2017, 23:42:39
    #3
    Kimlik doğrulama veya yönetimden onay bekliyor.
    BoomBoom adlı üyeden alıntı: mesajı görüntüle
    $product = array("a","b","c","d","e","f"); $p_count = count($product); $free = 3; foreach ($product as $key => $value){ $key++; $uc = $key/$free; if(is_int($uc) && $uc != 0) { echo '<p>Bedava</p>'; } else{ echo "<p>Paralı</p>"; } }
    Hocam sizin yazdığınız kod Php.
    StrongKing adlı üyeden alıntı: mesajı görüntüle
    Merhaba arkadaşlar
    Alışveriş uygulaması üzerinde takıldığım bir nokta var ödev konusu
    Bir üründeki kampanya; her 2 ürün aldığında 3. ürün bedava olacak.
    For Stride metodu ile listedeki 3.ürüne gelip yazıdırıyorum fakat müşteri 6 ürün aldığında diğer 3. ürünü nasıl fiyata ekleyeceğim?
    Ve eğer hocam siz de Swift ile bu soruyu soruyorsanız:
    var urunler = ["1.urun","2.urun","3.urun","4.urun","5.urun","6.urun","7.urun","8.urun","9.urun","10.urun","11.urun","12.urun"]
    var hediye = [String]()
    urunler.enumerated().forEach { (index,element) in
    if index % 3 == 2{
    hediye.append(element)
    }
    }
    print(hediye)
    Bu kod 3. ürünü, 6.ürünü,9 .ürünü ve 12.ürünü yazdırmaktadır. Yani print işleminin yapıldığı if bloğunun içinde istediğiniz işlemi yaptırabilirsiniz.
    edit: Kodu işinize yarayacak şekilde düzelttim. Hediye olan ürünler için boş bir Int / String tipinde array oluştururuz ve bu döngü içinde de her 2 + 1 inci bedava ürünümüzü bu arraye atarak hangi ürünlerin hediye / bedava olduğunu ayrı bir şekilde elde etmiş oluruz.
  • 09-12-2017, 02:26:44
    #4
    AlprTbk adlı üyeden alıntı: mesajı görüntüle
    Hocam sizin yazdığınız kod Php.

    Ve eğer hocam siz de Swift ile bu soruyu soruyorsanız:
    var urunler = ["1.urun","2.urun","3.urun","4.urun","5.urun","6.urun","7.urun","8.urun","9.urun","10.urun","11.urun","12.urun"]
    var hediye = [String]()
    urunler.enumerated().forEach { (index,element) in
    if index % 3 == 2{
    hediye.append(element)
    }
    }
    print(hediye)
    Bu kod 3. ürünü, 6.ürünü,9 .ürünü ve 12.ürünü yazdırmaktadır. Yani print işleminin yapıldığı if bloğunun içinde istediğiniz işlemi yaptırabilirsiniz.
    edit: Kodu işinize yarayacak şekilde düzelttim. Hediye olan ürünler için boş bir Int / String tipinde array oluştururuz ve bu döngü içinde de her 2 + 1 inci bedava ürünümüzü bu arraye atarak hangi ürünlerin hediye / bedava olduğunu ayrı bir şekilde elde etmiş oluruz.
    Teşekkür ederim.
    Benim yapmak istediğim bu array de bulunan ürün fiyatlarını tek bir değişken içine toplayıp koymak. Yani yapılan indirimleri tek değişken içine yazdırmak. Örnek vermek gerekirse;
    1. ürün fiyatı 300 2. ürünün fiyatı 200
    dizi de [300,300,300,200,200,200] şeklinde duruyor.
    dizideki 3.yü ve 6. elemanın fiyatlarını toplayıp fiyat değişkenine atamak istiyorum. bu fiyat değişkeni başka class ta print ediliyor zaten. Yani dizide ne kadar ürün varsa ona göre fiyat değişkenin değeri değişecek.
    Umarım anlatabilmişimdir.
    Yardımlarınız için teşekkür ederim.
  • 09-12-2017, 02:36:41
    #5
    StrongKing adlı üyeden alıntı: mesajı görüntüle
    Teşekkür ederim.
    Benim yapmak istediğim bu array de bulunan ürün fiyatlarını tek bir değişken içine toplayıp koymak. Yani yapılan indirimleri tek değişken içine yazdırmak. Örnek vermek gerekirse;
    1. ürün fiyatı 300 2. ürünün fiyatı 200
    dizi de [300,300,300,200,200,200] şeklinde duruyor.
    dizideki 3.yü ve 6. elemanın fiyatlarını toplayıp fiyat değişkenine atamak istiyorum. bu fiyat değişkeni başka class ta print ediliyor zaten. Yani dizide ne kadar ürün varsa ona göre fiyat değişkenin değeri değişecek.
    Umarım anlatabilmişimdir.
    Yardımlarınız için teşekkür ederim.
    var urunFiyatlari = [300,200,600,800,900,1500,1600,100,50]
    var indirim = 0
    urunFiyatlari.enumerated().forEach { (index,element) in
    if index % 3 == 2 {
    indirim += element
    print(indirim)
    }
    }
    Eğer doğru anladıysam yukarıdaki yazdığım kod işinizi görecektir.
    3. ürün fiyatı = 600
    6. ürün fiyatı = 1500
    9.ürün fiyatı = 50
    çıktı = 2150
  • 09-12-2017, 02:54:05
    #6
    AlprTbk adlı üyeden alıntı: mesajı görüntüle
    var urunFiyatlari = [300,200,600,800,900,1500,1600,100,50]
    var indirim = 0
    urunFiyatlari.enumerated().forEach { (index,element) in
    if index % 3 == 2 {
    indirim += element
    print(indirim)
    }
    }
    Eğer doğru anladıysam yukarıdaki yazdığım kod işinizi görecektir.
    3. ürün fiyatı = 600
    6. ürün fiyatı = 1500
    9.ürün fiyatı = 50
    çıktı = 2150
    Kod bu
    element koyunca type hatası alıyorum.
    /// Third item free when you buy any two deodorants (product codes 65 & 66)
    class BuyTwoGetThirdFreeOffer :Offer {
    
    init(){
    super.init(name: "3 for 2 on Deodorants")
    applicableProductIds = [65,66];
    }
    override func isApplicableTo(list: [ShoppingItem]) -> Bool {
    return list.reduce(false) { $0 || applicableProductIds.contains($1.productId) }
    }
    
    override func valueOfDiscountFrom(list: [ShoppingItem]) -> Int {
    //order the list by price before discounting every third item
    var a = applicableProducts(list: list)
    a = a.sorted { $0.priceInPence > $1.priceInPence }
    var price: Int = 0
    for product in a {
    a.enumerated().forEach { (index,element) in
    if index % 3 == 2{
    
    price += product.priceInPence
    }
    
    
    
    }
    
    }
    return price
    }
    }
    Testi de bu hocam
    price değişkenin 219 438 538 olması gerekiyor ürün dizideki ürün sayısına göre
     func testBuyTwoGetThirdFree5Items(){
            addMultiple(prodId: 14, quantity: 2) //Lynx Africa    319p
            addMultiple(prodId: 15, quantity: 3) //Dove deodorant 219p
            XCTAssertEqual(receipt.discount(),219,"Buy two get third free correct with 5 items");
        }
        
        func testBuyTwoGetThirdFree6ItemsCheapestFree(){
            addMultiple(prodId: 15, quantity: 4) //Dove deodorant 219p
            addMultiple(prodId: 14, quantity: 2) //Lynx Africa    319p
            XCTAssertEqual(receipt.discount(),438,"Buy two get third free correct with 6 items (4/2)");
        }
        
        func testBuyTwoGetThirdFree6ItemsOneOfEachPriceFree(){
            addMultiple(prodId: 15, quantity: 3) //Dove deodorant 219p
            addMultiple(prodId: 14, quantity: 3) //Lynx Africa    319p
            XCTAssertEqual(receipt.discount(),538,"Buy two get third free correct with 6 items (3/3)");
  • 09-12-2017, 02:59:08
    #7
    StrongKing adlı üyeden alıntı: mesajı görüntüle
    Kod bu
    element koyunca type hatası alıyorum.
    /// Third item free when you buy any two deodorants (product codes 65 & 66)
    class BuyTwoGetThirdFreeOffer :Offer {
    
    init(){
    super.init(name: "3 for 2 on Deodorants")
    applicableProductIds = [65,66];
    }
    override func isApplicableTo(list: [ShoppingItem]) -> Bool {
    return list.reduce(false) { $0 || applicableProductIds.contains($1.productId) }
    }
    
    override func valueOfDiscountFrom(list: [ShoppingItem]) -> Int {
    //order the list by price before discounting every third item
    var a = applicableProducts(list: list)
    a = a.sorted { $0.priceInPence > $1.priceInPence }
    var price: Int = 0
    //        for product in a {
    a.enumerated().forEach { (index,element) in
    if index % 3 == 2{
    
    price += product.priceInPence
    //// }
    
    
    
    }
    
    }
    return price
    }
    }
    Testi de bu hocam
    price değişkenin 219 438 538 olması gerekiyor ürün dizideki ürün sayısına göre
     func testBuyTwoGetThirdFree5Items(){
            addMultiple(prodId: 14, quantity: 2) //Lynx Africa    319p
            addMultiple(prodId: 15, quantity: 3) //Dove deodorant 219p
            XCTAssertEqual(receipt.discount(),219,"Buy two get third free correct with 5 items");
        }
        
        func testBuyTwoGetThirdFree6ItemsCheapestFree(){
            addMultiple(prodId: 15, quantity: 4) //Dove deodorant 219p
            addMultiple(prodId: 14, quantity: 2) //Lynx Africa    319p
            XCTAssertEqual(receipt.discount(),438,"Buy two get third free correct with 6 items (4/2)");
        }
        
        func testBuyTwoGetThirdFree6ItemsOneOfEachPriceFree(){
            addMultiple(prodId: 15, quantity: 3) //Dove deodorant 219p
            addMultiple(prodId: 14, quantity: 3) //Lynx Africa    319p
            XCTAssertEqual(receipt.discount(),538,"Buy two get third free correct with 6 items (3/3)");
    Kendi projenize has protocoller ve classlarınız olduğundan kodun okunması ve anlaşılması zor oluyor hocam. Ama benim tahminim arraydeki elemanların Integer olmadığı yönünde, ya da for product in a diye loop yapıp içine foreach i koymanızdan ötürü gerçekleşiyor olabilir.
  • 09-12-2017, 03:29:38
    #8
    AlprTbk adlı üyeden alıntı: mesajı görüntüle
    Kendi projenize has protocoller ve classlarınız olduğundan kodun okunması ve anlaşılması zor oluyor hocam. Ama benim tahminim arraydeki elemanların Integer olmadığı yönünde, ya da for product in a diye loop yapıp içine foreach i koymanızdan ötürü gerçekleşiyor olabilir.
    Teşekkür ederim o sorunu çözdüm.
    Bir sorum daha var yardımcı olursanız sevinirim.
    iki dizideki ürünleri nasıl karşılaştırabiliriz. yani a dizisindeki ürünler b dizisinde varsa değer true dönecek yoksa false dönecek.
  • 09-12-2017, 12:37:15
    #9
    StrongKing adlı üyeden alıntı: mesajı görüntüle
    Teşekkür ederim o sorunu çözdüm.
    Bir sorum daha var yardımcı olursanız sevinirim.
    iki dizideki ürünleri nasıl karşılaştırabiliriz. yani a dizisindeki ürünler b dizisinde varsa değer true dönecek yoksa false dönecek.
    Öncelikle iki dizideki ürün sayısı eşit olacak mı?
    Ve iki dizideki elemanlar eşit mi? Sırası önemli değil ama eşit olmaları önemli. Bu koşullar sağlandığında aşağıdaki yöntem çalışır.
    var urunler1 = ["1.urun","2.urun","3.urun","4.urun","5.urun","6.urun","7.urun","25.urun"]
    var urunler2 = ["6.urun","1.urun","5.urun","2.urun","25.urun","7.urun","3.urun","4.urun"]
    func diziKarsilastir(ilk ilkDizi: [String], ikinci ikinciDizi: [String]) -> Bool{
    if ilkDizi.count == ikinciDizi.count && ilkDizi.sorted() == ikinciDizi.sorted(){
    return true
    }else {
    return false
    }
    }
    print(diziKarsilastir(ilk: urunler1, ikinci: urunler2)) // Eğer iki arraydeki eleman sayıları eşit ise, ve değerler eşit ise true döndürür.
    Ama dizi sayıları eşit değil bir dizide 10 eleman var bir dizide 2 eleman var. Bu 2 elemanın o 10 elemanlık dizi içinde olup olmadığını kontrol etmek istiyorsak ise:
    var urunler1 = ["1.urun","2.urun","3.urun","4.urun","5.urun","6.urun","7.urun","25.urun"]
    var urunler2 = ["5.urun","2.urun","25.urun","6.urun","18.urun"]
    func ayniUrunVarmi(ilk ilkDizi: [String], ikinci ikinciDizi: [String]) -> Bool{
    for urun in ikinciDizi {
    if ilkDizi.contains(urun){
    return true
    }
    }
    return false
    }
     
    print(ayniUrunVarmi(ilk: urunler1, ikinci: urunler2)) // bu fonksiyon ise ikinci dizinin elemanlarını böler, ve ilk dizi bu elemanları kapsıyor mu diye kontrol ettirir. ardından gerekli boolean değerini return eder