เอ่อ Admin ที่เคารพครับ
ช่วยลบกระทู้ทีนะครับ
พอดีว่า
ผมเจอวิธีแล้วอ่าครับ
ขอโทษด้วยนะครับที่รบกวน![]()
วิธีคือ
[code]#include <time.h>
#include <stdlib.h>
main()
{
เอ่อ Admin ที่เคารพครับ
ช่วยลบกระทู้ทีนะครับ
พอดีว่า
ผมเจอวิธีแล้วอ่าครับ
ขอโทษด้วยนะครับที่รบกวน![]()
วิธีคือ
[code]#include <time.h>
#include <stdlib.h>
main()
{
[SIZE=2]ใครช่างใจร้ายใจดำ ทำกับฉันได้ !!![/SIZE]
ผมเคยอ่านหนังสือ สามารถใช้คณิตศาสตร์พิสูจน์ได้ ว่า เราไม่มีทางที่จะสุ่มตัวเลขแบบ ที่เป็น random อย่างแท้จริงได้
คำสั่ง srand แค่ทำการขยายอนุกรมของการสุ่ม ให้กว้างขึ้น
บทพิสูจน์ ผมจำไม่ได้ ...ถ้าหาได้เดี๋ยวเอามาลงครับ
เปลี่ยนเป็นไม่ลบนะครับแต่ขอวิธีการที่คุณเจอมาแบ่งปันให้คนอื่นทราบด้วยนะครับ
srand -> กำหนดค่า seed เริ่มต้นให้ function rand ซึ่งโดยปกติจะมีค่าเริ่มต้นเหมือนกันทุกครั้งเพราะอยู่ใน library แต่ถ้าอยากให้โปรแกรมสุ่มค่าออกมาไม่เหมือนกันก็ ต้องใช้คำสั่ง ตามข้างต้น ^^
ถ้าจะอยากให้สุ่มค่าได้ไม่ซ้ำกัน ขอตอบว่า อาจจะต้องสร้าง array มาเก็บค่าที่เคยสุ่มไว้แล้ว ถ้าซ้ำก็สุ่มใหม่ หรือ
ใช้หลักการ Number Theory โดยอาศัยเลขจำนวนเฉพาะ เข้ามาทำการคำนวณ แต่มันก็จะ สุ่ม ได้แต่ 0 ถึง p -1 (ให้ p เป็นจำเฉพาะ) โดยการสุ่มทั้งหมด p ครั้ง จะได้ค่าไม่ซ้ำกัน พอซุ่มรอบใหม่ จะได้ sequence เดิม ต้องทำการเปลี่ยนค่า ตัวคุณ เพื่อจะทำให้ sequence ออกมาไม่เหมือนเดิม แต่ยังคงลักษณะ การสุ่ม p ครั้ง ที่ได้เลขไม่ซ้ำกัน
[code]
http://img98.imageshack.us/img98/731/ubd7518fj8.png
XSI - Behavior Programmer
Boardgame Thailand Fanclub
Ball Juggling~
การ random ด้วยฟังก์ชัน rand นั้น เกิดนำตัวเลขที่เกิดจากฟังก์ชัน randomize มาใช้ ดังนั้นก่อนเรียก rand ใหม่ ต้องเรียก randomize ก่อนทุกครั้ง ตัวเลขจะเกิดจากการนำจำนวนเศษเสี้ยววินาที เริ่มนับ 0 จากวันที่ 1 มกราคม 1970 จนถึงเ้วลาของคอมพิวเตอร์นะขณะนั้นมาเป็นตัวเลขครับ
ไม่ถูกนะครับ ถ้าเป็นแบบนั้น เวลาเรียก rand ติดๆกันจะได้ต้องได้ค่าเท่ากัน ไม่ใช่เพราะว่า เสี้ยววินาทีมันไม่ตรงกันการ random ด้วยฟังก์ชัน rand นั้น เกิดนำตัวเลขที่เกิดจากฟังก์ชัน randomize มาใช้ ดังนั้นก่อนเรียก rand ใหม่ ต้องเรียก randomize ก่อนทุกครั้ง ตัวเลขจะเกิดจากการนำจำนวนเศษเสี้ยววินาที เริ่มนับ 0 จากวันที่ 1 มกราคม 1970 จนถึงเ้วลาของคอมพิวเตอร์นะขณะนั้นมาเป็นตัวเลขครับ
[/b]
มีเป็น Theory เลยว่าจะ สร้าง function random ยังไง ถึงค่าที่ได้จะออกมา random จริงๆ แต่โดยหลักการพื้นฐานง่ายๆ คือต้องการค่าเริ่มต้น (Seed)
http://img98.imageshack.us/img98/731/ubd7518fj8.png
XSI - Behavior Programmer
Boardgame Thailand Fanclub
Ball Juggling~
ใช้แค่ random() function ก้อพอครับ
วิธีใช้ก้อ int random (int n);
หรือ y = random(100);
หากยังมีปัญหาเพราะ ใช้ติดๆกัน ผมว่าลอง ใช้ sleep() functionดูครับ
แต่ต้องเติม #include <unistd.h> ก่อนนะครับ
น่าจะช่วยได้
ปกติผมใช้ randomize();
และ random(10);
---------------------------
srand(time(NULL));
rand()%10+1;
2 แบบนี้ มันต่างกันมากมั้ยครับ??
ไม่ต่างครับ
randomize() มันอยู่ใน Turbo C อ่ะครับ
แต่ srand() มันอยู่ใน ANSI C 90 Standard Library ครับ stdlib.h อ่ะ
หวังว่าตอนนี้คงเข้าใจกันแล้วนะครับ![]()
[SIZE=2]ใครช่างใจร้ายใจดำ ทำกับฉันได้ !!![/SIZE]
Actions : (View-Readers)
There are no names to display.