検索結果 149 件

by maru
8年前
フォーラム: C言語何でも質問掲示板
トピック: プログラムの結果がnanになってしまいます。
返信数: 31
閲覧数: 7909

Re: プログラムの結果がnanになってしまいます。

いいかげんに誰か指摘してもいいように思うんですが... "="は代入ですので     if(k = 1)         r = x;     else if(k = 2)         r = y;     else         r = z; 上記コードは K=1 を判定し、その結果、真であるので常に r = x を実行します。 やりたいことは k の値を判定し、1, 2, その他で r に代入する変数を変えたいのだと思いますが、 それなら k = 1, k = 2 ではなく k == 1, k == 2 としなければなりません。     if(k == 1)         r = ...
by maru
8年前
フォーラム: C言語何でも質問掲示板
トピック: 指数を含むファイルの読み込み
返信数: 7
閲覧数: 1754

Re: 指数を含むファイルの読み込み

median さんが書きました:以下のプログラムでは指数部分の値が-0.000028として扱われてしまい、正しい値が出力されませんでした。

手元の関数電卓で計算した値は
-0.1423583082
となります。(計算ミスがなければですが(汗))
わたくしの手計算では -0.12385567455 でプログラムでは

コード:

-0.012965
-0.0169599
-0.0388837
-0.0139194
-0.0131285
-0.0270204
0
0
-2.75706e-005
-0.000951184
test = -0.123856
と表示されましたよ。特にプログラムが間違っているようには思えません。
by maru
8年前
フォーラム: C言語何でも質問掲示板
トピック: C++ クラス(というか関数)の初歩なのですが・・・
返信数: 33
閲覧数: 2187

Re: C++ クラス(というか関数)の初歩なのですが・・・

あと、 関数名や変数名などの識別子は _ で開始しないようにしましょう。
int _a; /* 推奨されない */
こんな癖があるようなら、早く治しましょう。
by maru
8年前
フォーラム: C言語何でも質問掲示板
トピック: ファイルの読み込み
返信数: 5
閲覧数: 390

Re: ファイルの読み込み

これが課題だとすると、自分の力でやっていないことががすぐにばれると思いますので、お気をつけください。 というか、もろに課題って書いてありましたね。失礼しました。 入出力ストリームは理解しているようですので、データの入れものを準備しておいて、それにストリームを使って順次データを入れてあげればいいだけです。ファイルは2行で1単位となっていることも理解していますね。この2行分のデータを1単位のデータの塊と考えて、その塊(例ではクラスにしていますが、構造体でもいいです。)単位で処理を繰り返せば完成です。次は2行単位でファイルからデータをその塊に入れる処理を作成します。 考え方は以上です。例ではこの処...
by maru
8年前
フォーラム: C言語何でも質問掲示板
トピック: C++ クラス(というか関数)の初歩なのですが・・・
返信数: 33
閲覧数: 2187

Re: C++ クラス(というか関数)の初歩なのですが・・・

int a; int SetA(100); printf(%d,SetA); とあんまり変わらないじゃん と思ってしまいます(これは私がクラスという概念をよくわかってないのが悪いのですが・・・) それ、むちゃくちゃ文法的に出鱈目ですよ。 混乱させるようで申し訳ありませんが、このソースは文法的にも正しく、問題なく実行でき、さらに(間違った解釈でしょうが、多分ベルさんが意図しているように)正しく100が出力されます。 C++では 型 変数名(初期値); の書式でオブジェクトの初期化宣言が可能です。初期値の型は変数の型と一致している必要はなく、その型に変換できるものであれば何でも構いません。 つま...
by maru
8年前
フォーラム: C言語何でも質問掲示板
トピック: ファイルの読み込み
返信数: 5
閲覧数: 390

Re: ファイルの読み込み

#include <cstdio> #include <iostream> #include <fstream> #include <vector> #include <algorithm> using namespace std; const size_t MaxNumberOfCity = 17; class CCityInfo { private: string m_name; // 空港の3レターコード? double m_data1; double m_data2; char m_data3; void input(istream& is) { char szBuffer[128]...
by maru
8年前
フォーラム: C言語何でも質問掲示板
トピック: グローバル変数
返信数: 7
閲覧数: 538

