PDA

View Full Version : [Q] help me soon...???



assault
11-12-2002, 19:29
Mình là newbie ,mong các bạn giúp giảu quyết vấn đề mà mình đang gặp,mình không biết lỗi trên đâu như thế nào ,và khắc phục ra sao ????
n là số lần chia tam giác, với các cạnh dược tạo từ các trung điểm của cạnh cũ.
Cảm ơn....

#include<stdio.h>
#include<conio.h>
#include<math.h>

void main ()
{
float a,b,c,s,p,k;
int i,n;
printf("Nhap vao cac canh cua tam giac a,b,c :" );
scanf("%f",&a);
scanf("%f",&b) ;
scanf("%f",&c) ;
printf("\nchia bao nhieu lan ");
scanf("%d",&n) ;
s=0;
for (i=0;i<=n;i++)
{
a=b/2;b=c/2;c=a/2;
p=(a+b+c)/2;
k=p*(p-a)*(p-b)*(p-c);
s=s+n*sqrt(k);
}
printf("In ra s = %f ",s);
getch();

}

CrazyKing
12-12-2002, 02:11
Lỗi của bạn là đoạn code viết trong vòng lặp For !
for (i=0;i<=n;i++)
{
a=b/2;b=c/2;c=a/2 ; // lỗi tại đây,a bây giờ nhận giá trị là b/2.
p=(a+b+c)/2;
k=p*(p-a)*(p-b)*(p-c);
s=s+n*sqrt(k);
}

Giá trị c bị sai ---> p sai -->đến lúc nào đó k sẽ nhận giá trị âm--> sqrt(k) Phát sinh lỗi mà bạn đã gặp !
Có thể sửa lỗi này dùng thêm biến phụ :

for (i=0;i<=n;i++)
{
temp= a;
a=b/2;b=c/2;c=temp/2;
p=(a+b+c)/2;
k=p*(p-a)*(p-b)*(p-c);
s=s+n*sqrt(k);
}

assault
12-12-2002, 20:52
Cảm ơn lắm lắm

CrazyKing
12-12-2002, 20:57
No star where !!!
Thật ra cũng chẳng cần dùng thêm biến phụ đâu ! Bạn dùng lại các biến a,b,c , vì vai trò a,b,c như nhau nên
a=a/2;
b=b/2;
c=c/2;
Là xong ấy mà !!!

assault
12-12-2002, 21:06
Cảm ơn lắm lắm

assault
13-12-2002, 10:24
Mình chưa hiểu về Array,bạn nào có thể giúp mình .