| Homepage | Downloads | Games | Webboard | Chatroom| Publish |

www.se-ed.net/nikom2532

  • Home Page
  • Downloads
  • Games


  • Calendar



    Web Links

  • โปรแกรมปลาดาว
  • ลีนุกส์ทะเล
  • redhat Linux
  • Thaiware
  • Thaimail
  • ARiP



  • Visitor

    Friendly Webside :
    www.geocities.com/nikom2532 www.se-ed.net/nikom2532-fun

    Webmaster Talk Today
    Hello ,welcome to homepage 's www.se-ed.net/nikom2532 . It's Data, Information Technology ,you get it now today.

    เรื่องวุ่นๆ ของการสุ่มค่า ตอนที่ 1

    ฟังก์ชั่นในการสุ่มเลข ที่สามารถใช้ได้ทั้งในการเขียนโปรแกรมบนดอส หรือวินโดวส์ก็คือ rand ฟังก์ชั่นนี้ ถ้าจะให้สุ่มไม่ซ้ำกันให้เรียกใช้ srand ก่อน จากนั้นจึงเรียกใช้ rand( ) ตามด้วยเครื่องหมาย % และตัวเลขที่จะให้สุ่มอยู่สูงสุด ดังตัวอย่างต่อไปนี้

    #include "stdio.h"
    #include "time.h"
    #include "stdlib.h"

    void main()
    {
    srand(unsigned(time(NULL)));

    for (int i=0;i<10;i++)
    {
    printf("%d\n",rand()%10);
    }
    }

    RUN
    6
    7
    1
    2
    6
    9
    8
    5
    0
    2

    ถ้าจะให้การสุ่มนั้นอยู่ในขอบเขตที่ต้องการ เช่น อยู่ระหว่าง 10-20 เท่านั้น เราก็จะใช้วิธีการบวกเข้าไป คือ เราต้องการให้อยู่ระหว่าง 10-20 เราก็จะบวกเข้าไป 10

    for (int i=0;i<10;i++)
    {
    printf("%d\n",rand()%10+10);
    }

    จากตัวอย่าง ผลที่ได้จากการสุ่มจะไม่เกิน 20 เพราะเมื่อมันสุ่มออกมาเป็นหลักหน่วย มันก็จะบวกอีก 10 ทำให้กลายเป็นสิบกว่าๆ ไม่เกิน 20 (รวมเลข 10 ด้วย ถ้าไมต้องการให้รวมเลข 10 ให้เริ่มตั้งแต่ 11 ก็ให้บวกอีก 11)

    การสุ่มตัวเลขด้วย rand นั้น ใช้ได้ทั้งการประมวลผลภายในคลาส ภายในฟังก์ชั่น เพื่อให้เกิดตัวเลขที่ต้องการ หรือจะนำไปใช้ในการเขียนโปรแกรมบนวินโดวส์ด้วยก็ได้ ไม่ว่าจะเป็นการเขียนบน Win32 API หรือ MFC ดังตัวอย่างต่อไปนี้

    จากตัวอย่าง เป็นโปรแกรมแบบ Dialog-based เขียนด้วย C++ และ MFC โดยเราจะสั่งให้วาดภาพบนหน้าไดอะล็อกเป็นเส้นๆ ไปๆ มาๆ โดยเราจะเรียกฟังก์ชั่น srand ใน OnInitDialog และใน OnPaint ก็จะสั่งให้วาดภาพออกไปพร้อมกับสุ่มค่าตำแหน่ง ดังตัวอย่างนี้


    BOOL CTestMFCDlg::OnInitDialog()
    {
    ……………………
    ……………………
    srand(unsigned(time(NULL)));
    return TRUE;
    }


    void CTestMFCDlg::OnPaint()
    {
    if (IsIconic())
    {
    CPaintDC dc(this); // device context for painting
    ………………………..
    }
    else
    {
    CPaintDC pDC(this); // device context for painting
    CPen pen1;
    pen1.CreatePen(PS_SOLID,1, RGB(0,0,0));
    pDC.SelectObject(&pen1);
    for (int i=0;i<50;i++)
    {
    int x1=rand()%300;
    int y1=rand()%200;
    int x2=rand()%300;
    int y2=rand()%200;
    pDC.MoveTo(x1,y1);
    pDC.LineTo(x2,y2);
    }
    CDialog::OnPaint();
    }
    }

    Back     Next

     
    ----== Contact US ==----

    © Copyright 2003 Nikom Suwankamol. ® All right reserved. E-mail : nikom2532@yahoo.com , nikom2532@se-ed.com
    Home Size Server Supported By : SE-Education Public Company Limited