พอดีผมพึ่งได้ลองศึกษาภาษาC#ได้ไม่นานครับ ได้คิดโจทย์ปัญหาเองเกี่ยวบกับการสุ่มตัวเลขมาแล้วให้เติมเว่ามากกว่าหรือน้อยกว่าโดยตัวเลขฝั่งซ้ายแล้วฝั่งขวาไม่เท่ากันเพราะว่าเติมได้แค่มากกว่าหรือน้อยกว่าเท่านั้น แล้วโจทย์แต่ละข้อไม่ซ้ำกันครับ
ตัวอย่าง
5 [] 25 **น้อยกว่าเติม 1
31 [] 17 **มากว่าเติม 2
สามารถรันได้ แต่ปัญหาของผมคือเมื่อลองเปลี่ยนตัวเลขจาการสุ่ม ในตัวอย่างโค้ตคือ 1ถึง10 แล้วเปลี่ยนจำนวนช้อที่มากขึ้น เวลาในการคอมไพล์มันมากขึ้นเรื่อยๆเลยครับ เช่น จำนวนข้อ 200 ใช้เวลา 3 วิแต่พอมันเป็น จำนวนข้อ230 มันใช้เป็น 10 วิเลยครับ จากที่ไปลองศึกษามา เขาไม่ค่อยแนะนำให้ใช้ goto กันครับเลยอยากทราบว่าจะทำยังไงให้ไม่ต้องใช้คำสั่งgoto ครับ ขอบคุณครับ #ถ้าผมอธิบายได้ไม่เข้าใจต้องขออภัยด้วยนะครับผมพึ่งได้ลองศึกษาด้วยตนเองตามคลิปต่างๆ อาจจะมีบางอย่างที่ผมได้พูดผิดไปหรือวกวนงงๆก็ต้องขออภัยด้วยนะครับ
Random r = new Random();
int numberofverses;
do{
Console.Write("Input number of verses:");
int.TryParse(Console.ReadLine(), out numberofverses);
if (numberofverses <= 400 && numberofverses != 0){
break;
} else{
Console.Clear();
continue;
}
} while (true);
int score = 0;
int<> a = new int<numberofverses>;
int<> b = new int<numberofverses>;
int x = 0;
string<> Y = new String<numberofverses>;
Console.WriteLine("compared to less<1> than or more<2>");
full:
for (int i = x; i < numberofverses; i++){
a<i> = r.Next(10, 301);
b<i> = r.Next(10, 301);
Y<i> = a<i>.ToString() + b<i>.ToString();//รวมตัวเลขฝั่งซ้ายและฝั่งขวาเป็นสตริงในอาเรย์ครับ ตัวอย่าง 5 [] 25 ก็เป็น 525
if (a<i> == b<i>){//ตรงนี้คือถ้าฝั่งซ้ายและฝั่งขวาเท่ากันให้ย้อนกลับไปคำนวณรอบใหม่ครับ
i -= 1;
}
}
for (int k = 0; k < Y.Length; k++){//ตรงนี้คือ เช็คทุกข้อจากอาเรย์yครับ แล้วมาไล่เทียบกันทีละข้อเลยครับ
for (int j = k + 1; j < Y.Length; j++){
if (Y<k> == Y<j>){//พอเจอโจทย์ซ้ำกันจากข้อๆนึงกับอีกข้อนึงก็จะ ย้อนไป back; ข้างบนครับเพื่อคำนวณใหม่ตรงรอบjที่ซ้ำครับ ตรงนี้สามารถหาวิธีการเขียนยังไงที่ไม่ต้องใช้ goto ครับ
x = j;
goto full;
}
}
}
char c;
for (int i = 0; i < numberofverses; i++){
do{
Console.Write($"{a<i>}[ ]{b<i>}:");
c = char.Parse(Console.ReadLine());
if (c != '1' && c != '2'){
Console.WriteLine("Input again");
continue;
} else{
if (c == '1'){
if (a<i> < b<i>){
Console.WriteLine("Current");
score++;
} else{
Console.WriteLine("Wrong");
}
} else if (c == '2'){
if (a<i> > b<i>){
Console.WriteLine("Current");
score++;
} else{
Console.WriteLine("Wrong");
}
}
break;
}
} while (true);
}
Console.WriteLine($"Yout score={score}/{numberofverses}");
Console.ReadKey();
**ขอแก้ไข เปลี่ยนวงเล็บเหลี่ยม ([ ]) เนื่องจากไม่รู้ว่าทำไมผมโพสแล้วมันไม่แสดงขึ้นมาเลยเปลี่ยนเป็น <> แทนวงเล็บเหลี่ยมนะครับ
ช่วยแก้ปัญหา ภาษาc# หน่อยครับ ว่าทำยังไงให้ไม่ใช้คำสั่งgoto ได้ครับ
ตัวอย่าง
5 [] 25 **น้อยกว่าเติม 1
31 [] 17 **มากว่าเติม 2
สามารถรันได้ แต่ปัญหาของผมคือเมื่อลองเปลี่ยนตัวเลขจาการสุ่ม ในตัวอย่างโค้ตคือ 1ถึง10 แล้วเปลี่ยนจำนวนช้อที่มากขึ้น เวลาในการคอมไพล์มันมากขึ้นเรื่อยๆเลยครับ เช่น จำนวนข้อ 200 ใช้เวลา 3 วิแต่พอมันเป็น จำนวนข้อ230 มันใช้เป็น 10 วิเลยครับ จากที่ไปลองศึกษามา เขาไม่ค่อยแนะนำให้ใช้ goto กันครับเลยอยากทราบว่าจะทำยังไงให้ไม่ต้องใช้คำสั่งgoto ครับ ขอบคุณครับ #ถ้าผมอธิบายได้ไม่เข้าใจต้องขออภัยด้วยนะครับผมพึ่งได้ลองศึกษาด้วยตนเองตามคลิปต่างๆ อาจจะมีบางอย่างที่ผมได้พูดผิดไปหรือวกวนงงๆก็ต้องขออภัยด้วยนะครับ
Random r = new Random();
int numberofverses;
do{
Console.Write("Input number of verses:");
int.TryParse(Console.ReadLine(), out numberofverses);
if (numberofverses <= 400 && numberofverses != 0){
break;
} else{
Console.Clear();
continue;
}
} while (true);
int score = 0;
int<> a = new int<numberofverses>;
int<> b = new int<numberofverses>;
int x = 0;
string<> Y = new String<numberofverses>;
Console.WriteLine("compared to less<1> than or more<2>");
full:
for (int i = x; i < numberofverses; i++){
a<i> = r.Next(10, 301);
b<i> = r.Next(10, 301);
Y<i> = a<i>.ToString() + b<i>.ToString();//รวมตัวเลขฝั่งซ้ายและฝั่งขวาเป็นสตริงในอาเรย์ครับ ตัวอย่าง 5 [] 25 ก็เป็น 525
if (a<i> == b<i>){//ตรงนี้คือถ้าฝั่งซ้ายและฝั่งขวาเท่ากันให้ย้อนกลับไปคำนวณรอบใหม่ครับ
i -= 1;
}
}
for (int k = 0; k < Y.Length; k++){//ตรงนี้คือ เช็คทุกข้อจากอาเรย์yครับ แล้วมาไล่เทียบกันทีละข้อเลยครับ
for (int j = k + 1; j < Y.Length; j++){
if (Y<k> == Y<j>){//พอเจอโจทย์ซ้ำกันจากข้อๆนึงกับอีกข้อนึงก็จะ ย้อนไป back; ข้างบนครับเพื่อคำนวณใหม่ตรงรอบjที่ซ้ำครับ ตรงนี้สามารถหาวิธีการเขียนยังไงที่ไม่ต้องใช้ goto ครับ
x = j;
goto full;
}
}
}
char c;
for (int i = 0; i < numberofverses; i++){
do{
Console.Write($"{a<i>}[ ]{b<i>}:");
c = char.Parse(Console.ReadLine());
if (c != '1' && c != '2'){
Console.WriteLine("Input again");
continue;
} else{
if (c == '1'){
if (a<i> < b<i>){
Console.WriteLine("Current");
score++;
} else{
Console.WriteLine("Wrong");
}
} else if (c == '2'){
if (a<i> > b<i>){
Console.WriteLine("Current");
score++;
} else{
Console.WriteLine("Wrong");
}
}
break;
}
} while (true);
}
Console.WriteLine($"Yout score={score}/{numberofverses}");
Console.ReadKey();
**ขอแก้ไข เปลี่ยนวงเล็บเหลี่ยม ([ ]) เนื่องจากไม่รู้ว่าทำไมผมโพสแล้วมันไม่แสดงขึ้นมาเลยเปลี่ยนเป็น <> แทนวงเล็บเหลี่ยมนะครับ