 今回は、前章の改良版です。
今回は、前章の改良版です。
 最初の表示は前章と全く同じです。
最初の表示は前章と全く同じです。
 「占う」ボタンを押すと・・・
「占う」ボタンを押すと・・・
グラフィックス付きでおみくじの結果が出ます。また、前章では それぞれの結果(大吉、吉、小吉、凶、大凶)の出る確率は同程度でした。 今回は、「大吉」「大凶」の出る確率を約1/20、「凶」「吉」の出る確率を1/10、 残りを「小吉」というように重みを付けてみました。
では、呼び出し側のHTMLを見てみましょう(index.html)。
<HTML> <HEAD> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <TITLE>おみくじ</TITLE> </HEAD> <BODY> <CENTER> 下のボタンを押すと本日の運勢を占うことができます <FORM METHOD="GET" ACTION="kuji02.cgi"> <INPUT TYPE="SUBMIT" VALUE="占う"> </FORM> </CENTER> </BODY> </HTML>CGIの名前がkuji02.cgiになったので、ここだけが前章と異なります。
次にくじの結果を表す適当な画像を用意しておきます。
| 画像 | ファイル名 | 
|---|---|
|  | daikichi.gif | 
|  | kichi.gif | 
|  | shoukichi.gif | 
|  | kyo.gif | 
|  | daikyo.gif | 
では、プログラムを見てみましょう。
// kuji02.c
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int main()
{
    char kuji[5][8] = {"大吉", "吉", "小吉", "凶", "大凶"};
    char gif[5][32] = {"daikichi.gif", "kichi.gif", "shoukichi.gif", "kyo.gif", "daikyo.gif"};
    int ku, no;
    srand((unsigned int)time(NULL));
    printf("Content-Type:text/html\n\n");
    printf("<HTML>\n<HEAD>\n<TITLE>おみくじ</TITLE>\n</HEAD>\n<BODY>");
    no = rand() % 100;
    if (no < 5) 
        ku = 0;
    else if (no >= 5 && no < 15)
        ku = 1;
    else if (no >= 15 && no < 85)
        ku = 2;
    else if (no >= 85 && no < 95)
        ku = 3;
    else
        ku = 4;
    printf("<CENTER>\n");
    printf("<FONT SIZE=\"5\">");
    printf("<IMG SRC=\"%s\"><P>", gif[ku]);
    printf("あなたの運勢は%sです", kuji[ku]);
    printf("</FONT>\n");
    printf("<P><A HREF=\"index.html\">Back</A></P>");
    printf("</CENTER>\n");
    printf("</BODY>\n<HTML>\n");
    return 0;
}
no = rand() % 100;でnoには0から99までのいずれかの整数が代入されます。
これが5以下となる確率は1/20です。
同様に5以上15未満となる確率は1/10です。
このように、出る確率に重みを付けておきます。
従ってkuが0となる確率は1/20, 1となる確率は1/10, 2となる確率は7/10, 3となる確率は1/10, 4となる確率は1/20になります。
kuが0となれば、「大吉」で表示される画像は daikichi.gifとなります。
今回も簡単でした。
Update Jan/19/2003 By Y.Kumei