【初心者歓迎】C/C++室 Ver.28【環境依存OK】
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2006/06/09(金) 10:08:51ただしその場合、質問者は必ず、環境を書きましょう。
※sageは禁止です。
【前スレ】
【初心者歓迎】C/C++室 Ver.27【環境依存OK】
http://pc8.2ch.net/test/read.cgi/tech/1147183708/
【アップローダー】(質問が長い時はココ使うと便利)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
0412デフォルトの名無しさん
2006/06/19(月) 15:35:35わかっているならバカや低レベルや初心者にもわかりやすく書いてください。
バカは死んでも直らないと言う信念をお持ちであれば、
せめて低レベルや初心者だけでも相手してやってください。
0413デフォルトの名無しさん
2006/06/19(月) 15:47:31> >>385の何を間違えだと言った?論点がズレてるね。
> どう考えても2つめは計算の結果の 値 が等しいんであって
ヒント:暗黙の型変換(キャスト)
0414デフォルトの名無しさん
2006/06/19(月) 15:51:37つーか定数ってなに?
0415デフォルトの名無しさん
2006/06/19(月) 15:54:29>ああ、これね。これが何か?変数じゃない値で
>メモリはdoubleと同じ分だけ使っているが、それは精度を落とさぬよう
>コンピュータ側がやっていること
だったら、>>242の下のコードは全く問題ないね!
0416デフォルトの名無しさん
2006/06/19(月) 15:54:53C/C++には“言語仕様上”、固定小数と言う概念は無い。
C/C++で数値を扱う型は数値型と分類されている。
数値型は整数型と浮動小数点数型に分かれる。
当然intは整数型、doubleは浮動小数点数型に分類される。
標準規格ではリテラル(お前の言う定数)がどんな型になるかも規定されている。(>>410から見てみろ)
それによればC/C++において2.0はdouble型になる。
俺が語っているのでは無い。規格書がそう語っているのだ。
0417デフォルトの名無しさん
2006/06/19(月) 15:54:59> C/C++的には「2.0」は浮動小数点数リテラルであって、それ以上でもそれ以下でもないと思うが。
その通り。
> つーか定数ってなに?
リテラル(Literal)の和訳。
0418デフォルトの名無しさん
2006/06/19(月) 15:55:22めんどくさいので訂正はしない。
0419デフォルトの名無しさん
2006/06/19(月) 16:01:10変数の型についてが最初の話題じゃないって気づけよ?
勝手に論点すり変えて、自分勝手な議論を持ち出すなよ?
こっちが理解していないみたいなことを言うが、自分で言語の仕様を理解して
適切に記述できないことを
露 呈 し な く て 良 い か ら さ ぁ 専 門 学 校 生 w
0420デフォルトの名無しさん
2006/06/19(月) 16:03:32定数と書くと、#defineやconst (C++)などによって名前を付けたものというイメージを持つ人が多いんだ。
0421デフォルトの名無しさん
2006/06/19(月) 16:07:23C/C++において385の2つの式は、結果の型も同じ。
そういう規則だから。
0422デフォルトの名無しさん
2006/06/19(月) 16:09:08>ヒント:暗黙の型変換(キャスト)
それがバグの原因だよ。もっと必要な文献に目を向けたらどうだ?
だから適切にキャスト演算子を使うか、最初っから計算結果を代入する型にあわせて
計算式の中に使う変数の型もあわせておいた方が良いってのが報告されてんだよ
0423デフォルトの名無しさん
2006/06/19(月) 16:11:07だから?代入する型の変数をどうしたら良いか?って話になるなるだけじゃん。
まだわかってないな・・・精度の問題なのか、値が扱うメモリの領域の大きさがどうなのか?
議論をはっきりしろよ、おめぇ騒ぐだけで相手を無理に否定しようとしているだけじゃん。
相手がどうだろうと、言語を作った人が決めたルールや仕様書があんだろが?
0424デフォルトの名無しさん
2006/06/19(月) 16:11:06それとコード中に出てくる数値リテラルなどのことは「直値」と言うな。
「リテラル」は対人コミュニケーションでは使わない。相手が理解できない場合があるからな。
自分が書く文章では使うが。
0425デフォルトの名無しさん
2006/06/19(月) 16:12:43ヒント:頭のおかしい人の相手はしないようにしましょう
0426デフォルトの名無しさん
2006/06/19(月) 16:13:33今はバグの話をしているのではないと俺は思っている。
暗黙の型変換によって385のBの2つの式は
同じ意味(結果の型・値、途中の計算過程など全てが等価)になると主張するだけだ。
0427デフォルトの名無しさん
2006/06/19(月) 16:15:24俺が気付いていないうちに242のcがdoubleかfloatかの違いの話になっていた?
今まで俺はずっと代入式の右辺の部分(385のB)についてだけ話していると思っていたよ。
0428デフォルトの名無しさん
2006/06/19(月) 16:16:22式1 : (double) (a+b)/2.0;
演算手順
1. a+b を演算
→a、b共にint型のためint型として演算
2. (a+b) の演算結果をdouble型にキャスト
3. [2の結果] / 2.0 を演算
→[2の結果]、2.0 共にdouble型のためdouble型として演算
式2 : (a+b)/2.0;
演算手順
1. a+b を演算
→a、b共にint型のためint型として演算
2. (a+b) の演算結果をdouble型にキャスト
→暗黙の型変換
3. [2の結果] / 2.0 を演算
→[2の結果]、2.0 共にdouble型のためdouble型として演算
君は「結果の値のみ」が等しいと言った。
しかし、C/C++の規格に沿って見ると、
手順も一緒であるが、どこがどう違うというのかね?
0429デフォルトの名無しさん
2006/06/19(月) 16:19:39それだと式2の暗黙の型変換が行われるタイミングが勘違いされそう。
double型の値で割られるからdouble型へ暗黙の型変換がなされるという風に読み取れない。
0430デフォルトの名無しさん
2006/06/19(月) 16:23:410431デフォルトの名無しさん
2006/06/19(月) 16:34:070432デフォルトの名無しさん
2006/06/19(月) 16:44:20このC++プログラムをVC++で動作させたいのですが、
ほうりこんで色々いじった結果(上の方を//で消したり・・・)
実行すると、
「入力データファイル名を指定してください。」
とだけ出るようになりました。
これはどうすればいいのでしょうか・・・。
0433デフォルトの名無しさん
2006/06/19(月) 17:38:490434デフォルトの名無しさん
2006/06/19(月) 17:41:50あのねぇ、まずはどんなソースをつくりたかったのか説明するべきだろ。
0435デフォルトの名無しさん
2006/06/19(月) 17:45:08適当にコピペしながらプロジェクトを作ったら、ちゃんとビルドできた。
引数としてファイル名が二つ必要みたいだったので、適当にファイルを作って動かしたら、
>***error ユニット番号が不適当(1 0 -858993460 -858993460)
と表示された。
で、何が聞きたいの?
0436デフォルトの名無しさん
2006/06/19(月) 17:47:490437デフォルトの名無しさん
2006/06/19(月) 17:50:57人それぞれ。
0438デフォルトの名無しさん
2006/06/19(月) 17:53:070439432
2006/06/19(月) 17:54:55申し訳ないです。
ttp://www.sist.ac.jp/~suganuma/cpp/3-bu/18-sho/18-sho.htm#e-18-4
このページのにあるニューラルネットワークの
「バックプロパゲーションアルゴリズム」というプログラムなのですが、
これをVC++6.0で正常に動作させたいです。
(学習させた出力を出したいです。)
0440435
2006/06/19(月) 18:00:08アルゴリズムが正しいかどうかの判断は出来ないが、動かして出力を見ることだけはできるから、
引数に与えるファイル1、ファイル2をコードと同じ場所にアップしてくれ。
0441デフォルトの名無しさん
2006/06/19(月) 18:07:13引っ込みがつかなくなった約一名の狂態はこれ以上ないくらいくっきり浮き彫りなんで、
もう相手しなくていいと思いますよ。
こんだけログが揃えば、約一名様がいくらそれっぽく勝利宣言しても誰も騙せないでしょうし。
0442435
2006/06/19(月) 18:16:38で、質問は?
[C:\temp\backpr\Debug] backpr data1.dat data2.dat
学習回数は? 5000
何回毎に収束を確認しますか? 500
学習パターンのファイル名は? learn.dat
回数 500 誤って認識したパターン数 4
回数 1000 誤って認識したパターン数 4
回数 1500 誤って認識したパターン数 4
回数 2000 誤って認識したパターン数 4
回数 2500 誤って認識したパターン数 3
回数 3000 誤って認識したパターン数 0
入力パターン 1 0.00 0.00
出力パターン(理想) 0.000
(実際) 0.087
入力パターン 2 0.00 1.00
出力パターン(理想) 1.000
(実際) 0.907
0443435
2006/06/19(月) 18:19:04内容はわからんが。
(略)
重み
to 1 from 2 10.767 3 -4.905 4 4.892
to 2 from 3 6.506 4 -6.819
バイアス 1 -2.615 2 -3.678
未学習パターンの認識を行いますか?(=1:行う,=0:行わない) 0
[C:\temp\backpr\Debug]
0444デフォルトの名無しさん
2006/06/19(月) 18:47:11メニューからプロジェクトの設定を選んで、デバッグタブに引数を書いてから実行する。
ファイルが見つからない場合は、ファイル名をフルパスで書くか、作業用のディレクトリに
ファイルがあるディレクトリ名を書く。
0445デフォルトの名無しさん
2006/06/19(月) 19:12:13リテラルと定数は意味が違うだろう・・・。
0446デフォルトの名無しさん
2006/06/19(月) 20:21:40http://dictionary.goo.ne.jp/search.php?MT=%A5%EA%A5%C6%A5%E9%A5%EB&search_history=%B2%CA%B3%D8&kind=jn&kwassist=0&mode=0
0447デフォルトの名無しさん
2006/06/19(月) 22:00:45Stroustrup: C++ Glossary
constant - literal, object or value declared const, or enumerator.
literal - notation for values of bool, character types, integer types,
or floating-point types. See also: enumerators.
TC++PL 4.2, 4.3.1, 4.4.1, 4.5.1, 5.2.2, D&E 11.2.1.
つまりリテラル⊆定数
0448デフォルトの名無しさん
2006/06/19(月) 22:09:210449デフォルトの名無しさん
2006/06/19(月) 22:13:51このスレは
【初心者歓迎】C/C++室 Ver.28【環境依存OK】
0450デフォルトの名無しさん
2006/06/19(月) 22:33:45C/C++室ってところがうまいよなぁw
0451デフォルトの名無しさん
2006/06/20(火) 00:29:290452デフォルトの名無しさん
2006/06/20(火) 00:35:49今度会社のコーディング規約で「//のコメント禁止」が入るらしい。
なぜかと聞くと「コメントの最後が日本語で「\」を含む場合継続行と見なされるから」
つまり下の例でb=2;が前の継続行と見なされてコメント扱いされてしまうからというのですが
本当でしょうか。
会社は組み込み系なのでCは今でも現役だし、コンパイラはCPUのメーカによって異なります。
VC++では大丈夫とかC99では採用済みとか以外の回答をお願いします。
例
int a,b;
a=1;//○○可能
b=2;
0453デフォルトの名無しさん
2006/06/20(火) 00:37:22全くの嘘ですが、波風立てたくないなら、おとなしく従いましょう
0454デフォルトの名無しさん
2006/06/20(火) 00:38:42組み込み系ならASCIIのみというコンパイラもあるだろう
そういう場合はヤバス
0455仕様書無しさん
2006/06/20(火) 00:44:14コンパイラが日本語(2バイトコード)を含むソースに対応していなくて、
ソースがシフトJISで書かれている場合に限定される話だろ。
今時、そんなラベルの低いコンパイラは捨ててしまえ。サポートもロクに
期待できないだろう。あるいは、そんなコーディングルールを決めるような
会社はさっさと辞めたほうがいいかも。バカは伝染るぞ。
0456デフォルトの名無しさん
2006/06/20(火) 00:44:52大学のLinux端末が少し前に更新されたがそれまではその問題があった。
結構有名な話なんで覚えておいても損はない。
0457デフォルトの名無しさん
2006/06/20(火) 00:45:43全くの嘘ではありませんが、万に一つくらいの可能性でマルチバイトに対応していないコンパイラがあるかも知れません。
それを禁止するなら文字列リテラルの直接表記を禁止するとかコメント閉じの前にスペースは必須とかもコーディング規約に入れるべきだと思います。
0458デフォルトの名無しさん
2006/06/20(火) 00:49:09まだザラにあるんじゃないか?
0459デフォルトの名無しさん
2006/06/20(火) 00:52:21組み込み系でマルチバイト文字を処理させるとは
考えにくいけどどうなんだろうね?教えれ>>452
0460デフォルトの名無しさん
2006/06/20(火) 00:54:30SJISでコメント入れたときの話だろ?
作成するプログラムでマルチバイト文字を扱うわけじゃない。
0462デフォルトの名無しさん
2006/06/20(火) 00:55:12#空白は拙いな。行末の空白を取り除く余計なお世話なエディタがあるし、毛嫌いする人もいる。
0463デフォルトの名無しさん
2006/06/20(火) 00:57:27ウィンドウのデザインを変更する事はできるのでしょうか?
よくフリーソフトでウィンドウのスキンを変更できるソフトあるじゃないですか。
私の場合はexeにした時点でウィンドウデザインを変更しておきたいのです。
ググっても載っていなかったので、
ご存知の方いらしゃいましたらアドバイスお願いします。
0464デフォルトの名無しさん
2006/06/20(火) 00:59:510465デフォルトの名無しさん
2006/06/20(火) 01:17:22「コンパイル時にウィンドウスタイルを変更したい」
だと語っている
0466デフォルトの名無しさん
2006/06/20(火) 01:18:13あ、不明確ですみませんorz
ビルドする前にコード打つ段階でウィンドウスタイルを変更する
コードが打てるのか、もしくはコンパイラのフォームデザインから
変更できるのか分からないのですが、ビルドしてexe形式にして
配布できる状態になった状態の時点でデザインの変更をしておきたいのです。
普通ウィンドウズですと、タイトルバーが青くてフォームがグレーじゃないですか。
それを画像を用意して張りかえるか、コードで変更できるのか、もしくはできないのか
分からないので、現在もググりながら書き込んでます。
0467デフォルトの名無しさん
2006/06/20(火) 01:19:20セイントktkr
0468デフォルトの名無しさん
2006/06/20(火) 01:23:35まぁそういう問題があるコンパイラなら、
a=1;/*○○可能*/
b=2;/*hoge*/
でもb=2はコメントアウトされてしまう(またはコンパイルエラー)から、気をつけとけ
0469デフォルトの名無しさん
2006/06/20(火) 01:42:48これでも見てマターリしろ
ttp://www.youtube.com/watch?v=P4mZlwuOg50
0470デフォルトの名無しさん
2006/06/20(火) 02:16:04ヒント: WM_NCHITTESTを処理せよ。
0471452
2006/06/20(火) 04:09:00ほとんど大丈夫だが、中には当てはまるコンパイラがあるかも知れないということですね。
コーディング規約に入れられたら反論できないわけですね。
0472デフォルトの名無しさん
2006/06/20(火) 08:22:53「その規約だと>468の問題もありますよね」って突っ込んでみると面白いかもしれない。
0473デフォルトの名無しさん
2006/06/20(火) 08:59:34行連結って行末の \ + 空白xn + 改行 でしか行われないような・・・
そもそもそんな構造のコンパイラがあったら"\"(0x5c)を含むコードが一切使えなくなる気が
0474デフォルトの名無しさん
2006/06/20(火) 11:25:11"能"の次の*がエスケープされて、"*/"というコメント終端文字列とはみなされず、
次の行の終わりの"*/"までをコメントとみなしてしまうおそれがある。
0475デフォルトの名無しさん
2006/06/20(火) 11:35:02って言うかそんなの気にするぐらいなら
コメント中の行連結文字を検出するツールでも
作った方がいい希ガス。
0476デフォルトの名無しさん
2006/06/20(火) 11:59:59/* */ のコメント中にエスケープなんか効かないよ。
0477デフォルトの名無しさん
2006/06/20(火) 12:03:53まあ、実在するかは(´・ω・`)知らんがな
0478デフォルトの名無しさん
2006/06/20(火) 12:10:44自由にしてたらコンパイラごとにソースの意味が変わっちゃうからダメだろ。
0479デフォルトの名無しさん
2006/06/20(火) 12:16:59/* */の中はエスケープは効かないが、//の後ろは効くという主張?
0480デフォルトの名無しさん
2006/06/20(火) 12:21:58改行のエスケープは規格で定められている。
0481デフォルトの名無しさん
2006/06/20(火) 12:25:03そういうプロジェクトいくつかあったよ
0482デフォルトの名無しさん
2006/06/20(火) 12:25:46それはコメント中もだっけ?
0483デフォルトの名無しさん
2006/06/20(火) 12:25:51#include <stdlib.h>
#include <time.h>
int myRand(int a)
{
return rand()%a+1;
}
int main(void)
{
srand( (unsigned)time(NULL) );
int a;
printf("整数を入力\n");
scanf("%d", &a);
printf("%d", myRand(a));
return 0;
}
このプログラムで、srand((unsigned)time(NULL));を書くとコンパイル時にエラーが出てしまうのですがなぜですか?
まったく原因が分かりません。
0484デフォルトの名無しさん
2006/06/20(火) 12:26:59コメント処理は翻訳段階3だからねー。
規格合致処理系なら
/\
*\
*\
/\
もコンパイルは通る。
0485デフォルトの名無しさん
2006/06/20(火) 12:27:39日本語に対応してないコンパイラ(Cygwin の gcc とか)
0486デフォルトの名無しさん
2006/06/20(火) 12:28:540487デフォルトの名無しさん
2006/06/20(火) 12:29:26エラーメッセージ嫁。
0488デフォルトの名無しさん
2006/06/20(火) 12:32:10Cでは、変数の宣言はブロックの先頭でなければならない。
関数呼び出しの後ろで宣言するな。
0489483
2006/06/20(火) 12:32:29です
0491デフォルトの名無しさん
2006/06/20(火) 12:42:43それは確かに。
でもそういうコンパイラを使うプロジェクトなら
それこそ日本語禁止にしないと駄目だよな。
0492デフォルトの名無しさん
2006/06/20(火) 12:50:54もう 3.4 になってるから、 -finput-charset 使えば問題なし。
0493デフォルトの名無しさん
2006/06/20(火) 14:17:43お、使えるんだ。
0494432
2006/06/20(火) 15:20:14おお、ありがとうございます!
それで、質問というのは
そのプログラムをVC++に入れてコンパイルしても、エラーが沢山出てしまって
動作してくれなくて困っています。
具体的にどういじって、どんなファイルを用意すれば良いのかなど、
ご教授してくれると有難いです・・・。
程度が低すぎて申し訳ない。
0495デフォルトの名無しさん
2006/06/20(火) 15:36:24もしかして、
サンプルのtxtファイル自体をVCに食わせようとしてる?
あと、単にエラー出たとか言われてもエスパーじゃないのでエラー内容は君にしかわからん
0496435
2006/06/20(火) 15:50:26ビルドしたプロジェクトをうpしといた。受信パスはsuganuma。
ttp://www.uploda.org/uporg421601.zip.html
普通、ひとつのクラスの実装はひとつのcppで行うので、そのようにファイルを作った。
誰かへの説明のためなどの理由で、ファイルを分割するひつようがあるなら、
このビルドできるプロジェクトをいじってね。
次に質問するときは、エラーメッセージをコピペすること。
0497435
2006/06/20(火) 15:57:42ttp://www.sist.ac.jp/~suganuma/cpp/3-bu/18-sho/18-sho.htm#e-18-4
にあるように、
実行可能ファイル名 制御データファイル名 構造データファイル名
で起動する。引数に与えるデータファイルは、そのページの赤字のところそのものが
入ったファイルを用意してやればいいよ。何してるのかさっぱりわからんけど。
0498435
2006/06/20(火) 16:04:220499デフォルトの名無しさん
2006/06/20(火) 21:50:36・
・
・
//抜けたい場所
・
・
・
}
whileやfor文ならbreakで抜けれますが、
returnを使わずに関数を途中で抜ける方法ってありますか?
0500デフォルトの名無しさん
2006/06/20(火) 21:52:440501デフォルトの名無しさん
2006/06/20(火) 21:54:27もしかして値を返さなくてもreturnできるですか?
0502デフォルトの名無しさん
2006/06/20(火) 21:54:58質問自体が矛盾している。
0503デフォルトの名無しさん
2006/06/20(火) 21:58:06何かつけないとダメと思ってました。ありがとうございます。
0504デフォルトの名無しさん
2006/06/20(火) 22:05:28それか、gotoやら例外で飛ぶこともできる。前者の濫用はやるべきではないが。
0505デフォルトの名無しさん
2006/06/20(火) 22:05:50たしかCだとvoid以外の関数でも戻り値をせずにreturnが使えるはずだから、
一応念のため言っておくけど、returnに戻り値を書かなくても済むのは、
戻り値の型がvoidである関数限定だと思っておきなさい。
0506デフォルトの名無しさん
2006/06/20(火) 22:06:02たまたまEAXレジスタに入ってたゴミが返るとかそんな感じなのかな。
今まで考えたこともなかった。
関数を途中で抜けて、しかも戻り値を使わないような場合って
ほとんどエラーが起こった状況だと思うんだけど、エラーが
起こったことがわかるように戻り値を返してやるのが親切かも。
0507デフォルトの名無しさん
2006/06/20(火) 22:24:250508504
2006/06/20(火) 22:28:45この場合setjmpとlongjmpを使う。
つっても例外使った方がいいと思うけど
0509デフォルトの名無しさん
2006/06/20(火) 22:37:46Cではたしか不定の値(ようするにごみ)が返ることになるんだったと思う。
(もしかしたら未定義だったかもしれない)
C++ではコンパイルエラー。
0510デフォルトの名無しさん
2006/06/21(水) 00:19:11実装依存なので、律儀に0を返すコンパイラもあります。
0511デフォルトの名無しさん
2006/06/21(水) 03:26:58メモリが節約できると思うのですが、そうすると他人に理解しにくいというか、
間違ってると思われるでしょうか?
■ このスレッドは過去ログ倉庫に格納されています