トップページ⇒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
0232デフォルトの名無しさん2006/06/17(土) 15:19:26
テンプレート関数ってオーバーライドできんだっけ?
0233デフォルトの名無しさん2006/06/17(土) 15:33:04
>>232
いつの時代の人ですか?
とっくにできるようになりましたよ。
0234デフォルトの名無しさん2006/06/17(土) 15:34:24
煽りいくない
0235デフォルトの名無しさん2006/06/17(土) 16:39:20
>>231
一般的に、floatの方がlongより精度がないので問題が出そう。
0236デフォルトの名無しさん2006/06/17(土) 16:42:19
>>232
オーバーライドはできないなぁ。
オーバーロードならできるけど。
>>233 いつの時代の人ですか?
0237デフォルトの名無しさん2006/06/17(土) 17:06:55
structにprivate指定できるのがむかつく
0238デフォルトの名無しさん2006/06/17(土) 20:54:51
>>237
D&E読めば少しは納得する気になれるかもしれない。
0239デフォルトの名無しさん2006/06/17(土) 22:58:08
等加速度直線運動についてのプログラムを書いたんですが、もうちょっとすっきりさせたいので赤ペン先生お願いします。
初心者なのでお手柔らかにお願いします
ttp://up.spawn.jp/file/up25025.txt
0240デフォルトの名無しさん2006/06/18(日) 01:39:43
>>239
何かと思ったら計算するだけかと思いきや何で全部intなんだよ
toukasokudoの中の変数はdoubleかfloatを使うか、割り算の前に1.0を掛けておけ
0241デフォルトの名無しさん2006/06/18(日) 01:45:08
>>239
各 case 節を関数に分けるといいよ。
何度も使われてる数値入力も関数にするのがいいよ。
0242デフォルトの名無しさん2006/06/18(日) 02:58:25
Visual C++ 2005 Express Edition 使ってCの勉強最近始めたっばかりなんだが

#include <stdio.h>
int main()
{
int a = 10;
int b = 7;
double c = (double) (a+b)/2.0;
printf("%f",c);
return 0;
}

「10」と「7」の平均を求め、小数点以下まで正しく表示させる問題で
上のが答えで下のが自分でやったものでどっちとも同じ答えが出力されるのですが
これはこれでいいのでしょうか?

#include <stdio.h>
int main()
{
short a = 10;
short b = 7;
float c = (a+b)/2.0;
printf("%f",c);
return 0;
}
0243デフォルトの名無しさん2006/06/18(日) 03:07:12
>>242
その場合は問題は無い、ように見えるが、厳密に言うとキャスト演算子を用いる方が適切。
結果は問題なくても、処理の流れとしては (double) のある方が適切。
0244デフォルトの名無しさん2006/06/18(日) 03:12:23
趣味の問題だと思うがなあ。
0245デフォルトの名無しさん2006/06/18(日) 03:14:53
>>242
それじゃ、(double) をつけずに c = a/b をやってみ。
次に c = (double)(a/b) と c = (double)a/(double)b を比較してみ。
どういう結果になるか?
各々の変数に対して (double) をつけなきゃ意味がないのが分かるよ。
a+b と変数同士が足し算だったから分からなかっただろうけど
変数同士の割り算ならどう?
0246デフォルトの名無しさん2006/06/18(日) 03:15:24
>>244 そりゃ違うだろw 一個人の趣味で言語の仕様が勝手に決まったら怖いよぉ〜
0247デフォルトの名無しさん2006/06/18(日) 03:17:21
普通はintとdoubleを使う、と斜め上のレスをしてみる
0248デフォルトの名無しさん2006/06/18(日) 03:24:45
よーしパパ、long long intにlong long double使っちゃうぞ
0249デフォルトの名無しさん2006/06/18(日) 03:25:31
よーしぼくちん、キャスト演算子なんて面度だから
変数の定義はすべてdoubleにしちゃうぞぉ〜
0250デフォルトの名無しさん2006/06/18(日) 03:29:43
普段は特に気にせずdoubleを使ってるが、結構奥深いのね。

