検索結果 21 件

by yoko
3年前
フォーラム: C言語何でも質問掲示板
トピック: メルセンヌ・ツイスタを使用した乱数をファイルに出力
返信数: 34
閲覧数: 3126

Re: メルセンヌ・ツイスタを使用した乱数をファイルに出力

fputsの使い方が間違っています。
というか、この書式で出力したいのならfputsを使うべきではありません。

書き換えるならfprintfを使用して

コード:

fprintf(fp,"%ld\n",genrand_int32());
となります。

※MT.hの内容が書かれていないので、プログラムで使用する関数がMT.hに定義されているものと想定して書いています。
 また、プログラムを実際に実行していないのでまだバグ等あるかもしれません。
by yoko
3年前
フォーラム: C言語何でも質問掲示板
トピック: オセロの反転の考え方について
返信数: 11
閲覧数: 1953

Re: オセロの反転の考え方について

返信遅くなりました。 バグの原因はここではないかというのは分かりましたが、 プログラムをもう一度全体的に見直すと 修正箇所、改善箇所がありましたので、 修正したプログラムを載せます。 ※時間がなかったため、一部しか修正していません。  また、盤面探索、反転のところ以外の機能(勝者判定等)については  未実装(未修整)です。  おそらく作成済みと思いますので、そちらと合体させてください。 修正箇所についてはコメントにて記載しています。 /**/でかかれたコメント部分が該当箇所(もともとのコメントと区別するため)です。 ※コードタグで囲んでいますが、BBCodeの仕様なのか、#defineのコメン...
by yoko
3年前
フォーラム: C言語何でも質問掲示板
トピック: オセロの反転の考え方について
返信数: 11
閲覧数: 1953

Re: オセロの反転の考え方について

追記です

終了判定が間違っていると思われます。
終了判定は以下のようになります
・8×8の64マスなので、白の数+黒の数≧64のとき終了
・片方がパスのとき、もう片方もパスの場合
・石の色が一色になった場合

これを踏まえて修正するとプログラムは完成すると思います。

※プログラムは自分で何回か試してみてバグがあるかなどを探すと自分で改善点見つけられますよ
by yoko
3年前
フォーラム: C言語何でも質問掲示板
トピック: オセロの反転の考え方について
返信数: 11
閲覧数: 1953

Re: オセロの反転の考え方について

1つだけバグがありました。
どこにも置けません
の場合、パスされて次のターンへ移るのですが、
その際に置ける場所に置いても
そこには置けません
と表示され、
再度入力のときは問題ないのですが。

プログラムを細かく見ていませんが、
どこにも置けません
のときに、ターンが移ったあとの
盤面の状態が表示されなかったので、
そこらへんを見るといいかもしれません。
by yoko
3年前
フォーラム: C言語何でも質問掲示板
トピック: オセロの反転の考え方について
返信数: 11
閲覧数: 1953

Re: オセロの反転の考え方について

斜めについて、特段難しくはありません。
右上の場合は、右と上の反転を合成すればいいだけなので。

例えば、
上の反転の処理が

コード:

for(上;上;上){
    //処理
}
で、右の反転の処理が

コード:

for(右;右;右){
    //処理
}
の場合、
右上は

コード:

for(上,右;上,右;上,右){
    //処理
}
と書けばいいのです。
当然、処理のところは右上になるように変更する必要はありますが。

カンマ演算子は知っているとは思いますが、一応簡単に説明すると、

コード:

処理1,処理2;
と書かれていたら、
処理1が終わった後に処理2を行う
という意味になります。
by yoko
3年前
フォーラム: C言語何でも質問掲示板
トピック: オセロの反転の考え方について
返信数: 11
閲覧数: 1953

Re: オセロの反転の考え方について

反転の前に Check_stone関数に // ☆を初期化 } else if (field[j][i] == PUTOK){ field[j][i] = EMPTY; } とありますが、 これだと 白が置く番ではPUTOKだったけど、 白が別の場所に置いて黒の番になったときに 黒がPUTOK という場合に対応できません。 改善策としては、 盤面検索の前に先に全てのPUTOKをEMPTYに変更してから盤面検索を行うと確実です。 また、今のままだと正しい石探しが出来ていません。 例えば、右を見ているときに、 for (x = 0; x<8; x++){ if (field[x][i] == tu...
by yoko
3年前
フォーラム: C言語何でも質問掲示板
トピック: オセロの反転の考え方について
返信数: 11
閲覧数: 1953

Re: オセロの反転の考え方について

考え方という点でいうと、 場所の特定は逆で、 空白マス発見→ 周囲8マスに自色と異なる色がある→ 色のある方向を調べ、自色が出てきたら置ける、壁または空白マスの場合は置けない これを全部のマスで行えばおける場所の特定ができ、 反転は場所の特定を応用して、 周囲8マスを1マスずつ調べていき、 反転可能な方向(異なる色の直後に自色がある)場合は、 自色が出てくるまで異なる色の個所を自色に変える とすればできます。 プログラムを少しだけ見ましたが、 黒、白の値は1と-1にしたほうが反転のときに-1を掛けるだけで済むので楽です。 今のやり方だと反転のときに黒と白別々に処理を書かなければいけなそうでした...
by yoko
3年前
フォーラム: C言語何でも質問掲示板
トピック: ファイル書き込みの上書きについて
返信数: 6
閲覧数: 1320

