PDA

Tam Sürümünü Görmek İçin : faktöriyel almada printf tanımlanmamış fonksiyon hatası ?


ParK
27/05/2008, 17:32
kodu bloodshed ile derlemeye kalktığımda:

'printf' undeclared(first use this function)

hatası alıyorum

nerede yanlış yapıyorum?

// c de fonksiyon yazarak girilen sayinin
// faktoriyel degerini bulmak

double fakto( int rakam);

int main(){

int rakam;

printf("sayi gir\n");
scanf("%d",&rakam);
printf("Sayinin faktoriyeli: %f\n",fakto(rakam) );
return 0;
}

//arkaplanda gorulmeyen ama islemi yapan fonksiyon

double fakto(int rakam){


double denetci;

for(int sayac=1; sayac <=rakam; sayac++){
denetci=denetci*sayac;
}
return denetci;
}


BFS
27/05/2008, 17:57
stdio.h başlık dosyası programa dahil edilmiş mi?

ParK
27/05/2008, 18:09
teşekkürler .. ekledim ve şöyle değiştirdim .bu seferde ne girersem gireyim sonucu: 1 diye yazıyor.

#include <stdio.h>

long fakto( int rakam);

int main(){

int rakam;

printf("sayi gir\n");
scanf("%d",&rakam);
printf("Sayinin faktoriyeli: %ld\n",fakto(rakam) );
return 0;
}

//arkaplanda gorulmeyen ama islemi yapan fonksiyon

long fakto(int rakam){

double denetci;
denetci=1;
while(denetci>1){
for(int sayac=1; sayac <=rakam; sayac++){
denetci=denetci*sayac;
}
}
return denetci;
}

portalturks
27/05/2008, 18:19
denetci=1 yerine denetci==1 yazmayı denermisiniz?
Not: Ayrıntılı bilgim yok

BFS
27/05/2008, 18:22
Tam inceleyemedim ama ilk gözüme şu çarptı:

fakto fonksiyonunda denetci değişkenine 1 atamışsın ama while döngüsünde denetci>1 şart koşmuşsun.
Bu şekilde hiçbir zaman while döngüsüne giremezsin.
kodlarında küçük bi değişiklik yAptım

#include <stdio.h>

long fakto( int rakam);

int main(){

int rakam;

printf("sayi gir\n");
scanf("%d",&rakam);
printf("Sayinin faktoriyeli: %ld\n",fakto(rakam) );

system("PAUSE");
return 0;
}

//arkaplanda gorulmeyen ama islemi yapan fonksiyon

long fakto(int rakam){

double denetci;
denetci=1;
int sayac;

for(sayac=1;sayac<=rakam;sayac++)
{
denetci=denetci*sayac;
}

return denetci;
}

ParK
27/05/2008, 18:28
teşekkürler BSF çalışıyor ... (döngü ipucu için ayrıca teşekkürler)

portalturks
27/05/2008, 18:29
Artık programınız çalışıyor :)

enesgenc
27/05/2008, 18:40
#include <stdio.h>
#include <stdlib.h>
long fakto( int rakam);
int main()
{

int rakam;

printf("sayi gir\n");
scanf("%d",&rakam);
printf("Sayinin faktoriyeli: %ld\n",fakto(rakam) );

system("PAUSE");
main();
return 0;
}
//arkaplanda gorulmeyen ama islemi yapan fonksiyon
long fakto(int rakam)
{
double denetci;
denetci=1;
int sayac;
for(sayac=1;sayac<=rakam;sayac++)
{
denetci=denetci*sayac;
}

return denetci;
}


şu anda 12 ye kadar hesaplıyor sonra problem çıkıyor.

enesgenc
27/05/2008, 18:41
ben kodu incelerken çözmüşsünüz :D

portalturks
27/05/2008, 18:44
Çünkü double ın da hafızasında tutabildiği byte sınırlı:)

acehreli
27/05/2008, 20:41
Baska bir hata daha var: printf'e double gonderdigin halde "long int (%ld) gonderdim" diyorsun. :)

Neden 12'den buyuk sayilarin calismadigini forumda cok yakin zaman once iki kere konustuk. Arama sonuclarinda guzel bilgiler bulabilirsin. :)

Ali

acehreli
27/05/2008, 23:17
Yaniliyorum tabii... fakto'nun double dOndUreniyle %ld'nin ayni programda oldugunu sanmisim. Ama oyle degil: %ld diyen fakto'nun long dOndUrenini cagiriyor.

Ali

sekizbit
28/05/2008, 06:37
Bu aralar baya bir insanin 13! ile basi dertde sanirim :)