C言語:float型の精度
ttp://homepage1.nifty.com/aok2/004/c04.html
0251デフォルトの名無しさん2006/06/18(日) 03:36:39
うむ、たかが0〜1の間の細かい数値でも、数学で出てくる
近似値だの常用対数だの、円周率だの、そういった数値計算を扱わず
整数ばかりを扱う人にとっては気にせんでもやっていけるもんだねw
0252デフォルトの名無しさん2006/06/18(日) 03:42:54
小数を扱う人たちの中にも、桁オチなんかされちゃ困る人もいるんですが
0253デフォルトの名無しさん2006/06/18(日) 03:44:35
>>251
はいはい、えらいえらい。自慢はよそでやってね。ちらしの裏とか。
0254デフォルトの名無しさん2006/06/18(日) 03:45:21
誰も誰が必要とするか?については言ってないよ?
整数ばっかり扱っている奴にはほとんど気にしなくてもやっていけるくらい
その問題にぶち当たらないってことを指摘したまでだが?
どうもこういう板には自分の考えに沿わない奴を排除したがる奴がいて困るw
適切か不適切かはコンピュータがはじきだしてくれるから、安心しろw
0255デフォルトの名無しさん2006/06/18(日) 03:45:54
そこでfloatですよ!
0256デフォルトの名無しさん2006/06/18(日) 03:46:51
>>252=>>253
なんなのお前ら?自分が答えられなかった、知らなかったことを知っている奴を妬んでいるように聞こえるが?
違いに気づかないくらい、整数、あるいは除算に定数を使っている奴が多いってことだろ?
やれやれ・・・お前らじゃ変数の型にすら理解していないようだ、失せろ、専門学校程度のクズ共
0257デフォルトの名無しさん2006/06/18(日) 03:49:11
>>252
>桁オチなんかされちゃ困る
誰が桁オチを良しとした?意味を理解できない低学歴ってほんっと困るねw
0258デフォルトの名無しさん2006/06/18(日) 03:49:52
>>245は桁オチする例をモロに出したんだが・・・やっぱアホには分からんよねw
失せろ、正論も言えないバカ
02592422006/06/18(日) 03:49:57
皆さんありがとうございます
ちょっと荒れる質問だったようで申し訳ないです
0260デフォルトの名無しさん2006/06/18(日) 03:51:58
>>259
気にせんでいいよ。キミが悪い訳ではないw
0261デフォルトの名無しさん2006/06/18(日) 03:52:28
>>244=>>252=>>253
何こいつ?自分が趣味程度にしか思わなかった程度の知識しか持ってなくて
説明を聞いて理解したとたん、小数を理解して扱う人が少ないって意見に対して
自分は小数命!みたいなレスしてんの?(プ
0262デフォルトの名無しさん2006/06/18(日) 03:53:20
>>259
そうそう、君が悪いんじゃない、桁オチを許さないって思っている頭の固い奴が
勝手に小数点以下を切り捨てても良いもんだと言った奴がいると勘違いしただけだからw
0263デフォルトの名無しさん2006/06/18(日) 04:53:01
途中のレスは鬱陶しくて読んでないが、>242に関しては2進化で桁落ちが発生することはないから全く同じだな。
勿論、右辺は2.0で割っている以上等価だし。
0264デフォルトの名無しさん2006/06/18(日) 05:06:21
除算で使われている値が定数だから見た目では分からないんだよね。
小数を扱わない型で宣言された変数を除算で扱った場合は、モロに分かる。
厳密に言えば、 a / (double)b で a に (double) をつけなくてもいけるが
とりあえず計算式を代入する変数の型に合わせておいてもおk。
0265デフォルトの名無しさん2006/06/18(日) 05:07:46
っつか、(double)a/bでもいけたおw
0266デフォルトの名無しさん2006/06/18(日) 05:30:49
C++どころかプログラム自体全然知らなくて、
少し依頼っぽくなるのですが、
窓立て2ってソフトがあるのですが、
ttp://www.ksky.ne.jp/~seahorse/mtate2/
どうしても立体化ボタンのダサさが気になり、替えたいのですが、
立体化ボタンがC++で直接書かれているのでどうにもなりません。
窓立てフォルダ内に置いた指定画像ファイルを
表示させるようなプログラムには出来ないんですか?
もし、そのような改造を施せるのであれば、教えてください。
0267デフォルトの名無しさん2006/06/18(日) 08:27:53
>>266LoadImageすればできるだろ
0268デフォルトの名無しさん2006/06/18(日) 08:57:45
>>266
作者に頼めば?
って、既に掲示板で同じこと言ってるのか。
ソースはあるけどBCCだしなぁ。
0269デフォルトの名無しさん2006/06/18(日) 09:38:25
UIがダサいので変えられないかとこれ以上なく直接的に書いててわらた
もうちょっとオブラートに包め
0270デフォルトの名無しさん2006/06/18(日) 12:01:59
自作自演ひどすぎですなぁ。
必死な奴の特徴丸分かりで笑える。
他のスレでもよく見る奴。
0271デフォルトの名無しさん2006/06/18(日) 12:03:37
宿題程度の問題で数値演算やって、鼻高々な馬鹿
0272デフォルトの名無しさん2006/06/18(日) 13:06:53
りそーすはっかー
0273デフォルトの名無しさん2006/06/18(日) 15:12:15
>>270
245=246=247=248=249=256=261=262とかw
0274デフォルトの名無しさん2006/06/18(日) 15:15:59
Cの質問です。データが(数字)(半角スペースいくつか)(文字)(改行)
例:
164 hoge
24 hogehoge
300 hog
…
というテキストから数字と文字を取り出したいんですが、
int num;
char str[1000][128];
int count = 1;
fp = fopen("test.txt" , "r");

while( (temp = fscanf(fp , "%d %s" , &num , &str[count-1])) != EOF){
printf("line:%d\n" , count);
count++;
if(temp == 2){
printf("%d %s\n" , num , str[count-1]);
}
else{
fgetc(fp);
}
}
として、変なのが入ったら切り捨てて、戻り値が2の場合のみとりあえず表示させてみようっていうソースを書いたつもりなんですが、出力で上手く出ないようです…。
どこがまずいのでしょうか・・・
0275デフォルトの名無しさん2006/06/18(日) 15:29:50
>>274
printf("%d %s\n", num, str[count - 2]);
0276デフォルトの名無しさん2006/06/18(日) 15:36:43
>>275
指摘通り書き換えたら正しく入ってたようです
ありがとうございました
0277デフォルトの名無しさん2006/06/18(日) 16:34:07
>>273=>>270 < こいつが自作自演で荒らしている低学歴
それ、全部イコールじゃないのは書き込んでいた奴なら分かるけど
それ以外のくだらねぇ煽りをしているのがお前だってバレバレだから
0278デフォルトの名無しさん2006/06/18(日) 16:35:52
ヒント:頭のおかしい人は相手にしないようにしましょう
0279デフォルトの名無しさん2006/06/18(日) 16:39:13
んで>>252が一番アホ。誰もプログラミングで小数を使わないとは言っておらず
キャスト演算子がなくても問題のない、あるいは気づかない人が
どっちも同じだと勘違いする例が上で挙げられていただけなのに気づかないだけ。
>>251には小数点以下の数値が重要となる一例
>近似値だの常用対数だの、円周率だの
が書かれているにも関わらず、それらの計算式を使う必要がある場合は
結果からして小数点以下が落とされると困るのは分かっているはずで
そういう計算式を扱うようになれば、プログラム言語の細かい部分にまで
目がいくようになるわけで。
まぁ、理解力のないバカは、相手の意向を無視して自分勝手な解釈で

  勘  違  い  をして恥をかくから痛々しいw
0280デフォルトの名無しさん2006/06/18(日) 16:40:42
ヒント:頭のおかしい人は相手にしないようにしましょう
0281デフォルトの名無しさん2006/06/18(日) 16:57:47
>>277
自演しまくってる本人が何言ってんだかwwww
0282デフォルトの名無しさん2006/06/18(日) 17:00:03
数値計算で注意すべきはオーバーフローする場合と桁落ちの時だ

数値計算の基礎で叩き込まれるけど、キャストしたからOKって事では無いぞ
引き算なんかは一気に演算精度落ちちゃうから
有効桁数云々言うなら式の変形も考えないと
0283デフォルトの名無しさん2006/06/18(日) 17:01:57
ヒント:頭のおかしい人は相手にしないようにしましょう
0284デフォルトの名無しさん2006/06/18(日) 17:03:23
>>281
頭のおかしい人は相手にしないようにしましょう
0285デフォルトの名無しさん2006/06/18(日) 17:05:36
ふつー、数値演算ライブラリなわけだが。
0286デフォルトの名無しさん2006/06/18(日) 17:29:27
>>282
そうだよ、だからってそんな精密な計算を必要とする計算式に
int型で宣言した変数を扱うこと自体どーとか言う前に
上で挙げられた例は気づかないものだって話じゃん。
キャスト演算子なんて使うのが面倒なら、よーしぼくちん
面倒だから全部変数をdoubleで宣言しちゃうぞー
で良いじゃんw
0287デフォルトの名無しさん2006/06/18(日) 17:30:51
>>281
言葉も理解できない低学歴(専門学校生)ごときが、何煽ってんだよ?w
せっかくの休日も煽りをするためだけに使うなんて、くせぇ人生送ってんなぁ〜お前w
あっ、もしかして、ニート?w
0288デフォルトの名無しさん2006/06/18(日) 17:35:43
ものすごく精度の高い数値の必要のない計算式を扱うだけの人は
そういう点に気づかないんだろ。問題や論点の趣旨が分かってない奴がファビョってるだけ。
誰も小数点以下の数値を扱う必要がないとは言ってないし。
扱う奴が勝手に困るとか言っただけw
こっちは扱う人間を困らせるつもりなんてないし、
扱う場合がない例について言ったところで何も困らんだろ。
0289デフォルトの名無しさん2006/06/18(日) 17:37:51
荒らしウザイのぅ
0290デフォルトの名無しさん2006/06/18(日) 17:39:23
((double)a+b)/2.0 みたいに動作に影響を与えるものなら趣味の問題じゃないが、
(double)(a+b)/2.0 みたいに動作に影響を与えないものなら趣味の問題だよなあ。
0291デフォルトの名無しさん2006/06/18(日) 17:48:03
まぁ精度云々は置いとけ、 >>242 の何が問題か?
キャスト演算子を使わなくても結果にはほんとうに影響がないが
こういう場合でも、キャスト演算子を使った例を出して質問してんだから
それについて答えてみろよ?>精度フェチ
0292デフォルトの名無しさん2006/06/18(日) 17:53:58
あぁん?どうした?結局、キャスト演算子のことについて答えられねーじゃん。
第一、キャスト演算子は何も精度を保つとかじゃなく
型の違う変数同士の計算式で使って帳尻あわせすんだろが?
何も変数の型がdoubleだけじゃないんだから、ちったぁ幅広い観点で物事を理解しろや、な?
0293デフォルトの名無しさん2006/06/18(日) 17:55:13
ヒント:頭のおかしい人は相手にしないようにしましょう
0294263≠精度フェチ2006/06/18(日) 17:56:27
>>291
また例によって途中は読み飛ばしているのだが、>242の右辺は全く等価でキャストする必要は全くないよ。
あくまでも、代入される対象の変数の型が違うだけ。
0295デフォルトの名無しさん2006/06/18(日) 17:57:06
>>282=>>286
なにが「そうだよ」だ。pgr
0296デフォルトの名無しさん2006/06/18(日) 18:03:00
>>294
>代入される対象の変数の型が違うだけ
まだわかってないのか、呆れた・・・

>>295
数学で出てくる微積分だの、常用対数だの、円周率だの
無限小数が続くような精度の重要性の問題でキャストの話をしたんじゃねーんだよ?
まだ上の議論の論点がわかってねーのか、呆れたな、ろくに勉強してこなかった
オチこぼれの「専門学校生」ってのは
0297デフォルトの名無しさん2006/06/18(日) 18:06:54
>>296
((a + b) / 2.0) と ((double)(a + b) / 2.0) が等価でないということでしょうか?
0298デフォルトの名無しさん2006/06/18(日) 18:07:05
>>242で注目しておく点とし
>float c = (a+b)/2.0;
ここ、除算に使っている値はなんだ?そもそも何型の変数でもないな?
分かったか?タコ助共。問題がないからってその前にあるint型の変数を
無視しても良いとか言い出したら笑っちゃうよ?
そもそも、除算するくらいなら浮動少数を使っとけって、うぜぇ。
まぁ、こういうと今度は小数点以下のある数値の積、和、差については良いんでちゅか〜?
って屁理屈ごねてくるんだろw
0299デフォルトの名無しさん2006/06/18(日) 18:09:40
AA貼りまくりで荒らす奴なら対処方もあるんだが、こいつの場合、一見何かを語って
いるように見えるので、始末におえない。
0300デフォルトの名無しさん2006/06/18(日) 18:10:01
>>298
> ここ、除算に使っている値はなんだ?そもそも何型の変数でもないな?
short 型の変数と、 double 型のリテラルだよ。
03013002006/06/18(日) 18:11:40
ん?除算自体の2項のことかな?そうなると、確かに変数じゃないな。
言いたいことはよくわからんが。
0302デフォルトの名無しさん2006/06/18(日) 18:14:53
あーあ、相手しちゃってるよ・・・
0303263≠精度フェチ2006/06/18(日) 18:19:18
あーなんだ、2.0がdoubleじゃないと思い込みたい人だったのか。

>>297
そういうわけで、>296にとっては等価ではないと思い込みたいらしい。
0304デフォルトの名無しさん2006/06/18(日) 18:20:35
数値計算・・・
積み残しとかはなんか嫌だから
小さい値から加えてくようにしてる。
0305デフォルトの名無しさん2006/06/18(日) 18:27:32
「除算に使っている値」という表現で素人なのが丸バレなんですが。
0306デフォルトの名無しさん2006/06/18(日) 18:34:39
と玄人が一言
0307デフォルトの名無しさん2006/06/18(日) 18:59:04
class test {
int a;
public:
test(int i) : a(i) {};
};
上のようなコンストラクタを見たのですが、これは
test(int i) { a = i; }
と同じ意味ですか?
同じだとしたらどちらが一般的な書き方なのでしょうか。
0308デフォルトの名無しさん2006/06/18(日) 19:06:58
>>307
意味は違う。
前者は a を i で初期化している。
後者は a を初期化せず i を代入している。
0309デフォルトの名無しさん2006/06/18(日) 19:20:00
>>308
じゃあ、後者でaはいつ初期化されるんですか?
0310デフォルトの名無しさん2006/06/18(日) 19:22:11
>>309 初期化がされたうえで代入が行われる。
test(int i) : a(i) {}; なら初期化だけで済む。
0311デフォルトの名無しさん2006/06/18(日) 19:23:06
>>309
意味論的には307の前者の書き方でaが初期化されるのと同じ時に、
(初期化子が無いので)不定の値で初期化されると言えば良いかな。
03123072006/06/18(日) 19:32:41
解答ありがとうございます。
エラーの原因が分かったみたいです。
前者の場合はコピーコンストラクタが動いていたのかな。
後者だと、intの引数無しコンストラクタと代入演算子が動く・・・。
0313デフォルトの名無しさん2006/06/18(日) 19:51:45
すいません。C言語で詰まっています。
文字列を返す関数を作っているのですが、

char *Method() {

char strA[] = "こんにちは";
return strA;;
}

これだとstrAはローカル変数へのポインタなのでもちろんダメなわけですが、
なんとかして文字列を返す方法はありませんか?
ちなみに引数は一切取りたくありません。
0314デフォルトの名無しさん2006/06/18(日) 19:55:33
static
0315デフォルトの名無しさん2006/06/18(日) 19:55:45
char *Method() {

return "こんにちは";
}
0316デフォルトの名無しさん2006/06/18(日) 19:55:46
>>313
char *Method() {

char* strA = "こんにちは";
return strA;;
}
0317デフォルトの名無しさん2006/06/18(日) 19:57:31
関数にする意味がわからない・・・
0318デフォルトの名無しさん2006/06/18(日) 20:00:41
そういう関数の宣言はconst char *Method()が良いな
0319デフォルトの名無しさん2006/06/18(日) 20:05:17
>>310-312
ちがう。後者では a は初期化されず、代入まで不定な値となる。
意味上はね。
0320デフォルトの名無しさん2006/06/18(日) 20:08:19
>>319
そもそも初期化ってなんだよ
0321デフォルトの名無しさん2006/06/18(日) 20:10:36
>>320
ちょっと古いが。
ttp://www.kuzbass.ru/docs/isocpp/decl.html#dcl.init
0322デフォルトの名無しさん2006/06/18(日) 21:04:30
>>314-316
ああなるほど。そうすると"こんにちは"は性的領域に確保されるんですね。
bufを取らないitoaを作ろうとしましたが、なぜいちいちbufを取るのか先ほど理解しました。
ありがとうございました。
0323デフォルトの名無しさん2006/06/18(日) 21:04:55
>>287
0324デフォルトの名無しさん2006/06/18(日) 21:06:29
性的領域
0325デフォルトの名無しさん2006/06/18(日) 21:07:55
>>299
何か語ってるかー?
馬鹿なだけだろ
0326デフォルトの名無しさん2006/06/18(日) 21:10:09
>303
が結論だな
0327デフォルトの名無しさん2006/06/18(日) 21:14:06
>>303
>2.0がdoubleじゃない
お前バカ?定数と型の指定のある変数の意味もわかってないのが露呈されただけ

専  門  学  校  は  こ  の  程  度  (  プ
0328デフォルトの名無しさん2006/06/18(日) 21:16:30
>お前バカ?定数と型の指定のある変数の意味もわかってないのが露呈されただけ
それはお前
0329デフォルトの名無しさん2006/06/18(日) 21:19:57
話の流れをぶった切るようで、申し訳ないですが・・・

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2099.txt

上手く、文字列の値が交換出来ないんですか、どこがダメなんでしょう…?
多分ポインタの辺りがまずいんだと思いますが…
0330デフォルトの名無しさん2006/06/18(日) 21:22:13
2.0をdoubleだと信じている椰子は専門学校生ケテーイらしいw
0331デフォルトの名無しさん2006/06/18(日) 21:25:20
>>328
なんで?まさか2.0って小数点以下を書いたら浮動少数になるの?バカだこいつ・・・
自分の知識が浅はかだってまだ気づいてないな。
キャスト演算子の括弧の中はな〜〜〜んだ?変数を宣言するときの型が入っていると思うがねぇ〜〜

>>330
決定っつーか低レベル決定。物事を理解する頭がないってこと。
定数と変数なんて、既に中学、高校の数学でやってんだし。
違いの意味に気づいてない奴は、惰性で数値計算をしているだけの
思考能力のないアホ
■ このスレッドは過去ログ倉庫に格納されています