トップページ⇒tech
1001コメント336KB

【初心者歓迎】C/C++室 Ver.28【環境依存OK】

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2006/06/09(金) 10:08:51
エスケープシーケンスやWin32APIなどの環境依存な物でもOK。
ただしその場合、質問者は必ず、環境を書きましょう。
※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
0331デフォルトの名無しさん2006/06/18(日) 21:25:20
>>328
なんで?まさか2.0って小数点以下を書いたら浮動少数になるの?バカだこいつ・・・
自分の知識が浅はかだってまだ気づいてないな。
キャスト演算子の括弧の中はな〜〜〜んだ?変数を宣言するときの型が入っていると思うがねぇ〜〜

>>330
決定っつーか低レベル決定。物事を理解する頭がないってこと。
定数と変数なんて、既に中学、高校の数学でやってんだし。
違いの意味に気づいてない奴は、惰性で数値計算をしているだけの
思考能力のないアホ
0332デフォルトの名無しさん2006/06/18(日) 21:30:59
>>331
> なんで?まさか2.0って小数点以下を書いたら浮動少数になるの?バカだこいつ・・・
なるよ。馬鹿だなお前。
0333デフォルトの名無しさん2006/06/18(日) 21:33:49
専門学校生乙。恥ずかしいからもう黙ってな。
筋の通った理論に基づいて話してなく、自分がバカだと思う奴がバカって
言っているだけだな。ご愁傷様。
2.0は 変数 ではなく 定数 なので、変数に使う型は関係ない。
問題は変数同士と、代入する変数の型だよ。
あの数式を見れば一目瞭然。さすがに初心者だからといって
理解力のないバカまで指導するスレじゃないんで、俺はこれで失礼するよ。
低俗な人間の問題煮まで相手にしてたら、こっちがバカになるw
0334デフォルトの名無しさん2006/06/18(日) 21:34:15
面白いなぁ。07って書いても10進数だって言い張ったりするんだろうか。
0335デフォルトの名無しさん2006/06/18(日) 21:34:58
いなくなるなら願ったりだが。
0336デフォルトの名無しさん2006/06/18(日) 21:39:10
>>333
初心者が見てるだろうから騙されないように注意しておきますが、
C/C++ のソース上で 2..0 は double 型のリテラルです。
確かに変数の型とは関係ないですが、型が決まっていないわけではありません。
03373362006/06/18(日) 21:40:01
おっと 2..0 はまちがい。 2.0 のことね。
0338デフォルトの名無しさん2006/06/18(日) 21:46:49
>>336
上級者にバカにされたくなければ今すぐ考えを改めるよう注意しておきますが、
2.0がどこうではなく、「変数」と「定数」について述べていると思われますが?
それから、浮動小数についても理解しておられないようですね。
123.45を1.2345 x 10^2と表示することは理解していても
小数点が動くという意味までは理解しておられないようで?
>>334
いつまで屁理屈で自分勝手なお馬鹿な妄想してんの?
07については述べられていないし、2.0という値についてだよ?
っつか、0xとかつけるならまだしも、単に07って二桁にする意味ってなんだよ・・・
0339デフォルトの名無しさん2006/06/18(日) 22:04:31
あー8進数
0340デフォルトの名無しさん2006/06/18(日) 22:04:36
>>338
とりあえず以下のコードの実行結果の考察について説明してもらおうか。
#include <stdio.h>
int main()
{
printf("sizeof(long)=%d\n", sizeof(long));
printf("sizeof(float)=%d\n", sizeof(float));
printf("sizeof(double)=%d\n", sizeof(double));
printf("sizeof(2)=%d\n", sizeof(2));
printf("sizeof(2.0)=%d\n", sizeof(2.0));
return 0;
}
sizeof(long)=4
sizeof(float)=4
sizeof(double)=8
sizeof(2)=4
sizeof(2.0)=8
0341デフォルトの名無しさん2006/06/18(日) 22:05:45
初心者同士が暴れてますね
0342デフォルトの名無しさん2006/06/18(日) 22:06:21
>>341
いや、馬鹿が一人いるだけ
0343デフォルトの名無しさん2006/06/18(日) 22:07:44
>>338
まだ居るのかよ。早く消えるか、主張の内容がわかるように書いてくれ。
「変数」と「定数」について何を述べているのか伝わってないから。
0344デフォルトの名無しさん2006/06/18(日) 22:10:38
8進数ワラタ
0345デフォルトの名無しさん2006/06/18(日) 22:14:22
>>343
お前が変数と定数の意味を理解していないだけじゃね?どっちも恥ずかしいから
いい加減にしろ。特に屁理屈だけしか言わないアホ、C言語の前に数学やり直せw
0346デフォルトの名無しさん2006/06/18(日) 22:14:56
そもそもはこの2つの違いの話だよな。(この結果を代入する先のcのことはとりあえず考えない)
(A) (double)(a+b)/2.0;
(B) (a+b)/2.0;

