2015年4月16日 星期四

[2015][Quiz]MidExam - 40173041H

Form
using System;
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 WaterJugForm
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void btnSolve_Click(object sender, EventArgs e)
        {
            JugPuzzle jug = new JugPuzzle();
            jug.CapacityA = int.Parse(txtCapacityA.Text);
            jug.CapacityB = int.Parse(txtCapacityB.Text);
            jug.goal = int.Parse(txtTarget.Text);
            jug.message = txtSolve;
            jug.Jug();
        }

        private void btnClear_Click(object sender, EventArgs e)
        {
            txtSolve.Text = null;
        }
    }
}

JugPuzzle
using System;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WaterJugForm
{
    class JugPuzzle
    {
        public int CapacityA;
        public int CapacityB;
        public int currentVolumeA;
        public int currentVolumeB;
        public int goal;
        public int changeCount = 0;
        public TextBox message;
        public int Gcd(int a, int b)
        {
            int temp;
            while(a!=0)
            {
              if(a CapacityA)
                {
                    Pour();
                }
                return true;
            }
            else
            {
                return false;
            }
        }
        public void Discard()
        {
            if(currentVolumeA == CapacityA)
            {
                currentVolumeA = 0;
            }
            if (changeCount == 1)
            {
                message.Text += "將容器B的水倒光";
                message.Text += Environment.NewLine;
                message.Text += "(A,B)=(" + currentVolumeB + "," + currentVolumeA + ")";
            }
            else
            {
                message.Text += "將容器A的水倒光";
                message.Text += Environment.NewLine;
                message.Text += "(A,B)=(" + currentVolumeA + "," + currentVolumeB + ")";
            }
            message.Text += "=======================================";
            message.Text += Environment.NewLine;
        }
        public void Balance()
        {
            if(currentVolumeA == 0)
            {
                if (changeCount == 1)
                {
                    message.Text += "將容器A放在磅秤上,即為所求!";
                }
                else
                {
                    message.Text += "將容器B放在磅秤上,即為所求!";
                }
            }
            else if (currentVolumeB == 0)
            {
                if (changeCount == 1)
                {
                    message.Text += "將容器B放在磅秤上,即為所求!";
                }
                else
                {
                    message.Text += "將容器A放在磅秤上,即為所求!";
                }
            }
            else
            {
                message.Text += "將容器A和B放在磅秤上,即為所求!";
            }
        }
        public void Jug()
        {
            message.Text = null;
            message.Text = "開始進行分水步驟!";
            message.Text += "=======================================";
            message.Text += Environment.NewLine;
            if (CheckInput() == true)
            {
                change();
                while (true)
                {
                    Inject();
                    if (CheckGoal() == true) { break; }
                    Pour();
                    Inject();
                    if (CheckGoal() == true) { break; }
                    Pour();
                    Discard();
                    if (CheckGoal() == true) { break; }
                    Pour();
                }
                message.Text += Environment.NewLine;
                Balance();
                message.Text += Environment.NewLine;
                message.Text += "炸彈解除!";
            }
            else
            {
                message.Text = "無解,你被唬了,Boom!";
            }
        }
    }
}

