Code C#
[Spoil] คลิกเพื่อดูข้อความที่ซ่อนไว้ string Ans;
void GetAns() {
timer1.Stop();
if (string.IsNullOrEmpty(lblEq.Text))
{
score++;
MessageBox.Show("ได้คะแนนฟรี 1 คะแนน");
lblStatus.Write($"ได้คะแนนฟรี 1 คะแนน");
log.Debug($"ได้คะแนนฟรี 1 คะแนน");
}
else if (string.IsNullOrEmpty( txtAns.Text.Trim()))
{
MessageBox.Show($"คำตอบคือ \n{Ans}");
score--;
log.Debug($"Invalid input. Please enter a valid Ans.");
}
else
{
log.Debug($"GetAns:{txtAns.Text} and {Ans}");
if (txtAns.Text.Trim() == Ans.Trim())
{
score++;
}
else
{
MessageBox.Show($"คำตอบคือ \n{Ans}");
score--;
}
}
lblStatus.Write($"คำตอบคือ {Ans}");
txtScore.Text = score.ToString();
lblStatus.Write($"โจทย์ {count} ข้อ คุณทำได้ {score} คะแนน คิดเป็น {score / count * 100:0.000}%");
GetProblems();
}
ตัว Ans จะเป็นได้ทั้ง string และ double ครับ
ปัญหา คือ เวลาเป็นตัวเลขแล้ว อาจจะไม่ตรงกัน
เช่น อาจจะกรอกคำตอบเป็น 9.012 แต่ Ans เป็น 9.0122 ก็จะทำให้ตอบผิดไป
ซึ่งโจทย์ ค่อนข้างกว้างครับ มีทั้งเรื่องหน่วยเวลา เรื่องแปลงหน่วย เรื่อง หาพื้นที่ ปริมาตร หรือ การ บวก ลบ คูณหาร พื้นฐานด้วย
การแปลงหน่วย มีตั้งแต่ 0.000000000001d - 1000000000000d
[Spoil] คลิกเพื่อดูข้อความที่ซ่อนไว้private static QuestionItem GetProblemsPSUnit01() {
List<Prefixe> Prefixs = new List<Prefixe>) {
new Prefixe("เทระ", "tera-", "T-", "10^12", 1000000000000d),
new Prefixe("จิกะ", "giga-", "G-", "10^9", 1000000000d),
new Prefixe("เมกะ", "mega-", "M-", "10^6", 1000000d),
new Prefixe("กิโล", "kilo-", "k-", "10^3", 1000d),
new Prefixe("เฮกโต", "hecto-", "h-", "10^2", 100d),
new Prefixe("เดคา", "deca-", "da-", "10^1", 10d),
new Prefixe("เดซิ", "deci-", "d-", "10^-1", 0.1d),
new Prefixe("เซนติ", "centi-", "c-", "10^-2", 0.01d),
new Prefixe("มิลลิ", "milli-", "m-", "10^-3", 0.001d),
new Prefixe("ไมโคร", "micro-", "μ-", "10^-6", 0.000001d),
new Prefixe("นาโน", "nano-", "n-", "10^-9", 0.000000001d),
new Prefixe("พิโค", "pico-", "p-", "10^-12", 0.000000000001d),
};
List<string> units = new List<string>) { "เมตร", "กรัม", "วินาที", "แอมแปร์", "เคลวิน", "โมล", "เฮิรตซ์", "นิวตัน", "จูล", "วัตต์", "โวลต์", "โอห์ม", "ฟารัด" };
QuestionItem question = new QuestionItem();
string a;
Prefixe prefixe = Prefixs[RandomNumber.Randomnumber(0, Prefixs.Count)];
string _uint = units[RandomNumber.Randomnumber(0, units.Count)];
double anws = 0.00;
double randomNum;
if (prefixe.factor >= 10d)
{
randomNum = (r.NextDouble().ToDouble(r.Next(2, 5))) * (Math.Pow(10, r.Next(1, 5))) * prefixe.factor;
a = randomNum.ToString("F0");
}
else
{
randomNum = r.NextDouble().ToDouble(r.Next(2, 5)) * (Math.Pow(10, r.Next(1, 5))) * prefixe.factor;
a = randomNum.ToString("##0.############################################");
}
anws = randomNum / prefixe.factor;
string s = $"{a} {_uint} มีค่าเป็นกี่ {prefixe.prefixeTh}{_uint}?";
question = new QuestionItem(anws, s);
return question;
}
เท่าที่ผมคิด คือ ถ้าผมดักโดยใช้ Math.Round
[Spoil] คลิกเพื่อดูข้อความที่ซ่อนไว้if (Math.Round(double.Parse(txtAns.Text.Trim()),2) == Math.Round(double.Parse(Ans.Trim()),2))
{
score++;
}
else
{
MessageBox.Show($"คำตอบคือ \n{Ans}");
score--;
}
มันก็อาจจะติดปัญหา เรื่องของ Prefixe ด้วย เลยไม่รู้จะทำยังไง ครับ
C# WinApp การเช็คค่า string/double ครับ
Code C#
[Spoil] คลิกเพื่อดูข้อความที่ซ่อนไว้
ตัว Ans จะเป็นได้ทั้ง string และ double ครับ
ปัญหา คือ เวลาเป็นตัวเลขแล้ว อาจจะไม่ตรงกัน
เช่น อาจจะกรอกคำตอบเป็น 9.012 แต่ Ans เป็น 9.0122 ก็จะทำให้ตอบผิดไป
ซึ่งโจทย์ ค่อนข้างกว้างครับ มีทั้งเรื่องหน่วยเวลา เรื่องแปลงหน่วย เรื่อง หาพื้นที่ ปริมาตร หรือ การ บวก ลบ คูณหาร พื้นฐานด้วย
การแปลงหน่วย มีตั้งแต่ 0.000000000001d - 1000000000000d
[Spoil] คลิกเพื่อดูข้อความที่ซ่อนไว้
เท่าที่ผมคิด คือ ถ้าผมดักโดยใช้ Math.Round
[Spoil] คลิกเพื่อดูข้อความที่ซ่อนไว้
มันก็อาจจะติดปัญหา เรื่องของ Prefixe ด้วย เลยไม่รู้จะทำยังไง ครับ