aとbはint型。(242の後者でaとbはshort型だが、式内での格上げで結局int型として扱われる)
だから(a+b)もA, B共にint型になる。

Aでは、それをdouble型にキャストして、2.0で割っている。Bではキャストせずに2.0で割っている。
2.0は浮動小数点リテラルで、接尾辞は何も付いていないから、double型。

つまりAは「double型の値 / double型の値」、Bは「int型の値 / double型の値」となる。

Aは除算演算子の両辺の型が同じdouble型だから、double型で除算が行われる。
Bは両辺の型が違うが、規格書ではこの場合両辺をdouble型にする事になっている。(規格書を各自見てくれ)
この際にint型の値をdouble型の値に変換する方法は、
int型の値をdouble型の値へキャスト演算子で変換する場合と全く同じである。(〃)

だからAもBも(型、値含め)全く同じ結果になる。
0347デフォルトの名無しさん2006/06/18(日) 22:16:50
>>339
>>334は
>07って書いても10進数だって
だから10進数だったら0を書く必要がないだろ・・・
その値が8進数かどうか言い出したら、最初の10進数で記述された数式ってなんだよ・・・
相手が知らないであろう事実を引き出そうって態度が痛すぎ。
論点を摩り替えて、お前は俺が知っている○×を知らない!ざま〜みろって
自分に有利なルールで勝負でもしてんの?w
0348デフォルトの名無しさん2006/06/18(日) 22:17:36
>>345
Cでは式の中で右辺値として用いられる限り、
共に何か型を持ち値を持つという点では同じなのだから、
この流れで定数と変数を区別する意味は無いだろ。
0349デフォルトの名無しさん2006/06/18(日) 22:18:52
>>346
>2.0は浮動小数点リテラルで、接尾辞は何も付いていないから、double型。
それについては、2.0が変数か定数かの方が論点になってるだろ・・・
お前、まさかいちいちdouble型で宣言したa,bをint型で宣言した変数cに代入する数式で
c= a+b / (int)2.0 ってやる?キャスト演算子についての話としても不適切だよ・・・
もうバカバッカw
0350デフォルトの名無しさん2006/06/18(日) 22:20:08
>>348
>定数と変数を区別する
残念、計算式の中で使われている変数の型が違うってところから話が始まっているんだが?
過去ログも読んでないで、論点ズラして何言ってんだ?
もう痛すぎ、質問でも質問者への答えでもないなら消えろ
0351デフォルトの名無しさん2006/06/18(日) 22:23:11
ちょ、暴れてる奴はコテで書いてくれ
あぼーんしづらい
0352デフォルトの名無しさん2006/06/18(日) 22:33:07
>>329
察しの通り、文字列の操作部分が怪しい。

(1) int str[MAXDATA][64]; → char str[MAXDATA][64]; じゃないか?
(2) 配列の初期化されていない部分を参照しているので適当な値で初期化するか、
  終端フラグをもうけるか、ソート範囲を有効なデータの範囲だけにすること。
(3) (1) と仮定して str は「大きさ64の文字列の配列」なので Insertion_sort の引数を
  void Insertion_sort(int num[] , char str[][64] , int data) とする。
