Arama butonu
Bu konudaki kullanıcılar: 1 misafir, 1 mobil kullanıcı
57
Cevap
2701
Tıklama
0
Öne Çıkarma
Cevap: C++ fonksiyonunu recursive/özyinelemeli tarzda çevirmek (3. sayfa)
B
6 yıl
Yüzbaşı

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ı >


Bu mesajda bahsedilenler: @vonderplanitz
B
6 yıl
Yüzbaşı

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ı >

T
6 yıl
Yarbay
Konu Sahibi

Ö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.


Bu mesaja 1 cevap geldi.
B
6 yıl
Yüzbaşı

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 mesajda bahsedilenler: @vonderplanitz
T
6 yıl
Yarbay
Konu Sahibi

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.



B
6 yıl
Yüzbaşı

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ı >
Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @vonderplanitz , @berce
B
6 yıl
Yüzbaşı

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.
< Resime gitmek için tıklayın >
>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.

< Resime gitmek için tıklayın >

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ı >


Bu mesajda bahsedilenler: @vonderplanitz
B
6 yıl
Yüzbaşı

Videoyu izlemek için tıklayınız
https://cppdepend.com/blog/?p=319
https://erip.gitbooks.io/modern-cpp/content/chapter4.html
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ı >
Bu mesaja 1 cevap geldi.
T
6 yıl
Yarbay
Konu Sahibi


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 :)

< Resime gitmek için tıklayın >




Bu mesajda bahsedilenler: @berce
T
6 yıl
Yarbay
Konu Sahibi

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,https://chocolatey.org/packages/chicken 'da Windows için Scheme derleyici paketi var.


Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @berce
B
6 yıl
Yüzbaşı

>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ı >
Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @vonderplanitz
T
6 yıl
Yarbay
Konu Sahibi

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.
< Resime gitmek için tıklayın >
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.


Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @berce
B
6 yıl
Yüzbaşı

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.

< Resime gitmek için tıklayın >

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ı >


Bu mesajda bahsedilenler: @vonderplanitz
B
6 yıl
Yüzbaşı

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.
https://www.onlinegdb.com/B1V2RcPQH // buradan bakabilirsin.

-----------------
buda c++ ile yazılan
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ı >
Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @vonderplanitz
T
6 yıl
Yarbay
Konu Sahibi

Okey, 1000'in polinom faktöryelini hesaplayabilir misin? Adımların çıktısını vermeden sadece sonucu verecek şekilde. Bak ben hesapladım

< Resime gitmek için tıklayın >

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 :)


Bu mesaja 2 cevap geldi.

Bu mesajda bahsedilenler: @berce
B
6 yıl
Yüzbaşı

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ı >
Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @vonderplanitz
T
6 yıl
Yarbay
Konu Sahibi

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üç.


Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @berce
B
6 yıl
Yüzbaşı

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ı >


Bu mesajda bahsedilenler: @vonderplanitz
B
5 yıl
Yüzbaşı

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.




Bu mesajda bahsedilenler: @vonderplanitz
DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.