検索結果 199 件

by a5ua
12年前
フォーラム: C言語何でも質問掲示板
トピック: ループ関数を作りたい
返信数: 6
閲覧数: 5254

Re: ループ関数を作りたい

マクロを使うか、もしくは
以下のように、ループ回数と関数ポインタ(or 関数オブジェクト)を受け取る関数を作るかですかね。
C++0xであれば、ラムダ式が使えます

コード:

template <typename F>
void loop(int n, const F &f)
{
	for (int i = 0; i < n; ++i) {
		f();
	}
}

int main()
{
	int a = 0;
	loop(10, [&a] {
		++a;
	});
}
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: ポインタによる二次配列参照について
返信数: 8
閲覧数: 3397

Re: ポインタによる二次配列参照について

Board_copyは以下のようになるのではないでしょうか

コード:

//ボードの情報をコピーする
void Board_copy(int (*board_copy)[11])
{
	int y, x;

	for (y = 0; y < 11; y++) {
		for (x = 0; x < 11; x++) {
			board_copy[y][x] = BanData[y][x];
		}
	}
}
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: テキストファイルの全角カタカナー>半角カタカナに変換ソフトを作ってます
返信数: 12
閲覧数: 5120

Re: テキストファイルの全角カタカナー>半角カタカナに変換ソフトを作ってます

wchar_t target[100] = L"半角カタカナに変換"; に対して、  wcsstr(target, L"ア");  wcsstr(target, L"イ");   :  wcsstr(target, L"ヲ");  wcsstr(target, L"ン"); を何度も繰り返すんですか? まあ、その通りです。変換対象がなくなるまでループを回しています。 効率は悪いかもしれませんが、実装が簡単だと思ったので提案しました。 コードも載せておきます。 #include <stdio.h> #include <string.h> #include <assert.h> #include...
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: BCCDeveloperからVisualC++に乗り換えたのですが
返信数: 9
閲覧数: 6668

Re: BCCDeveloperからVisualC++に乗り換えたのですが

strcpyやstrcatなどは、バッファオーバーランの危険性があるので、 出力先のバッファサイズを指定できるバージョンがVisual Studioでは用意されており、 そちらを使うようにコンパイラが警告を出しているのです。 strcpy(sFindSubDir, direName); //検索フォルダのフルパス文字列をコピー 例えば、この部分は、 strcpy_s(sFindSubDir, _MAX_PATH, direName); //検索フォルダのフルパス文字列をコピー このように使います。 warning C4018: '<' : signed と unsigned の数値を比較しよう...
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: BCCDeveloperからVisualC++に乗り換えたのですが
返信数: 9
閲覧数: 6668

Re: BCCDeveloperからVisualC++に乗り換えたのですが

マルチスレッド DLL (/MD)
マルチスレッド デバッグ DLL (/MDd)
にするとどうですか?
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: テキストファイルの全角カタカナー>半角カタカナに変換ソフトを作ってます
返信数: 12
閲覧数: 5120

Re: テキストファイルの全角カタカナー>半角カタカナに変換ソフトを作ってます

かずま さんが書きました: strstr は使えないでしょう。次の場合を考えてください。

char target[100] = "宴会";
char before[] = "ラ";
char after[] = "ラ";

"宴会" は 0x89 0x83 0x89 0xef です。
"ラ" は 0x83 0x89 です。
確かに、これはだめですね。
代替案としては、wchar_tを使うことでしょうか。

No.5で書いたものは
char → wchar_t
"ア" → L"ア"
strstr → wcsstr
などと読み替えてください。
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: テキストファイルの全角カタカナー>半角カタカナに変換ソフトを作ってます
返信数: 12
閲覧数: 5120

Re: テキストファイルの全角カタカナー>半角カタカナに変換ソフトを作ってます

char *full[] = {"ア", "イ", "ウ", "エ", "オ", /* 略 */, "ポ"}; // 全角カタカナのリスト char *half[] = {"ア", "イ", "ウ", "エ", "オ", /* 略 */, "ポ"}; // 対応する半角カタカナ 濁音、半濁音に対しても、同様に対応付けられると思います。 以下に、例題とともに置換処理のアルゴリズム(のヒント)を示します。 char target[100] = "abcアdef"; char before[] = "ア"; char after[] = "ア"; target中のbeforeをafterに置換し...
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: キーボード入力について
返信数: 10
閲覧数: 3064

Re: キーボード入力について

文字列は=では代入できません。strcpy関数を使いましょう
使い方については、ご自分で調べてみてください。
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: テキストファイルの全角カタカナー>半角カタカナに変換ソフトを作ってます
返信数: 12
閲覧数: 5120

Re: テキストファイルの全角カタカナー>半角カタカナに変換ソフトを作ってます

このような方針はどうでしょうか? char *full[] = {"ア", "イ", "ウ", "エ", "オ", /* 略 */}; // 全角カタカナのリスト char *half[] = {"ア", "イ", "ウ", "エ", "オ", /* 略 */}; // 対応する半角カタカナ char line[1000]; // 1行分のバッファ // 1行ずつ読み込む while (fgets(line, 1000, fp)) { /* line中のfull[i]をhalf[i]に置換する */ /* lineをファイルに出力 */ } 上のように、全角←→半角の1対1対応のテーブルを作っ...
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: キーボード入力について
返信数: 10
閲覧数: 3064

Re: キーボード入力について

方法はいくつかあると思いますが、2つほど提案します。 方法1:実際に文字を削除する char typing[100]; // 表示文字列 // 先頭の文字を削除する処理 typing[0] = typing[1]; typing[1] = typing[2];      ・      ・      ・ typing[98] = typing[99]; のように1文字先を代入していくことで、先頭の文字を消すことが出来ます。 (実際に作るときは、for文を使って実現しましょう) 方法2:削除されているように見えるようにする #include <stdio.h> int main(void) { c...
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: キーボード入力について
返信数: 10
閲覧数: 3064

Re: キーボード入力について

タイピングゲームならば、GetInputCharのほうが適役かと思います。

DXライブラリのリファレンスはこちら
http://homepage2.nifty.com/natupaji/DxL ... html#R5N25
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: ロードを早くしたい
返信数: 3
閲覧数: 2171

Re: ロードを早くしたい

SetCreateSoundDataTypeで、音声の再生形式を
DX_SOUNDDATATYPE_MEMPRESS または DX_SOUNDDATATYPE_FILEにするのは試されましたか?

リファレンス
http://homepage2.nifty.com/natupaji/DxL ... tml#R15N25
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: BMPファイルの作成方法について
返信数: 9
閲覧数: 10088