(4) この場合、ソートする際は文字列の実体を strcpy 等でコピーする。
0353デフォルトの名無しさん2006/06/18(日) 22:33:36
>>347
素直に「私が無知でしたごめんなさい」って言えばいいのに
8進数程度のことでがたがた言うなよ
0354デフォルトの名無しさん2006/06/18(日) 22:34:29
>>349
安心しろ。 2.0 が変数だなんて言ってるやつは居ないから、それは論点にならない。
0355デフォルトの名無しさん2006/06/18(日) 22:51:57
おい、暴れてる馬鹿、>>340を無視すんなよw
0356デフォルトの名無しさん2006/06/18(日) 22:52:11
なあもうちょっと煽り抜きで主張することを覚えてくれ
双方とも
0357デフォルトの名無しさん2006/06/18(日) 23:00:39
>>352
正直、double型とかの論争?に埋もれたかと思ってたら返信が…

(1)のとおりcharでした;
(2)の意味がすこし不明なんですが、まず、データのtxtファイルは>>274の上の部分のが999個くらい入ってます。
で、num[]にそれぞれの数を str[]に英字を格納してますが…
(3)と(4)とおりに直してみました…。コンパイルできず

mainの渡し方がまずいのか、根本的にわかってないのか、両方か…。
0358デフォルトの名無しさん2006/06/18(日) 23:07:45
>>357
コンパイルできないなら、エラーメッセージ読んで直せよ。
0359デフォルトの名無しさん2006/06/18(日) 23:10:45
お前ら、8進数も知らなかった中学生に
いつまでも構うなよ・・・。
0360デフォルトの名無しさん2006/06/18(日) 23:10:45
コンパイラによるw
0361デフォルトの名無しさん2006/06/18(日) 23:26:09
ほんっとにバカって釣られやすいんだな、2chも初心者、一生ROMってろw
0362デフォルトの名無しさん2006/06/18(日) 23:32:50
ついに主張することが無くなって、煽りだけになってしまいました。
0363デフォルトの名無しさん2006/06/18(日) 23:32:57
>>357
(2) の意味は、例えば読み込んだデータの数が900個だった時
mainで Insertion_sort() を呼ぶ際、data=MAXDATA(999)になってるから
num[900]/str[900]以降のデータもあわせてソートしてるけど
じゃあ、そこに入っている値は何? ということ。

(3), (4) の通りにするとこんな感じになる。
void Insertion_sort(int num[] , char str[][64] , int data){
int i, j;
int numtemp;
char strtemp[64];
for(i = 1; i < data ; i++){
numtemp = num[i];
strcpy(strtemp, str[i]);
for(j = i; j > 0 && num[j-1] > numtemp ; j--){
num[j] = num[j-1];
strcpy(str[j], str[j-1]);
}
num[j] = numtemp;
strcpy(str[j], strtemp);
}
}

文字列のソートをポインタ操作だけで済ませたいときは >>329 のソースに
例えば char str[MAXDATA][64]; の後ろ辺りに文字列へのポインタの配列
char *ptr[MAXDATA]; を追加してデータを読み込む際にptr[]を初期化
(ptr[count] = str[count]とか)し、以降はstr[]の代わりにptr[]を操作すれば良い。
0364デフォルトの名無しさん2006/06/18(日) 23:34:34
釣り宣言きたか。さすが 2ch の伝統どおりだな。
0365デフォルトの名無しさん2006/06/18(日) 23:48:09
まぁまぁこのスレは初心者歓迎なんだから
8進数なんてchmodの時ぐらいしか使わないんだから
0366デフォルトの名無しさん2006/06/18(日) 23:51:41
>>338
プログラミングの式を数学の式と同じだと思わない方がいいと俺は思う。
理由は>>348で書いたとおり。
0367デフォルトの名無しさん2006/06/19(月) 00:00:29
>>366
>プログラミングの式を数学の式と同じだと
誰が同じって言った?また妄想か・・・ループじゃなくて
無限に屁理屈が増大しているので、ここらでビックバーンでも起こして
お前ら全員吹っ飛んでくれw
0368デフォルトの名無しさん2006/06/19(月) 00:05:33
>>363
おかげさまで動きました。と同時に(2)の話も理解しました。
そこらへんもなんとかしてみます。
お世話になりました。
0369デフォルトの名無しさん2006/06/19(月) 00:07:55
>>367
なんか喋る前に>>340についてなんか解説してくれよ。
シンプルなコードにシンプルな結果だろう?
0370デフォルトの名無しさん2006/06/19(月) 00:08:17
>>367 主張することが無いなら黙っててください。
0371デフォルトの名無しさん2006/06/19(月) 00:08:31
ねぇねぇ、予約語に触れるもんでもなく問題もないんだけど
自分で定義する関数とか変数に大文字使う人っているじゃん?
それってちょ〜〜〜〜キモイんですけどぉ〜、やめてもらえませんか〜?
大文字使う場合、変数とか関数とかじゃなくってぇ〜〜〜〜
#define MAX 10 とか変数じゃないものに使って欲しいんですけどぉ〜〜?
↓それについてあんたどう思う?
0372デフォルトの名無しさん2006/06/19(月) 00:09:08
>>369
勝手な妄想する前に>>340についてなんか解説してくれよ。
シンプルなコードにシンプルな結果だろう?

