C言語関係掲示板

過去ログ

No.129.アンケート処理


No.751

質問
投稿者---初心者(2002/01/07 15:04:43)


学校の課題でアンケート処理を行うプログラムを作れといわれたんですけど、
何をどうしていいのか、さっぱりわかりません。ヒントがあったら教えてください。


No.754

Re:質問
投稿者---B.Smith(2002/01/07 17:44:00)


とりあえず指針となるものをご紹介します。参考にしてみてください。
1. 貴方は未成年ですか?
    A.はい  B.いいえ

2. 1で「B.いいえ」と答えた人だけに質問します。貴方はお酒が好きですか?
    A.はい  B.いいえ
            ・
            ・
            ・

一般のアンケートはこんな感じでしょうか…このアンケートの回答を回収し、統計計算などを行います。

まず、一定の時間を定め、アンケートに回答させます。例えば、アンケートに回答する時間を1日だけと定めた場合、その1日中に複数のアンケート回答が集まるはずです。それをファイル等に蓄えておきます。
ファイルへの記録形式は、アンケートの出題数や出題内容に依存します。例えば、上記のアンケートのようにA、Bで回答するものであれば、1レコード(データ1件分)の構成は、
struct  TAG_RECORD {
    char        Answer1;    /* 貴方は未成年ですか?*/
    char        Answer2;    /* 貴方はお酒が好きですか?*/
            ・
            ・
            ・
} RECORD;

こんな感じで作成できると思います。

定められた時間に集まったアンケートを、次はまとめて処理します。処理の内容は用途によりさまざまですが、アンケートならば統計的な処理を行うかもしれません。

…簡単に説明しましたが、必要となるのは次の2つの処理(プログラム)です。

 アンケートの回答をファイルに入力していくプログラム
アンケート内容の表示と、回答を入力する処理。また、入力された回答をファイルに蓄える処理。

 ファイルを入力とした集計処理を行うプログラム
ファイル内のデータを集計する処理。結果の表示・またはプリントアウト。


時間に対して変動するデータの場合、例えば品物の在庫数や座席の予約等は、データを回収したら即座に処理しなければなりませんが、アンケートのように、時間に対して不変的なものは、一度データを蓄え、後でまとめて処理を行います。これはバッチ処理として知られる方法で、COBOL等を使った事務処理では良く行われます。



No.760

返信ありがとうございます。
投稿者---初心者(2002/01/09 11:03:57)


アンケートについて具体的な指示がでました。
同じ質問
(あなたは何色が好きですか?)
(1赤 2青 3白 4黒)
に何人もの人が答えて、集計できるようにするといったものです。

最後に視覚的(グラフにようなもの)に結果が表示できるようにすればもっとよい、と言われました。

No.762

Re:返信ありがとうございます。
投稿者---B.Smith(2002/01/09 12:13:00)


こんにちは。

アンケートを集計するサンプルをご紹介します。課題ということですので、小規模の集計ができれば良いと思って、単一のプログラムにしてあります。
このサンプルは、簡単に集計だけを行い、終了時にキャラクタによるグラフを表示します。難しいことは一切していないので、改造も容易だと思います。
#include <stdio.h>
#include <memory.h>

/* 回答の種類 */
#define     KIND            4

/* グラフの長さ                         */
/* 回答する人数により調整してください   */
#define     MAX_GRAPH       100

void    ShowGraph(int *);

void    main(void )
{
    int             Cnt,Ans;
    static int      Counter[KIND];

    Cnt = 1;    /* 人数(何人目) */

    while(1){
        /* 質問の表示 */
        printf("\n(%d人目の回答者)\n",Cnt++);
        printf("あなたは何色が好きですか?\n");
        printf("1赤 2青 3白 4黒 ..... 99終了\n");

        scanf("%d",&Ans);   /* 入力 */

        /* 99が入力された場合ループを抜ける */
        if (Ans == 99)
            break;

        /* 1〜KINDの範囲が入力されていなければ無効とする */
        if (Ans < 1 || Ans > KIND)
            continue;

        Counter[Ans-1]++;   /* 回答の集計 */
    }

    /* グラフの作成と表示 */
    ShowGraph(Counter);
}

/* グラフの出力 */
void    ShowGraph(int *pData)
{
    int         Idx;
    char        Buf[MAX_GRAPH+1];
    char        *pCaption[] = {"赤","青","白","黒"};

    /* 回答の種類分繰り返す                     */
    /* '#'をカウント数分並べてグラフを作成する  */
    for(Idx = 0;Idx < KIND;Idx++){
        memset(Buf,'#',*pData); /* グラフの作成 */
        *(Buf + *pData) = 0;        /* 末尾ヌル */
        printf("%s:%s(%d人)\n",pCaption[Idx],Buf,*pData);
        pData++;
    }
}




戻る


「初心者のためのポイント学習C言語」 Last modified:2002.02.03
Copyright(c) 2000-2002 TOMOJI All Rights Reserved