Re: BMPファイルの作成方法について

1行分のデータは4の倍数(バイト)でないといけません。
今回の場合、1ピクセルあたり3バイトで、1行あたり10ピクセルですから、
1行分のデータは30バイトになります。
よって、4の倍数にするには、1行分の30バイトを出力したあと、適当なデータを2バイト書きこむ必要があります。

ところで、10×10画素のデータを作るには、
char p[10][10][3]; // 1画素(3バイト)×10×10
分のデータが必要ではないですか?
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: キーを離した後にその方向を向いた停止キャラ画像にする
返信数: 6
閲覧数: 2298

Re: キーを離した後にその方向を向いた停止キャラ画像にする

キーが押されていない場合は、画像を変更しなければいいのでは?
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: 非同期的にWeb上からファイルをダウンロードさせたい
返信数: 3
閲覧数: 4776

Re: 非同期的にWeb上からファイルをダウンロードさせたい

画像を別スレッドでダウンロードするサンプルを書いてみました。 メインスレッドでは、進捗率を表示し、ダウンロード後にその画像を表示しています。 また、描画にはDXライブラリを使用しています。 私が作成したクラスは、 CriticalSection ProgressCallback URLDownloader の3つです。 CriticalSectionはスレッド間で共有する変数へのアクセスに対する排他制御用です。 ProgressCallbackはIBindStatusCallbackインターフェースを実装しています。 URLDownloadToFileの内部で、 IBindStatusCall...
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: 配列とポインタと関数の引数
返信数: 2
閲覧数: 1336

Re: 配列とポインタと関数の引数

以下のプログラムでどうでしょう? void func2(Hoge* hoge){ int* (*array)[10] = hoge->array; int* i = (int*)malloc(sizeof(int)); *i = 2; array[0][0] = i; } 配列名は、配列の先頭要素へのポインタとなるのはいいでしょうか hoge->arrayの型は、「int *[10][10]」です。 先頭要素の型は、「int *[10]」なので、 先頭要素へのポインタは、「int *(*)[10]」となります。 これに、変数名をつけたのが、上のプログラムです。
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: テンプレートを戻り値に使用する
返信数: 3
閲覧数: 5644

Re: テンプレートを戻り値に使用する

できますよ。 ただし、今回のような場合は呼び出し時にテンプレートパラメータを明示する必要があります。 #include <iostream> #include <vector> using namespace std; template <class X> X func() { X x(10); // Xはintから変換可能でなければならない cout << "in func" << endl; return x; } int main() { // int型の10 int x = func<int>(); // double型の10 double y = func<double>(); //...
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: 複数の敵同士の判定がでできません
返信数: 3
閲覧数: 1324

Re: 複数の敵同士の判定がでできません

