PDA

View Full Version : سوال: مشکل در if



ArshiaMansouri
جمعه 26 تیر 1394, 13:25 عصر
سلام و درود .
من به تازگی شروع به برنامه نویسی C# کردم و بدجوری سر این مسئله گیر کردم :
برنامه ای بنویسید که سه عدد از کاربر بگیرد و بررسی کند این سه عدد مثلث میسازند یا خیر . ( مجموع دو شعاع کوچکتر برابر یا بزرگتر از شعاع بزرگتر هست یا خیر ؟ )
من به دو صورت این نرم افزارو نوشتم ولی هیچکدوم درست کار نکردند .
بار اول به این شکل کار کردم :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


namespace Mosalas
{
class Program
{
static void Main(string[] args)
{
double a, b, c;
Console.WriteLine("Enter 3 numbers : ");
a = double.Parse(Console.ReadLine());
b = double.Parse(Console.ReadLine());
c = double.Parse(Console.ReadLine());
if (a > b && a > c)
if (a <= b + c)
Console.Write("Yes they can . .");
else
if (b > a && b > c)
if (b <= a + c)
Console.Write("Yes they can .");
else
if (c > a && c > b)
if (c <= a + b)
Console.Write("Yes they can .");
else
Console.Write("No they can't .");
Console.ReadLine();
}
}
}




visual studio اروری نداد اما پس از اجرا ودریافت 3 عدد نتیجه ای به کاربر برنگشت . وقتی با f11 بررسی کردم دیدم بعد از if اول یکسره میره سرConsole.ReadLine و if های بعدی رو بررسی نمیکنه .

بعد از چندبار ویرایش کردن سورس بالا و نتیجه نگرفتن تصمیم گرفتم از روش دیگه ای کار کنم .
پس به این شکل عمل کردم :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


namespace Mosalas
{
class Program
{
static void Main(string[] args)
{
int a, b, c, f;
Console.WriteLine("Enter 3 nubers : ");
a = int.Parse(Console.ReadLine());
b = int.Parse(Console.ReadLine());
c = int.Parse(Console.ReadLine());
if (a > b && a > c)
a = f;
else
if (b > a && b > c)
b = f;
else
if (c > a && c > f)
b = c;
if (f >= a + b || f >= a + c || f >= b + c || f >= c + b)
Console.Write("Yes .");
else
Console.Write("No .");
Console.ReadLine();
}
}
}




اینبار Visual Studio اروری به من برگردوند که معنی دقیقشو متوجه نمیشم و هر تغییری اعمال میکنم درست نمیشه .
Error 1 Use of unassigned local variable 'f'

لطفا بگید کجای کارو اشتباه کردم .
با تشکر

TeacherMath
جمعه 26 تیر 1394, 13:45 عصر
static void Main(string[] args)
{
try
{
string a, b, c, f;
Console.WriteLine("Enter 3 nubers : ");
Console.Write("a:");
a = Console.ReadLine();
Console.Write("b:");
b =Console.ReadLine();
Console.Write("c:");
c =Console.ReadLine();


if (a != null &&b!=null && c!=null)
{
int x = int.Parse(a);
int y = int.Parse(b);
int z = int.Parse(c);
if (x==0 || y==0 ||z==0)
{
Console.WriteLine("Error in numbers");


}
else
{
bool result=true;
if (x >= y + z) result = false;
if (y >= x + z) result = false;
if (z >= x + y) result = false;
if (result)
{
Console.Write("Yes ,you can create triangle.");
}
else
{
Console.Write("No ,you can't create triangle.");
}


}

}
else
{
Console.WriteLine("Error in numbers");

}
Console.ReadLine();
}
catch (Exception)
{

Console.WriteLine("Error");

}

}

ArshiaMansouri
جمعه 26 تیر 1394, 13:57 عصر
static void Main(string[] args)
{
try
{
string a, b, c, f;
Console.WriteLine("Enter 3 nubers : ");
Console.Write("a:");
a = Console.ReadLine();
Console.Write("b:");
b =Console.ReadLine();
Console.Write("c:");
c =Console.ReadLine();


if (a != null &&b!=null && c!=null)
{
int x = int.Parse(a);
int y = int.Parse(b);
int z = int.Parse(c);
if (x==0 || y==0 ||z==0)
{
Console.WriteLine("Error in numbers");


}
else
{
bool result=true;
if (x >= y + z) result = false;
if (y >= x + z) result = false;
if (z >= x + y) result = false;
if (result)
{
Console.Write("Yes ,you can create triangle.");
}
else
{
Console.Write("No ,you can't create triangle.");
}


}

}
else
{
Console.WriteLine("Error in numbers");

}
Console.ReadLine();
}
catch (Exception)
{

Console.WriteLine("Error");

}

}


خیلی خیلی ممنون از کمکتون .
راستش من متوجه نشدم چی نوشتید اگر بشه به سوالاتم پاسخ بدید خیلی خیلی ممنونتون میشم .

if(a != null&&b!=null&& c!=null)

در بخش بالا a !=null رو ارگ میشه توضیح بدید !=null چیکار میکنه ؟

bool result=true;
if (x >= y + z) result = false;
if (y >= x + z) result = false;
if (z >= x + y) result = false;
if (result)
{
Console.Write("Yes ,you can create triangle.");
}
else
{
Console.Write("No ,you can't create triangle.");
}


if رو نفهمیدم result=false

TeacherMath
جمعه 26 تیر 1394, 14:25 عصر
a !=null: واسه اینه که کاربر به جای وارد کردن عدد اینتر نزنه چون a از نوعه استرینگه null میشه.
if رو نفهمیدم result=false: از عکس نقیض قضیه استفاده کردم یعنی دنباله حالتیم که یک ضلع از مجموع دو ضلع دیگر بزرگتر باشه

alireza264
جمعه 26 تیر 1394, 20:58 عصر
سلام
دوست گرامی ArshiaMansouri ابتدا شروع کار با سی شارپ رو تبریک میگم.
هر چند روش استاد گرامی TeacherMath درسته اما این پاسخ رو فقط بعنوان توسعه مطلب نوشتم
اولین نکته مهم در برنامه نویسی اینه که ابتدا مسئله رو درست تحلیل کنیم
قانون اضلاع مثلث اینه که هر ضلع عددی بزرگتر از صفره وهمواره مجموع دو ضلع از ضلع سوم بزرگتر باشه

ضمن تشکر از استاد گرامی TeacherMath که مقدار ورودی رو چک کردن که null نباشه میشه کنترل کرد که حرف هم نباشه

در زمان گرفتن مقدار هر ضلع بصورت زیر رفتار می کنیم


int a=0, b=0, c=0, f;
while (a<= 0)
{
try
{
a = int.Parse(Console.ReadLine());
}
catch(){
a=0;
}
}

while (b<= 0)
{
try
{
b = int.Parse(Console.ReadLine());
}
catch(){
b=0;
}
}

while (c<= 0)
{
try
{
c = int.Parse(Console.ReadLine());
}
catch(){
c=0;
}

}


و برای بررسی شرط مثلث بودن کد زیر را می نویسیم

if (( (a < b + c) && (b < a + c)) && (c < a + b))
{
Console.Write("Yes ,you can create triangle.");
}
else
{
Console.Write("No ,you can't create triangle.");
}