• Ziyaretçi Sayısı:586352
  • oguzata.com
  • 18.191.216.163
 !

BF4

Oğuz Ata - BF3 Profili


Facebook

Oguz Ata

Kartınızı Oluşturun



by: Oðuz Ata - 28 Ocak 2015 Çarşamba 23:42:32

Fonksiyon parametreleri ve lokal değişkenler hakkında kafası karışan bir programcı aşağıdaki programı yazmıştır.

Program hatasız görünmesine karşın ciddi hatalar barındırmaktadır. hatta ans ve r2 değerlerini main fonksiyonunda ilk değerlerini atarsak, program hatasız şekilde derlenebilmektedir.

Yapılan hatalar acaba nelerdir?

#include

# define PIE 3.14

float ComputeVolume ( float r, float h, float ans , float r2 );

 

int main(void)

{float radius , height , ans , r2;

printf (" Radius : ");

scanf ("%f", & radius );

printf (" Height : ");

scanf ("%f", & height );

ans = ComputeVolume (radius , height , ans , r2 );

printf (" Volume : %f\n", ans );

return 0;}

 

float ComputeVolume ( float r, float h, float ans , float r2)

{

r2 = r*r;

ans = (1/3)* PIE *r2*h;/*be carreful type casting */

return ans ;

}

 
1-Parametreler: Fonksiyon hesaplama yapabilmek için sadece 2 değere ihtiyaç duymaktadır. Bunlar "r" ve "h" değerleridir.
Bu nedenle fonsiyona gönderilmesi gereken değerler sadece bunlar olmalıdır.! 
2-ComputeVolume  fonksiyonunda kullanılan (parametre olarak gönderilmiş)"ans" ve "r2" değişkenleri parametre yerine lokal değişkenler olmalı idi.(Bu nedenle bu değişkenler main fonksiyonu yerine ComputeVolume  fonksiyonunda tanımlanmalı idi. İhtiyaç halinde main fonksiyonunda da geriye dönen değeri tutmasi için "ans" yada başka bir isimde değişken tanımlanarak ComputeVolume fonksiyonundan dönen değeri tutması sağlanabilir. )
3-ComputeVolume fonksiyonunda hesaplama yapılan satırda "(1/3)" diye bir değer vardır.  Burada "1" ve "3" integer değerler olduğu için parantez içindeki değerler integer olarak hesaplanacaktır. ve doğal olarak "0.33" ün integer karşılığı olan "0"  değerei çıkacaktır. Bu durumda çarpım halindeki ifadelerden birisnin "0" olması sonucu "0" yapacaktır. Bu durumu düzeltmek için "(1/3)" ifadesi   ((float)1/3) yada (1.0/3) yada (1/3.0) yada (1.0/3.0) olarak değiştirilmelidir.
 
 
Sonuç olarak
 
 
 
#include
#define PIE 3.14
float ComputeVolume(float r, float h);
 
int main()
{
float radius, height,ans;
printf(" Radius : ");
scanf("%f", &radius);
printf(" Height : ");
scanf("%f", &height);
ans = ComputeVolume(radius, height);
printf(" Volume : %f\n", ans);
return 0
;
}
 
float ComputeVolume(float r, float h)
{
float r2,ans;
r2 = r*r;
ans = (1.0 / 3)* PIE *r2*h;/*be carreful type casting */
return ans;
}
 
 
 
 

viewed 5709 times -


1 2
Sınav Soruları

Sınav Soruları için tıklatın
(
Son Güncelleme:15.02.2017)




 
 
Oğuz Ata, 2012