ورود

View Full Version : ارور تابع sqrt



امید 30
یک شنبه 29 آبان 1390, 00:35 صبح
سلام
یک برنامه نوشتم که تابع sqrt توش به کار بردم
ولی این ارور رو میده موقعی که تابع میخواد اجرا بشه:
78120
مشکل چیه؟؟راه حلش چیه؟؟
http://barnamenevis.org/images/misc/pencil.png

majid1605
یک شنبه 29 آبان 1390, 11:19 صبح
برنامه رو میزاشتید تا بشه راهنمایی کرد

امید 30
یک شنبه 29 آبان 1390, 16:48 عصر
برنامه اینه که x و y دو نقطه رو بگیریم فاصله دو نقطه رو حساب کنیم.
من تو نوشتن فرمول مشکل دارم و اینکه تابع sqrt ارور میده.

majid1605
یک شنبه 29 آبان 1390, 19:50 عصر
دوست عزیز گذاشتن و یا درخواست برنامه درخواستی توی سایت ظاهراً خلاف قوانین هستش واسه همین من یه مثال از sqrt میزارم شما هم اگه خودت برنامه رو نوشتی همون رو بزار اینجا ما هم می گیم کجاش ایراد داره
#include <iostream>
#include <math.h>
using namespace std;

int main()
{
double y = 0;
cin >> y ;
cout << sqrt(y) <<endl;

}

امید 30
یک شنبه 29 آبان 1390, 22:12 عصر
برنامه رو خودم نوشتم وگرنه به ارور نمیخوردم
این هم کد برنامه:

#include<iostream.h>
#include<math.h>
main()
{
double x1,x2,y1,y2,g=0,h=0;
double f=0;
cout<<"x1:";
cin>>x1;
cout<<"y1:";
cin>>y1;
cout<<"x2:";
cin>>x2;
cout<<"y2:";
cin>>y2;
cout<<"x1:"<<x1<<"__"<<"y1:"<<y1<<"\n";
cout<<"x2:"<<x2<<"__"<<"y2:"<<y2<<"\n";
x1=pow(x1,2);
x2=pow(x2,2);
y1=pow(y1,2);
y2=pow(y2,2);
g=x1-x2;
h=y1-y2;
f=g+h;
cout<<sqrt(f)<<endl;

return 0;
}
مشکل از کجاست و چرا این ارور رو میده

majid1605
یک شنبه 29 آبان 1390, 22:31 عصر
#include<iostream>
#include<math.h>

using namespace std;

int main()
{
double x1,x2,y1,y2,g=0,h=0;
double f=0;
cout<<"x1:";
cin>>x1;
cout<<"y1:";
cin>>y1;
cout<<"x2:";
cin>>x2;
cout<<"y2:";
cin>>y2;
cout<<"x1:"<<x1<<"__"<<"y1:"<<y1<<"\n";
cout<<"x2:"<<x2<<"__"<<"y2:"<<y2<<"\n";
x1=pow(x1,2);
x2=pow(x2,2);
y1=pow(y1,2);
y2=pow(y2,2);
g=x1-x2;
h=y1-y2;
f=g+h;
cout<<sqrt(f)<<endl;

return 0;
}


من از vs 2010 استفاده می کنم برنامه بالا رو هم بر اساس اون اصلاح کردم
فقط اگه کامپایلر دیگه ایی استفاده می کنی

#include<iostream.h>
با

#include<iostream>
عوض کن
و

using namespace std;
حذف کن

ایراد کار هم از main() که من از نوع int تعریف کردم

امید 30
یک شنبه 29 آبان 1390, 22:52 عصر
بازم همون ارور رو میده و من فکر میکنم ربطی به وارد کردن اعداد داره
مثلا اگر عدد های 1 و 2و 3 و 4 رو بهش بدی ارور میده
ولی اگر 1 و 9 و 2 و 8 رو بدی جواب میده

majid1605
یک شنبه 29 آبان 1390, 23:08 عصر
واسه اینه که وقتی اعداد 1 و 2 و3 و 4 رو میدی جواب gو f منفی میشه و فکر کنم تابع sqrt جذر اعداد منفی رو محاسبه نمی کنه باید برم سرچ کنم ولی شما می خوای فاصله رو اندازه بگیری که قطعاً عدد مثبتیه واسه همین می تونی با تعریف دو تا if جوابهای g,f رو اگه منفی شدن مثبت کنی کافیه توی یه 1- ضربشون کنی

امید 30
یک شنبه 29 آبان 1390, 23:28 عصر
این سایت رو یک نگاهی بنداز
یک نفر همین مشکل رو داشته تو پست دوم راهنماییش کردن و گفته مشکلش حل شده ولی خب انگلیسی هست من متوجه نشدم
http://www.gidforums.com/t-11418.html

Ananas
چهارشنبه 02 آذر 1390, 21:46 عصر
سلام.
اول باید تفریق انجام بشه بعد توان 2. هر عددی به توان 2 برسه حاصلش همیشه مثبت هست ولی دوتا عددی که به توان 2 برسن اگه از هم کم کنیم ممکنه منفی بشه.
فرمول محاسبه فاصله دو نقطه :

float x1 = ...;
float y1 = ...;
float x2 = ...;
float y2 = ...;
float pow_2(float x)
{
return (x*x);
}
return (sqrt(pow_2(y2 - y1) + pow_2(x2 - x1)));