Şimdi Ara

C++ fonksiyonunu recursive/özyinelemeli tarzda çevirmek (3. sayfa)

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
60
Cevap
0
Favori
2.602
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: önceki 123
Sayfaya Git
Git
Giriş
Mesaj
  • isteği üzerine kaldırıldı :)@vonderplanitz



    < Bu mesaj bu kişi tarafından değiştirildi berce -- 1 Ağustos 2019; 12:58:4 >
    < Bu ileti mobil sürüm kullanılarak atıldı >
  • ilk önce c++ ile kendi algoritma fikir yapımda bir benzerlik kurmam gerek!
    Evet, öyle! c++ daha iyi bilmek lazım.
    standart komutlarda algoritmayı c++ anladığı algoritma ile istediğimi yaptırabiliyorum.
    ama bu yukarıda verdiğim örnekte fikir doğru olsa bile c++ anlayacağı şekilde değil!

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • Önceki mesajımda önemli bir not vardı, onu hiçe saydın: C++ ile recursion kullanarak fibonacci dizisini yazdırmak için C++11 kullanman şart. C++11 bilmeden temel C++ ile olmaz o iş.

    Bu konu başlığı en az C++11+, Java 8+, Python 3.x gibi dilleri 100% bilip recursion problemlerini çözmek isteyenler için. Versiyon no'lara dikkat. Bu konuya yorum yapabilmek için bu kesin şart. Bu kesin şartı karşılamıyorsan temel C++ ile recursion öğrenmek istiyorsan başka bir konu açmalısın.
  • bende post'u sileyimde gönlün olsun. bir kaç güne yaparisem koyarım. olmazsa yine bir vakit bulup yine recursive olanı koyarım.

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • Bu işler gönül değil, çalışma deneme öğrenme işi.

    C++ ile recursion kullanarak Fibonacci dizisini bastırmak için C++11 kullanmalısın. Çalış ve dene. Uğraşıp bir kod yazdı isen ancak çalışmayan yerleri varsa

    "C++ ile recursion kullanarak Fibonacci dizisini bastırmak" gibi başlıkla konu aç. Ben dahil bircok kişi yardımcı olur.
  • bu da function ile tekrarlanan bir code.
    bunu daha az variable ile yazmayı denerim. c++ anlayacağı hali bulduğumda gösteririm.

    #include <iostream>
    using namespace std;

    int formul1(int k, int l, int i, int a) {
    int toplam,carpim;

    if(i<k || l<=a) {
    carpim=1;
    //cout << "i:" << i << endl;
    toplam=(i*i)+a;
    carpim*=toplam;
    cout<<toplam<<(i ==(k-1) ? " = ":" * ");
    i++;
    a--;
    return ( carpim * formul1 (k,l,i,a));
    }
    return 1;
    }




    int main() {
    int k,i=0,l=1,a; //burada a=k; yapılırsa program hata veriyor.
    cout<<"Bir sayi giriniz:";
    cin>>k;
    a=k;
    cout<<formul1(k,l,i,a);

    return 0;
    }

    /*
    Bir sayi giriniz:4
    4 * 4 * 6 * 10 = 960
    Bir sayi giriniz:6
    6 * 6 * 8 * 12 * 18 * 26 = 1617408
    Bir sayi giriniz:5
    5 * 5 * 7 * 11 * 17 = 32725
    */



    < Bu mesaj bu kişi tarafından değiştirildi berce -- 3 Ağustos 2019; 20:55:28 >
    < Bu ileti mobil sürüm kullanılarak atıldı >




  • quote:

    Orijinalden alıntı: Tuğkan-0153

    for'a takıldın. özyineleme recursion yerine Türkçe sözcük kullanma isteğimin sonucu. Vurgu için şimdilik recursion sözcüğünü kullanacağım. Recursion'u C++ ile öğrenmek cok iyi fikir değil. Recursion bir bilgisayar bilimi konusu. Amacı da bazı problemleri daha iyi ifade etmek. O yüzden recursion 'u öğrenmek istiyorsan önce bir betik dil öğrenmelisin. C ve C++, bilgisayar bilimi konularını çalışmak için değil, Unix 'i çalışmak için ideal bir dildir. Okey, C++ bu kısıtlamanın ötesinde hemen herşeyi çalışmak için kullanılabilir fakat C++11 ile. Ancak sen hala eski C++'ı kullanuıyorsun. C++11'de yeni bir çok gelişmiş ve pratik özellikler eklendi. bir betik dil öğrenmem diyorsan bari o yeni C++ özelliklerini öğren. C++11'deki o özellikler 2011 'de standartlaştırıldı fakat coğo 1998'den bu yana dile dahildi. Herbert Schildt'in kitabının 2. yarısı onları anlatıyor.

    Konu başlığı seni yanıltmasın: Bu konu, temel programlama bilgisini geliştirme açısından uygun bir konu değil. C++ fonksiyonunu recursive/özyinelemeli tarzda çevirmek için C++ 'ı sular seller gibi bilmek gerekli ve kesin şart olmasa da üstüne bir de betik dil bilmek gerekli. Sen C++ 'ı tam bilmiyorsun. Betik dil de bilmiyorsun veya belki biliyorsan da hiç kullanmıyorsun. O yüzden recursion konusu ilgini cektiyse yapman gereken önce C++ veya bir betik dil biraz daha çalışıp recursion 'a odaklanmak ve takıldığın yer olursa yeni bir konu başlığı açarak orada soru sormak.

    Şimdi recursion 'a ilişkin bir örnek SS gönderiyorum fakat bu konuda sorun olursa önce geniş bir araştırma yap, çalış, dene ve yine olmuyorsa yeni bir konu aç:

    Altta Fibonacci dizisini recursion ile çıkaran bir Scheme kodu ve çalışma anı görülüyor. Scheme recursion 'u anlamak açısından cok elverişli bir dildir. Burada gördüğün kodun yaptığı işin aynısını C++ ile de yapabilirsin fakat C++11'deki list veri yapısı ile. Temel C++ ile olacak şey değil.
    >bir betik dil öğrenmem diyorsan bari o yeni C++ özelliklerini öğren. C++11'deki o özellikler 2011 'de standartlaştırıldı.
    bunu fark etmedim. hem c++, hemde bir betik dili öğrenirim. şu anda programla dili olarak c++ ağırlık verdim. onda dikkatimi geliştirdikten sonra, tecrübe kazandıktan sonra diğerlerine bakacağım.

    senin tavsiyene ehemmiyet verip c++ v11 itibari ile eklenen özelliklere bakacağım.
    yukarıda verdiğim örnek, bir ihtimal eski versiyonlardaki gibi olabilir fakat yine dursun. aradaki farkı görürler.

    gönderdiğin resmin tam içeriği gönderebilir misin?
    yani (fib 4) klavye ne olarak giriyorsun? direkt rakam girişine benzemiyor..

    bir hata var mı? tahminen öyle
    7 rakamını girdiğinde 13 bitmesi lazım.
    4 rakamını girdiğinde 3 bitmesi lazım.

    C++ fonksiyonunu recursive/özyinelemeli tarzda çevirmek

    https://store.donanimhaber.com/3d/f6/82/3df682acceee2cbf623806deccb97108.png
    https://store.donanimhaber.com/0a/cb/0c/0acb0cb06b57f2a4b11cab369c713515.png



    < Bu mesaj bu kişi tarafından değiştirildi berce -- 4 Ağustos 2019; 0:19:12 >
    < Bu ileti mobil sürüm kullanılarak atıldı >





  • cppdepend.com
    The 15 C++11 features you must really use in your C++ projects. – CppDepend Blog
    https://cppdepend.com/blog/?p=319

    erip.gitbooks.io
    Type deduction | Modern C++
    https://erip.gitbooks.io/modern-cpp/content/chapter4.html

    google.github.io
    Google C++ Style Guide
    https://google.github.io/styleguide/cppguide.html


    bana

    initialization list
    std::vector<T> (vectorler olabilir);
    bahsettiğin özellikler bu verdiğim linkte yoksa rica etsem paylaşana..

    < Bu ileti mobil sürüm kullanılarak atıldı >




  • berce B kullanıcısına yanıt
    
    Donald Knuth der ki: Programlar bilgisayarda çalıştırmak için değil, insanlar içindir.

    Şimdi senin programa bakıyoruz. Karışık bir kod. 6 değişken var ki m ve n olmak üzere sadece 2 değişkenli bir polinom faktöryel için bu aşırı yüksek. 4 değişkenin isimlendirmesinden ne yaptığı değil ve kod cok uzun ve çıktı formatı eksik (3 + 1^2) yerine 4 gösteriyor.

    Formatı düzgün olan ve sadece 3 değişken ile polinom faktöryeli özyinelemeli hesaplayan sadece 9 satırlık Scheme kodu ile yanyana koydum, karşılaştırma için. Hiç Scheme bilmeyen biri bile, oradaki Scheme kodunun polinom faktöryelini nasıl hesapladığını görebilir cunku formüldeki değişkenler m ve n kodun içinde aynı görevde. Fazladan bir k değişkeni var ki o da faktöryel çarpım işleminde yardımcı değişken olarak.

    C++ bile olsa okunaklı kod göndermelisin. Daha karışık bir işlem olsa, senin kod kriptolanmış gibi olacak :)

    C++ fonksiyonunu recursive/özyinelemeli tarzda çevirmek




  • berce B kullanıcısına yanıt
    C++11 'deki 2011 seni yanıltmasın. C++11'deki özelliklerin %90'ından fazlası 1999'da çoktan C++'a dahil oldu, 2011'e kadar cok önemli olmayan birkaç özellik daha eklenerek C++11 adıyla yayınlandı. Yani, H.Schildt'in 2003 basımı C++ kitabında yeni özelliklerin %90+'ı var, böyle yeni video veya kitaplara gerek yok. Ben o 2003 kitabını bitirdim, bu yeni videolar vs olmadan c++11 kodlayabiliyorum :)

    Scheme'deki (fib 7) ye gelince: Scheme'de fonksiyon hesaplatma parantez ile oluyor. Dikkat edersen yukardaki kodlarda da hep parantez var. O sayede programın işlevlerini istediğin şekilde ayırabiliyorsun ki o da fonksiyonel programlamanın kendisi demek. Bilgisayarında Scheme kodları denemek istiyorsan,
    chocolatey.org
    Chocolatey Gallery | Chicken Scheme 4.13.0
    https://chocolatey.org/packages/chicken
    'da Windows için Scheme derleyici paketi var.




  • >Scheme'deki (fib 7) ye gelince: Scheme'de fonksiyon hesaplatma parantez ile oluyor. Dikkat edersen yukardaki kodlarda da hep parantez var.

    Aslında ben daha farklı bir konuya değinmiştim😄
    Eğer formül tablosuna baktığın zaman
    f7 13
    F4 3
    rakamını vermesi lazımdı
    yani fibonacci için 7 rakamını girdiğinde
    ...8 13 diye son olması lazım
    7, 8 tabanında
    öyle olmasa f7=13 demezdi
    Oradan n-1 yapan codu çıkardığında görebilirsin.

    Senin istediğin kadar kısalıkta kod yazdım fakat 8 ve sonraki rakamları sağlama yaptığımda gnu cmp yanlış hesaplıyor.
    Buda bit ile alakalı bir durum olabilir.
    Riota atayımda bakar mısın? Yoksa artık istemez misin? Yada başka bir şey mi var?

    Orada sana fibonnoci detaylarını paylaşırım.



    < Bu mesaj bu kişi tarafından değiştirildi berce -- 5 Ağustos 2019; 1:1:37 >
    < Bu ileti mobil sürüm kullanılarak atıldı >
  • berce B kullanıcısına yanıt
    Fibonacci dizisindeki argümanı toplam fibonacci sayısı olarak hesaplattığım için öyle o. Resmi formüldeki gibi olması için yapılacak tek şey, recursion'ı bir tur daha döndürmek ki onun için de recursion sonlanma şartını 1 arttırdım, şekildeki gibi. Bu basit bir ayrıntı, bahsetmeye dahi gerek yok.
    C++ fonksiyonunu recursive/özyinelemeli tarzda çevirmek

    Riot esasen, forumda iletemediğim özel veya politik vs konular için kullandığım bir ortam. Teknik konular forumda iletilebilir o yüzden Riot 'a gerek yok. Bir de, Avrupa'dan iş aradığım için de cok fazla ortamlara girmiyorum; bir iş ayarlayayım sonra tekrar ortamlara akarım. Sözkonusu C++ çalışman için yeni konu açabilrsin, "C++ ile fibonacci, recursion, fonksiyonel programlama" gibi bir başlık ile, örneğin. Scheme ile ilgili de konu açabilirsin, "Scheme öğreniyorum" gibi bir başlık ile, örneğin. Scheme eğitim ve akademik amaçlı temel bir programlama dili fakat Türkiye'de ODTÜ falan dahi olsa bir Bilgisayar Mühendisi Scheme bilmiyor (bildiğim kadarıyla) Forumda hiç kullanan görmedim. Fakat özellikle fonksiyonel programlamayı anlamak acısından cok iyi bir dil. Tavsiye ederim.




  • evet basit bir ayrıntı fakat ben dikkat ediyorum böyle şeylere.

    oha çüş bu kadarıda olur mu? ey derleyiciler benim kodumu neden adam gibi derlemezsiniz? online compiler sitelerinde kod düzgün çıkarken, cl.exe(visual studio bile hatalı çıkıyor). gnu mingw bile sjs bile yanlış derliyor.

    C++ fonksiyonunu recursive/özyinelemeli tarzda çevirmek

    https://store.donanimhaber.com/ca/1c/5f/ca1c5f7896ad1d57ee0a6979f1dff419.png //direk böyle url vermen daha iyi olur mobile görünümde resimleri açılmadı direkt url'yi buldup öyle açtım.

    (8+0^2) = 8
    8(7+1^2) = 8
    64(6+2^2) = 10
    640(5+3^2) = 14
    8960(4+4^2) = 20
    179200(3+5^2) = 28
    5017600(2+6^2) = 38
    190668800(1+7^2) = 50
    943505408
    yanlış sonuç veriyor
    Fakat online derleyici ile çalıştırdığımda düzgün sonuç veriyor.
    hatta kodu internet kafedeki bilgisayarda denedim onda da aynı sonuç.
    bu ne arkadaş

    >Riot esasen, forumda iletemediğim özel veya politik vs konular için kullandığım bir ortam. Teknik konular forumda iletilebilir o yüzden Riot 'a gerek yok.
    riot'a zaten sana özel ve burada anlatamadığım teknik konular ve politikten bahsetmek için girmiştim.
    eğer dersen teknik konulardan hiç bahsetmedik, hep politik, hep gündelik hayattan, sana orada dediğim. Sana riot'da anlatıklarımdan büyük ölçüde kutuldum. bilgisayar başında başım ağrımdan ağrısada tahammül edilebilir bir hale geldi. yani çalışmaya elverişli bir zihnim var.
    Dersin ki senden sıkıldım onuda hallederiz! yeter ki muhabbetin devamını iste!

    Yazdığım kodu c#$ yazmayı halletdikten sonra sonucu söylerim.

    < Bu ileti mobil sürüm kullanılarak atıldı >




  • using System;
    //using System.IO;
    namespace HelloWorld {
    class Program
    {
    public static int Main() {
    int m,a=0;
    Console.WriteLine("bir sayi giriniz:");
    m = Convert.ToInt32(Console.ReadLine());
    fonk k=new fonk();
    Console.WriteLine("Toplam sayi:{0}",k.formul(m,a));
    return 0;
    }
    }

    class fonk {
    public long formul (long m, long i)
    {
    long toplam=1;
    if (m>=1)
    {
    toplam*=(m+(i*i));
    Console.WriteLine(" ({0} +{1}^2) = {2})",m,i,toplam);
    return ( toplam * formul(--m,++i));
    }
    return 1;
    }
    }

    }
    //c# ile yapılan bir kod malum c# daha uzun yazılıyor c++ göre ilk etapta uğraştırsada istediğin sonucu alabiliyorsun.
    GDB online Debugger
    GDB online Debugger | Code, Compile, Run, Debug online C, C++
    https://www.onlinegdb.com/B1V2RcPQH
    // buradan bakabilirsin.

    -----------------
    buda c++ ile yazılan
    GDB online Debugger
    GDB online Debugger | Code, Compile, Run, Debug online C, C++
    https://www.onlinegdb.com/rJdNxoDXB


    peki neden internet cafe'de bile gnu gcc kurduğum bilgisayarda derleyipte aynı kod ile kendi bilgisayarımdaki yanlış sonuç alıyorum.
    g++ -o filename.exe filename.cpp
    komutunu kullanıyorum.



    < Bu mesaj bu kişi tarafından değiştirildi berce -- 7 Ağustos 2019; 4:8:34 >
    < Bu ileti mobil sürüm kullanılarak atıldı >




  • berce B kullanıcısına yanıt
    Okey, 1000'in polinom faktöryelini hesaplayabilir misin? Adımların çıktısını vermeden sadece sonucu verecek şekilde. Bak ben hesapladım

    C++ fonksiyonunu recursive/özyinelemeli tarzda çevirmek


    ipucu: Özyineleme fonksiyonunda son satır fonksiyon çağırısı olmalı, o durumda derleyici son satır optimizasyonu yapıyor ve süper hızlı hesaplayabliyor. Ben öyle yaptım :)
  • Okey;
    Lakin, öncelikle benim derleyici compiler problemini müşkilini halletmem gerek! visual studio bile yanlış derliyor.
    bu müşkili halledeyim ondan sonra sana guk guk derim ki
    meral, akın şenere posta çakar ve der ki Hukuk guguk guguk kuşu oldu :)

    bu online derleyiciler nasıl bir gcc kuruyor ki aynı kod onlarda derlediğimde problem oluşturmuyor. düzgün sonuç veriyor.

    Bu konuda bana yardım edebilir, bir fikir verebilirsin?
    ----------------------------
    main.cpp:8:11: note: suggested alternative:
    In file included from /usr/include/c++/6/ext/new_allocator.h:33:0,
    from /usr/include/x86_64-linux-gnu/c++/6/bits/c++allocator.h:33,
    from /usr/include/c++/6/bits/allocator.h:46,
    from /usr/include/c++/6/string:41,
    from /usr/include/c++/6/bits/locale_classes.h:40,
    from /usr/include/c++/6/bits/ios_base.h:41,
    from /usr/include/c++/6/ios:42,
    from /usr/include/c++/6/ostream:38,
    from /usr/include/c++/6/iostream:39,
    from main.cpp:1:

    ----------------------------
    böyle bir alternatif sunmuyor. bunlar gcc'i nasıl kurdular ki?



    < Bu mesaj bu kişi tarafından değiştirildi berce -- 8 Ağustos 2019; 1:9:18 >
    < Bu ileti mobil sürüm kullanılarak atıldı >




  • berce B kullanıcısına yanıt
    Online derleyicilerin ayarları tam yapılmıştır senin derleyici ayarlarında eksik vardır. Onun için yeni konu açabilirsin. Bu konudan benim yardımcı olmam güç.
  • zaten ben uğraşmadım setup kurulum dosyasından kurdum. ayarları yapılmıştır diye..
    yada bana farklı dosya geliyor.

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • bunlarin hepsini guclu bir laptop ve ddr2 bilgisayara fx islemci aladiktan sonra yapacagim en azindan serviste anakartin duzeltip yada guclu baska bir anakart elde etme sansini bulabilirsem eski bilgisayar programlamada islerimi goruyor lakin video editlemede ve yogun islemlerde sinifta kaliyor.
  • 
Sayfa: önceki 123
Sayfaya Git
Git
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.