>>370
質問に対してレスすることが無いなら黙っててください。
0373デフォルトの名無しさん2006/06/19(月) 00:11:16
>>340はコンパイルエラー、何を説明しろと?w
0374デフォルトの名無しさん2006/06/19(月) 00:12:28
>>367
> 誰が同じって言った?また妄想か・・・ループじゃなくて
↓こりゃなんだ?
>>331
> 定数と変数なんて、既に中学、高校の数学でやってんだし。

別人?
0375デフォルトの名無しさん2006/06/19(月) 00:14:58
>>340
>sizeof(2.0)=8
ああ、これね。これが何か?変数じゃない値で
メモリはdoubleと同じ分だけ使っているが、それは精度を落とさぬよう
コンピュータ側がやっていることだが、それで勝手に2.0がdouble型の変数と
同じ扱いにはならない。変数と定数についてまだわかってないんだな・・・
少なくとも、変数の型が違う場合に使うキャスト演算子の話じゃないんで

  何  が  言  い  た  い  ん  だ  ?
0376デフォルトの名無しさん2006/06/19(月) 00:15:14
>>373
コンパイルはしなくていいからさ、実行結果についてなんか喋ってくれよ。
0377デフォルトの名無しさん2006/06/19(月) 00:16:19
>>375
誰も2.0が変数だなんて主張してないぞ。
0378デフォルトの名無しさん2006/06/19(月) 00:17:29
>>375
> それで勝手に2.0がdouble型の変数と同じ扱いにはならない。

式で参照される限りは同じだよ。いいかげんにどこが違うのか言ってみてよ。
0379デフォルトの名無しさん2006/06/19(月) 00:18:28
>>374
http://dictionary.goo.ne.jp/search.php?MT=%C4%EA%BF%F4&kind=jn
http://dictionary.goo.ne.jp/search.php?id=1772890-0000&kind=jn&mode=5
>変数の変化に関係なく一定な値を表す数
値が何なのか、分かっているならそれに応じて代入する変数の型を決めれば良いだけじゃね?
変数がなんで変数なのか、いい加減理解しとけよ、バカ共。
既に数値が分かっているものと、数値が定まっていない数値を扱うのとじゃ
すべき対処が変わってくる。
0380デフォルトの名無しさん2006/06/19(月) 00:21:26
「俺は正しいはずなのに、何故か誰も味方についてくれない」
という状況に陥ったら、まず前半の前提部分を疑ったほうがいいなw
0381デフォルトの名無しさん2006/06/19(月) 00:22:52
>>377
そうだね、だから変数の型によって出てくる「キャスト演算子」の話じゃねーっつってんだろ?

