نقل قول: مشکل در جذر گرفتن در C
شما باید هدر math رو include کنید و در ضمن اون عملگری که برای به توان رسوندن استفاده کردید xor هستش نه توان.
برای توان رسوندن هم یا از pow استفاده کنید یا دو بار در خودش ضربش کنید.
نقل قول: مشکل در جذر گرفتن در C
نقل قول:
نوشته شده توسط
ehsan_faal
شما باید هدر math رو include کنید و در ضمن اون عملگری که برای به توان رسوندن استفاده کردید xor هستش نه توان.
برای توان رسوندن هم یا از pow استفاده کنید یا دو بار در خودش ضربش کنید.
ممنون از شما!
کتابخانه math رو فرخوانی کردم و مشکل حل شد اما حالا چند سوال و یک مشکل جدید!
اول اینکه چطور باید از pow استفاده کنیم؟ یعنی باید به این شکل تغییر کنه؟
delta=pow(b)-4*a*c;
حالا مشکل اصلی:
این کدی هست که در حال حاضر دارم:
#include<stdio.h>
#include<math.h>
int main()
{
int a,b,c,delta,x1,x2,d;
printf("Please Enter a b c >\n");
scanf("%d %d %d",&a,&b,&c);
delta=(b*b)-4*a*c;
if(delta<0){
printf("There Is No root To Show!");
}
else{
d=sqrt(delta);
x1=-b+d/2*a;
x2=-b-d/2*a;
printf("The Roots are : X1=%d and X2=%d\n",x1,x2);
}
}
متاسفانه بعد از اینکه پیام اول چاپ میشه و من مقادیر رو میدم باز پنجره بسته میشه! حدس زدم شاید برای این باشه که مجدد به مشکل اول رسیدم و اینه که سریعا محاسبه میکنه و نتیجه رو بسرعت نشون میده و بسته میشه اما یک متغیر دیگه هم بنام t معرفی کردم و بعد از تمامی اعمال در main برابر t=getchar(); قرار دادم اما فایده ای نداشت!
نقل قول: مشکل در جذر گرفتن در C
فرم استفاده از تابع pow به صورت زیر است :
double pow (double base, double exponent);
که base همون پایه و exponent همون توان هست، مثال زیر نشون دهنده ی 2 به توان 5 هست.
double pow (2, 5);
درباره ی باز نگه داشتن کنسول هم می تونید از فرمان زیر استفاده کنید :
//remember to include iostream to use this function
std::cin.ignore();
این کد رو در پایان برنامه بذار. کارش اینه که در پایان برنامه منتظر فشرده شدن کلید Enter از سوی کاربر میمونه. فقط یادت باشه که این کد تحت کتابخانه ی iostream اجرا میشه که تو کد هم نوشتم.
نقل قول: مشکل در جذر گرفتن در C
نقل قول:
نوشته شده توسط
hamedBB
فرم استفاده از تابع pow به صورت زیر است :
double pow (double base, double exponent);
که base همون پایه و exponent همون توان هست، مثال زیر نشون دهنده ی 2 به توان 5 هست.
double pow (2, 5);
درباره ی باز نگه داشتن کنسول هم می تونید از فرمان زیر استفاده کنید :
//remember to include iostream to use this function
std::cin.ignore();
این کد رو در پایان برنامه بذار. کارش اینه که در پایان برنامه منتظر فشرده شدن کلید Enter از سوی کاربر میمونه. فقط یادت باشه که این کد تحت کتابخانه ی iostream اجرا میشه که تو کد هم نوشتم.
متاسفانه باز هم بعد از اینکه مقادیر a b c رو میدم بسته میشه:
#include<stdio.h>
#include<math.h>
#include<iostream>
int main()
{
int a,b,c,delta,x1,x2,d;
printf("Please Enter a b c >\n");
scanf("%d %d %d",&a,&b,&c);
delta=(b*b)-4*a*c;
if(delta<0){
printf("There Is No root To Show!");
}
else{
d=sqrt(delta);
x1=-b+d/2*a;
x2=-b-d/2*a;
printf("The Roots are : X1=%d and X2=%d\n",x1,x2);
}
std::cin.ignore();
}
الان یک مشکل بزرگ تر وجود داره!:لبخند::لبخند: :افسرده:
مشکل اینه که معمولا همه جا نوشته متغیر ها رو با double یا float تعریف کنیم ولی فعلا که با int تعریف کردم بهم ریشه ها رو اشتباهی میده! مثلا اگر اعداد 2 رو به a و 8 رو بهb و 4رو به c بدیم باید ریشه های 2 و -6 بده اما -4 و -12 میده! وقتی که int رو هم به double یا float تغیر میدم وضعیت بدتر میشه! فکر کنم روی float ریشه ها هردو 0 و روی double هر دو 8 میشن!
نقل قول: مشکل در جذر گرفتن در C
درباره اینکه چرا هنوز بسته مبشه اون خط کدی که بهت گفتم رو هم به پایان if اضافه کن هم به پایان else اگر درست نشد بهم بگو.
درباره اینکه چرا جوابت غلطه دلیلش اینه که فرمولت غلطه، خط 15 و 16 برنامت رو به صورت زیر تغییر بده :
x1 = (-b+d)/(2*a);
x2 = (-b-d)/(2*a);
دلیلشم سادس، تقدم عملیات در صورتی که اولویت ها یکی باشه از چپ به راسته و چون تقسیم و ضرب اولویت یکی دارند مشکل پیش میاد تو این فرمول، یعنی اول تقسیم به 2 میشه بعد حاصل ضرب در 2 میشه. با پرانتزگذاری مشکل حل میشه.
نقل قول: مشکل در جذر گرفتن در C
نقل قول:
نوشته شده توسط
hamedBB
درباره اینکه چرا هنوز بسته مبشه اون خط کدی که بهت گفتم رو هم به پایان if اضافه کن هم به پایان else اگر درست نشد بهم بگو.
درباره اینکه چرا جوابت غلطه دلیلش اینه که فرمولت غلطه، خط 15 و 16 برنامت رو به صورت زیر تغییر بده :
x1 = (-b+d)/(2*a);
x2 = (-b-d)/(2*a);
دلیلشم سادس، تقدم عملیات در صورتی که اولویت ها یکی باشه از چپ به راسته و چون تقسیم و ضرب اولویت یکی دارند مشکل پیش میاد تو این فرمول، یعنی اول تقسیم به 2 میشه بعد حاصل ضرب در 2 میشه. با پرانتزگذاری مشکل حل میشه.
ممنون از شما! مشکل محاسبات حل شد!مشکل از ترتیب عملکرد ها بود؟ اما هنوز کدی که دادین برای بسته نشدن پنجره عمل نمیکنه! فعلا از scanf برای بسته نشدن استفاده میکنم
نقل قول: مشکل در جذر گرفتن در C
عجیبه که کار نمی کنه. اگر scanf داره کار می کنه که هیچ اگه نه از :
cin.get();
دوبار پشت سر هم بذار در انتهای برنامت ببین جواب میده.