การสุ่มหลายค่า(ซ้ำและไม่ซ้ำ)
เว็บเพจสำรอง (Backup Webpages) : http://www.thaiall.com/asp/aspran.htm | http://www.thaiabc.com/asp/aspran.htm
ปรับปรุง : 2548-02-08 ()
[ การสุ่มหลายค่า(ซ้ำและไม่ซ้ำ) ]
แสดงให้เห็นการทำงานของ randomize, rnd และ array ได้ชัดเจน

  1. ข้อควรทราบ
  2. การเขียน html ส่งค่าเงื่อนไข (แบบซ้ำได้)
  3. โปรแกรม asp ที่ทำหน้าสุ่ม (แบบซ้ำได้)
  4. การเขียน html ส่งค่าเงื่อนไข (แบบไม่มีการซ้ำ)
  5. โปรแกรม asp ที่ทำหน้าสุ่ม (แบบไม่มีการซ้ำ)
  6. แบบฝึกหัด
ข้อควรทราบ
  1. เนื่องจากมีผู้สนใจ ถามเข้ามาว่า จะเขียนโปรแกรมสุ่มตัวเลขอย่างไรไม่ให้ซ้ำกัน หลาย ๆ ค่า ซึ่งผมเข้าใจว่าเป็นผู้ที่เคย เรียนเขียนโปรแกรมด้วย clipper กับผม เพราะ clipper เป็นภาษาคล้าย foxpro แต่สามารถ compile source เป็น exe ได้โดยง่าย คล้าย cobol และในตัวภาษา clipper นั้นมีคำสั่ง ascan ซึ่งสามารถตรวจสอบค่าใน array ได้ เพื่อใช้ในการทำข้อสอบแบบสุ่มข้อสอบไม่ให้ซ้ำกัน แต่สำหรับ vb หรือ asp นั้น ผมไม่มีเอกสารดี ๆ ที่แสดงคำสั่งต่าง ๆ จึงไม่รู้ว่ามีคำสั่งที่ใช้ ตรวจค่าใน array หรือไม่ ซึ่งอาจจะมีก็เป็นได้ และจะทำให้โปรแกรมสุ่มค่าไม่ซ้ำ สั้นลงไปอีก
  2. สำหรับตัวอย่างนี้ เป็นเพียงหลักการหนึ่ง ซึ่งอาจมีวิธีที่ดีกว่านี้ในการสุ่มค่าไม่ให้ซ้ำกัน โดยหลักการนี้จะสุ่มค่าขึ้นมา แล้วไปตรวจใน array หากไม่พบจะเพิ่มต่อท้าย array ตัวสุดท้าย จนกว่าจะได้ค่าใน array เท่าจำนวนที่ต้องการ
  3. ตัวอย่างนี้ในบทเรียนนี้มี 2 ชุด แต่ละชุดแยกกันอิสระ คือ การสุ่มที่ซ้ำกันได้ ประกอบด้วย aspran1.htm และ aspran1.asp ทำงานคู่กัน และชุดที่สุ่มโดยไม่ให้ซ้ำกัน ประกอบด้วย aspran2.htm และ aspran2.asp
  4. โปรแกรมชุดนี้เป็นโปรแกรมง่าย ๆ ที่มีความสามารถเฉพาะ เพื่อสุ่มตัวเลขมาแสดง หวังว่าผู้ศึกษาจะได้นำไป apply ใช้ได้ เช่น โปรแกรมข้อสอบแบบสุ่ม โปรแกรมสุ่มภาพมาแสดง โปรแกรมสุ่มเลือกสมาชิก เป็นต้น