>>378
>いいかげんにどこが違うのか
それじゃ、お前はdouble型で宣言されたaを2.0で割った値を
int型の変数に代入する際には、ちゃんと 2.0 に (int)2.0 と書いて下さいね(ニヤニヤ
俺は2だってわかっている「定数」だったらわざわざ2.0なんて書かずに2って書くけどねw
質問の出所が分かってないから余計に悪いんだよな。
>>242 を読み直してから議論しろよ、こっちはもうくだらない屁理屈には付き合わない。
0382デフォルトの名無しさん2006/06/19(月) 00:23:44
最後に、sizeofが何なのか、それもよーーーく調べておけよ、知ったか初心者
0383デフォルトの名無しさん2006/06/19(月) 00:25:28
ID出ないって面倒ね
0384デフォルトの名無しさん2006/06/19(月) 00:26:08
話を横道にそらす前に、以下の矛盾について自己弁護してもらおうか。

>>331
>なんで?まさか2.0って小数点以下を書いたら浮動少数になるの?バカだこいつ・・・

>>376
>ああ、これね。これが何か?変数じゃない値で
>メモリはdoubleと同じ分だけ使っているが、それは精度を落とさぬよう
>コンピュータ側がやっていること
0385デフォルトの名無しさん2006/06/19(月) 00:27:53
>>375,379,381
今一度まとめて確認させてくれないか?

A. 2.0 は double 型の定数である。
B. a, b が整数型のとき ((a+b)/2.0) と ((double)(a+b)/2.0) は等価である。

どちらも真なわけだが、何か反論はあるか?
0386デフォルトの名無しさん2006/06/19(月) 00:29:00
それからこれも答えてもらおうか。

>>381
>int型の変数に代入する際には、ちゃんと 2.0 に (int)2.0 と書いて下さいね(ニヤニヤ
>俺は2だってわかっている「定数」だったらわざわざ2.0なんて書かずに2って書くけどねw

2と2.0と書いた場合では、コンピュータの扱いが違うのだが。
>>340
>sizeof(2)=4
>sizeof(2.0)=8

わざわざ2と書かずに2.0と書くのには意味があるのか無いのか説明してもらおう。
03873662006/06/19(月) 00:30:59
>>367
331で「定数と変数なんて、既に中学、高校の数学でやってんだし。」
と書いていることから、数学がわかればプログラミングも(当然)わかると主張しているように見受けられた。

366でアンカーを張った先が338というのはおかしかったな、それはすまん。
0388デフォルトの名無しさん2006/06/19(月) 00:32:53
おいバカ、 sage るんじゃない。特定が面倒になったじゃないか。
0389デフォルトの名無しさん2006/06/19(月) 00:33:22
さらには、次の概念について、君の思うところを語っていただこう。

・暗黙の型変換
・型拡張
0390デフォルトの名無しさん2006/06/19(月) 00:37:34
ぼくちんはまだ
「2.0はdouble型のリテラルでしたごめんなさい」
が言えてないのか
0391デフォルトの名無しさん2006/06/19(月) 00:40:46
>>381
たしかにC/C++において、
(配列の要素数など)整数定数式が要求される場所以外では、2と(int)2.0は等価。

でも2.0はあくまでdouble型。
しかし(int)2.0とした場合、コンパイラは定数式だからコンパイル時にint型に変換してしまう。
0392263≠精度フェチ2006/06/19(月) 00:53:22
おや、未だやってたのか。
確か、失礼するのどうのと言ってたのじゃなかったのかな。
あーそうか、「去る」と言う意味ではなく文字通り、「失礼な行為を行なう」と言う意味だったのか。
#って、アンカーなくても被害妄想全開でレス来るんだろうなぁ。
0393デフォルトの名無しさん2006/06/19(月) 11:20:31
class out {
friend ostream &operator<<(ostream &o, out ob);
public:
int a;
int func() { return 99; }
};

ostream &operator<<(ostream &o, out ob)
{
o << "unko\n";
return o;
}

int main()
{
out ob;

cout << ob;
cout << ob.func();
}
これを実行したらプログラムが強制終了します。
ob.a = 10;を追加すると動きました。
変数に値を格納していないオブジェクトはメモリ上に存在しないということですか?
0394デフォルトの名無しさん2006/06/19(月) 11:59:21
しないぞ?
0395デフォルトの名無しさん2006/06/19(月) 11:59:51
強制終了が抜けた・・・
03963932006/06/19(月) 12:16:21
>>394
もう一度実行してみましたがやっぱり途中で落ちます。
環境のせいだったみたいですね。
VisualC++.net2003を使っています。
0397デフォルトの名無しさん2006/06/19(月) 12:47:00
BCC,MinGW,VC++6,VC++2003,VC++2005全部落ちなかった。
0398デフォルトの名無しさん2006/06/19(月) 14:27:17
>>386  >>389
このスレは個人を特定して考えを聞くスレじゃありません。
何偉そうに 〜〜(して)いただこう?なんて催促してんの?

さて、sizeofの2.0と2について、結果が8と4バイトということだったが
それはメモリの領域のサイズのことであって、しつこいようだけど
2.0そのものは定数だし「変数じゃない」ってことは理解しているんだろうか?

そして、2.0というように、小数点以下のある値を精度を落とさずに代入するには、
浮動小数があ使えるdouble型で宣言されたものにするのが適切
というのが言語の仕様や検証結果から分かることではないだろうか?

まぁ、こっちは変数の型のキャスト演算子と計算式の中の定数について
しっかり述べているのに、 >>386  >>389 みたいな疑問を抱く奴に
いちいち答えを強要される必要はないし、答えなきゃこいつは無知だの
勝手に言われてもかまわない。俺が知らないわけじゃないし。
問題は俺が最初に何の質問に対して答えたか?
そっちを理解できない奴が勝手に自分が疑問に思ったことを
いちいちつきつけられるスレじゃないし。そんな質問は
自分で言語の仕様を知って理解すべきだろ。
どこの学校言ってんだよ、こいつら?分からなきゃ誰かに教えてもらわなきゃ
やっていけない、学習能力のない痛いお子ちゃまですか?
0399デフォルトの名無しさん2006/06/19(月) 14:31:24
>>398
君の脳内仕様はどうでもいいです><
0400デフォルトの名無しさん2006/06/19(月) 14:55:42
>>398
なんか喋る前に、>>385に答えろ、馬鹿が
お前の脳内言語仕様はちらしの裏にでもメモしとけ
0401デフォルトの名無しさん2006/06/19(月) 15:05:04
>>398
変数か定数かなんてことは誰も話題にしてないことに気づけよ。

>>349
>それについては、2.0が変数か定数かの方が論点になってるだろ・・・

その論点の発端となった、お前以外の発言番号を示せるものなら示してみろ。
0402デフォルトの名無しさん2006/06/19(月) 15:20:12
>>353とか悪質だな。8進数の数値計算の話じゃないのに
上の方で勝手に
>07って書いても10進数だって
とか言ったアホがいるから悪いんだろ。煽って荒らしているのはどっちだ?
そろそろ通報した方が良いな。ついでにどこの専門学校から書き込まれているか
調べてもらいたいね。
0403デフォルトの名無しさん2006/06/19(月) 15:20:44
>>400
>答えろ
命令しても無駄。ここで出た質問に「確実に答えてもらえる」すれじゃありません。
そろそろうざいね、低レベルな低学歴って。
0404デフォルトの名無しさん2006/06/19(月) 15:20:45
>>398
良くも悪くも周りがみんな自分と同レベルだと思わない方がいいよ。判っているとは思うけど。
0405デフォルトの名無しさん2006/06/19(月) 15:23:10
>>401
>変数か定数かなんてことは誰も話題にしてないことに気づけよ
定数の型についてが最初の話題じゃないって気づけよ?
勝手に論点すり変えて、自分勝手な議論を持ち出すなよ?
こっちが理解していないみたいなことを言うが、自分で言語の仕様を理解して
適切に記述できないことを

露 呈 し な く て 良 い か ら さ ぁ   専 門 学 校 生 w 

ついでに、2.0は定数だよ?人間の目でも小数点以下があることが分かるじゃん?
コンピュータもちゃんと8バイトで計算に使う数値を格納するメモリをとってるだろ?
それはsizeofで分かったろ?いい加減うざい。
本当に通報するね。悪質だよ、ここ。
0406デフォルトの名無しさん2006/06/19(月) 15:24:36
>>404
>りがみんな自分と同レベルだと思わない
思ってないよ。初心者歓迎でしょ?少なくともこのスレで
屁理屈や理解していない議論を持ち出しているバカは低レベル。
そんな奴らにまともなソースはかけないのは分かっているし
いつまでもつまらん質問に答えようとも思わない。
が、バカはバカだときづかぜるきっかけを与えなきゃ、いつまでも社会のお荷物で困るんだよ
犯罪者になるなよ、低学歴
0407デフォルトの名無しさん2006/06/19(月) 15:25:01
そろそろ出しとくか。

ヒント:頭のおかしい人は相手にしないようにしましょう
ヒント:強度の学歴コンプレックスを持った人も相手にしないようにしましょう
0408デフォルトの名無しさん2006/06/19(月) 15:26:41
それじゃ最後に、以下の定数で表される計算式を代入するさいに
精度が保たれる型の変数は何か?
a = 1*0.5
b = 2+2
c = 2.5 + 1
さぁ、計算結果に応じて代入するabcの適切な型を宣言してください。
また、メモリの無駄な確保はしないように答えなさい(すべてdoubleは不適切とする)

これくらいの問題に答えられなきゃ、お前ら小学生からやり直せ
0409デフォルトの名無しさん2006/06/19(月) 15:26:59
>>405
頼むから通報してくれよ。マジで。
0410デフォルトの名無しさん2006/06/19(月) 15:32:25
規格書はここから見れる。見たことが無い人は読んでおくといいよ。
http://www.jisc.go.jp/
「JIS検索」から規格番号 X3010でいわゆるC99、X3014でC++が見れる。
今言い合っている点に関してはC89からC99まで特に変化は無いはず。
0411デフォルトの名無しさん2006/06/19(月) 15:35:19
>>385の何を間違えだと言った?論点がズレてるね。
どう考えても2つめは計算の結果の 値 が等しいんであって
値として出された数値の型(精度)については考慮していない無意味な質問だよ。

>定数である
そうだよ?見て分かるじゃん。変数ってのは定まっていない値を入れるから
わざわざ何か値が入りますよって宣言してメモリを確保してんだから。
定数だけどdouble型とかは関係ない。double型って
浮動小数でしょ?2.0は固定小数だよ?頭大丈夫か・・・
既に浮動小数の表現についても過去ログにレスがあるけど?
123.45だったら1.2345 x 10^2って表したら浮動小数(double型)って思えと言うのか?ってのは
ご自由に解釈してください。少なくとも2.0は固定小数であってdouble型とは関係ない。

>等価である。
値が同じだからといって、変数の型まで不適切にして良いわけじゃない。
キャスト演算子についてもバグが報告されている。
最初っから数式が小数点以下も扱うもんだと分かったら
その計算式をの値を代入する変数の型はdoubleにしときゃ良いって話で終わるよ?

自分の目でそういう部分を判断できなきゃ、自分が適切なプログラムを作れなくて困るだけ
一生2.0が何型か?について議論してなさい。
とりあえず答えたけど?自分(質問者)はバカですが何か?って質問に対して
あ〜そうですね?って俺に答えさせただけだな。恥ずかしいね
本当に頭の弱い人って。お願いだから浅はかな考えで社会に出て
犯罪を犯さないでくれ。いつまでもあんたらみたいな「低俗な人間」に
入れ知恵をするつもりはないし、お前らもその程度じゃ賢くはなれんよ。
何でもかんでも答えてもらえる、自分の思った通りに答えない人は嫌いになる
みたいな感情まで持ち込んでどうすんだよ?プログラムは感情なんて当てにしてくれないぞw
0412デフォルトの名無しさん2006/06/19(月) 15:35:35
>>406
わかっているならバカや低レベルや初心者にもわかりやすく書いてください。
バカは死んでも直らないと言う信念をお持ちであれば、
せめて低レベルや初心者だけでも相手してやってください。
0413デフォルトの名無しさん2006/06/19(月) 15:47:31
>>411
> >>385の何を間違えだと言った?論点がズレてるね。
> どう考えても2つめは計算の結果の 値 が等しいんであって

ヒント:暗黙の型変換(キャスト)
0414デフォルトの名無しさん2006/06/19(月) 15:51:37
C/C++的には「2.0」は浮動小数点数リテラルであって、それ以上でもそれ以下でもないと思うが。
つーか定数ってなに?
0415デフォルトの名無しさん2006/06/19(月) 15:54:29
>>376
>ああ、これね。これが何か?変数じゃない値で
>メモリはdoubleと同じ分だけ使っているが、それは精度を落とさぬよう
>コンピュータ側がやっていること

だったら、>>242の下のコードは全く問題ないね!
0416デフォルトの名無しさん2006/06/19(月) 15:54:53
>>411
C/C++には“言語仕様上”、固定小数と言う概念は無い。

C/C++で数値を扱う型は数値型と分類されている。
数値型は整数型と浮動小数点数型に分かれる。
当然intは整数型、doubleは浮動小数点数型に分類される。

標準規格ではリテラル(お前の言う定数)がどんな型になるかも規定されている。(>>410から見てみろ)
それによればC/C++において2.0はdouble型になる。

俺が語っているのでは無い。規格書がそう語っているのだ。
0417デフォルトの名無しさん2006/06/19(月) 15:54:59
>>414
> C/C++的には「2.0」は浮動小数点数リテラルであって、それ以上でもそれ以下でもないと思うが。

その通り。

> つーか定数ってなに?

リテラル(Literal)の和訳。
0418デフォルトの名無しさん2006/06/19(月) 15:55:22
うお、コピペしたら、アンカー違うとこ指してるじゃん。
めんどくさいので訂正はしない。
0419デフォルトの名無しさん2006/06/19(月) 16:01:10
>>405
変数の型についてが最初の話題じゃないって気づけよ?
勝手に論点すり変えて、自分勝手な議論を持ち出すなよ?
こっちが理解していないみたいなことを言うが、自分で言語の仕様を理解して
適切に記述できないことを

露 呈 し な く て 良 い か ら さ ぁ   専 門 学 校 生 w 
0420デフォルトの名無しさん2006/06/19(月) 16:03:32
>>417
定数と書くと、#defineやconst (C++)などによって名前を付けたものというイメージを持つ人が多いんだ。
0421デフォルトの名無しさん2006/06/19(月) 16:07:23
>>411
C/C++において385の2つの式は、結果の型も同じ。
そういう規則だから。
0422デフォルトの名無しさん2006/06/19(月) 16:09:08
>>413
>ヒント:暗黙の型変換(キャスト)
それがバグの原因だよ。もっと必要な文献に目を向けたらどうだ?
だから適切にキャスト演算子を使うか、最初っから計算結果を代入する型にあわせて
計算式の中に使う変数の型もあわせておいた方が良いってのが報告されてんだよ
0423デフォルトの名無しさん2006/06/19(月) 16:11:07
>>421
だから?代入する型の変数をどうしたら良いか?って話になるなるだけじゃん。
まだわかってないな・・・精度の問題なのか、値が扱うメモリの領域の大きさがどうなのか?
議論をはっきりしろよ、おめぇ騒ぐだけで相手を無理に否定しようとしているだけじゃん。
相手がどうだろうと、言語を作った人が決めたルールや仕様書があんだろが?
0424デフォルトの名無しさん2006/06/19(月) 16:11:06
ふつー、「const定数」とか「デファインした値」とか言わないか?俺の周りではそうだが。
それとコード中に出てくる数値リテラルなどのことは「直値」と言うな。
「リテラル」は対人コミュニケーションでは使わない。相手が理解できない場合があるからな。
自分が書く文章では使うが。
0425デフォルトの名無しさん2006/06/19(月) 16:12:43
もう何がなんだか。そこで、

ヒント:頭のおかしい人の相手はしないようにしましょう
0426デフォルトの名無しさん2006/06/19(月) 16:13:33
>>422
今はバグの話をしているのではないと俺は思っている。

暗黙の型変換によって385のBの2つの式は
同じ意味(結果の型・値、途中の計算過程など全てが等価)になると主張するだけだ。
0427デフォルトの名無しさん2006/06/19(月) 16:15:24
>>423
俺が気付いていないうちに242のcがdoubleかfloatかの違いの話になっていた?
今まで俺はずっと代入式の右辺の部分(385のB)についてだけ話していると思っていたよ。
0428デフォルトの名無しさん2006/06/19(月) 16:16:22
>>422
式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
>>428
それだと式2の暗黙の型変換が行われるタイミングが勘違いされそう。
double型の値で割られるからdouble型へ暗黙の型変換がなされるという風に読み取れない。
0430デフォルトの名無しさん2006/06/19(月) 16:23:41
castとtype conversionって同じ概念だっけか?
■ このスレッドは過去ログ倉庫に格納されています