Re: グローバル変数

重要なことを忘れていました。 このような場合、何も考えずにできる手法として、 1.グローバル変数をmain関数内に移動する。 2.コンパイルする(グローバル変数を使っている関数でエラーが発生) 3.エラーが発生した関数定義の仮引数にグローバル変数と同じ型、名前を追加。 4.コンパイルする(変更した関数の呼び出しでエラー発生) 5.エラーが発生した関数呼び出しに実引数を追加(元のグローバル変数名) 6.コンパイル(エラーが発生したら、3へ、発生しなければ終了) という手が使えることがありますが、あまり推奨はいたしません。 ちゃんと設計すべきです(でも設計しても結果は同じような気が...)。 上記...
by maru
8年前
フォーラム: C言語何でも質問掲示板
トピック: クラスを分割コンパイルするには
返信数: 3
閲覧数: 9879

Re: クラスを分割コンパイルするには

関数の定義をヘッダファイルに書いてはいけないことはC言語でも同じです。 どうしてもヘッダファイルに書きたい場合はinline をつけるか、クラスの定義に宣言と同時に定義してしまうことです。 普通は関数はcppファイルに書きます。 // test.h class Test { private: int a, b; public: //コンストラクタ Test() : a(10), b(20) {};// クラス定義内で関数を定義 Test(int a_, int b_) ; // 引数付コンストラクタの宣言 int show(); }; // 引数付コンストラクタをヘッダファイルで関数を定義 i...
by maru
8年前
フォーラム: C言語何でも質問掲示板
トピック: テキストファイルの同じ行どおしの足し算
返信数: 5
閲覧数: 1367

Re: テキストファイルの同じ行どおしの足し算

plus.cpp:2:19: tchar.h: そのようなファイルやディレクトリはありません Windows用のヘッダファイルを指定してしまいました。 <ctype>か<ctype.h>に変えてみてください。 plus.cpp: function 内の `int main()': アナログーさんの環境ではmain()で通るのでしたら、intを取ってきてください。 plus.cpp:47: error: no matching function for call to `std::basic_ifstream<char, std::char_traits<char> >::basic_ifst...
by maru
8年前
フォーラム: C言語何でも質問掲示板
トピック: グローバル変数
返信数: 7
閲覧数: 538

Re: グローバル変数

このような場合、何も考えずにできる手法として、 1.グローバル変数をmain関数内に移動する。 2.コンパイルする(グローバル変数を使っている関数でエラーが発生) 3.エラーが発生した関数定義の仮引数にグローバル変数と同じ型、名前を追加。 4.コンパイルする(変更した関数の呼び出しでエラー発生) 5.エラーが発生した関数呼び出しに実引数を追加(元のグローバル変数名) 6.コンパイル(エラーが発生したら、3へ、発生しなければ終了) という手が使えることがありますが、あまり推奨はいたしません。 ちゃんと設計すべきです(でも設計しても結果は同じような気が...)。 上記の内容を確認しながらやらないと...
by maru
8年前
フォーラム: C言語何でも質問掲示板
トピック: テキストファイルの同じ行どおしの足し算
返信数: 5
閲覧数: 1367

Re: テキストファイルの同じ行どおしの足し算

複数のファイルの同じ行を演算したいのですよね。 以下のプログラムではどうでしょうか。 C++ですがgccでコンパイルできますよね。 入力ファイルのフォーマット(ファイルの名前、位置は実際に存在するものにしてください。) data1.txt data2.txt data3.txt ...以下、対象のファイルをいくつでも 上記の形式で全てのファイルをテキスト化しておき、file.lstと言う名称で保存し、プログラムを実行すればoutput.txtが作成されると思います。 windows環境で確認していますが、多分Linuxでも問題はないと思います。 コードを適切にいじれば、入出力ファイル名やファイ...
by maru
8年前
フォーラム: C言語何でも質問掲示板
トピック: 逆順に並び替える
返信数: 11
閲覧数: 1571

Re: 逆順に並び替える

