C De Mantık Hatası.
-
#include <stdio.h>
int main (){
int n,i;
float a=1;
printf("Enter the n\n");
scanf("%d",&n);
for ( i=1 ; i<=n ; i++) {
a+=1\(a*i);
}
printf("%1f\n",a);
return 0;
}arkadaslar amac bu alttakı programı yazmaktı fakat ufak bı mantık hatası oldu bulamadım
1 + 1/1! + 1/2! +1/3! + … + 1/n!
büyük ihtimalle a+=1\(a*i); sorun burada ama anlayamadım.
tskler.
-
Program doğru şekilde faktöriyel almıyor. zaten hiç faktöriyel almıyor.
#include <stdio.h>
double fak(int sayi);
int main (){
int n,i;
double a=1;
printf("Enter the n\n");
scanf("%d",&n);
for ( i=1 ; i<=n ; i++)
a+=1./fak(i);
printf("%1.20f\n",a);
getch();
return 0;
}
//----------------------
double fak(int sayi){
int i;
double sonuc=1;
for(i=1;i<=sayi;i++)
sonuc*=i;
return sonuc;
}
Programın doğru hali bu.bu arada \ ile bölme yapılmaz / ile yapılır. kolay gelsin.
edit : fonksiyonu doubleye çevirdim ve duyarlılıgı biraz arttırdım. daha iyi sonuc görürsün.
-
Sagol tesekkur ederım.
-
Programı biraz daha düzenledim yenisini al. 2.718281 de takılıp kalınca farkettim e sayısını hesapladıgını :)
Ben de programlamaya ilk basladıgım yıllarda pi sayısını 20 farklı yolla hesaplıyordum bu sayede hala pi sayısının 23 hanesini ezbere bilirim :)
-
tahribatta görmek istediğimiz güzel şeyler =)
-
benimde c++ hakkinda bi kac sorum olucakti, konu acilmisken soriyim soyle bi sey yaptigimda calismiyor
1.soru
char tbt[20];
cin>>tbt;
if(tbt=="tbt")
komut 1
else
komut 2
tbt yazdigimda ilk komut gerceklesmiyor ikincisi gerceklesiyor galiba enter den cunku enteri bi sifir olarak algiliyor console aplication orneyin cout>>tbt yazinca eger basta tbt girdiysem tbt alt satirda bi sifir daha ekliyor bunu nasil haledebilecegim hakkinda bi fikriniz varmi
2. soru bildiginiz gibi c++ de string diye bi veri tipi yok sadece char var ki bunda kac tane karakter tasiyacaginizi siz beli ediyorsunzu peki kulanici sinirsiz karakter girebilmek icin ne yapmam gerek ? yani degisken sinirsiz karakter tasiyabilsin yani bastan beli olmasin ?
3. editor olarak devcpp yi kulaniyorum ama cogu library burda yok orneyni #include <iomanip> yaptigimda hata veriyor editor bunu devcpp ya nasil ekleyebilirim
simdiden tesekurler
-
geniuss bunu yazdı:
-----------------------------benimde c++ hakkinda bi kac sorum olucakti, konu acilmisken soriyim soyle bi sey yaptigimda calismiyor
1.soru
char tbt[20];
cin>>tbt;
if(tbt=="tbt")
komut 1
else
komut 2
tbt yazdigimda ilk komut gerceklesmiyor ikincisi gerceklesiyor galiba enter den cunku enteri bi sifir olarak algiliyor console aplication orneyin cout>>tbt yazinca eger basta tbt girdiysem tbt alt satirda bi sifir daha ekliyor bunu nasil haledebilecegim hakkinda bi fikriniz varmi
2. soru bildiginiz gibi c++ de string diye bi veri tipi yok sadece char var ki bunda kac tane karakter tasiyacaginizi siz beli ediyorsunzu peki kulanici sinirsiz karakter girebilmek icin ne yapmam gerek ? yani degisken sinirsiz karakter tasiyabilsin yani bastan beli olmasin ?
3. editor olarak devcpp yi kulaniyorum ama cogu library burda yok orneyni #include yaptigimda hata veriyor editor bunu devcpp ya nasil ekleyebilirim
simdiden tesekurler
-----------------------------Öncelikle C ve C++ da if(tbt="dssdf") gibi bir karşılaştırma yapamazsın. Yaparsan "dsfsdf" stringin bellekte herhangi bir yere yerleştirilmiş "dsdsf" yazısının adresi demektir ve senin karakter dizini adresi buna eşit olmayacağı içni sonuç asla doğru olmaz.
(edit: C++ da string türü standart olarak varmıs, alp den öğrendim :) Bukod C içindir
Ama şöyle yaparsan sorun kalmaz.
if(! strcmp(tbt,"tbt") )
....
else
....
Ayrıca enter karakteri windows da , 0xD ve 0xA karakterleri birleşimidir. ya da '\n' karakteridir. 0 ise stringlerin bitiş karakteridir(NULL).
ikinci soruya gelirsek, kullanıcının sınırsız sayıda karakter girmesi durumu C de malloc gibi fonksiyonlarla sağlanır. bunlar heap alanından istenildiği kadar bayt ayırırlar. Ancak C++ da sanırım "new" operatörü de var. unutma herşeyin bir sınırı vardır, Kaç bayt ayırırsan okadar harf alırsın.
3. soruna gelirsek, Dev C++ mükemmel bir editor ve Gcc gibi mükemmel bir derleyicisi var. Ben C de hiç bir sorun yaşamadım ancak sonuçta standart olmayan başlık dosyalarının dev c++ da olması zorunlu değildir. Ama birçoğu var yinede.
-
c++'da <string> şeklinde tanımlanan, ayrıca dev c++'da da standart olan bi string kütüphanesi var onu kullanarak diğer dillerden alışkın olduğun stringleri kullanabilirsin ama tugberk hocamın dediği gibi her şeyin bi sınırı var
-
Tugberk bunu yazdı:
-----------------------------Programı biraz daha düzenledim yenisini al. 2.718281 de takılıp kalınca farkettim e sayısını hesapladıgını :)
Ben de programlamaya ilk basladıgım yıllarda pi sayısını 20 farklı yolla hesaplıyordum bu sayede hala pi sayısının 23 hanesini ezbere bilirim :)
-----------------------------oha bende bunu görünce anladım
1 + 1/1! + 1/2! +1/3! + … + 1/n!
çünkü e üzeri 1 in maclouren seri açılımı bu :D
-
sadece devcpp nin ozeligi mi bilmiyorum ama simdi string tbt diye denedim calisti niye boyle oldugunu anlaamadim ama bide herseyin bi siniri oldugunu biliyorum ama sadece diger programlama dilerindeki gibi string olayini cpp de de kulanabilirmiyi mdiye sormustum bide us iomanip olayini devCpp de nasil kulanabilecgimi birisi soyleyebilirmi ?
-
abi string c++ standardlarından biri, dev c++'da, visual c++'da, c++ derleyicilerinde de standart haliyle
iomanip konusunda da
#include <iomanip>
using namespace std;
kullandığın sürece sorun olmaması lazım, ben şu an denedim bi sorun göremedim