Jinsi ya Kutengeneza Nambari za Nasibu katika C: Mipaka, Nambari za Desimali, na Mifano ya Kivitendo

1. Utangulizi

Lugha ya programu ya C hutumiwa sana katika programu za mfumo wa kiwango cha chini na maendeleo ya michezo. Miongoni mwa matumizi yake mengi, “utengenezaji wa nambari za nasibu” hutumiwa mara kwa mara. Kwa mfano, hutumiwa kuunda vipengele vya nasibu katika michezo, kuendesha uigaji, kufanya usimbuaji, na kutoa data ya majaribio, pamoja na matumizi mengi mengine.

Kifungu hiki kinachambua jinsi ya kutoa nambari za nasibu ndani ya anuwai iliyotajwa katika C, kwa kutumia mifano halisi. Imeundwa kuwasaidia wasomaji kuelewa mechanics za utengenezaji wa nambari za nasibu na kuzitumia katika programu za ulimwengu halisi.

2. Msingi wa Utengenezaji wa Nambari za Nasibu katika C

Katika C, nambari za nasibu hutolewa kwa kutumia maktaba ya kawaida <stdlib.h>. Kazi ya rand() inatoa nambari za nasibu za nambari katika anuwai kutoka 0 hadi RAND_MAX (takriban 2147483647). Hata hivyo, ikiwa utatumia thamani ya siki sawa, mfululizo sawa wa nambari za nasibu utatolewa kila wakati.

Kutengeneza Nambari za Nasibu za Kubuni na Kuweka Thamani ya Siki

Dhana muhimu katika utengenezaji wa nambari za nasibu ni “thamani ya siki.” Siki huamua mahali pa kuanza pa mfululizo wa nambari za nasibu. Bila kuiweka, programu itatoa nambari sawa kila inapoendesha. Ili kuepuka hili, tumia kazi ya srand() kuweka siki. Kwa kawaida, kazi ya time() hutumiwa kuweka wakati wa sasa kama siki.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main() {
    srand((unsigned int)time(NULL));
    printf("%dn", rand());
    return 0;
}

Hii inahakikisha kuwa nambari tofauti za nasibu hutolewa kila programu inapoeendesha.

3. Kutengeneza Nambari za Nasibu Ndani ya Anuwai Iliyotajwa

Ikiwa unataka nambari ya nasibu ndani ya anuwai maalum, unahitaji kutumia shughuli za hisabati kwenye matokeo ya kazi ya rand(). Fomula ya msingi ya kutoa nambari ya nasibu ndani ya anuwai ni:

rand() % (max - min + 1) + min

Hii inatoa nambari ya nasibu ya nambari kati ya min na max (pamoja).

Mfumo wa Koda: Utengenezaji wa Nambari za Nasibu Ndani ya Anuwai

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main() {
    int min = 1;
    int max = 100;
    srand((unsigned int)time(NULL));
    int random_number = rand() % (max - min + 1) + min;
    printf("Random number between %d and %d: %dn", min, max, random_number);
    return 0;
}

Koda hii inatoa na kuchapisha nambari ya nasibu kati ya 1 na 100.

4. Kutengeneza Nambari za Nasibu za Nambari Zinazoelea

Ili kutoa nambari za nasibu za nambari zinazoelea, tumia kazi ya rand() na RAND_MAX kwa upanuzi. Ili kutoa nambari ya nasibu kati ya 0.0 na 1.0, tumia koda ifuatayo:

Mfumo wa Koda: Utengenezaji wa Nambari za Nasibu za Nambari Zinazoelea

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main() {
    srand((unsigned int)time(NULL));
    double random_number = (double)rand() / RAND_MAX;
    printf("Random number between 0.0 and 1.0: %fn", random_number);
    return 0;
}

Programu hii inatoa nambari za nasibu katika anuwai 0 hadi 1. Kwa kutumia upanuzi, unaweza kutoa nambari za nasibu katika anuwai yoyote ya nambari zinazoelea. Kwa mfano, ili kupata nambari kati ya 0.0 na 5.0, zidisha matokeo kwa 5.

5. Matumizi ya Vitendo ya Nambari za Nasibu

Uigaji wa Bwawa

Katika maendeleo ya michezo, uigaji wa bwawa ni mfano wa kawaida wa matumizi ya nambari za nasibu. Koda ifuatayo inatoa nambari ya nasibu kati ya 1 na 6 ili kuiga kurusha bwawa:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main() {
    srand((unsigned int)time(NULL));
    int dice_roll = rand() % 6 + 1;
    printf("Dice roll: %dn", dice_roll);
    return 0;
}

Kukadiria Pi Kwa Kutumia Mbinu ya Monte Carlo

Mbinu ya Monte Carlo hutumia nambari za nasibu kukadiria suluhu za matatizo ambayo ni magumu kutatua kwa uchambuzi. Koda ifuatayo inaonyesha kukadiria π kwa kutumia nambari za nasibu:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main() {
    int n_trials = 1000000;
    int n_inside = 0;
    double x, y, pi;

    srand((unsigned int)time(NULL));

    for (int i = 0; i < n_trials; i++) {
        x = (double)rand() / RAND_MAX;
        y = (double)rand() / RAND_MAX;
        if (x * x + y * y <= 1) {
            n_inside++;
        }
    }

    pi = 4.0 * n_inside / n_trials;
    printf("Approximated π: %fn", pi);

    return 0;
}

Njia hii inahesabu π kwa kuzalisha nambari za nasibu na kutathmini ni ngapi zinapoangukia ndani ya duara la kitengo. Inatumika sana katika majaribio ya fizikia na uundaji wa modeli ya uwezekano.

6. Hitimisho

Katika makala hii, tulijifunza jinsi ya kuzalisha nambari za nasibu ndani ya safu maalum katika C. Tulijadili matumizi ya msingi ya rand() na srand(), kuzalisha nambari katika safu za nambari kamili na nambari za desimali, na kuchunguza matumizi ya vitendo kama majaribio ya dice na njia ya Monte Carlo. Uzalishaji wa nambari za nasibu ni mbinu muhimu katika nyanja nyingi, ikijumuisha maendeleo ya michezo na majaribio.

Jaribu kutumia mbinu hizi katika miradi yako ya baadaye ili kuboresha utendaji na utofauti.

年収訴求