CalenderForm
using System;
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 Calender
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void btnDo_Click(object sender, EventArgs e)
        {
            if(rBtnLeapCheck.Checked == true)
            {
                MyDateTime myDateTime = new MyDateTime(int.Parse(txtYear.Text), 0, 0);
                myDateTime.message = txtResult;
                myDateTime.ShowLeap();
            }
            else if (rBtnDateCheck.Checked == true)
            {
                MyDateTime myDateTime = new MyDateTime(int.Parse(txtYear.Text),cBoxMonth.SelectedIndex + 1,cBoxDate.SelectedIndex + 1);
                myDateTime.message = txtResult;
                myDateTime.IsLegalDate();
            }
            else if (rBtnDateToWeek.Checked == true)
            {
                MyDateTime myDateTime = new MyDateTime(int.Parse(txtYear.Text), cBoxMonth.SelectedIndex + 1, cBoxDate.SelectedIndex + 1);
                myDateTime.message = txtResult;
                myDateTime.DateToWeek();
            }
            else if (rBtnCalender.Checked == true)
            {
                MyDateTime myDateTime = new MyDateTime(int.Parse(txtYear.Text), cBoxMonth.SelectedIndex + 1 , 0);
                myDateTime.message = txtResult;
                myDateTime.Calender();
            }

        }

        private void btnClear_Click(object sender, EventArgs e)
        {
            txtResult.Clear();
        }
    }
}
MyDateTime
using System;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Calender
{
    class MyDateTime
    {
        private int _year;
        private int _month;
        private int _date;
        public int Year
        {
            get { return _year; }
            set { _year = value; }
        }  
        public int Month
        {
            get { return _month; }
            set { _month = value; }
        } 
        public int Date
        {
            get { return _date; }
            set { _date = value; }
        }  
        public MyDateTime()
        {
            this.Year = 0;
            this.Month = 0;
            this.Date = 0;
        } 
        public MyDateTime(int year,int month,int date)
        {
            this.Year = year;
            this.Month = month;
            this.Date = date;
        } 
        public TextBox message;
        public int GaussianAlgorithm()
        {
            int week;
            int tempYear = Year;
            double tempMonth = (double)Month;
            if (Month == 1 || Month == 2)
            {
                tempYear -= 1;
            }
            tempMonth = (tempMonth + 9) % 12 + 1;
            week = (Date + Convert.ToInt32(Math.Floor((2.6 * tempMonth) - 0.2)) + tempYear%100 + (tempYear%100)/4 + (tempYear/100)/4 - 2*(tempYear/100) ) % 7 ;
            if (week >= 0)
            {
                return week;
            }
            else
            {
                return week +7;
            }
        }
        public int GaussianAlgorithm(int day)
        {
            int week = 0;
            int tempYear = Year;
            double tempMonth = (double)Month;
            int tempDate = day;
            if (Month == 1 || Month == 2)
            {
                tempYear -= 1;
            }
            tempMonth = (tempMonth + 9) % 12 + 1;
            week = (tempDate + Convert.ToInt32(Math.Floor(2.6 * tempMonth - 0.2)) + tempYear%100 + (tempYear%100)/4 + (tempYear/100)/4 - 2*(tempYear/100) ) % 7 ;
            if (week >= 0)
            {
                return week;
            }
            else
            {
                return week + 7;
            }

        }
        public bool IsLeap()
        {
            if(Year % 400 == 0 || (Year % 4 ==0 & Year % 100 !=0))
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        public void ShowLeap()
        {
            if(IsLeap() == true)
            {
                message.Text += Year + "是閏年" ;
            }
            else
            {
                message.Text += Year + "是平年";
            }
            message.Text += Environment.NewLine;
        }
        public int MonthMaxDate()
        {
            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() == true)
                    {
                        return 29;
                    }
                    else
                    {
                        return 28;
                    }
                default:
                    return 0;
            }
        }
        public void IsLegalDate()
        {
            if(Date>0 & Date <=MonthMaxDate())
            {
                message.Text += Year + "/" + Month + "/" + Date + "合法";
            }
            else
            {
                message.Text += Year + "/" + Month + "/" + Date + "不合法";
            }
            message.Text += Environment.NewLine;
        }
        public void DateToWeek()
        {
            message.Text += Year + "/" + Month + "/" + Date +"是星期";
            switch(GaussianAlgorithm())
            {
                case 0:
                    message.Text += "日";
                    break;
                case 1:
                    message.Text += "一";
                    break;
                case 2:
                    message.Text += "二";
                    break;
                case 3:
                    message.Text += "三";
                    break;
                case 4:
                    message.Text += "四";
                    break;
                case 5:
                    message.Text += "五";
                    break;
                case 6:
                    message.Text += "六";
                    break;
            }
            message.Text += Environment.NewLine;
        }
        public void Calender()
        {
            message.Text = "\tSun\tMon\tTue\tWed\tThr\tFri\tSat";
            message.Text += Environment.NewLine;
            for (int i = 0; i <= GaussianAlgorithm(1); i++ )
            {
                message.Text += "\t";
            }
            for(int i=1; i<=MonthMaxDate(); i++)
            {
                message.Text += i + "\t";
                if(GaussianAlgorithm(i) == 6)
                {
                    message.Text += Environment.NewLine;
                    message.Text += "\t";
                }
            }
            message.Text += Environment.NewLine;
        }
    }
}

2 則留言:

  1. JugPuzzle內的CapacityA,CapacityB字首要小寫喔(因為這邊它們都是欄位不是屬性)
    小提醒: JugPuzzle這一段120行出現是因為25行的判斷式. 在小於的符號兩側各加一格空白應該就能消掉了

    回覆刪除
  2. 建議:屬性內的set可以再搭配一些判斷式來檢查輸入參數是否合法,檢查合法之後才設定參數,否則就設為null。

    回覆刪除