หากมีคำถาม ขอให้ไปโพสต์ลง เว็บบอร์ดจีทูจีเน็ตดอตคอม ตัวใหม่แทนน่ะครับ

หรือติดต่อเข้ามาทาง Inbox ที่ เฟซบุ๊ค ผมครับ

หน้าหลัก
ข่าวสาร - บทความ ทั้งหมด
VB 6/VB.Net
ASP/ASP.Net
จับฉ่ายคอมพิวเตอร์
เรียนรู้ผ่าน Flash Movie
บทความที่มีผู้ตอบล่าสุด  
 RSS Feeds
 ดาวน์โหลดโปรแกรม RSS Reader ได้ที่นี่ ...   Download โปรแกรม RSS Reader

Forum - www.g2gnet.com
Webmaster - www.g2gnet.com
Visitors - Session views
 5 1 1 0 1 3 3

7 ธันวาคม พ.ศ.2549
27 Users On-Line.
Visitors - Page views
 8 4 0 3 3 1 0
1 กุมภาพันธ์ พ.ศ.2551

Google   
เว็บ g2gnet.com
ขนาดตัวอักษร:  

ฟังค์ชั่นที่ใช้ในการสุ่มตัวเลขจำนวนเต็ม (Random Number) - ASP

Category »  ASP/ASP.Net
โดย : Webmaster เมื่อ 6/12/2549 8:24:00
(อ่าน : 18156) 
<% ' ฟังค์ชั่นในการสุ่มตัวเลขโดยให้รับค่าต่ำสุด (intLowerBound) และ ค่าสูงสุด (intUpperBound) เข้ามา
Function RandomNum(intLowerBound, intUpperBound)
Dim intRangeSize ' ตัวแปรคำนวณหาค่าช่วงระหว่างค่าต่ำสุด และ ค่าสูงสุด
Dim sngRandomValue ' สุ่มตัวเลขจาก 0 ถึงช่วงระหว่างค่าต่ำสุด และ ค่าสูงสุด
Dim intRandomInteger ' เก็บค่าที่ได้จากการสุ่มเรียบร้อย

' เป็นการสลับค่ากันของตัวแปร 2 ตัว (Swap - อ่านว่าสว็อป มิใช่ สะแว็ป เด้อพี่น้อง) หากค่าสูงสุดที่กำหนดมา ดันทะลึ่งมีค่าน้อยกว่าค่าต่ำสุด
' เช่น intLowerBound = 20
' แต่ intUpperBound = 1
' ดังนั้นผมจะสลับค่าที่อยู่ในตัวแปรทั้งสอง นั่นคือ intLowerBound จะมีค่าเป็น 1 ส่วน intUpperBound จะมีค่าเป็น 20 แทน
If intLowerBound > intUpperBound Then
    Dim iTemp ' สร้างตัวแปรไว้เก็บค่าชั่วคราว
    iTemp = intLowerBound ' เอาค่าต่ำสุด (อันที่จริงค่านี้คือ 20) ไปพักไว้ตัวแปรชั่วคราวก่อน ดังนั้น iTemp = 20
    intLowerBound = intUpperBound ' เอาค่าสูงสุด (อันที่จริงคือ 1) มาเก็บไว้ในตัวแปร intLowerBound นั่นคือตัวแปรตัวนี้จะมีค่า = 1
    intUpperBound = iTemp ' เอาค่าที่อยู่ในตัวแปรชั่วคราว (20) มาใส่เข้าไปในตัวแปร intUpperBound นั่นคือตัวแปรตัวนี้จะมีค่า = 20
End If
' วิธีการนี้ก็จะทำให้เกิดการสลับค่าระหว่างตัวแปรได้แล้วครับ
' หากใครเรียนการเขียนโปรแกรมคอมพิวเตอร์มา หากไม่ได้เขียนโปรแกรม SWAP แบบนี้มา ถือว่าเชยระเบิดจริงๆ
' ที่ผมอธิบายเอาไว้ก็เพราะเผื่อสำหรับคนที่เข้ามาอ่าน แต่ไม่ได้เรียนคอมฯมาโดยตรงจะได้พอเข้าใจบ้างไงครับ ... พี่น้อง

' ใช้ฟังค์ชั่นในการสุ่มจากนาฬิกาของระบบก่อนครับ
Randomize()

' ====================================================
' คำนวณหาช่วงระยะห่าง (Range) โดย ... ค่าสูงสุด - ค่าต่ำสุด + 1 เช่น 20 - 1 + 1 = 20
intRangeSize = intUpperBound - intLowerBound + 1 ' บวกไปอีก 1 เพื่อไม่ให้เกิดค่าในการคำนวณ (จะนำไปสุ่ม) เป็น 0 เช่น 2 - 2 + 1 = 1

' สุ่มตัวเลขจาก 0 ถึง ระยะห่าง (จากตัวอย่าง นั่นคือ 0 - 20)
' หากเราใช้ฟังค์ชั่น Rnd() อย่างเดียวมันจะไม่ Work ครับเพราะคำสั่งนี้ (หรือฟังค์ชั่น) มันจะคืนค่ากลับมาระหว่าง 0 <= ค่าที่ได้ < 1
sngRandomValue = intRangeSize * Rnd()

sngRandomValue = sngRandomValue + intLowerBound

' เปลี่ยนค่าที่ได้จากเลขทศนิยมให้กลายเลขจำนวนเต็ม เท่านี้ก็ได้คำตอบแล้วขอรับ
intRandomInteger = Int(sngRandomValue)
' ====================================================

' จาก 4 บรรทัดคำสั่งด้านบน เขียนโค้ดให้สั้นๆ กระชับหน่อย ก็จะเหลือแค่นี้ครับ
' intRandomInteger = Int((intUpperBound - intLowerBound + 1) * Rnd + intLowerBound)
' พิจารณาลำดับความสำคัญ (Priority) ด้วยน่ะครับ มันเริ่มทำงานจากนิพจน์วงเล็บในสุดก่อน
' ผลที่ได้จึงนำมาคูณกับ Rnd เพราะการคูณ มีความความสำคัญสูงกว่า การบวก
' อย่าเพียงแต่ Copy Code ไปเฉยๆ ต้องศึกษาการทำงานใ้ห้ละเอียดถี่ถ้วนด้วย ...
' *** มิเช่นนั้นอาจเกิด Logical Error ได้ ***

    ' จัดแจงแสดงผลเลยครับ โดยการคืนค่ากลับมาของฟังค์ชั่นนั่นแหละ ... พี่น้อง
    RandomNum = intRandomInteger
End Function

' เรียกใช้งานฟังค์ชั่นสุ่มตัวเลข
Response.Write(RandomNum(1, 20))
%>

จี ทู จี เน็ต ดอต คอม - g2gNet Dot Com
เลขทะเบียนพาณิชย์อิเล็กทรอนิกส์ 0407314800231
CopyLeft © 2004 - 2099 g2gNet.Com All rights reserved.
Email: [email protected] หรือ โทร. 08-6862-6560