Posted by : Unknown
วันพฤหัสบดีที่ 1 ตุลาคม พ.ศ. 2558
[C#] แนะแนวทำโจทย์เขียนโปรแกรม
เปลี่ยนลำดับตัวเลขเป็นรูปสามเหลี่ยมไล่ลำดับ
โจทย์เนื้อเรื่อง : ไม่รู้จำไม่ได้ข้ามละกัน
ใจความของโจทย์ : ให้รับจำนวนคี่ N ที่มีค่าระหว่าง 1-9 แล้วนำมาจัดเรียงลำดับจั้งแต่จำนวนคี่ 1 จนถึงจำนวน N เป็นจำนวน N แถวโดยตั้งแต่แถวที่2จะมีสัญลักษณ์ * ค่อยๆเพิ่มมาจนกลายเป็นรูป 3 เหลี่ยม (ขออภัยสำหรับคำอธิบายโจทย์งงๆดูรูปกันดีกว่าเข้าใจกว่าเยอะ)
เรามาส่องหลักการกันดีกว่าขนับ
แปะ Code ไว้ก่อน :
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 TriangleNum
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void checkinput()
{
int x;
if((!int.TryParse(textBox1.Text,out x)) && textBox1.Text != "")
{
MessageBox.Show("กรุณากรอกตัวเลขเท่านั้น");
textBox1.Text = "";
return;
}
}
private void button1_Click(object sender, EventArgs e)
{
int num = Convert.ToInt32(textBox1.Text);
if(num%2 == 0 || num>9)
{
MessageBox.Show("กรุณากรอกเฉพาะเลขคี่ 1-9 เท่านั้น");
textBox1.Text = "";
return;
}
else
{
num = Convert.ToInt32(textBox1.Text);
textBox1.Text = "";
button1.Enabled = false;
textBox1.Enabled = false;
sort(num);
}
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
checkinput();
}
private void sort(int x)
{
string strshow = "";
for(int i = 1; i <= x; i+=2)
{
if (i == 1)
{
for (int j = 1; j <= x; j+=2) {
textBox2.Text += j.ToString();
}
textBox2.Text += Environment.NewLine;
}
else
{
for(int k = 1; k < i; k+=2)
{
strshow += "*";
}
for(int l = i; l <= x; l += 2)
{
strshow += l.ToString();
}
strshow += Environment.NewLine;
}
}
textBox2.Text += strshow;
}
}
}
สูตรคณิตศาสตร์ที่เกี่ยวข้อง : สูตรง่ายๆที่คิดออกของเลขคี่คือ 2n+1 ซึ่งหากกำหนดให้ค่าเริ่มต้นเป็น 1 แน่ๆ (เพราะโจทย์กำหนดว่ามันคือเลขคี่ที่มีค่าระหว่าง 1-9) ดังนั้นเราก็บวกลูปเพิ่มไปครั้งละ 2 ก็ได้ลำดับเลขคี่แล้วววว อะบางทีอ่านแล้วงงลองดูนี่ก็แล้วกัน
โอเคเรารู้คณิตศาสตร์กันมานิดๆละเรามาวิเคราะห์โปรแกรมกันดีกว่า
จากรูปอธิบายข้างบนนี้ทำให้คุณได้รู้ว่าแถวแรกสุดไม่มีอะไรมากเลยนอกจากหมุนลูปเลขคี่ปกติเพราะฉะนั้นเขียนมันเป็นเงื่อนไขแยกที่ทำครั้งเดียวซะก็จบ (อาทิเช่นถ้า i คือลูปนับจำนวนบรรทัดแล้วเมื่อ i = 1 หรือก็คือบรรทัดแรกจะทำการหมุนลูปซ้อนข้างในอีกทีเพื่อไล่เลขคี่จากมากไปน้อยเป็นต้น)
ส่วนในบรรทัดที่ 2 จนถึงสุดท้ายจะมี * เพิ่มขึ้นมาตามจำนวน (บรรทัด-1) ครัช
ทีนี้แหละเข้าสู่เรื่องซับซ้อนกันได้ละนั้นคือลูปซ้อนครับเนื่องจากการหมุนลูปเพื่อนับจำนวนบรรทัดเราได้ทำการหมุนโดยเพิ่มค่าขึ้นทีละ 2 และค่าแรก (i=1) เราไม่นับเพราะบรรทัดที่ 1 ก็แค่เรียงลำดับเลขเฉยๆดังนั้นเราะจเริ่มนับตั้งแต่บรรทัดที่ 2 ที่ i=2 ดังนั้นการเขียนลูปให้เพิ่มค่าในอัตราส่วนที่ห่างกัน 1 เท่าๆกันตลอดด้วยวิธีการบวกลูปเพิ่มขึ้นครั้งละสองจะมีหลักการดังนี้
แล้วก็เก็บดอกจันอันนี้ใส่ตัวแปรสตริงดองไว้ก่อนรอเอาตัวเลขมาต่อสริงข้างหลังต่อ
โดยการต่อตัวเลขข้างหลังนั้นหลักการก็ไม่ต่างจากดอกจันมากนักเปลี่ยนเพียงแค่
for(int l = i; l <= x; l += 2) ค่าตัวแปรเริ่มต้นของการหมุนลูปเท่ากับค่าของตัวแปรลูปนับจำนวนบรรทัดสาเหตุเป็นเพราะตัวเลขตำแหน่งที่ 1 จะเริ่มหายในแถวที่ 2 เพราะฉะนั้นการเริ่มวนลูปที่จำนวนแถวขณะนั้นจะทำให้ตัดการวนลูปในจำนวนก่อนหน้าทิ้งไปทำให้ได้ค่าเริ่มต้นตัวเลขไม่ซ้ำตำแหน่งและไม่ซ้ำตัวเลข
สุดท้ายต่อสตริงตัวดอกจันและตัวเลขที่ผ่านการวนเข้าด้วยกันแล้วเว้น 1 บรรทัดไว้นอกลูปจบครัชที่เหลือการพวกเก็บรายละเอียดกันบัคกันใส่ข้อมูลอย่างอื่นที่ไม่ใช่ตัวเลขลงใน textBox พวกนี้
ซึ่งเอาง่ายๆผมว่าอ่านที่ผมอธิบายมันยากกว่าเอา Code ไปนั่งดูเองนะเพราะงั้นโหลดไปก็แล้วกัน
สุดท้ายนี้หวังว่าบทความนี้จะสามารถเป็นที่พึงพาทางใจสำหรับผู้ที่สนใจศึกษาหรือใช้ในการเตรียมตัวเข้าแข่งเข้าสอบอะไรก็ว่าไปครับจาก แอดโซระสุดหล่อ
Slot Games by Aristocrat | Mapyro
ตอบลบSlot Games by Aristocrat | Mapyro. Best 동해 출장안마 Free Online Slot Games by 통영 출장안마 Aristocrat. 구리 출장샵 1. Jackpot city 1. 춘천 출장안마 Pirate Gold. 1. Wheel of Fortune. 1. 양산 출장샵 Pragmatic Play.