การเขียน html ส่งค่าเงื่อนไข (แบบซ้ำได้)
form รับค่า 3 ค่า แต่ต้องรับให้ถูกต้อง เพราะจะนำค่าไปตรวจเงื่อนไข
ก่อนนำไปประมวลผลจริง ประกอบด้วย ค่าสูงสุด ค่าต่ำสุด และจำนวนที่ต้องการ
โดยฟอร์มนี้อยู่ในแฟ้ม asprun1.htm ซึ่งจะไปสั่งให้โปรแกรม asprun1.asp ทำงานอีกทีหนึ่ง
ตัวอย่างฟอร์ม /aspran1.htm Source code ของ /aspran1.htm
รับค่าตัวเลข ไปใช้ในการสุ่ม (หลักการนี้ อาจได้ผลลัพธ์ซ้ำกันได้)
ค่ามากที่สุด :
ค่าน้อยที่สุด :
จำนวนเลขที่ต้องการสุ่ม :

Click เรียกเฉพาะ form นี้ในหน้าต่างใหม่
<html> <title>สุ่มหลายค่า</title>
<body bgcolor=#ffffdd><font face="microsoft sans serif">
รับค่าตัวเลข ไปใช้ในการสุ่ม (หลักการนี้ อาจได้ผลลัพธ์ซ้ำกันได้)<br>
<form action=http://thaiall.webhostme.com/aspran1.asp method=post>
ค่ามากที่สุด : <input type="text" name=nummax size=5 value=999> <br>
ค่าน้อยที่สุด : <input type="text" name=nummin size=5 value=1> <br>
จำนวนเลขที่ต้องการสุ่ม : <input type="text" name=numamt size=5 value=15> <br>
<input type=submit value="Random">
<input type=reset value=Reset>
</form>
</body></html>

โปรแกรม asp ที่ทำหน้าสุ่ม (แบบซ้ำได้)
โปรแกรมนี้ใช้หลักการสุ่มค่าด้วย randomize และ rnd
แล้วก็เข้า loop ให้ได้เลขเท่าจำนวนที่ต้องการ ซึ่งเป็นหลักการง่าย ๆ ธรรมดา
โปรแกรมในตัวอย่างนี้ จะรอรับค่าที่ส่งมาจาก asprun1.htm ทั้งหมด 3 ค่า
Source code ของ /aspran1.asp
<html><head><title>ผลลัพธ์จากการสุ่ม (Random result)</title></head>
<body bgcolor="#ffffdd"><font face="microsoft sans serif">
<b>ผลลัพธ์จากการสุ่ม (Random result)</b><br>
หลักการนี้อาจได้ผลลัพธ์ที่ซ้ำกันได้<br>
<%
numamt = request.form("numamt")
nummax = request.form("nummax")
nummin = request.form("nummin")
error = 0
if (nummax <= nummin) or (numamt <= 0) then 
   response.write( "<hr>ค่าที่ระบุในเงื่อนไขผิดพลาด โปรดกลับไประบุใหม่")
   error = 1
else
   randomize
   for i = 1 to numamt
      x = int(nummin  + (rnd * ( nummax - nummin + 1 )))
      response.write( x & "<br>")                
   next
end if
%>
</body></html>
Click here to open this source code in new windows

การเขียน html ส่งค่าเงื่อนไข (แบบไม่มีการซ้ำ)
form รับค่า 3 ค่า แต่ต้องรับให้ถูกต้อง เพราะจะนำค่าไปตรวจเงื่อนไข
ก่อนนำไปประมวลผลจริง ประกอบด้วย ค่าสูงสุด ค่าต่ำสุด และจำนวนที่ต้องการ
โดยฟอร์มนี้อยู่ในแฟ้ม asprun2.htm ซึ่งจะไปสั่งให้โปรแกรม asprun2.asp ทำงานอีกทีหนึ่ง
ตัวอย่างฟอร์ม /aspran2.htm Source code ของ /aspran2.htm
รับค่าตัวเลข ไปใช้ในการสุ่ม (หลักการนี้ จะได้ผลลัพธ์ไม่ซ้ำกัน)
ค่ามากที่สุด :
ค่าน้อยที่สุด :
จำนวนเลขที่ต้องการสุ่ม :