Re: ファイル書き込みの上書きについて

かずまさん

返信ありがとうございます。
strchr関数を初めて知りました。
これを使うほうが完結に書けますね。

かずまさんのを使用させていただきます。

ありがとうございました。
by yoko
3年前
フォーラム: C言語何でも質問掲示板
トピック: ファイル書き込みの上書きについて
返信数: 6
閲覧数: 1320

Re: ファイル書き込みの上書きについて

かずま さんが書きました: fclose(fp_r) が while(1) の中で 1回以上、while(1) の後で 1回の
合わせて 2回以上呼ばれています。
fclose(fp_r); を while(1) の前にひとつだけ置くようにしてみてください。
返信ありがとうございます。
while(1)の前にのみfcloseを書くことで解決しました。
※while(1)の前がif分のため、対応するelse文の後にもfclose書きました。
ありがとうござました。

とりあえず正常に動きましたので、
簡潔にするのほうは無しにして、解決とさせていただきます。
by yoko
3年前
フォーラム: C言語何でも質問掲示板
トピック: ファイル書き込みの上書きについて
返信数: 6
閲覧数: 1320

Re: ファイル書き込みの上書きについて

box さんが書きました:個人的な感想です。
file_write.c
の処理内容が仰々しいような感じがします。もっと単純にできるように思います。
boxさん
おっしゃる通り、簡素化できないかとも思いましたが
今の私の知識ではこれが精いっぱいです。
※YNの処理を正しく行うため試行錯誤した結果です。

最初の質問とは異なりますが、簡素化の方法ヒントのみでかまいませんので、
何かありますでしょうか。
by yoko
3年前
フォーラム: C言語何でも質問掲示板
トピック: ファイル書き込みの上書きについて
返信数: 6
閲覧数: 1320

ファイル書き込みの上書きについて

久々の質問です。 ファイル出力において、既存のファイルを上書きしようとすると、エラーが出て上書きされません。 新規ファイルの場合は正しく出力されます。 原因わかりましたら教えてください。 情報の過不足ありましたら、提示いたしますので、返信ください。 環境 c言語 VS2015 win8.1update 以下コードです。 //bat.c #include <stdio.h> #include <stdlib.h> #include <string.h> #include "bat.h" int main(void) { FILE *fp_w; fp_w=file_make(); file_wri...
by yoko
4年前
フォーラム: C言語何でも質問掲示板
トピック: ホップフィールドネットワークについて
返信数: 1
閲覧数: 2165

Re: ホップフィールドネットワークについて

このプログラムだと、 エネルギー関数の計算はいらないと思います。 http://www-ailab.elcom.nitech.ac.jp/lecture/neuro/hop3.html にある通り、 エネルギー関数を最小にする結合荷重の計算をプログラムで行っているからです。 また、プログラムは実行していませんが、 http://www-ailab.elcom.nitech.ac.jp/lecture/neuro/hop2.html にあるとおり、 記憶できる数が大体ニューロンユニット数×0.15なので、 ニューロン数が13は無いと想起できないので、 ニューロン数を増やす必要があると思います。 ...
by yoko
4年前
フォーラム: C言語何でも質問掲示板
トピック: ポインタについての質問
返信数: 5
閲覧数: 570

Re: ポインタについての質問