流れからすると動的確保の問題なので動的確保を使ったものを作りました。また、beginnerさんが書かれたコードを元にしています。 「配列を使わない」=「動的確保」と考えるのは少し短絡的かと。 動的確保はむしろ別トピックのほうの問題で、main側で処理すべき問題かと思います。 どちらかと言うと、ここでは上位から渡されたポインタを使ってその要素を操作することを考えるべきでしょう。 bitter_foxさんのコードも配列を使わないという目的にはあっているでしょうが、本来の目的とはちょっと違っていると思われます。 つまり、ここでのポイントはポインタを使ってメモリの操作をするってことではないでしょうか。
by maru
8年前
フォーラム: C言語何でも質問掲示板
トピック: 逆順に並び替える
返信数: 11
閲覧数: 1571

Re: 逆順に並び替える

ポインタと配列とに、そんな初期化の違いがあるとは知りませんでした、ご指摘ありがとうございます。 ポインタ(領域サイズは固定)を初期化するのと、配列(領域サイズは宣言ごとに異なる)を初期化するのでは違いがあって当然です。 ・ポインタは必要な型を持つ変数やリテラルへのポインタで初期化される。 ・配列、構造体、共用体などの集成体はその要素を{}で括ることで初期化される。ただし文字列(文字配列)の場合は文字列リテラルで初期化できる。 文字列の場合、 char *p = "Pointer to char type"; char str[] = "Array of char type"; とすることで、...
by maru
8年前
フォーラム: C言語何でも質問掲示板
トピック: 逆順に並び替える
返信数: 11
閲覧数: 1571

Re: 逆順に並び替える

>>maruさん 分かりやすいコードで説明していただきありがとうございます。 コードを書くにあたってポイントとなる部分はどこでしょうか? ポイントと言っても、このコードは特にポイントとなるような部分も無いかと思いますが初心者向けに解説してみます。 このような問題は、メモリの配置を図(絵)にして、その中の値をどのように操作するかを書いてみることが重要です。 例えば今回の場合、操作すべき文字列 a は以下のように表わすことができます。 a a a a a [0][1][2]....[n-2][n-1] これを逆順にするのだから、a[0]とa[n-1]を交換、a[1]とa[n-2]を交換、これを順...
by maru
8年前
フォーラム: C言語何でも質問掲示板
トピック: 逆順に並び替える
返信数: 11
閲覧数: 1571

Re: 逆順に並び替える

になるので、「bは"\0"という文字列リテラルの先頭アドレスを指す」としたのですが、間違ってますでしょうか・・・? はい。間違っています。 集成体の初期化は{}で括ることが可能であり char str[] ={NULL}; となっている場合は、char配列を0で初期化していることになりますが、 char *b = {NULL}; の場合、bはポインタであり、集成体ではないので、{}の意味が無くなり char *b = NULL; と等価です。 bitter_foxさんの間違いは char *b = {'\0'} が char *b = "\0" と等価であると考えたことです。ポインタの初期化...
by maru
8年前
フォーラム: C言語何でも質問掲示板
トピック: ポインタと文字列
返信数: 23
閲覧数: 899

Re: ポインタと文字列

beginner さんが書きました:>>bitter_foxさん
大変丁寧に説明していただき分かりやすかったのですが、
malloc関数はあまり使わない方がよいと書いてあるサイトもあったのですが大丈夫なのでしょうか?
bitter_foxさんが説明されている通りmalloc関数を使用すること自体には問題がほとんどありません。
多用することによってメモリの断片化が発生する可能性がありますが、初心者が気にするような問題ではありません。
参考のため、そのサイトのURLを教えていただけますか?
by maru
8年前
フォーラム: C言語何でも質問掲示板
トピック: 逆順に並び替える
返信数: 11
閲覧数: 1571

Re: 逆順に並び替える

