حل شده

نوشتن برنامه ای برای گرفتن معدل دانش اموزان

بازدید73.7kپست ها5آخرین فعالیت5 سال پیش
0
0

سلام  اگه کسی جواب این سوال رو میدونه جوابش رو تا امشب بهم بگه آخه فردا امتحان دارم
برنامه ای بنویسید که معدل دانش اموزان یک کلاس رو دریافت کرده وانها را در3گروه زیر دسته بندی کند.

[align=left]12<m<14[/align]
متوسط
[align=left]14<m<17[/align]
خوب
[align=left]17<m<20[/align]
عالی

آخرین ویرایش: 25-06-2015 ???? 20:08، توسط رضا رمضانپور

5 پاسخ

1

سلام منظورتون از میان 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
0

خیلی ممنونم دوست گرامی.شما این برنامه رو با سی شارپ نوشتید یا php?

1

توی بخش سی شارپ تاپیک دادید دیگه!
سی شارپ هست و طبق تجربه ای که دارم روی ویندوز دسکتاب(WinForm, WPF) سیلورلایت و ویندوزفون این کد کار میکنه

0

:dodgy: ;) خیلی ممنون دوستم

1

سلام من ی برنامه تو همین مایه ها نوشتم

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication30
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }



        private void Form1_Load(object sender, EventArgs e)
        {
        }


        private void button1_Click(object sender, EventArgs e)
        {

        float a;
        float b;
        float c;
        float d;

        
        a = float.Parse(textBox1.Text);
        b = float.Parse(textBox2.Text);
        c = float.Parse(textBox3.Text);
        d = float.Parse(textBox4.Text);
        float j;

        if ((a>20)||(a<0))
        {
            MessageBox.Show("ستون اول را اصلاح کنید");
        }
        else if ((b > 20) || (b < 0))
        {
            MessageBox.Show("ستون دوم را اصلاح کنید");
        } 
        else   if ((c > 20) || (c < 0))
        {
            MessageBox.Show("ستون سوم را اصلاح کنید");
        } 
        else    if ((d > 20) || (d < 0))
        {
            MessageBox.Show("ستون چهارم را اصلاح کنید");
        }
        else
        {

            j = (a + b + c + d) / 4;

            if ((j>=0)&&(j<10))
            {
            MessageBox.Show("بد", j.ToString());
            }
            else if ((j >= 10) && (j < 15))
            {
                MessageBox.Show("ضعیف",j.ToString());
            }
            else if ((j >= 15) && (j < 17))
            {
                MessageBox.Show("خوب", j.ToString());
            }
            else if ((j >= 17) && (j <= 20))
            {
                MessageBox.Show("عالی", j.ToString());
            }
            
            
            
        }
        }
    }
}
آخرین ویرایش: 31-05-2018 ???? 21:14، توسط masih4420

سوال برنامه نویسی دارید؟

ندونستن عیب نیست، نپرسیدن چرا!

خوش آمدید

برای طرح سوال، ایجاد بحث و فعالیت در سایت نیاز است ابتدا وارد حساب کاربری خود شوید. در صورتی که هنوز عضو سایت نیستید میتوانید در عرض تنها چند ثانیه ثبت نام کنید.