そもそもreturn文の使い方が間違っています。 Cではreturn文では1つしか値を返すことができません。 ポインタで値を関数に渡した場合は 返却値で返す必要はありません。 修正するなら /*関数*/ void tasihiki(int c, int d, int *W, int *S){ *W = c+d; *S = c-d; //return (c, d, *W, *S); //. . .(1) ←削除してよい } となります。 関数で使用する void や int についてあまり理解できていません。 とのことですが、 簡単な話、 return文で返ってくる値の型が何であるかというだけで...
by yoko
4年前
フォーラム: C言語何でも質問掲示板
トピック: scanfで複数(具体的な数は不明)の文字列を入力し、処理するプログラムはどう作ればよいのですか?
返信数: 5
閲覧数: 2828

Re: scanfで複数(具体的な数は不明)の文字列を入力し、処理するプログラムはどう作ればよいのですか?

よくあるのが、
do whileでループし、特定の値が入力されたら入力を終了するというのがあります。

コード:

do{
     scanf("%s",変数)
}while(変数==終了値);
どのタイミングで関数を呼ぶのかわかりませんが、
入力がすべて完了した後の場合は文字列の配列(char[][])に値を代入させ、
入力直後に毎回関数を呼ぶ場合は文字列の変数(char[])に代入させればいいと思います。


※言語の指定がなかったため、C言語であると想定して回答しています。
by yoko
4年前
フォーラム: C言語何でも質問掲示板
トピック: 数独を解くプログラム2
返信数: 25
閲覧数: 3057

Re: 数独を解くプログラム2

>プログラムは自分で考えたい気持ちの方が強いので、 >できればある程度プログラムが完成してからアップして欲しいです。 ご要望あり次第アップいたしますので、その際はご連絡ください。 なお、私のプログラムのアルゴリズムは下記の本を参考にしています。 また、DXライブラリでの作成となります。 鉛筆パズルゲームプログラミング ナンバープレース・お絵かきパズル・ナンバークロスワードのアルゴリズム たいちろうさんが書かれている通り、バックトラックの部分は人間らしくないのはその通りです。 そのために >7.は難しい問題のときに起こりますので、そこも理詰めで解きたい場合は >高度な解法を実装することになります...
by yoko
4年前
フォーラム: C言語何でも質問掲示板
トピック: 数独を解くプログラム2
返信数: 25
閲覧数: 3057

Re: 数独を解くプログラム2

自分も数独のプログラムは作成したことがありますが、 次のように作りました。 1.問題読み込み 2.取り合えす空白部分にすべての数字のフラグを立てる 3.空白マスを上から順に見ていき、縦、横、同じブロック(3×3)にある数字をフラグから消去 4.フラグが1つしかないマスは確定 5.縦、横、同じブロックでフラグが1つしかない数字はその箇所を確定 6.3.に戻る 7.埋まらない場合はバックトラックで解く 7.は難しい問題のときに起こりますので、そこも理詰めで解きたい場合は 高度な解法を実装することになります。詳しくは検索してみてください。 現在プログラムをアップできないのですが、必要とあればアップい...
by yoko
6年前
フォーラム: C言語何でも質問掲示板
トピック: scanf関数について
返信数: 4
閲覧数: 474

Re: scanf関数について

1 2
の入力の場合は
scanf("%d%d", &x, &y);
とする必要があります。

scanf("%d,%d", &x, &y);
では、他の方が回答されている通り、
間に,を入れる
つまり
1,2
でないと正しく動作しません。
by yoko
7年前
フォーラム: C言語何でも質問掲示板
トピック: 基本情報技術者試験
返信数: 8
閲覧数: 774

Re: 基本情報技術者試験

勉強時間について書いていませんでしたが、何時間勉強したかは覚えていません。 通学時間が2時間あったため、その間でかなり勉強できていたとは思います。 また、大学が情報系だったため、授業で習った範囲と重なる部分もあり、 まったく情報系のことを知らない人よりか勉強時間というのは短いのではないかと思いました。 ですので、あくまで推測ですが基本情報のための勉強ということに絞ると70~100時間くらいではないかと思います。 なお、勉強に関しては午前についてがほとんどで、午後のための勉強というのは特に行ってはいませんでした。 強いて言うなら受験前から自己研鑽のためにC言語の勉強はしていましたが。 自分の勉強...
by yoko
7年前
フォーラム: C言語何でも質問掲示板
トピック: 基本情報技術者試験
返信数: 8
閲覧数: 774

Re: 基本情報技術者試験

私は基本情報技術者試験を取得していますが、午前の問題については過去問を解くだけで6割は取れると思います。 というのも、それなりの割合で過去問とまったく同じ問題(選択肢の順番も一緒)が出題されるからです。 それ以外の問題でも、過去問に似た問題や過去問を解いていれば自然とわかる問題がほとんどです。 以下に午前の過去問が解くことのできるサイトを挙げます。 一夜漬け 情報処理技術者試験 また、あえて参考書を挙げるとすれば午前に関してのみですが 平成24年度 イメージ&クレバー方式でよくわかる 栢木先生の基本情報技術者教室 (情報処理技術者試験) になります。 この本はクレーバー方式といって、 ~とくれ...
by yoko
7年前
フォーラム: C言語何でも質問掲示板
トピック: 新ANSI C言語辞典 に代わる本
返信数: 6
閲覧数: 2336

Re: 新ANSI C言語辞典 に代わる本

新ANSI C言語辞典に代わる本ということであれば
softya(ソフト屋) さんの回答にある本でいいと思いますが、
amazonやBOOKOFFで中古ではありますが新ANSI C言語辞典が売っていますので、
新品にこだわらなければそちらで買ってみてはいかがでしょうか?
以下にリンクを貼っておきます。

amazon
BOOKOFF
by yoko
8年前
フォーラム: C言語何でも質問掲示板
トピック: アドレスを用いた数値の入れ替え
返信数: 8
閲覧数: 2050

Re: アドレスを用いた数値の入れ替え

見た限り最初のソースで正解です。
問題の意味は、
値そのものだけ値を交換しているのではなく、
アドレスを交換することにより値を交換しています。
仮にp_aのアドレスを10番地、p_bのアドレスを20番地とすると、
値そのものだけ値を交換の場合は
交換前
p_a:10番地→100
p_b:20番地→200
交換後
p_a:10番地→200
p_b:20番地→100
一方、
アドレスを交換の場合は
交換前
p_a:10番地→100
p_b:20番地→200
交換後
p_a:20番地→200
p_b:10番地→100
となります。

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