2015年4月16日 星期四

[2015][Quiz]MidExam-40173044H

jug 視窗主程式
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 WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        JugPuzzle jug= new JugPuzzle();
        public Form1()
        {
            InitializeComponent();
            jug.message = txtMessage;
        }

        private void btnSolve_Click(object sender, EventArgs e)
        {
            jug.volumeA = Convert.ToInt32(txtVolumeA.Text);
            jug.volumeB = Convert.ToInt32(txtVolumeB.Text);
            jug.target = Convert.ToInt32(txtTargrt.Text);
            if (jug.volumeA <= 0 || jug.volumeB <= 0 || jug.target <= 0)
            {
                txtMessage.AppendText("不得輸入零以下之數字!");
                return;
            }
            if (jug.target % jug.Gcd(jug.volumeA, jug.volumeB) != 0)
            {
                txtMessage.AppendText("無解,炸彈無法解除!");
                return;
            }
            jug.Solve();
       }

        private void btnClear_Click(object sender, EventArgs e)
        {
            txtMessage.Clear();
        }

      
    }
}
JugPuzzle 分水遊戲類別
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    class JugPuzzle
    {
        public int volumeA;
        public int volumeB;
        public int target;
        public TextBox message;

        public int Gcd(int num1,int num2)
        {
            int tempA=num1;
            int tempB=num2;
            int tempC;
            if (num2 > num1)
            {
                num1=tempB;
                num2=tempA;
            }
            while(tempA%tempB!=0)
            {
                tempC = tempB;
                tempB=tempA%tempB;
                tempA = tempC;
            }
            return tempB;
        }
        void showAB(int num1,int num2)
        {
            message.AppendText("(A,B)=(");
            message.AppendText(Convert.ToString(num1));
            message.AppendText(",");
            message.AppendText(Convert.ToString(num2));
            message.AppendText(")\n");
        }
        public void Solve()
        {
            int capacityA = 0;
            int capacityB = 0;
            message.AppendText("開始進行分水步驟\n");
            if(volumeA+volumeB volumeB)
                    {
                        capacityA = capacityA - (volumeB - capacityB);
                        capacityB = volumeB;
                        message.AppendText("將容器A的水倒入進容器B,直到容器B滿為止\n");
                        showAB(capacityA, capacityB);
                    }
                    else
                    {
                        capacityB = capacityB + capacityA;
                        capacityA = 0;
                        message.AppendText("將容器A的水倒入進容器B\n");
                        showAB(capacityA, capacityB);
                    }
                }
                if (capacityA == target)
                    message.AppendText("將容器A放在磅秤上,即為所求\n");
                else if (capacityB == target)
                    message.AppendText("將容器B放在磅秤上,即為所求\n");
                else
                    message.AppendText("將容器A與B一起放在磅秤上,即為所求\n");
                message.AppendText("炸彈解除!\n");
                return;
            }
        }
    }
}
第二題 MyDateTime之類別
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace ntnuoop_Midterm2
{
    class MyDateTime
    {
        private int _year;
        private int _month;
        private int _day;
        public int year
        {
            get { return _year; }
            set { _year = value; }
        }
        public int month
        {
            get { return _month; }
            set { _month = value; }
        }
        public int day
        {
            get { return _day; }
            set { _day = value; }
        }
        private string display;
        public TextBox message;
        public MyDateTime()
        {
            this._year=2000;
            this._month=1;
            this._day=1;
        }
        public MyDateTime(int year,int month,int day,TextBox message)
        {
            this._year = year;
            this._month = month;
            this._day = day;
            this.message = message;
        }
        public bool IsLeap()
        {
            if ((_year % 4 == 0 && _year % 100 != 0) || _year % 400 == 0)
                return true;
            else
                return false;
        }
        public int DaysOfMonth()
        {
            switch (_month)
            {
                case 1:
                case 3:
                case 5:
                case 7:
                case 8:
                case 10:
                case 12:
                    return 31;
                case 4:
                case 6:
                case 9:
                case 11:
                    return 30;
                case 2:
                    if (IsLeap())
                        return 29;
                    else
                        return 28;
                default:
                    return 0;
            }
        }
        public bool IsValid()
        {
            if (_day <= DaysOfMonth())
                return true;
            else
                return false;
        }
        public int WeekDay()
        {
            int fakeYear=_year;
            if (_month == 1 || _month == 2)
                fakeYear = fakeYear - 1;
            int y=fakeYear%100;
            int c=fakeYear/100;
            int m=_month-2;
            if (m < 0)
                m += 12;
            int w = (_day + (int)Math.Floor(2.6 * m - 0.2) + y + y / 4 + c / 4 - 2 * c) % 7;
            if (w<0)
                return w+7;
            else
                return w;
        }
        public string Print()
        {
            return _year + "/" + _month + "/" + _day;
        }
        public void CheckLeap()
        {
            display = Print();
            if (IsLeap())
            {
                display +="是閏年";
                message.AppendText(display);
            }
            else
            {
                display += "是平年";
                message.AppendText(display);
            }
        }
        public void CheckDate()
        {
            display = Print();
            if(IsValid())
            {
                display += "合法";
                message.AppendText(display);
            }
            else
            {
                display += "不合法";
                message.AppendText(display);
            }
        }
        public void CheckWeekDay()
        {
            display=Print();
            switch (WeekDay())
            {
                case 0:
                    display += "是星期日";
                    message.AppendText(display);
                    break;
                case 1:
                    display += "是星期一";
                    message.AppendText(display);
                    break;
                case 2:
                    display += "是星期二";
                    message.AppendText(display);
                    break;
                case 3:
                    display += "是星期三";
                    message.AppendText(display);
                    break;
                case 4:
                    display += "是星期四";
                    message.AppendText(display);
                    break;
                case 5:
                    display += "是星期五";
                    message.AppendText(display);
                    break;
                case 6:
                    display += "是星期六";
                    message.AppendText(display);
                    break;
                default:
                    break;
            }
        }
        public void Calender()
        {
            _day = 1;
            int firstWeekDay=WeekDay();
            display = "\tSun\tMon\tTue\tWed\tThr\tFri\tSat\r\n";
            for (int i = 0; i < WeekDay(); i++)
                display += "\t";
            for (int j=firstWeekDay;j<(DaysOfMonth()+firstWeekDay);j++)
            {
                display += "\t" + _day.ToString();
                if ((j + 1) % 7 == 0)
                    display += "\r\n";
                day++;
            }
            message.AppendText(display);
        }
    }
}

視窗主程式
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 ntnuoop_Midterm2
{
    public partial class Form1 : Form
    {
        MyDateTime date = new MyDateTime();
        public Form1()
        {
            InitializeComponent();
            date.message = txt_Output;
        }

        private void btnRun_Click(object sender, EventArgs e)
        {
            date=new MyDateTime(int.Parse(txt_Year.Text), cbox_Month.SelectedIndex, cbox_Day.SelectedIndex,txt_Output);
            if (rbtn_Leap.Checked)
                date.CheckLeap();
            else if (rbtn_IsDate.Checked)
                date.CheckDate();
            else if (rbtn_Weekday.Checked)
                date.CheckWeekDay();
            else if (rbtn_Calender.Checked)
                date.Calender();
        }

        private void btn_Clear_Click(object sender, EventArgs e)
        {
            txt_Output.Clear();
        }

    }
}

1 則留言:

  1. JugPuzzle內的showAB()因為是方法,所以字首最好改成大寫喔
    Gcd因為是縮寫,所以改成全部大寫的GCD會比較好

    回覆刪除