627行目
×if(i==!j){
○if(i!=j){
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: オセロのプログラム制作過程
返信数: 44
閲覧数: 12539

Re: オセロのプログラム制作過程

Board_CPU関数でBanDataのコピーを受け取っているのですね。これは良いと思います。 しかし、 int CPU_BanData[][BAN_WIDTH]={0}; これは、右辺に要素が1つしかないので、 int CPU_BanData[1][BAN_WIDTH]={0}; と解釈されます。 int CPU_BanData[BAN_HEIGHT][BAN_WIDTH]; とするべきでしょう。 実行時エラーは、上記が原因で、配列の範囲外にアクセスしているからです。 CPU_inputで受け取ったコピーCPU_BanDataをBoard_Searchに渡していますが、 これだと、Board...
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: 表の累計
返信数: 20
閲覧数: 5222

Re: 表の累計

まだ、間違っている箇所がありますが、fill関数の実装に関してはOKです。

とりあえず、以下の2点についてやってみてください。
・エラーをなくすために、WIDHT -> WIDTHに修正してください。
・fill関数を適切な場所で呼び出してください。
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: 課題についての質問です。
返信数: 23
閲覧数: 4799

Re: 課題についての質問です。

半角スペースが表示上消えているようですが、以下の表示でよろしいでしょうか? * ** *** **** * * ** ** *** *** ******** * * * ** ** ** *** *** *** ************ * * * * ** ** ** ** *** *** *** *** **************** codeタグを使えば、きれいに表示できます。 * ** *** **** この三角形が一塊になっていることは、わかるでしょうか? また、問題を少し簡単にして、(☆) n = 2のとき、 * * **** n = 3のとき、 * * * ** ** ** *...
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: 表の累計
返信数: 20
閲覧数: 5222

Re: 表の累計

sum_HEIGHTとsum_WIGHTは、vに何らかの(意味のある)値が入っていることが前提になっていますよね? 今のコードではprint_listが ・v [j]の初期化(No: 7では引数のvすら使ってないようですが) ・累計の計算 ・表示 という機能を持っていますが、初期化と累計の計算を同時に行なっているため、 sum_HEIGHTとsum_WIGHTが有効に使えません。 よって、print_listの機能のうち、初期化の処理を別の関数に分離することを考えます。 たとえば、配列の初期化用に次のような関数を用意します。 // vに値を設定する // No: 1に書いてあるように、以下のよ...
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: 表の累計
返信数: 20
閲覧数: 5222

Re: 表の累計

print_listは配列vをもとに、一覧表を作成して出力するのですよね?
でしたら、「一覧表とは何か?」を、数式もしくは言葉などで説明しなくてはなりません。

まあ、何が言いたいかというと、noやsubはprint_listの引数として本当に必要でしょうか?
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: 表の累計
返信数: 20
閲覧数: 5222

Re: 表の累計

sum_HEIGHTとsum_WIGHTについては、問題ないと思います。

ただし、print_listについては、少し説明が足りないと思います。
引数である、v, no, subはどのように使われるのかの説明がありません


あと、プログラムとは直接関係ないですが、WIGHTはWIDTHのスペルミスですよね?
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: 文字列が空であるかどうかの判定がうまくできません。
返信数: 34
閲覧数: 16374

Re: 文字列が空であるかどうかの判定がうまくできません。

>途中まできちんとしたデータがある場合
この“きちんとしたデータ”も、最初は何も登録していないデータから作られると思います
ファイルから読み込むにしろ、プログラム中に直接書くにしろ、そのデータ数はわかるのではないでしょうか

※かなたんのプログラムを否定しているわけではないので、誤解のないように
データとしての空文字が無効ならば、それをデータの終端として扱うのは、問題ありません。
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: 表の累計
返信数: 20
閲覧数: 5222

Re: 表の累計

エラーになるのは、print_listは3個の引数を要求しているのに対して、
mainでは、1つの引数しか与えていないからです。

ところで、sum_HEIGHTなどの各関数がどのような処理をするか説明できますか?
以下のように、関数にコメントをつける形で答えてみてください。

コード:

// 要素数nの配列vの各要素を合計した値を返す
int sum(int v[], int n)
{
	int sum = 0;
	int i;
	for (i = 0; i < n; i++) {
		sum += v[i];
	}
	return sum;
}
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: 文字列が空であるかどうかの判定がうまくできません。
返信数: 34
閲覧数: 16374

Re: 文字列が空であるかどうかの判定がうまくできません。

/* 名前入力 */ for (k = 0; k < i; k++) { /* 同じ名前が見つかったらループを抜ける */ } /* kに同じ名前が見つかった場所が入る */ /* 同じ名前が見つからなかった場合、kはいくつになっているか考えてみましょう */ だからこのようなやり方を進めてくださったのですね。 ↑の場合は・・・見つからなかった場合kはiですよね? でも、見つからなかった場合の新規登録はどのようにするのがいいでしょうか? 最後を探そうにも真の空は存在しないから、「""」と==にならないし・・・ 以下のプログラムで説明しますと、 iが現在登録されているデータの総数になるので、i...
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: オセロのプログラム制作過程
返信数: 44
閲覧数: 12539

Re: オセロのプログラム制作過程

Board.hの static int BanData[ BAN_HEIGHT ][ BAN_WIDTH ] = { (略) } ; は、変数宣言と実体の定義を同時に行っているため、 Board.hをincludeする度に、実体が作られます。 したがって、Board.cppがincludeして作られたBanDataと、 Flip.cppが(Flip.hを介して)includeして作られたBanDataは、別の変数になります。 なので、Flip()でいくらBanDataの値を変更しても、 Board_Draw()が参照しているBanDataとは別物ですから、描画には反映されません。 これを解決す...
by a5ua
13年前
フォーラム: みんなでソースコードをレビューしよう
トピック: ファイルの探索 (Windows/C++)
返信数: 0
閲覧数: 6787

ファイルの探索 (Windows/C++)

Win32APIの FindFirstFile FindNextFile FindClose を使ったファイル探索をC++で書いてみました。作成環境は、Visual Stuio 2008 Express Editionです。 以下のヘッダファイル【enumerate_files.hpp】で機能を提供しています。 #pragma once #include <windows.h> #include <string> /** * ファイルを探索する * @author a5ua * @tparam Callback ファイルが見つかったときに呼ばれる関数 * @param path 探索を開始する...
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: 文字列が空であるかどうかの判定がうまくできません。
返信数: 34
閲覧数: 16374

Re: 文字列が空であるかどうかの判定がうまくできません。

初期化されていない部分には、不定値が入っているので、空文字と比較するのは適切ではありません。

名前を入力する時点で、0 ~ i - 1番目まで登録されているので、
i未満の部分を全て調べる必要があります。

コード:

/* 名前入力 */

for (k = 0; k < i; k++) {
	/* 同じ名前が見つかったらループを抜ける */
}

/* kに同じ名前が見つかった場所が入る */
/* 同じ名前が見つからなかった場合、kはいくつになっているか考えてみましょう */

by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: 3次元配列のポインタ
返信数: 15
閲覧数: 8117

Re: 3次元配列のポインタ

コードからは、目的が読み取れないので、いくつか候補を挙げてみました。 int main(void) { int D[201][201][4]; // CASE 1:D(int [201][201][4]型)へのポインタ int (*p1)[201][201][4] = &D; // CASE 2:Dの先頭要素(int [201][4])へのポインタ int (*p2)[201][4] = D; //int (*p2)[201][4] = &D[0];としても同じ // CASE 3:Dを1次元配列として考えたときの先頭要素へのアドレス int *p3 = &D[0][0][0]; return...
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: 中央値のアルゴリズム
返信数: 5
閲覧数: 5017

Re: 中央値のアルゴリズム

効率的ではありませんが、参考までに

コード:

int med(int a, int b, int c)
{
	if (b < a) return med(b, a, c);
	if (c < b) return med(a, c, b);
	return b;
}
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: 引数と戻り値について
返信数: 2
閲覧数: 1369

Re: 引数と戻り値について

文法的には、
戻り値の型 関数名(引数リスト)
※引数リストは、型 名前[, 型 名前, ...]
です。

よって、
戻り値の型:「struct list *」
関数名:「add」
引数:「head」でその型は、「struct list *」
となります。
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: Stateパターンのコンパイル順番でコンパイルできない
返信数: 2
閲覧数: 1704

Re: Stateパターンのコンパイル順番でコンパイルできない

GameTitle::Drawの定義は、GameStageクラスやGameStrategyの定義よりも後でないといけません GameStage::GoStrategyの定義は、GameStrategyの定義よりも後でないといけません。 アドバイスとしては、前方で宣言のみを行なった後に定義を書けば、順番を気にせずにすみます。 // A,B,Cはクラスだったり関数だったり Aの宣言 Bの宣言 Cの宣言 // 順番を気にしなくてよい Aの定義 Cの定義 Bの定義 dicさんのコードの場合、 Aの宣言 Bの宣言 Bの定義 Aの定義 { Cを使用 // エラー:Cは宣言されていない } Cの宣言 Cの定...
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: sin,cosを使って円を書くプログラム
返信数: 14
閲覧数: 12690

Re: sin,cosを使って円を書くプログラム

ぐるっと円を描くというのがあいまいでよくわかりませんが、こんな感じですか? #include "DxLib.h" #include <math.h> #define BALL_MAX 200 #define PI 3.14159265358979 #define PI2 PI*2 //円周率の二倍は360度に等しく、よく使うと考えられるのでここで定義してしまう int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd){ ChangeWindowMode(TRUE); ...
by a5ua
13年前
フォーラム: みんなでソースコードをレビューしよう
トピック: sleep sort
返信数: 0
閲覧数: 6583

sleep sort

【出典】 http://dis.4chan.org/read/prog/1295544154 要は、配列aの各要素a に対して、a 秒スリープしてから出力するというアルゴリズムです。 発想は面白いですが、実用的ではありません。 C++で実装してみました。(環境は、VC2010とboost 1.44です) [tabs][tabs: sleep_sort.hpp] #pragma once #include <memory> #include <algorithm> #include <boost/thread/thread.hpp> #include "synchronized_queue.hp...
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: *によるダイヤモンド作成の問題についてです
返信数: 18
閲覧数: 5520

Re: *によるダイヤモンド作成の問題についてです

では、逆向きのピラミッドは表示できますか?
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: 敵を自機に向かせるプログラム
返信数: 4
閲覧数: 1742

Re: 敵を自機に向かせるプログラム

こんな感じでどうでしょうか?

コード:

	// 敵から自機へ向かう角度
	rad = atan2(mainuni->y - ene->y, mainuni->x - ene->x);

	double d = rad - ene->rad;	// 角度の差

	// どちらに回るか判定(ベクトルの外積の考え方を使っています)
	if (sin(d) > 0) {
		ene->rad += 0.01;
	} else {
		ene->rad -= 0.01;
	}
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: 自機から角度範囲に居る敵を取得する
返信数: 4
閲覧数: 2999

Re: 自機から角度範囲に居る敵を取得する

基準角度方向のベクトルをa、 自機位置から敵位置へのベクトルをbとし、 aとbがなす角度をθとすると、 cosθ ≧ cos15° が成り立つとき、範囲内にいると判定できる。 cosθは、ベクトルの内積の式から計算できる。 a・b = |a||b|cosθ(aとbの内積) 参考までに、コード例を示します。 // (px, py)から、角度base±viewの範囲に、(ex, ey)が入っているか bool InRange(double px, double py, double ex, double ey, double base, double view) { double ax = cos...
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: C++のクラスについて
返信数: 9
閲覧数: 6694

Re: C++のクラスについて

いくつか設計案を示します。 案1:キーボード情報をコンストラクタで渡しておく Playerクラスは、メンバー関数内で、キーボードを情報を使用できる class Player { public: Player(Keyboard &keyboard) : key(keyboard){} private: Keyboard &key; }; 案2:プレイヤー情報更新関数にキーボード情報を渡す。 Playerクラスは、Player_Calcでのみ、キーボード情報を使用できる。 class Player { public: void Player_Calc(Keyboard &key); }; 案3:プ...
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: キーボードからの入力による計算
返信数: 14
閲覧数: 3524

Re: キーボードからの入力による計算

こういう感じですか?(replace関数は適切に実装してください) #include <stdio.h> // str中で最初に見つかったbeforeをafterに置き換える void replace(char *str, const char *before, const char *after); int main() { char result[100]; char format[100]; double x; scanf("%s", format); scanf("%lf", &x); replace(format, "x", "%f"); // "x"を"%f"に置き換える spri...
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: C++を学ぶにあたって
返信数: 2
閲覧数: 1419

Re: C++を学ぶにあたって

C++を理解したといえるレベルが人それぞれ違うので、要点をあげるのは難しいのですが
以下に示すのは、ほんの一例だと思ってください。

C++標準ライブラリの使い方を覚えるだけでも、勉強になると思います。

1. 参照
 ポインタとの違い

2. 名前空間

3. クラス
 メンバー変数、メンバー関数
 コンストラクタ、デストラクタ
 アクセス指定子
 派生と仮想関数

4.標準ライブラリ
 入出力ストリーム
 文字列(string)
 コンテナ(vector, list, etc.)
 アルゴリズム(find, count, transform, etc.)
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: 敵の移動計算
返信数: 3
閲覧数: 2026

Re: 敵の移動計算

時刻t = 0において、位置x = x0かつ速度v0、 時刻t = Tにおいて、位置x = x1かつ速度v1とし、 加速度を、A * t + Bと仮定して方程式を立ててみる。 d 2 x/dt 2 = A * t + B x'(0) = v0 x'(T) = v1 x(0) = x0 x(T) = x1 これより、A、Bを定めると、 A = (6 * (v1 + v0) * T - 12 * (x1 - x0)) / T 3 B = (6 * (x1 - x0) - 2 * (v1 + 2 * v0) * T) / T 2 時刻tにおける位置xはA、Bを使って、 x = (1/6) * A *...
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: 構造体型配列について質問です
返信数: 4
閲覧数: 2230

Re: 構造体型配列について質問です

修正の一例としては、以下のようになるでしょう。 extern void enter_data(Cmd_t *p); void play_data() { enter_data(Data.Cmd); } Cmd_t play_cmd; void enter_data(Cmd_t *p) { static int num=0; play_cmd.kind = p[num].kind; play_cmd.state1 = p[num].state1; num++; } 【解説】 配列の名前だけ書いた場合は、その配列の先頭要素のアドレスとなります。 つまり、 &Data.Cmd[0]; とみなされます...
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: 当たり判定の処理を教えてください。
返信数: 3
閲覧数: 1537

Re: 当たり判定の処理を教えてください。

138行目の
if( teki[ i ].F = 1 ){
は、
if( teki[ i ].F == 1 ){
の間違いですね。

なお、C言語では、0以外の値が真、0が偽と判定されるので、フラグのON,OFFを判定するときは、
if (flag) {// flagがONのとき
}
とか
if (!flag) { // flagがOFFのとき
}
のようにするとよいでしょう。(上記のようなミスもなくなりますし)

今回のコードでは、
if (HitCheck(~)) {
}
のようにも書けますね。
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: クラスメンバの扱いに困っています。
返信数: 4
閲覧数: 1623

Re: クラスメンバの扱いに困っています。

クラスも型の一種ですから、普通にメンバ変数として宣言すればいいですよ。

コード:

class player
{
public:
	int te;
	/* 略 */
};

class zyanken_field
{
private:
	player player1;
public:
	void te_hyouzi();
	/* 略 */
};

void zyanken_field::te_hyouzi()
{
	if (player1.te == GUU) /* 略 */
}
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: クラスメンバの扱いに困っています。
返信数: 4
閲覧数: 1623

Re: クラスメンバの扱いに困っています。

playerクラスのteメンバーがstaticになっていますが、これはどのようなことを意図していますか? この場合、player::teという変数の実体は1つしかないので、二人でのじゃんけんという仕様に反しているように思います。 さて、本題ですが、 クラスを使わないアプローチとしては、 以下のように、プレイヤー(人間)の手を決定する関数と、NPCの手を決定する関数を それぞれ用意して、 int player_te_kettei() { if( Key[KEY_INPUT_G] == 1 ) return GUU; if( Key[KEY_INPUT_T] == 1 ) return TYOKI...
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: 引数を減らす方法
返信数: 11
閲覧数: 6687

Re: 引数を減らす方法

すいません。まだよくわかりません。

>関数間のデータのやりとり
これは、どのようなことを指しているのですか?

>引数をつかいながらも必要としている引数を書かずに
矛盾しているように思います。そもそも関数に書かれていない引数を使うことは出来ません。
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: 引数を減らす方法
返信数: 11
閲覧数: 6687

Re: 引数を減らす方法

示されたコードでは、何が問題なのかよくわかりませんでした。
func1()は、int型変数を1個必要としているのでしょうし、func2()も同様です。
必要としている引数を書かないわけにはいきませんよね。

どのような結果を得たいのかもう少し具体的に教えてもらえませんか?
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: C言語のプログラム
返信数: 19
閲覧数: 7668

Re: C言語のプログラム

無限ループではないですけど、例えばこんな感じですかね。

コード:

// オリンピック開催年かどうか(year >= 2000を仮定)
int olympic(int year)
{
	int y = 2000;
	while (y <= year) {
		y += 2;
	}
	return y == year;
}
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: C言語のプログラム
返信数: 19
閲覧数: 7668

Re: C言語のプログラム

入力例として、
2011と入力した場合、2012と入力した場合とで、
それぞれ、どのような表示をしたいのか示してくれませんか?
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: qsortの使い方
返信数: 46
閲覧数: 8920

Re: qsortの使い方

LoadGraphScreenを呼び出して時点で、画像は描画されているので、
そのあとに、qsortを呼び出しても意味がありません。

プログラムは書いた順に実行されますから、
ソートして描画しなければ、値を初期化した後
・ソート
・描画
の順でプログラムを書かなければいけません。
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: qsortの使い方
返信数: 46
閲覧数: 8920

Re: qsortの使い方

次は、構造体を使った処理を考えましょう。 以下のプログラムでわからないところがあれば言ってください。 #include "DxLib.h" // 位置と画像をまとめた構造体を定義 typedef struct { int x: int y; int image; } TEST; int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow) { ChangeWindowMode(TRUE) ; if( DxLib_Init() == -1 ) { return -1; ...
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: qsortの使い方
返信数: 46
閲覧数: 8920

Re: qsortの使い方

こちらで、LoadGraphScreenとLoadGraphの違いを理解した上で読んでください。 http://dixq.net/g/01_03.html http://dixq.net/g/01_04.html ゲームを作るうえで、LoadGraphScreenという関数を使うことはほぼありません。 なので、私もLoadGraphを使って説明します。 まず、以下のプログラムは理解できますか? このプログラムが理解できないと話を進められないので、理解できないところがあれば言ってください。 戦闘機が、座標(0, 0)に、インベーダーが座標(50, 50)に描画されるはずです。 そして、ららら さ...
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: 簡単&お手軽C++入門サイト構築について [雑談]
返信数: 50
閲覧数: 15974

Re: 簡単&お手軽C++入門サイト構築について [雑談]

大変興味があります。

C++らしい入門サイトというのは、確かに少ないと思っていたので、大変よい試みだと思います。
私は、C++は割と得意なので、手伝えることがあったらぜひ参加したいです。

ただ、私は、サイト構築に関しては素人なのですが、
どのような形で、執筆をしていく予定なのでしょうか?
(wiki形式でメンバーが編集していく形になるんでしょうか)
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: ファイル分割の仕方
返信数: 6
閲覧数: 2002

Re: ファイル分割の仕方

以下のような、グローバル変数を使うプログラムを例として考えます。 【A.cpp】 #include <iostream> // みんなで共有する変数 int shared; // sharedの値をリセットする関数 void reset() { shared = 9999; } int main() { reset(); std::cout << shared << std::endl; shared = 100; std::cout << shared << std::endl; reset(); std::cout << shared << std::endl; } reset()という関...
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: DXライブラリでのウインドウ最大化について
返信数: 5
閲覧数: 5601

Re: DXライブラリでのウインドウ最大化について

ウインドウに最大化ボタンを付け、 そこを押すとウインドウのサイズが最大化する。 これだけなら、SetUseASyncChangeWindowModeFunctionのコールバック関数は特に必要ないと思います。 #include "DxLib.h" int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow) { // 「Alt+Enter」や、最大化ボタンによるフルスクリーン化を有効にする SetUseASyncChangeWindowModeFunction(TR...
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: テンプレートクラスを引数とした場合と戻り値の挙動
返信数: 7
閲覧数: 2257

Re: テンプレートクラスを引数とした場合と戻り値の挙動

答えになっていないかもしれませんが、 operator◇はoperator◇=を使って実装するのが一般的です。 operator+とoperator+=の実装例を示します。 template <class T> class Vector { public: Vector &operator+=(const Vector &other) { x += other.x; y += other.y; z += other.z; return *this; } Vector operator+(const Vector &other) const { Vector result(*this); res...
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: テンプレートクラスを引数とした場合と戻り値の挙動
返信数: 7
閲覧数: 2257

Re: テンプレートクラスを引数とした場合と戻り値の挙動

コンパイルエラーのメッセージがないので、確かなことはいえませんが、
Vector<T>::get_x()(y, zも)
がconstなメンバ関数でないのが原因だと予想します。
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: プログラムが勝手に終了してしまいます。
返信数: 2
閲覧数: 2602

Re: プログラムが勝手に終了してしまいます。

LoadDivGraphなどの読み込み処理は、メインループの前に一回だけ呼ぶようにしてください。
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: キーの連続入力について
返信数: 5
閲覧数: 2920

Re: キーの連続入力について

例えば、以下のような状態遷移で実現するのはどうでしょうか。 キャラクターは、[待機]、[攻撃1]、[攻撃2]という3つの状態間を遷移するものとします。 このとき、各状態における処理を以下のようにする。(数値は具体例) [待機]  ・'X'が押された → 攻撃1に遷移 [攻撃1]  ・攻撃1が始まってから、20フレーム以内に'X'が押された → 次の状態を攻撃2に変更  ・20フレームから40フレームの間 → 何もしない  ・40フレーム経過 → 次の状態(デフォルトでは待機、'X'が押されていたら攻撃2)に遷移 [攻撃2]  ・攻撃2が始まってから、60フレームの間 → 何もしない  ・60フ...
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: スコア表示
返信数: 5
閲覧数: 4160

Re: スコア表示

コード:

int score;
int digit[9];
があるとして、scoreの各桁の数字をdigitに入れる処理は書けますか?

例えば、score == 1192なら
digit[0] == 1
digit[1] == 1
digit[2] == 9
digit[3] == 2
  ・
  ・
残りはゼロ

といった具合です。

これができれば、おそらく目的は達成できると思います。
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: 時間測定プログラムについて
返信数: 3
閲覧数: 1678

Re: 時間測定プログラムについて

・34行目:全角スペースが混じっている
・53行目:sub_dhmsの戻り値の型がintなのに、return;となっていて値を返していない
・59、60行目:配列の変数宣言は、{}じゃなくて[]
・84、86、88、92行目:Sという変数は宣言されていない(sの間違いですか?)
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: CかC++でこんな関数ありますか?
返信数: 6
閲覧数: 3247

Re: CかC++でこんな関数ありますか?

C言語なら、strncpyを使うのがいいと思います。 #include <stdio.h> #include <string.h> int main(void) { const char *src = "#ABC#hoge#/ABC#"; const char *beg = src + 0; // "#ABC#"の位置 const char *end = src + 9; // "#/ABC#"の位置 /* beg, end が適切に求まっていると仮定して */ char buf[100]; // 取得先:適当な大きさを確保しておく // 間の文字列の開始位置 const char *mid ...
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: GetHitKeyStateAll について
返信数: 15
閲覧数: 6649

Re: GetHitKeyStateAll について

107行目を

コード:

while( ProcessMessage() == 0 && GetHitKeyStateAll_2( keybuf ) == 0){
に修正すれば、一応動くかと思います。
(このままだと、一回の計算しかできないとか、一番外側のループの意味がないとか、いろいろと問題はありますが)
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: SRPGにおける移動ルートの計算について
返信数: 2
閲覧数: 2265

Re: SRPGにおける移動ルートの計算について

>その場所を通る際の最大残り移動力
を計算するときに、「このマスを通るときの一個手前のマス」も保持しておけば、
カーソル位置から、逆順にたどることで経路を求めることができます。
これで、カーソルの動きに関係なく、移動範囲が決まれば、あるマスに行くため経路も決まることになります。

※この種の問題は、「最短経路問題」と呼ばれています。一度調べてみるといいでしょう。
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: UTF-8→SHIFT-JISへの変換について。
返信数: 6
閲覧数: 5753

Re: UTF-8→SHIFT-JISへの変換について。

"\xなんとか"で文字コードを16進数表記で直接表現できます。

コード:

char buf[] = "\xe3\x83\xa9\xe3\x83\xab\xe3\x82\xaf\xe3\x82\xa2\xe3\x83\xb3\xe3\x82\xb7\xe3\x82\xa8\xe3\x83\xab\xe3\x81\xaf\xe7\xa5\x9e";
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: スレッドへ修正の仕方
返信数: 4
閲覧数: 2890

Re: スレッドへ修正の仕方

以下のコードはどうでしょうか?

コード:

#include <boost/thread.hpp>
#include <boost/bind.hpp>

class Foo
{
public:
	void func() {/* 省略 */}
};

int main()
{
	Foo foo;
	boost::thread t(boost::bind(&Foo::func, &foo));	// foo.func()が別スレッドで呼ばれる
	t.join();
}
by a5ua
13年前
フォーラム: みんなでソースコードをレビューしよう
トピック: _tstofの代わりの関数
返信数: 5
閲覧数: 8413

Re: _tstofの代わりの関数

16桁までしか扱えないのが問題ではなく、配列の範囲外にアクセスしてしまうのが問題だという指摘でした。 以下のプログラムで、_tcslen(buf)が17だとすると、 x[16]にアクセスしてしまうので、別のメモリ領域の値を破壊してしまう可能性があります。 //符号を取り除く if(buf[0] == '+' || buf[0] == '-'){ hugo = buf[0]; for(int k=0;k<(int)_tcslen(buf);k++){ x[k] = buf[k+1]; } } 設計の好みの問題ではありますが、 my_tstofの仕様として、 「文字列をdoubleに変換する」 た...
by a5ua
13年前
フォーラム: みんなでソースコードをレビューしよう
トピック: _tstofの代わりの関数
返信数: 5
閲覧数: 8413

Re: _tstofの代わりの関数

いくつかの気づいた点を、重要度の高そうな順に並べてみます
  • 16桁を超える入力があると、範囲外アクセスが生じる
  • my_tstofの引数は、const TCHAR buf[]とするべき
  • "0.2"など、先頭に符号がない場合、エラーになる
  • "-5"などの整数表現に対して、正しい結果が得られない
  • " -2.5"など、先頭に空白があるとエラーになる
  • ".1"や"5e-2"などへの対応(これはなくてもいい気がする)
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: ヒープとスタックメモリの違いについて
返信数: 4
閲覧数: 2750

Re: ヒープとスタックメモリの違いについて

実行ファイルに埋め込まれるのは、静的(static)変数です。(auto変数や、malloc等による確保は実行時に動的に行われます)
C言語では、ローカル変数にstaticをつけた変数が静的変数となります。
by a5ua
13年前
フォーラム: サンプルを共有するコミュニティ
トピック: Raw Input API による複数キーボードの認識
返信数: 1
閲覧数: 6878

Re: Raw Input API による複数キーボードの認識

上で示したサンプルコードには、 「ウインドウが一度フォーカスを失うと、二度と入力を受け付けなくなる」 というバグがありました。 【解決策】 ・DXライブラリで入力処理にDirectInputを使わない設定にします。 UseDxLibrary() { ChangeWindowMode(TRUE); SetUseDirectInputFlag(FALSE); // これ SetMainWindowText("Raw Input API のサンプル"); if (DxLib_Init() != 0) { throw std::exception("DXライブラリの初期化に失敗"); } SetDra...
by a5ua
13年前
フォーラム: 数学やらないか?
トピック: 好きな数学の問題
返信数: 28
閲覧数: 19096

Re: 好きな数学の問題

αn + βn = 6t (t∈R) とおくと・・・(以下略
なら、ぎりぎりセーフ、か?
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: 変な形の物体の描画,当たり判定について
返信数: 1
閲覧数: 1541

Re: 変な形の物体の描画,当たり判定について

複数の線分で地面を構成するのはどうでしょうか。この場合、線分同士の当たり判定が必要になります。
(例)
      ↑
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\
矢印は補正方向      \↗
(線分の法線として得られる) \

以下のページなども参考になるかと思います。
http://hakuhin.jp/as/collide.html#COLLIDE_02
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: 放物線
返信数: 5
閲覧数: 3254

Re: 放物線

参考までに、ヒントになりそうなコードをC言語で示します。 #include <stdio.h> int main(void) { int t; // 時間 int x; // 座標 int v; // 移動量 x = 0; // 初期位置を設定する /* (1) 初期移動量を設定する */ // 初期値を表示する printf("%d %d %d\n", t, x, v); for (t = 0; t <= 10; t++) { // 座標を更新する x += v; /* (2) vを変化させる */ /* (3) 必要に応じて、x, vを補正する*/ // 現在の値を表示する printf(...
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: listの処理 大富豪製作
返信数: 2
閲覧数: 4888

Re: listの処理 大富豪製作

72行目の
player[NowBa.turn].tehuda.erase(it);

it = player[NowBa.turn].tehuda.erase(it);
としたらどうでしょうか。
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: 二次元配列を戻り値にしたい
返信数: 14
閲覧数: 11665

Re: 二次元配列を戻り値にしたい

配列の要素数が固定なら、以下のようにしてもいいと思います。 #include <iostream> using namespace std; class CSample { public: CSample(){} // const int [3][5]への参照を返す const int (&GetArray())[3][5]{ return array; } private: int array[3][5]; }; // const int [3][5]への参照を受け取る void PrintArray(const int (&array)[3][5]) { for(int i = 0; i ...
by a5ua
13年前
フォーラム: サンプルを共有するコミュニティ
トピック: Raw Input API による複数キーボードの認識
返信数: 1
閲覧数: 6878

Raw Input API による複数キーボードの認識

通常、キーボードはいくつ接続しても、1つとして認識されてしまいます。 Raw Input API を使うと、その名の通り、接続されているデバイスから“生”の入力を取得することができます。 当然、マウスやキーボードもそのデバイスに含まれます。 ただし、Raw Input API を使用できるのは、Windows XP 以降のようです。 今回は、Raw Input API を使って、2つ以上のキーボードからの入力を別々に扱う方法を、簡単なサンプルとともに説明します。 言語は、C++を用いるので、RawInputというクラスとして設計したいと思います。 ちなみに、描画部分にはDXライブラリを利用して...
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: アーカイブデータの読み込み
返信数: 10
閲覧数: 3922

Re: アーカイブデータの読み込み

CSVファイルの編集に使うソフトを変えてみるのはどうでしょう?
以下のソフトなどを試してみてはどうですか?

窓の杜 - 表計算やマクロ機能を備えるCSVエディター「Cassava Editor」
http://www.forest.impress.co.jp/article ... ditor.html
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: 道案内プログラムについて
返信数: 7
閲覧数: 2707

Re: 道案内プログラムについて

問題を小分けにして、それを関数として作ってやれば考えやすくなるかもしれません。
一例を挙げておきます。

コード:

// idをもとに交差点情報を見つける関数
Crossing *find_crossing(int id);

// 交差点aと交差点bの距離を返す関数
double distance(Crossing *a, Crossing *b);
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: リスト構造を用いたキューを実現するプログラム C言語
返信数: 3
閲覧数: 4867

Re: リスト構造を用いたキューを実現するプログラム C言語

qは削除対象のノード、rはその1つ前のノードを表していると思いますが、 r=&head; これは、型が違います。 r=head; とすべきでしょう。 if(r == NULL) printf("empty\n"); return -1; これでは、常にreturn -1;が実行されますが、意図した動作ですか? また、Del_List関数の型はvoidなので、return文を書くときは、 return; とだけ書けばよいです。 r->next = NULL; これでは、r以降のノードが全て消えたように見えてしまいます。 削除対象の1つ後ろのノードを指定しましょう。 また、削除対象が見つからなかっ...
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: ポインタについて教えてください
返信数: 3
閲覧数: 1752

Re: ポインタについて教えてください

getdate()の結果は、実体へのポインタなので、ポインタが指す値を取得する場合は、
*getdate()とします。

コード:

void Wrapper(int *pw, int type)
{
    if( type == 0)
    {
        *pw = *getdate();
    }
    else if( type == 1)
    {
        setdate(pw);
    } 
}
余談ですが、dateではなくdataではないですか?
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: リスト構造を用いたマージソートについて
返信数: 2
閲覧数: 3974

Re: リスト構造を用いたマージソートについて

mergesort関数内の16行目で,その関数内ではsortedにlistの値が束縛されるのですが, returnで戻って,一つ前の再帰に戻ると引数として与えたはずのlist1,list2に値が入っていません. sortedは、mergeSort関数内でのローカル変数なので、その値を関数内でいくら変更しても呼び出し元では変化しません。 mergeSort(list, sorted); // ポインタの値がコピーが渡されている。 ポインタの値の書き換えを呼び出し元に反映させるのなら、以下のようにしなければならないでしょう。 void mergeSort ( struct cell *list ...
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: メモリ使用量が大きくなる原因
返信数: 6
閲覧数: 3495

Re: メモリ使用量が大きくなる原因

これだけのプログラムでは、原因は特定できません。
現象を再現できるプログラム全体を記載したほうが、回答を得られやすいと思います。
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: sizeofについて
返信数: 2
閲覧数: 1144

Re: sizeofについて

sizeofで得られるサイズとは、その変数が使用しているメモリ領域のサイズです。
したがって上記プログラムでは、sizeof(iArray)の値は、21という定数になります。
文字列の長さを取得したいのでしたら、strlenなどの標準ライブラリ関数を使うといいでしょう。
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: バウンドについて、
返信数: 29
閲覧数: 10217

Re: バウンドについて、

時間を入力するということは、(入力した時間をtとすると)投げてからt秒後までに
何回バウンドしたかを求めるのではないですか?
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: 2次元配列
返信数: 4
閲覧数: 2110

Re: 2次元配列

gyaku(a [j]); ここで、a [j]はdouble型であり void gyaku(double a[2][2]) { ここでは、aはdouble[][2]型です。 関数の引数の型と、実際に渡す値の型違うのでエラーが出ています。 エラーが出ないようにするには、 gyaku(a); のように呼び出します。 また、それだけでは求める結果が得られないと思いますので、ヒントとなるコードを乗せておきます。 void gyaku(double a[2][2], double b[2][2]) { /* bにaの逆行列の値を入れる処理 */ } int main(void) { double a[...
by a5ua
13年前
フォーラム: サンプルを共有するコミュニティ
トピック: 文字コードの相互変換
返信数: 0
閲覧数: 6779

文字コードの相互変換

コミュニティに参加したので、とりあえず書いてみるよ! マルチバイト文字(Shift-JIS, UTF-8)とUnicode文字(VC++だとUTF-16なのかな?)の相互変換を行う関数群です。 C++用なので、std::stringまたはstd::wstringを用いています。 #include <windows.h> #include <string> // MultiByteToWideChar()のC++用ラッパ関数 std::wstring mbcs_to_wcs(const std::string &source, DWORD code_page) { int required_si...
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: fread()関数がバイナリファイルを正しく読み込んでくれません
返信数: 13
閲覧数: 9473

Re: fread()関数がバイナリファイルを正しく読み込んでくれません

面倒でも、1メンバずつ読み込むのがいいと思います。 i = 0; while (fread(&evnt[i].delta_time, sizeof(evnt[i].delta_time), 1, fin) == 1 && fread(&evnt[i].event_data, sizeof(evnt[i].event_data), 1, fin) == 1 ) { i++; } 追記:以下は勘違いでした。 それとは別に、SIZE_OF_EVENTの使用意図が、よくわかりません。 evnt = (NTSEVENT *)calloc(4,SIZE_OF_EVENT); この行では、NTSEVENTの...
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: Dijkstra法を用いた最短経路問題
返信数: 4
閲覧数: 2350

Re: Dijkstra法を用いた最短経路問題

考え方はそれで合っていますよ。

確定点も含めて更新処理を行っても、確定点のコストが変わることはありません。
(確定点から行って戻ってくるような経路を考えることになる)
そうしないと、「確定」の意味がありませんよね。

ですから、更新処理の対象に確定点が含まれていても、問題はありません。
更新処理の対象から確定点を除くかどうかは、(効率面など)各人の判断で決めればいいでしょう。
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: [ハンドルされていない例外が発生しました]とエラーが出る
返信数: 4
閲覧数: 6287

Re: [ハンドルされていない例外が発生しました]とエラーが出る

エラーを再現できるコード全体がないと、なんとも言えないですが、 推測だけで答えると、CBossのメンバgameの値が入っていないのではないでしょうか? CBossがCGameのオブジェクトを参照するためには、少なくとも以下のようなコードが必要になると思われます。 class CGame{/* 略 */}; class CBoss { CGame *game; public: void SetGame(CGame *g) { game = g; } }; // どこかの関数 void func() { CGame game; CBoss boss; boss.SetGame(&game); } ...
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: Dijkstra法を用いた最短経路問題
返信数: 4
閲覧数: 2350

Re: Dijkstra法を用いた最短経路問題

以下のページは参考になりませんか?
http://www.deqnotes.net/acmicpc/dijkstra/

始点のノードが、コスト0で最初に確定するのは大丈夫ですよね。

それ以外のノードについては、
更新処理が終了したとき、未確定ノードのうち、最小のコストとなっているノードが確定ノードとなります。
なぜなら、そのようにして選んだノードは、確定ノード(すなわち、最小のコストで進んできたノード)から
最小のコストで到達できるノードだからです。
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: 整数a1,a2,a3,a4,...からn個選んで足すと値kになるかどうかの判定
返信数: 10
閲覧数: 3438

Re: 整数a1,a2,a3,a4,...からn個選んで足すと値kになるかどうかの判定

整数a1,a2,a3,a4,...からn個選んで足すと値kになるかどうかを判定する とありますが、プログラムを見る限り、これは、 整数a1,a2,a3,a4,...から n個以下 の数字を選んで足すと値kになるかどうかを判定する プログラムだと思います。 本題ですが、dfsという名の通り「深さ優先探索 (depth-first search)」という考え方を身につける必要があります。 今回の問題では、「i番目に注目していて、今までの合計がsumになっている」という状況を1つの状態とします。 そうすると、初期状態は、「0番目に注目していて、合計が0」という状態になります。これを、(0, 0)と...
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: 情報オリンピック予選 問題4
返信数: 4
閲覧数: 2287

Re: 情報オリンピック予選 問題4

31行目の再帰関数呼び出しの初期値は、先頭の数字にしないとダメじゃないですか?

コード:

count=kazoe(suuzi,1,suuzi[0],kosuu);       /*式の種類を数える*/
あと、関係ないですが、33行目のfreeは不要だと思います。
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: ボンバーマン風ゲームの当たり判定について
返信数: 7
閲覧数: 2904

Re: ボンバーマン風ゲームの当たり判定について

滑る処理の補正座標を、次のブロックの位置までに制限すればいいのではないでしょうか?
合ってるかわかりませんが、以下のような感じです。

コード:

*y = min(*y + speed, y2 * 32); // 最大でも隣のブロックまでしか移動しない
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: ボンバーマン風ゲームの当たり判定について
返信数: 7
閲覧数: 2904

Re: ボンバーマン風ゲームの当たり判定について

滑る処理のときは、speedを1にするというのはどうでしょうか?
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: 条件式の簡略化
返信数: 7
閲覧数: 3753

Re: 条件式の簡略化

条件式が3つ程度なら、そのまま書きますね 無理にまとめようとすると、こんな感じかな int judge(int a, const int cond[], int n) { int i; for (i = 0; i < n; ++i) { if (a == cond[i]) { return 0; } } return 1; } int main(void) { int a = 4; int cond[] = {1, 3, 5}; if (judge(a, cond, 3)) { // do something } return 0; } b, c, dに相当する値を配列に格納して、ループを使っ...
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: 与えられた複数の文字列からオートマトンを自動生成したい
返信数: 9
閲覧数: 4103

Re: 与えられた複数の文字列からオートマトンを自動生成したい

「長い文字列を先頭から1文字ずつ読み、複数あるターゲット文字列のいずれかに一致したら、その文字列を表示する。」 という解釈で良いでしょうか。 次のようなアルゴリズムを考えてみましたが、いかがでしょうか? 0. 先頭の文字に注目する。 1. 注目位置が終端だったら終了。 2. 注目文字がターゲットの1文字目と一致したら、探索候補に追加する。 3. それぞれの探索候補に対して、不一致が起こったら、候補から除外する。最後まで一致していたら、その候補を表示した上で、候補から除外する。 4. 注目位置を1つ進めて、1.に戻る。 以下に具体例を示します。 見つけたい文字列を「acccad, ccc」としま...
by a5ua
13年前
フォーラム: C言語何でも質問掲示板
トピック: 与えられた複数の文字列からオートマトンを自動生成したい
返信数: 9
閲覧数: 4103

Re: 与えられた複数の文字列からオートマトンを自動生成したい

具体的にどのような処理をしたいのか、質問文からは良くわかりません。
>pjp,php,abcc,ccad、、、
>という複数の単語を、長い文字列から見つけ出す。
これだけだと、その長い文字列から、pjpを探す→phpを探す→...という処理をするように見えます。

詳細検索ページへ移動する