Click เรียกเฉพาะ form นี้ในหน้าต่างใหม่
<html><title>สุ่มหลายค่าไม่ซ้ำกัน</title>
<body bgcolor=#ffffdd><font face="microsoft sans serif">
รับค่าตัวเลข ไปใช้ในการสุ่ม (หลักการนี้ จะได้ผลลัพธ์ไม่ซ้ำกัน)<br>
<form action=http://thaiall.webhostme.com/aspran2.asp method=post>
ค่ามากที่สุด : <input type="text" name=nummax size=5 value=999> <br>
ค่าน้อยที่สุด : <input type="text" name=nummin size=5 value=1> <br>
จำนวนเลขที่ต้องการสุ่ม : <input type="text" name=numamt size=5 value=15> <br>
<input type=submit value="Random">
<input type=reset value=Reset>
</form>
</body></html>

โปรแกรม asp ที่ทำหน้าสุ่ม (แบบไม่มีการซ้ำ)
โปรแกรมนี้ใช้หลักการสุ่มค่าด้วย randomize และ rnd
แต่ต่างกับโปรแกรมชุดแรกที่สามารถซ้ำกันได้ แต่แบบนี้ซ้ำกันไม่ได้
จึงต้องนำ array เข้ามาเก็บค่า เพื่อใช้ตรวจสอบค่าเก่า เพื่อไม่ให้ซ้ำกัน
โปรแกรมในตัวอย่างนี้ จะรอรับค่าที่ส่งมาจาก asprun2.htm ทั้งหมด 3 ค่า
Source code ของ /aspran2.asp
<html><head><title>ผลลัพธ์จากการสุ่ม (Random result)</title></head>
<body bgcolor="#ffffdd"><font face="microsoft sans serif">
<b>ผลลัพธ์จากการสุ่ม (Random result)</b><br>
หลักการนี้ จะได้ผลลัพธ์ที่ไม่ซ้ำกัน<br>
<%
numamt = int(request.form("numamt"))
nummax = int(request.form("nummax"))
nummin = int(request.form("nummin"))
error = 0
if (numamt > ( nummax - nummin )) or (numamt = 0) then 
   response.write( "<hr>ค่าที่ระบุในเงื่อนไขผิดพลาด โปรดกลับไประบุใหม่")
   error = 1
else
   randomize   
   dim arr(99999)
   i = 1
   do while i <= numamt
      x = int(nummin  + (rnd * ( nummax - nummin + 1)))
      found = 0
      for j = 1 to i - 1
         if arr(j) = x then found = 1
      next
	  if found = 0 then
         arr(i) = x
         i = i + 1
      end if
   loop
   for k = 1 to numamt
      response.write( arr(k) & "<br>")      
   next
end if
%>
</body></html>
Click here to open this source code in new windows

แบบฝึกหัด
    ให้ทำตามโจทย์ต่อไปนี้
  1. ให้เขียนโปรแกรมสุ่ม ทั้ง 2 แบบตามตัวอย่าง ให้ได้
  2. ให้ apply ไปทำระบบสุ่ม หวย เช่น รางวัลที่ 1 และหมุน 4 ครั้ง
  3. ให้ apply ไปทำข้อสอบ online แบบสุ่ม
  4. ให้ apply ไปเลือกข้อมูลจากแฟ้มสมาชิก ว่าคนใด จะได้รางวัลพิเศษ
  5. ให้ apply ไปเลือกรูปมาแสดงหลาย ๆ ภาพ จากฐานข้อมูลที่ท่านคิดขึ้น

แนะนำเว็บใหม่ : ผลการจัดอันดับ
รักลำปาง : korattown.com : topsiam.com : มหาวิทยาลัยโยนก
ศูนย์สอบ : รวมบทความ : ไอทีในชีวิตประจำวัน : ดาวน์โหลด : yourname@thaiall.com
ติดต่อ ทีมงาน ชาวลำปาง มีฝันเพื่อการศึกษา Tel.08-1992-7223