Arama butonu
Bu konudaki kullanıcılar: 1 misafir
57
Cevap
2705
Tıklama
0
Öne Çıkarma
C++ fonksiyonunu recursive/özyinelemeli tarzda çevirmek
T
6 yıl
Yarbay
Konu Sahibi

#include <iostream> 
using namespace std;

/* x ardışık numarayı y kere işle, her bir işlemede bir önceki döngüdeki
numaraların toplamı kadar numara kullan 5 numarayı 3 kere işleme örneği:
1+2+3+4+5=15
1+2+3+4+5++++14+15=120
1+2+3++++++119+120=7260 */

void iterasyon (int numara, int kere)
{
int toplam=0;
for (int i=1; i <= kere; i++) {
for (int n=1; n <= numara; n++) {
toplam += n;
cout << n; n != numara ? cout << " + " : cout << "";
if (n == numara) cout << " = " << toplam << endl;
}
numara = toplam; toplam=0;
}
}
int main()
{
int numara, kere;
cout << "kac numara hesaplanacak? " << endl;
cin >> numara;
cout << "kac kere hesaplanacak? " << endl;
cin >> kere;
iterasyon(numara, kere);
return 0;
}

/*
Çalışma anı:

kac numara hesaplanacak?
5
kac kere hesaplanacak?
3
1 + 2 + 3 + 4 + 5 = 15
1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + 15 = 120
1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + 15 + 16 + 17 + 18 + 19 + 20 + 21 + 22 + 23 + 24 + 25 + 26 + 27 + 28 + 29 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + 40 + 41 + 42 + 43 + 44 + 45 + 46 + 47 + 48 + 49 + 50 + 51 + 52 + 53 + 54 + 55 + 56 + 57 + 58 + 59 + 60 + 61 + 62 + 63 + 64 + 65 + 66 + 67 + 68 + 69 + 70 + 71 + 72 + 73 + 74 + 75 + 76 + 77 + 78 + 79 + 80 + 81 + 82 + 83 + 84 + 85 + 86 + 87 + 88 + 89 + 90 + 91 + 92 + 93 + 94 + 95 + 96 + 97 + 98 + 99 + 100 + 101 + 102 + 103 + 104 + 105 + 106 + 107 + 108 + 109 + 110 + 111 + 112 + 113 + 114 + 115 + 116 + 117 + 118 + 119 + 120 = 7260
*/


Özyinelemeli tarzda fonksiyonu yazdım. Başkaları nasıl yazacak, onu tartışma ve egzeersiz amaçlıdır konu. Egzersiz yapmak isteyenler , bu fonksiyonu özyinelemeli tarzda yazabilir mi :)

DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.

Üye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.

Üye Ol Şimdi Değil



A
6 yıl
Yarbay

Pseudocode hocam
int'leri, noktalı virgülleri vb ekleyince java oluyor, c++ da olur, syntaxları benzer zaten


dh baştaki boşlukları sildiğinden süslü parantezleri takip edince görünür oluyor

https://codebeautify.org/javaviewer/cbd92e17
Burdan bakınca anlaşılır





< Bu mesaj bu kişi tarafından değiştirildi alimmm78 -- 26 Haziran 2019; 16:8:35 >

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


Bu mesajda bahsedilenler: @vonderplanitz
A
6 yıl
Yarbay

https://onlinegdb.com/B1-ree-xS
Buraya java kodunu koydum, çalışıyor
Uç noktalar için kontrol yok mesela negatif vb girerse sıkıntı olabilir

konuda siz nasıl yaparsınız demişsiniz, Pseudocode ile anlatmak en doğrusudur, yoksa gidip tam kod yazmak gereksizlik oluyor ama yine de üstteki linkte yazdım





< Bu mesaj bu kişi tarafından değiştirildi alimmm78 -- 26 Haziran 2019; 16:21:17 >

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

B
6 yıl
Yüzbaşı

#include <iostream>
#include <string>
using namespace std;

int main () {
setlocale(LC_ALL,"tr_TR.utf8");
setlocale(LC_ALL,"tr_TR.oem857");
int hnumber,total;
int tnumber;
int x=1;
cout<<"Ardışık sayı miktarını gir:";
cin >>hnumber;
cout<<"Devir sayısını gir:";
cin >>tnumber;


while (x<=tnumber)
{
int i=0;
do
{

cout << i;
total+=i;
i == hnumber ? cout << " = "<<total<<endl : cout << " + ";
i++;

}
while (i <=hnumber);
hnumber=total; total=0;
x++;
}


}

http://cpp.sh/33sqe


buda while ile olanı;@vonderplanitz @vonderplanitz



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


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

Çözüm öz yinelemeli değil, iterasyonlu. "for" olan her çözüm iterasyondur. Öz yinelemeli çözümde for olmaz. Öz yineleme => Recursion. Daha fazla açıklama için bak:https://en.wikipedia.org/wiki/Recursion_(computer_science)

ve iterasyonlu çözüm hem eksik hem hatalı. Eksik cunku polinom faktöryelin her bir elemanın açılımını (yani örneğin (4 + 1^2) gibi) ekrana tek tek basmıyor, onun yerine örneğin (4 + 1^2)'in sonucu olan 5'i basıyor. ve hatalı cunku polinomdaki ifadeyi doğru hesaplamıyor.


Bu mesaja 1 cevap geldi.

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

recursive tekrarlanan arasındaki farkı anlamak için bir kaç kod yazmayı deneyeceğim. aklıma her seferinde for'un yaptığı işlevi nasıl yaptırabilirim ve bu return ile olabilir ama nasıl sorusu geliyor?
bir function içinde tanımayacağım ve function ile bunun bana getirisi ne?

evet daha kısa yazarak c++ sınırları zorlanabilir? bir münazara niyeti ile yapılabilir?

ama bilgisayarda daha hızlı çalışmasını sağlamak gibi bir faydası yoksa,çoğu insan buna yeltenmeyecektir. fakat benim her zaman merakımı çeker!

bir şeyler buldum, belki(katiyyen) birillerinin ihtiyacını karşılar.

https://www.programiz.com/cpp-programming/recursion
https://beginnersbook.com/2017/08/cpp-recursion/
http://bilgisayarkavramlari.sadievrenseker.com/2008/08/05/ozyineli-fonksiyonlar-recursive-functions/

düşündüğüm gibi return ile yapılıyormuş.
fakat bunun forla pek bir farklı kalmamış gibi görünüyor.

artısını büyük boyutlu projeler ile çalıştığımızda görürüz.



< Bu ileti mobil sürüm kullanılarak atıldı >
Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @vonderplanitz
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

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

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