PDA

View Full Version : تحلیل این برنامه



majid_i68
سه شنبه 02 آبان 1391, 00:31 صبح
میخواهم برنامه ای بنوسیم با سی پلاس که طول سه ضلع یک مثلث را خوانده تعیین کند ایا مثلث قائم الزاویه است؟
من میخواهم به این روش عمل کنم که بزرگترین ضلع را به عنوان وتر بگیریم. و مربع ان را محاسبه کنم.
و مجموعه مربع ان دوضلع را برابر با مربع وتر قرار دهم. اگر مساوی بود در خروجی چاپ کند. قائم الزاویه است. آیا این روش درست است. اگر روش بهتری دارید بگوید..........

سوال دوم-- فرمول مربع یک عدد چیه!!!!

در مثلث قائم‌الزاویه مجموع مربع‌های طول دو ضلع برابر با مربع طول وتر (http://fa.wikipedia.org/w/index.php?title=%D9%88%D8%AA%D8%B1&action=edit) است.

sadegh.abbar
سه شنبه 02 آبان 1391, 03:19 صبح
خوب شما اول باید بیاید و یک تابع بنویسید که بین 3 عدد اونی که بزرگ تر است رو انتخاب کنه
بعد بیاید مربع هر عدد را حساب کنید ( برای محاسبه مربع عدد لازم نیست که دوباره حافظه بگیرید میتونید از از دستوری مشابه دستور زیر استفاده کنید
num = num * num
بعد دیگه یک شرط میزارید که ببینید قائم الزاویه هست یا نه

majid_i68
سه شنبه 02 آبان 1391, 03:58 صبح
آیا جواب این برنامه (همان برنامه بالا) صحیح است

#include<iostream.h>
#include<conio.h>
int main()
{
int a,b,c,vatar,temp,sum;

cout<<"enter a :";
cin>>a;
cout<<"enter b :";
cin>>b;
cout<<"enter c :";
cin>>c;
temp=a;
if(a<b)
{
temp=b;
}
if(temp<c)
{
temp=c;
}
vatar=temp;

a=a*a;
b=b*b;
sum=a+b;
vatar=vatar*vatar;
if(sum==vatar)
{
cout<<"Mosalase Ghaemo Zaviya AST---";
}
else
{
cout<<"mosalase ghaemo zaviya nist---";
}

getch();
return 0;
}

sadegh.abbar
سه شنبه 02 آبان 1391, 04:25 صبح
این برنامه ای که نوشتید مشکل داره هم از نظر گرامری هم از نظر الگوریتم
اول اینکه باید مینوشتید <iostram> نه <iostream.h>
دوم اینکه std ها رو هم یادتون رفته بزارید
و یک نکته دیگه هم که هست لازم نیست شما از getch() استفاده کنید شما میتونید برای اینکه پنجره سریع بسته نشه از ctrl + F5 استفاده کنید البته من تو visual studio این کار رو میکنم
یک نکته دیگر اینکه نیاز نبود متغیر temp رو تعریف کنید میتونستید با همان متغیر vatar تمام کارها رو انجام دهید
حالا بریم سر الگوریتم برنامه شما اومدید a*a یا b*b کردید و اصلا هم به این نکته توجه نکردید که ممکنه یکی از این دو تا متغیر وتر باشه. پس در نتیتجه به جواب مورد نظر نمی رسید

sadegh.abbar
سه شنبه 02 آبان 1391, 04:39 صبح
الان این کد برنامه هست همون برنامه خودتون هست فقط یک کمی تغییرش دادم خودتون برنامه رو نگاه کنید متوجه اشتباهتون میشید البته برای این برنامه الگوریتم های دیگری هم هست که دقیق تر هستند
مثلا الگوریتمی که میاد چک میکنه ببینه اصلا این 3 عدد میتونن تشکیل مثلث بدهند یا نه ؟ بعد میاد میگه که قائم الزاویه هست یا نه؟ (التبه به یه روش دیگه نه این روشی که الان به کار بردیم هر چند که این روش هم میشد)
#include<iostream>
#include<conio.h>
using namespace std;
int main()
{
int a,b,c,vatar,sum=0;

cout<<"enter a :";
cin>>a;
cout<<"enter b :";
cin>>b;
cout<<"enter c :";
cin>>c;
vatar = a;
if(vatar<b)
{
vatar=b;
}
else
sum += b*b;

if(vatar<c)
{
vatar=c;
}
else
sum += c*c;

if (vatar < a)
vatar = a;
else if(a < vatar)
sum += a*a;

vatar=vatar*vatar;
if(sum==vatar)
{
cout<<"Mosalase Ghaemo Zaviya AST---";
}
else
{
cout<<"mosalase ghaemo zaviya nist---";
}

getch();
return 0;
}

majid_i68
سه شنبه 02 آبان 1391, 05:26 صبح
دوست عزیز تشکر ...

بله از نظر الگوریتم اشتباه داشتم ولی چون در محیط DEv کد نویسی میکردم #include<iostream.h نوشتم....

شما در چه محیطی کد نویسی میکنید

omidshaman
سه شنبه 02 آبان 1391, 09:26 صبح
برنامتون مشکل داره اگر ضلع ها این جوری وارد بشن اشتباه نتیجه رو میده مثلا
a=3
b=4
c=5
دلیلشم اینه که فقط تابع به اون else اخری وارد میشه و a^2 رو حساب می کنه یعنی sum میشه 9...
ا

omidshaman
سه شنبه 02 آبان 1391, 09:33 صبح
مشکل دومش اینه که اگر از اضلاع رو 0یا منفی بگیریم بازم جواب اشتباه میده...

omidshaman
سه شنبه 02 آبان 1391, 10:14 صبح
کد برنامه بدون مشکل در ضمن نیازی هم به چک کردن برای مثلث بودن نیست چون اگر مربع 2 ضلع برابر مربع اون یکی ضلع باشه قطعا مثلث هم هست...

#include<iostream>
#include<conio.h>
using namespace std;
int main()
{
int a,b,c,vatar,vatar2,sum=0;

cout<<"enter a :";
cin>>a;
cout<<"enter b :";
cin>>b;
cout<<"enter c :";
cin>>c;
vatar = a;
vatar2=a;
if(vatar<b)
{
sum += a*a;
vatar=b;
vatar2=b;
}
else
sum += b*b;


if(vatar<c)
{
vatar=c;
sum += vatar2*vatar2;

}
else
sum += c*c;



vatar=vatar*vatar;

if(sum==vatar&&a>0&&b>0&&c>0)
{
cout<<"Mosalase Ghaemo Zaviya AST---";
}
else
{
cout<<"mosalase ghaemo zaviya nist---";
}

getch();
return 0;
}

sadegh.abbar
سه شنبه 02 آبان 1391, 21:25 عصر
دیگه فرض بر این بوده که کسی 0 و عدد منفی نده !!!
ولی ممنون الان که برنامه رو نگاه میکنم به خودم نفرین میفرستم که چرا چنین برنامه ساده ای رو اشتباه نوشتم اصلا دیگه میخوام با برنامه نویسی خدافظی کنم !!!
ساعت نزدیک 5 صبح بود اون موقع هم همین الگوریتم اومده تو ذهنم وگرنه میشد با 3 تا if که شرط قائم الزاویه بودن رو چک میکنن راحت تر نوشتش
#include <iostream>
using namespace std;

int main()
{
int a, b ,c ;
cout << "Please enter 3 numbers "<< endl;
cin >> a >> b >> c;
if (a*a == b*b + c*c)
cout << " Ghaeme " << endl;
else if (b*b == a*a + c*c)
cout << " Ghaeme " << endl;
else if (c*c == b*b + a*a)
cout << " Ghaeme " << endl;
else
cout << "Ghaeme nist" << endl;
return 0;
}

majid_i68
چهارشنبه 03 آبان 1391, 01:51 صبح
من هم الان خندام گرفت .. ... دمت گرم:قهقهه:

majid_i68
چهارشنبه 03 آبان 1391, 06:13 صبح
کسی هست همین برنامه رو با کلاس بنویسد

sadegh.abbar
چهارشنبه 03 آبان 1391, 10:13 صبح
نوشتن با کلاس که دیگه الان راحته هر چند که برنامه به این کوچیکی کلاس نمیخواد ، ولی با این حال برای نوشتن به اون شکل یک کلاس تعریف میکنیم که داخلش یک تابع باشد (همین کارهایی رو که در برنامه های قبل کردیم رو به عنوان تابع در نظر میگیریم) بعد 3 عدد رو میخونیم و به تابع میفرستیم و نتیجه رو چاپ میکنیم البته بخوایم ریزه کاری بکنیم میشه مثلا میشه چندتا تابع تعریف کرد مثلا یک تابع مقادیر رو بگیره و چک کنه که صحیح باشند و بعد به تابع اصلی ارسال کنه و یک تابع دیگه هم باشه که خروجی رو چاپ کنه

majid_i68
چهارشنبه 03 آبان 1391, 13:06 عصر
اگر بخواهم برنامه ای بنوسیم که (http://mail.yahoo.com/) 100عدد را دریافت کند و 20عدد از آن را خوانده اون 20 عدد را رد کند و 20 عدد بعد نمایان شود شبیه تیتراژپایانی فیلم ها که اسم هارو رد میکنه اسم های اول حذف و بعدی پشت سرش میاد ...... با استفاده از تابع clscr استفاده کنم .. یا بگم که بعد از 20 عدد 20 بار فضای خالی چاپ کن؟؟!!