KHPC_v002doc01
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
* KHPC ver.0.02の内部資料的なもの
-(by [[K]], 2016.06.14)
** 基本仕様
-KHPCの3番目のバージョン。KHPCは[[persistent-C>persistent...
-基本方針: とにかくできるだけ手抜きをする。次のバージョ...
-このバージョンの目玉:永続変数を共有したプログラム間通信...
** ダウンロード
-http://khfdpl.osask.jp/download/khpc002a.zip
--ソースはTab=4を想定。
** サンプルコード(1)
#include <stdio.h>
#include "khpc0.h"
persistent int i = 0;
int main(int argc, const char **argv)
{
int m = 0;
if (argc >= 2)
sscanf(argv[1], "%d", &m);
for (;;) {
persistent_load(0);
if (i % 2 == m) {
printf("i=%d\n", i);
i++;
persistent_save(0);
}
}
return 0;
}
-こんなプログラムを作って、test1.cで保存してビルドして、...
prompt>test1 0
prompt>test1 1
-で起動すると、1つ目のコンソールは偶数に反応して1を加算し...
-ただし、このプログラムを実行するとOSによってはHDDやSSDの...
-もしそれが心配ならRAMディスクなどを用意して、その上での...
--川合は SoftPerfect RAM Disk というツール(Windows用)を...
** サンプルコード(2)
-簡単な早押しクイズゲームを作ってみました。
--クイズゲームとはいっても、答えるのはコンピュータです。
-test2m.c(マスター側):
#include <stdio.h>
#include <stdlib.h>
#include "khpc0.h"
persistent int m_sn, m_a, m_b;
struct SlaveData {
int sn, ans;
};
persistent struct SlaveData slv[5];
int main(int argc, const char **argv)
{
int a, b, sn = 1, i, n;
int score[5];
for (i = 0; i < 5; i++)
score[i] = 0;
persistent_load(0);
for (;;) {
/* 問題を作って表示 */
a = (rand() / 256) % 100;
b = (rand() / 256) % 100;
printf("Q.%d: %d+%d=? ", sn, a, b);
do {
/* 永続変数を使って問題をスレーブに提示する */
m_sn = sn;
m_a = a;
m_b = b;
persistent_save(0);
/* 回答チェック */
persistent_load(0);
n = 0;
for (i = 0; i < 5; i++) {
if (slv[i].sn == sn && slv[i].ans == a +...
printf("%d!(#%d) ", slv[i].ans, i);
score[i]++;
n++;
}
}
} while (n == 0);
putchar('\n');
/* スコア表示 */
for (i = 0; i < 5; i++)
printf("[#%d:%d] ", i, score[i]);
putchar('\n');
putchar('\n');
sn++;
}
return 0;
}
-test2s.c(スレーブ側):
#include <stdio.h>
#include "khpc0.h"
persistent int m_sn, m_a, m_b;
struct SlaveData {
int sn, ans;
};
persistent struct SlaveData slv[5];
int main(int argc, const char **argv)
{
int i = 0;
if (argc >= 2)
sscanf(argv[1], "%d", &i);
for (;;) {
persistent_load(0);
slv[i].sn = m_sn;
slv[i].ans = m_a + m_b;
persistent_save(0);
}
return 0;
}
-マスターは1つだけ起動します。スレーブは0~4の引数を付け...
-マスターが出題し、スレーブが回答します。マスターは得点の...
-得点は永続変数ではないので、マスターをCtrl-Cして再起動す...
--点数を永続変数にしないのは、永続変数にすると処理がちょ...
-こちらもRAMディスク上での実行をお勧めします。
-建前としては「早押し」ということになっていますが、実際は...
-出題されてマスターによってsaveされて、その直後に運よくlo...
--書き込む場所は slv[1] と slv[3] とで違っているのでそん...
--この上書き問題がありうるので、マスターは毎回save前に出...
--この上書き問題があるので、点数は永続変数を使っていませ...
-マスターはとにかく回答が検出できるまでは次の問題には進ま...
** 議論
-やっかいな上書き問題をひとまず無視すれば、このプログラム...
-更新が中途半端なところで保存されることはないし、ロードが...
--共有メモリ型だとこれは保証しにくい。
-上書き問題をどうするかであるが、変数をグループに分けて、...
-書き換え頻度が高くなければ、上書き衝突の確率は下がって大...
** 関数群
-[[KHPC_v000doc01]]に準ずる。
** メモなど
* こめんと欄
#comment
終了行:
* KHPC ver.0.02の内部資料的なもの
-(by [[K]], 2016.06.14)
** 基本仕様
-KHPCの3番目のバージョン。KHPCは[[persistent-C>persistent...
-基本方針: とにかくできるだけ手抜きをする。次のバージョ...
-このバージョンの目玉:永続変数を共有したプログラム間通信...
** ダウンロード
-http://khfdpl.osask.jp/download/khpc002a.zip
--ソースはTab=4を想定。
** サンプルコード(1)
#include <stdio.h>
#include "khpc0.h"
persistent int i = 0;
int main(int argc, const char **argv)
{
int m = 0;
if (argc >= 2)
sscanf(argv[1], "%d", &m);
for (;;) {
persistent_load(0);
if (i % 2 == m) {
printf("i=%d\n", i);
i++;
persistent_save(0);
}
}
return 0;
}
-こんなプログラムを作って、test1.cで保存してビルドして、...
prompt>test1 0
prompt>test1 1
-で起動すると、1つ目のコンソールは偶数に反応して1を加算し...
-ただし、このプログラムを実行するとOSによってはHDDやSSDの...
-もしそれが心配ならRAMディスクなどを用意して、その上での...
--川合は SoftPerfect RAM Disk というツール(Windows用)を...
** サンプルコード(2)
-簡単な早押しクイズゲームを作ってみました。
--クイズゲームとはいっても、答えるのはコンピュータです。
-test2m.c(マスター側):
#include <stdio.h>
#include <stdlib.h>
#include "khpc0.h"
persistent int m_sn, m_a, m_b;
struct SlaveData {
int sn, ans;
};
persistent struct SlaveData slv[5];
int main(int argc, const char **argv)
{
int a, b, sn = 1, i, n;
int score[5];
for (i = 0; i < 5; i++)
score[i] = 0;
persistent_load(0);
for (;;) {
/* 問題を作って表示 */
a = (rand() / 256) % 100;
b = (rand() / 256) % 100;
printf("Q.%d: %d+%d=? ", sn, a, b);
do {
/* 永続変数を使って問題をスレーブに提示する */
m_sn = sn;
m_a = a;
m_b = b;
persistent_save(0);
/* 回答チェック */
persistent_load(0);
n = 0;
for (i = 0; i < 5; i++) {
if (slv[i].sn == sn && slv[i].ans == a +...
printf("%d!(#%d) ", slv[i].ans, i);
score[i]++;
n++;
}
}
} while (n == 0);
putchar('\n');
/* スコア表示 */
for (i = 0; i < 5; i++)
printf("[#%d:%d] ", i, score[i]);
putchar('\n');
putchar('\n');
sn++;
}
return 0;
}
-test2s.c(スレーブ側):
#include <stdio.h>
#include "khpc0.h"
persistent int m_sn, m_a, m_b;
struct SlaveData {
int sn, ans;
};
persistent struct SlaveData slv[5];
int main(int argc, const char **argv)
{
int i = 0;
if (argc >= 2)
sscanf(argv[1], "%d", &i);
for (;;) {
persistent_load(0);
slv[i].sn = m_sn;
slv[i].ans = m_a + m_b;
persistent_save(0);
}
return 0;
}
-マスターは1つだけ起動します。スレーブは0~4の引数を付け...
-マスターが出題し、スレーブが回答します。マスターは得点の...
-得点は永続変数ではないので、マスターをCtrl-Cして再起動す...
--点数を永続変数にしないのは、永続変数にすると処理がちょ...
-こちらもRAMディスク上での実行をお勧めします。
-建前としては「早押し」ということになっていますが、実際は...
-出題されてマスターによってsaveされて、その直後に運よくlo...
--書き込む場所は slv[1] と slv[3] とで違っているのでそん...
--この上書き問題がありうるので、マスターは毎回save前に出...
--この上書き問題があるので、点数は永続変数を使っていませ...
-マスターはとにかく回答が検出できるまでは次の問題には進ま...
** 議論
-やっかいな上書き問題をひとまず無視すれば、このプログラム...
-更新が中途半端なところで保存されることはないし、ロードが...
--共有メモリ型だとこれは保証しにくい。
-上書き問題をどうするかであるが、変数をグループに分けて、...
-書き換え頻度が高くなければ、上書き衝突の確率は下がって大...
** 関数群
-[[KHPC_v000doc01]]に準ずる。
** メモなど
* こめんと欄
#comment
ページ名: