سلام منظورتون از میان 12 تا 14 متوسط، 14 تا 17 خوب و از 17 تا 20 عالی هست؟
اگه آره که آسونه! اول باید لیست نمرات رو بگیری و Split کنی. مثلا من اینجا نمرات هر دانش آموز رو با Space جدا میکنم و Split میکنم. اینم تابع:
private void CalculateName(string numbers)
{
if (!string.IsNullOrEmpty(numbers))
{
List<string> numbersList = new List<string>(numbers.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries));
List<string> num12To14 = new List<string>(),
num14To17 = new List<string>(),
num17To20 = new List<string>();
foreach (string numValueString in numbersList)
{
double numValueDouble = double.Parse(numValueString);
if (numValueDouble >= 12 && numValueDouble < 14)
num12To14.Add(numValueString);
else if (numValueDouble >= 14 && numValueDouble < 17)
num14To17.Add(numValueString);
else if (numValueDouble >= 17 && numValueDouble <= 20)
num17To20.Add(numValueString);
}
StringBuilder sb = new StringBuilder();
sb.Append("متوسط");
sb.Append(Environment.NewLine);
sb.Append(string.Join(Environment.NewLine, num12To14));
sb.Append(Environment.NewLine + Environment.NewLine);
sb.Append("خوب");
sb.Append(Environment.NewLine);
sb.Append(string.Join(Environment.NewLine, num14To17));
sb.Append(Environment.NewLine + Environment.NewLine);
sb.Append("عالی");
sb.Append(Environment.NewLine );
sb.Append(string.Join(Environment.NewLine, num17To20));
sb.Append(Environment.NewLine + Environment.NewLine);
richTextBox2.Text = sb.ToString();
}
}
درون این تابع یک لیست ساختم و نمرات رو که با فاصله جدا شدند، split کردم و به صورت لیست رشته ای در آوردم.
بعد از اون سه تا لیست رشته ای ایجاد کردم که نمرات هر دانش آموز رو جداگانه به اون ها اضافه کنم:
لیست num12To14 برای نمرات 12 تا 14 هست
لیست num14To17 برای نمرات 14 تا 17 هست
لیست num17To20 برای نمرات 17 تا 20 هست
پس از اون یک حلقه foreach ایجاد کردم و مقدار رشته ای که numValueString هست داخل اون میچرخونم تا همه ی نمراتی که با Space جدا شدند رو در بر بگیره.
درون این حلقه میام اول مقدار رشته ای رو به صورت مقدار اعشاری double در میارم تا بتونم از طریق اعمال ریاضی اونها رو تعیین کنم.(چون نمرات کاربرها اعشاری هم خواهد بود پس از اعداد اعشاری استفاده میکنیم)
در اولین شرط یعنی:
if (numValueDouble >= 12 && numValueDouble < 14)
میگیم چنانچه مقدار numValueDouble بزرگتر مساوی 12 بود "وَ" همچنین کوچکتر از 14 بود، مقدار numValueString را به لیست num12To14 اضافه کن.(اینکار باعث میشه اعدادی که 14 تا 14.99 هستن به این لیست اضافه نشن)
شرط دوم زمانی اجرا میشه که شرط اول اجرا نشه و همچنین شرط سوم هم زمانی اجرا میشه که شرط اول و دوم نادرست باشه. (چون از else if استفاده کردم).
شرط دوم:
else if (numValueDouble >= 14 && numValueDouble < 17)
چنانچه مقدار numValueDouble بزرگتر مساوی 14 بود "وَ" همچنین کوچکتر از 17 بود، مقدار numValueString را به لیست num14To17 اضافه کن. (اینکار باعث میشه اعدادی که 17 تا 17.99 هستن به این لیست اضافه نشن)
شرط سوم
else if (numValueDouble >= 17 && numValueDouble <= 20)
چنانچه مقدار numValueDouble بزرگتر مساوی 17 بود "وَ" همچنین کوچکتر مساوی 20 بود، مقدار numValueString را به لیست num17To20 اضافه کن. (اینکار باعث میشه اعدادی که 20 هستن هم به این لیست اضافه بشن)
پس از حلقه هم یک متغیر از نوع StringBuilder ایجاد میکنیم و مقادیری که میخواهیم نمایش بدیم رو نشون میدیم.
این کد:
string.Join(Environment.NewLine, num12To14)
برای زمانی هست که یک لیست یا آرایه ای داریم و بخواهیم با استفاده از یک یا چند کاراکتر خاص نشون بدیم، هست. مثلا در اینجا هر نمره ای رو به سطر بعدی میبره.
برای استفاده از این تابع هم اینکار رو انجام میدیم:
string str = "7 9.9 10 11.5 12.14 19 15 17 15 16.5 20 13.75";
CalculateName(str);
مقادیر به صورت زیر نمایش داده میشن:
متوسط
12.14
13.75
خوب
15
15
16.5
عالی
19
17
20
موفق باشید.
راستی شاید روش های درست تر و بهتر و کوتاه تری هم وجود داشته باشه اما من فقط همین رو بلد بودم
آخرین ویرایش: 12-06-2015 ???? 23:14، توسط
The Arrow