また、bは"\0"という文字列リテラルの先頭アドレスを指していて、そこに値を代入することは不正です。 ちょっと違いますね。 b はどこも指していません。ポインタの値がNULLであるのと"\0"という文字列リテラルの先頭アドレスを指すことは異なります。 "\0"という文字列リテラルを参照する(読み出しを行う)ことは可能ですが、NULLポインタは参照することさえ不正です。 そこに値を代入することが正しくないということは同じですけどね。 所望の関数をCで書けばこんな感じです。 void reverse ( char *a, /* 逆順にする文字列へのポインタ */ int n /* 文字列長 */...
by maru
8年前
フォーラム: C言語何でも質問掲示板
トピック: クラスの二次元配列の解放について
返信数: 4
閲覧数: 580

Re: クラスの二次元配列の解放について

ほげ さんが書きました:もし静的確保の方法をご存知でしたら教えてください。
普通、静的確保って

コード:

Cell cell[MAP_HEIGHT][MAP_WIDTH];
だと思います。
なぜわざわざ難しいことをやっているのか理解に苦しむ所です。
by maru
8年前
フォーラム: C言語何でも質問掲示板
トピック: よろしくお願いします。
返信数: 4
閲覧数: 302

Re: よろしくお願いします。

・43で割った余りを取る(精度的にはおすすめできません)。 ・(dobule)乱数/RAND_MAX * 42 と言った方法があります。 43の剰余では多分0,1だけほんの少し(1/762)頻度が高くなりますが、無視できるかどうかは使用者側で判断すればよいことです。 ・(dobule)乱数/RAND_MAX * 42だと、42が現れる確率は1/RAND_MAXですね。 * 43の間違いではないですか? 追記 一応検証したプログラムです。RAND_MAX個の乱数で42は0個でした。 #include <stdlib.h> #include <assert.h> #include <iostre...
by maru
8年前
フォーラム: C言語何でも質問掲示板
トピック: 大学の課題について困っています><
返信数: 13
閲覧数: 751

Re: 大学の課題について困っています><

ついでに言っておきますが char hinmei[256][256]; には256が二つありますが、意味が異なっているので #define MAX 256 で両方を置き換えてはいけません。 それぞれ別々のマクロを与えなければなりません。 さらに言えばC++ではマクロは余り推奨されていません。 マクロが様々な副作用を引き起こすからです(その副作用は省略)。 C++では定数は const int max_number = 256; //データの最大数 const int max_length_of_name = 255; //文字列最大長 char hinmei[max_number][max_l...
by maru
8年前
フォーラム: C言語何でも質問掲示板
トピック: 【雑談】効率を上げるには?
返信数: 5
閲覧数: 550

Re: 【雑談】効率を上げるには?

一番効率が良いのは自分で作らないことです。 極端な言い方ですが、既に出来上がっているものを再利用すれば効率は上がります。 出来上がっているといっても製品ではなく、ライブラリ等の形になっていてフリーに使用できるものもたくさん有ります。 # DXライブラリのその一つではないでしょうか? それらを使用すれば自分で作成しなくても、いろいろな機能を簡単に使用して自分独自の部分のみを作ればよいことになります。 さて、それらの再利用できる部品を探し出すためのスキルとは、、、 経験でしょうかね。自分のやりたいことを適切な用語で検索すれば世の中の検索エンジンがいろいろな部品を見つけてくれます。 その部品が自分の...
by maru
8年前
フォーラム: C言語何でも質問掲示板
トピック: 構造体内の配列
返信数: 14
閲覧数: 1531

Re: 構造体内の配列

ストレージクラスが正しくありませんと言われました。 はて? VC2010 でコンパイルしてみましたがC/C++どちらでも問題なくコンパイル/リンク出来ましたが... /* a.h */ typedef struct { char field[15][10]; } FIELDSTATE; extern FIELDSTATE f_state; /* a.c */ include "A.h" FIELDSTATE f_state = { 0 }; int main() { return 0; } a.cをa.cppにしてもコンパイルは通ります。 実際のコードとエラーメッセージを見せてください。
by maru
8年前
フォーラム: C言語何でも質問掲示板
トピック: 大学の課題について困っています><
返信数: 13
閲覧数: 751

Re: 大学の課題について困っています><

ありがとうございます。 だいぶすっきりしてきました。 あと、ここにきて初歩的な質問で申し訳ないんですが、 int n, gokei; char hinmei[256][256]; int tanka[256], suryo[256], kingaku[256]; int i; の部分、"[256]"を打ち込むことはどのような役割を持っているのでしょうか? 256という数字を使う意味が分かりません。 他の数では駄目なのか、使わない方法はあるのか、説明していただけると幸いです。 256という数値の意味は bitter_fox さんが説明しておられる通りです。 他の数値では駄目か?という問いはあな...
by maru
8年前
フォーラム: C言語何でも質問掲示板
トピック: 構造体内の配列
返信数: 14
閲覧数: 1531

Re: 構造体内の配列

ヘッダーファイル(*.h)には

コード:

typedef struct {
char field[15][10];
} FIELDSTATE;
extern FIELDSTATE f_state;
ソースファイル(*.c)には

コード:

FIELDSTATE f_state = { 0 };
でいいはずです。
コンパイルしていないのでエラーが出たらごめんなさい。
by maru
8年前
フォーラム: C言語何でも質問掲示板
トピック: C言語での河渡りの問題
返信数: 11
閲覧数: 2827

Re: C言語での河渡りの問題

特に指定はされていないのでb[4]でも大丈夫です。 構造体はまだ習っていないので難しいです。 構造体といってもint型の要素が4つなので配列と考えても大差ありません。 struct NODE { // 状態を表す構造体(配列は経路を表す) int T, W, G, C; // T, W, G, C はそれぞれ LEFT, RIGHT のいずれか } node[NODES]; を int Status[16][4]; と読み換えれば、構造体を触っている部分は node[step].T => Status[step][0]; node[step].W => Status[step][1]; no...
by maru
8年前
フォーラム: C言語何でも質問掲示板
トピック: C言語での河渡りの問題
返信数: 11
閲覧数: 2827

Re: C言語での河渡りの問題

提出期限が今日の夜までで、 今日の夜までで、C言語を始めたばかりだとちょっと厳しいですね。 教えてくださったページは見ていますが わからなかったので。。。 もう一度見直してみます。 ではヒントを。 と思いましたが、まず質問があります。 あなたのプログラムでは、状態を int b[4][2]; で表していますが、これは指示されているのですか? 単純に考えると、川のこちらにいる場合は反対側にはいないので、b[x][0] = 1 のときは必ず b[x][1] = 0 になり、 b[x][0] = 0 のときは必ず b[x][1] = 1 になるので、2次元配列にする必要はありません。 int b[...
by maru
8年前
フォーラム: C言語何でも質問掲示板
トピック: C言語での河渡りの問題
返信数: 11
閲覧数: 2827

Re: C言語での河渡りの問題

「C言語 川渡り」で検索したら、ほとんど同じ問題とそのプログラムが出てきました。
http://www.slis.tsukuba.ac.jp/~hiraga/AI/src/#S_boat1
状態を表わす変数が違いますが、考え方が書いてありますので、移植すればできるでしょう。
ただし、探索経路を記録する変数を用意しておく必要があると思われます。
by maru
8年前
フォーラム: C言語何でも質問掲示板
トピック: c++初歩的な質問ですが教えて頂けると助かります
返信数: 18
閲覧数: 803

Re: c++初歩的な質問ですが教えて頂けると助かります

どうもありがとうございます。 関数の型の宣言を重複してするようで少し違和感がありますが、そういう仕様なのですね。 これですっきり解決しました。 既に納得しておられるようですが、 bool binary_search(int); これは関数のプロトタイプ宣言(Declarations)です。 bool binary_search(int x){ ・・・ } これは関数の定義(Definitions)で、宣言ではありません。従って重複しているわけではありません。 関数が使用時に既に定義されていれば(main関数が後ろにある場合)宣言なしにそのまま使用できますが、 定義されていない場合(main関...
by maru
8年前
フォーラム: C言語何でも質問掲示板
トピック: 与えられた複数の文字列からオートマトンを自動生成したい
返信数: 9
閲覧数: 1459

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

複数の文字列を一度で検索するっていうのをどこかでみたような気がすると思ったら、「C言語で書くアルゴリズム」
(ISBN4-7973-0004-3)という本で実装例が出てました。P102 「4-4 複数文字列の検索」です。
Alfred AhoとM.J.Corasick が1975年に発表したテクニックだそうで、有限ステートマシンを利用してキーワードを
見つける方法だそうです。プログラムはC言語で9ページ半(54行/ページ、従って500行位)あり結構な量です。

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