C言語なら俺に聞け(入門編)Part 66at TECH
C言語なら俺に聞け(入門編)Part 66 - 暇つぶし2ch116:デフォルトの名無しさん
10/06/14 19:35:22
>>114
規格も読まないアホなんだなお前って

117:デフォルトの名無しさん
10/06/14 19:42:22
>>116
人をアホ呼ばわりするだけで根拠を示せないの?どっちが…

初期化するときにもリテラルは使えるが配列は使えないよね

118:デフォルトの名無しさん
10/06/14 19:49:48
もういいから。見てられないよ。

119:デフォルトの名無しさん
10/06/14 19:50:36
別々に確保されるという規格はないぞw
"ABC" と "ABC" のような全く同じ文字列どころか、
"DEF" と "ABCDEF" のように最後だけ同じ文字列を
1つにまとめるとかいう最適化だって許されてるくらいだのに

120:デフォルトの名無しさん
10/06/14 19:56:25
規格では、文字列リテラルは書き換えてはならない配列であると規定されている
ここで「書き換えてはならない」という持って回った言い方にしたのは、
書き換えてはならないにも関わらず、
昔との互換性のためにchar*への変換が許されているから
こういう特殊な扱いがあるという意味では確かに普通の配列とは異なるが、
型としては確かに配列型だ

121:デフォルトの名無しさん
10/06/14 20:08:40
>>120
特別な配列だということで納得しました

122:デフォルトの名無しさん
10/06/14 20:57:03
>>104
それはねーよ

123:デフォルトの名無しさん
10/06/14 21:04:40
>>122

124:デフォルトの名無しさん
10/06/14 21:20:23
>>123


125:デフォルトの名無しさん
10/06/14 21:21:30
恥ずかしい>>122>>124のいるスレはここですか

126:デフォルトの名無しさん
10/06/14 21:22:37
半加算器とか懐かしいなw

127:デフォルトの名無しさん
10/06/14 21:23:17
いまはそういうとこすっ飛ばして直接言語から始めるからな

128:デフォルトの名無しさん
10/06/14 21:25:31
bitの足し算とか意味不明なことを供述してるけど
整数の足し算が xor と and で出来るって言いたいんだろう
まあ幼稚園児でも知ってることだけど

129:デフォルトの名無しさん
10/06/14 21:27:19
ビットって単に2進数の桁のことだぜ
1桁の足し算は、と言ってるだけだ

130:デフォルトの名無しさん
10/06/14 21:27:42
>>128

131:デフォルトの名無しさん
10/06/14 21:30:17
おおもとの >>67 からずれすぎ

132:デフォルトの名無しさん
10/06/14 21:37:44
それが俺のジャスティス

133:デフォルトの名無しさん
10/06/14 21:53:56
>>120
「char *への変換が許されてる」っていうけど、そうじゃなく
配列のまま使うなんてことあるの?

 "hello"[2]

こういう感じ?


134:デフォルトの名無しさん
10/06/14 22:10:47
sizeof "hogehogehoge" == 13

135:デフォルトの名無しさん
10/06/14 22:21:22
>>133
そういうかんじ。

136:デフォルトの名無しさん
10/06/14 22:23:55
char* array = "hello";
printf("%c\n", array[1]);

137:デフォルトの名無しさん
10/06/14 22:28:19
>>136
ポインタだね。

138:デフォルトの名無しさん
10/06/14 22:59:08
>>135
おいおい
ポインタでもできることだろう・・・

139:デフォルトの名無しさん
10/06/14 23:06:59
>>120
一行目、なんか気になる。
そんな規定あったっけ?
入門スレだから?

140:デフォルトの名無しさん
10/06/14 23:18:18
大昔は書き換え可だったけど(char*に変換できるのはその名残)、今は不可
書き換え不可だと、同じ文字列をまとめたりする最適化ができるからね

141:デフォルトの名無しさん
10/06/14 23:30:58
できるね

142:デフォルトの名無しさん
10/06/14 23:34:50
>>140
そうだっけか?こりゃ失礼。
未定義なだけかと思ってた。
もっかい読み直してくるわ。

143:デフォルトの名無しさん
10/06/15 00:02:01
ああ、書き換えた時の動作は未定義だと思う

144:デフォルトの名無しさん
10/06/15 01:48:53
1つのソース内で同じ文字列リテラルが何度も出て来るケースって希だと思う
それだけのために最適化とか考える物なのかな

145:デフォルトの名無しさん
10/06/15 02:15:53
"\n" とか "%d" みたいな短い文字列は、大量にあってもおかしくないんじゃない
もしくは、マクロ中に含めてたりしたらいつのまにか爆散してるかもしれない

146:デフォルトの名無しさん
10/06/15 02:22:38
その程度だとメリットよりデメリットのが多くなりそうな気もする

147:デフォルトの名無しさん
10/06/15 02:41:37
ふー

148:デフォルトの名無しさん
10/06/15 02:53:43
文字列に限らずに
リテラルは1か所に集められるだろ。

int a=100, b=100, c;
c = a + b + 100 + 100;
if(printf("%d",100)==100);

これだけあっても 100 は1つだけで良い。

149:デフォルトの名無しさん
10/06/15 02:58:32
>c = a + b + 100 + 100;
ここは200になるだろw

150:デフォルトの名無しさん
10/06/15 03:00:48
整数値ならソースに埋め込んだ方が処理速度はずっと速くないか?
add ax, [label1]
よりも
add ax, 0064H
のがどう考えても効率がいい。使用メモリも少ない。

151:デフォルトの名無しさん
10/06/15 06:32:45
C言語にはBSS領域というものがあってだな・・・
初期化データはここに入れられる

152:デフォルトの名無しさん
10/06/15 06:34:02
data領域が初期値を持つ静的データ、BSS領域は0だった

153:デフォルトの名無しさん
10/06/15 07:02:43
そりゃ C の仕様と関係ないだろ。

154:デフォルトの名無しさん
10/06/15 08:07:15
いや、Cの歴史的経緯と深い関係がある

155:デフォルトの名無しさん
10/06/15 08:41:35
F

156:デフォルトの名無しさん
10/06/15 09:06:22
c = a + b * 100 + 100
ならよかったのに

157:デフォルトの名無しさん
10/06/15 14:20:18
はあ…

158:デフォルトの名無しさん
10/06/15 17:33:55
.netsdk2.0にwindows.hが入って無かったです
首吊ってきていいですか?

159:デフォルトの名無しさん
10/06/15 20:16:17
#include <stdio.h>
#define N 20
int main (void)
{
int j;
int f[N + 1];

f[0] = 1;
f[1] = 1;
f[j] = f[j - 2] + f[j - 1];

for (j = 0; j <= N; j++)
printf("f%d:%d\n",j,f[j]);

return (0);
}


上のプログラムを書きました。
f0:1
f1:1
f2:2
f3:3
f4:5
f5:8
以科略
という結果が欲しいです。
どこが間違えていてどこをどのように直せばいいのか教えてもらえませんか?
よろしくお願いします。

160:デフォルトの名無しさん
10/06/15 20:20:35
>>159
j に適切な値を代入して繰り返すべき
f[j] = f[j - 2] + f[j - 1];


161:デフォルトの名無しさん
10/06/15 20:30:00
#include <stdio.h>
#define N 20
int main (void)
{
int j;
int f[N + 3];

f[0] = 1;
f[1] = 1;

for (j = 0; j <= N; j++){
f[j + 2] = f[j + 1] + f[j];
printf("f%d:%d\n",j,f[j]);
}

return (0);
}

無理矢理

162:159
10/06/15 21:10:30
ありがとうございます。

>>160
そのようにしたいのですが、どうすればいいのかわからないのです
自分の書いたものではどこが間違っているのですか?

>>161
f[j + 2] = f[j + 1] + f[j]をfor文のループに入れてしまうんですね
自分のように上に書いておくとどうおかしいのかよかったら教えてください
自宅のパソコンにgnome端末が無いのでいまはできないのですが、明日>>161さんのを見せてもらいますね

163:デフォルトの名無しさん
10/06/15 21:19:56
>>162
元のだと、f[2]以降は定義されてないから、それを表示させようとしてもうまくいかない。
別にprintfのループに入れる必要はないが、繰り返し文が増えるが先に↓を書くとか

for (j = 2; j <= N; j++)
f[j] = f[j - 2] + f[j - 1];

↓環境がないなら例えばここを使おう
URLリンク(codepad.org)

164:デフォルトの名無しさん
10/06/15 21:21:13
ループに入れないのに、なんでf[j]って書いたのか理解できない

165:デフォルトの名無しさん
10/06/15 21:56:00
つーか j を初期化しろよ

166:159
10/06/15 22:07:23
>>163
なるほど!解決しました
これは便利ですね、丁寧な説明ありがとうございました

>>164
まだ配列だとか繰り返しだとかよくわからないのです



167:デフォルトの名無しさん
10/06/16 10:12:48
>>165
うっせーな

168:デフォルトの名無しさん
10/06/16 10:16:57
動作上問題がないのに必ず一言ケチを付けるアホがいるよな

169:デフォルトの名無しさん
10/06/16 10:29:49
初歩的な質問です

(1) int hoge1[10] = {0,1,2,3,4,5,6,7,8,9};
(2) static int hoge2[10] = {0,1,2,3,4,5,6,7,8,9};
(3) static const int hoge3[10] = {0,1,2,3,4,5,6,7,8,9};

プログラムを実行すると(1)と(2)はRAMメモリ上のどこかに確保されますよね
(3)もRAMメモリ上のどこかに確保されるんでしょうか?

170:デフォルトの名無しさん
10/06/16 10:46:08
>>169
環境が具体的に示してないので何とも言えないが、組み込み用の
Cコンパイラでは(3)の場合オプションを付ける事でROM上に置くような
環境も存在する

171:デフォルトの名無しさん
10/06/16 10:56:11
>>169
その他、通常(1)はスタックに確保されてその宣言に到達するたびに初期化される。
(2)は静的領域に確保されて起動時に一度だけ初期化される。
(3)は(2)とは別の静的領域に確保されて初期化される。また、更新できない。

それはさて、初期値を全て列挙するなら要素数は省略した方が意図が判りやすいかと。

172:デフォルトの名無しさん
10/06/16 10:59:10
ありがとうございます。
組み込みコンピューターの開発でsinとcosの計算結果を予め360*2個分
static constで定義しておいて利用するのが目的です
実行時にRAMに再び確保されるのはなんかメモリの無駄だなーと思いまして
質問させて頂きました

173:デフォルトの名無しさん
10/06/16 11:00:16
>sinとcosの計算結果を予め360*2個分
なんと無駄なことを。

174:デフォルトの名無しさん
10/06/16 11:19:21
>>172
要求するスピードや、RAM、ROM容量にもよるけど、最低45°分あれば可能。

175:デフォルトの名無しさん
10/06/16 11:43:35
助言ありがとうございます
45度分用意すればいいのは知っているのですが、今回は速度最優先なので
fn_sin(angle)という関数より sin[angle] で処理することにしました
余談ですが、始め0.1度づつ3600個*2のデーター用意したら
「そこまで精度はいらん」と怒られちゃいました(汗

176:デフォルトの名無しさん
10/06/16 12:05:52
速度最優先ならsinのテーブルじゃなくて、sinを使った式の結果をテーブルにした方がよくないか?
メモリはたくさん使っていいみたいだし。

177:デフォルトの名無しさん
10/06/16 12:19:46
>>172
>組み込みコンピューターの開発で
その開発環境の説明書見たほうが良いよー
何処に配置するかの説明が必ずあるハズ

(or 上司に聞く 明示的にROMに配置させるには どう記述するれば良い? って

178:デフォルトの名無しさん
10/06/16 21:09:17
11

179:デフォルトの名無しさん
10/06/16 21:13:10
巨人ファンです

180:デフォルトの名無しさん
10/06/16 21:26:52
楽天

181:デフォルトの名無しさん
10/06/16 22:30:17
>>175
速度最優先なら内臓RAMに展開を考慮
内臓Flashへのアクセスがノーウェイトで出来るなら良いが
CPU動作クロックが高い場合はウェイトが入っている可能性が高い

182:デフォルトの名無しさん
10/06/16 23:10:51
× 内臓
○ 内蔵

183:デフォルトの名無しさん
10/06/17 00:00:48
そもそもターゲットCPUが浮動小数点演算苦手な可能性があるから
整数を固定小数点数として扱って計算したほうがいいかも知れない

184:デフォルトの名無しさん
10/06/17 01:02:29
>>183
FPUがないCPUで速度最優先なのに浮動小数点演算するって低脳だろ
必然と固定小数点数にして整数演算することになる

185:デフォルトの名無しさん
10/06/17 01:50:39
ここの人たちで、だれが一番高速なsin関数を書けるか競争してみたら?
ターゲットCPUはもっとも一般的なcore2で

186:デフォルトの名無しさん
10/06/17 01:54:07
精度や使用メモリなどの制限をつけないと意味なくね?

187:デフォルトの名無しさん
10/06/17 01:54:28
>>185
sin(theta)

188:デフォルトの名無しさん
10/06/17 02:03:11
CPUにCore2使うような環境ならメモリは十分あるだろうからテーブル引くのが一番速い

189:デフォルトの名無しさん
10/06/17 04:44:01
てか内部的にテーブル持ってたりしないの?

190:デフォルトの名無しさん
10/06/17 04:51:03
ないな

191:デフォルトの名無しさん
10/06/17 05:07:29
そなんだ。
毎回計算してるとかライブラリさんも大変なんだなぁ

192:デフォルトの名無しさん
10/06/17 05:54:48
FSIN命令はFPU内部にテーブル持ってる
精度に問題がない限り、ライブラリはその結果を必要に応じて丸めてるだけ

193:デフォルトの名無しさん
10/06/17 06:49:33
main() { char *s="main() { char *s=%c%s%c; printf(s,34,s,34); }"; printf(s,34,s,34); }
がどうしてクワインになるの?

printfの中身にトリックがあると思うんだけど、
元ネタのWikipediaの説明読んでも理解不能でした。
URLリンク(ja.wikipedia.org)

194:デフォルトの名無しさん
10/06/17 07:11:11
printf()が何を表示してるか、順を追って考えてみれば?

195:デフォルトの名無しさん
10/06/17 07:13:24
printf の format をそのまま引数にも使ってるあたりがミソかと

196:デフォルトの名無しさん
10/06/17 07:31:29
なるほど、最初のsの%c%s%cは展開されるけど・・・ってことか。納得。

197:デフォルトの名無しさん
10/06/17 16:24:33
「#pragma ○○○」って、
プリプロセサーはどのように認識するの?
コメントとして?

198:デフォルトの名無しさん
10/06/17 17:20:36
>>197
その言語によるだろ
プリプロセッサーが機能する物もあるしそうでない物もある

199:デフォルトの名無しさん
10/06/17 17:38:29
言語はCに決まってんだろw
スレタイ読めよw

200:デフォルトの名無しさん
10/06/17 17:43:41
コンパイラによる

201:デフォルトの名無しさん
10/06/17 17:46:44
>>199
そのC言語に色々な種類があるということなんだよ

そもそもコンパイラ固有の指定を行う手段だと規定されているんだから

202:デフォルトの名無しさん
10/06/17 17:53:41
コンパイラ固有の指定を行う為にはプリプロセッサはpragmaをスルーするしかないだろう

203:デフォルトの名無しさん
10/06/17 18:00:23
>>202
プリプロセッサーを含めたコンパイラということ

204:デフォルトの名無しさん
10/06/17 18:03:23
プリプロセッサとコンパイラが一体化してるのもあるし

205:デフォルトの名無しさん
10/06/17 18:03:51
>>201
それはC言語の種類じゃなくて、処理系の種類だよ。

C言語の種類といったら、K&RとかANSIとかC89とかC99のような言語仕様の違いを言うんだよ。

206:デフォルトの名無しさん
10/06/18 05:23:43
ループしてブルースクリーン起こさせるソースください

207:デフォルトの名無しさん
10/06/18 09:55:06
>>205
君が言ってるのは、自分で書いてる通り「言語仕様」の種類だろ

もちろんそれを指すこともあるが、開発メーカーやそのバージョンによる違い、
処理系の違い、その他諸々を含めて色んな種類があるということ。

208:デフォルトの名無しさん
10/06/18 10:20:03
>207 素人はすっこんでろ

209:デフォルトの名無しさん
10/06/18 10:35:01
50

210:デフォルトの名無しさん
10/06/18 13:00:34
>>207
つまりVC8とVC9は別の言語であると。

211:デフォルトの名無しさん
10/06/18 13:16:43
正解

212:デフォルトの名無しさん
10/06/18 13:22:16
>>210
#pragma の仕様なんてバージョンごとに変わる
素人でも常識だわ

213:デフォルトの名無しさん
10/06/18 13:30:46
>>210
対応度違うからね、厳密には違うとみていい
別の言語とはどういうことだ
東京市の山手言葉と下町言葉は別言語なのか
大阪民国弁と帝都弁はは別言語なのか

214:デフォルトの名無しさん
10/06/18 13:34:52
>>212
#pragmaの仕様は特に変わってないとおもったけど、なんかかわったの?c99とか?

215:デフォルトの名無しさん
10/06/18 13:55:37
>>214
だから言語の種類によって変わる
どういう仕様かはそのコンパイラの仕様書やマニュアル見ないとわからん

コンパイル時に機能するとは限らず、
プリプロセスで機能するものから、リンクの動作を制御するのまで様々

そもそも #pragma 自体を認識せずエラーとなるコンパイラだって存在する(した)

216:デフォルトの名無しさん
10/06/18 15:12:59
昔のgccは#pragmaを極端に嫌って、pragmaが検出されるとコンパイル中に
Rogueというゲームを立ち上げて強制的にプレイさせるようになっていた

#pragmaが完全に処理系依存だという事を逆手に取ったジョークだ

217:デフォルトの名無しさん
10/06/18 16:23:54
>>215
「#pragma」自体が言語仕様では定められておらず、ベンダの個別実装であるということか。

218:デフォルトの名無しさん
10/06/18 16:33:29
>>217
#pragma自体は言語仕様にあるよ

#pragmaを認識しないコンパイラってのは、関数でint型しか返せないコンパイラみたいなもんだよ

219:デフォルトの名無しさん
10/06/18 16:52:24
>>218
>関数でint型しか返せないコンパイラみたいなもんだよ
さすがにそれはないな、#pragma が使えるようになったのはもっと最近だよ

220:デフォルトの名無しさん
10/06/18 17:28:03
つか、だからプリプロセッスで扱うわけでもないのに、
"#" で表記してるんだろ。
対応してない処理系でも最初に消えるようにな。


221:デフォルトの名無しさん
10/06/18 17:30:00
プロセッス プロセッサ
プロセス プロセサ

まあ個人的にはプロセサーだな。


222:↓ブックマーク推奨
10/06/18 17:43:26


NHKの極左売国捏造路線何とかなりませんか?19
スレリンク(nhk板)
次スレ
NHKの極左売国捏造路線何とかなりませんか?20
スレリンク(nhk板)







223:デフォルトの名無しさん
10/06/18 18:02:09
コンパイラの違いを言語の違いと表現する阿呆がいるからこんなことになるんだよ

224:デフォルトの名無しさん
10/06/18 18:11:43
ああ君のことね

225:デフォルトの名無しさん
10/06/18 18:51:40
これ見てよ↓
URLリンク(livedoor.blogimg.jp)
ばらまこうぜ!


226:デフォルトの名無しさん
10/06/18 19:05:19
>>224
参政権ほしいですか?
やめてください

227:デフォルトの名無しさん
10/06/18 21:24:36
undeclared first use in this function
このエラーはどういう意味ですか?

228:デフォルトの名無しさん
10/06/18 21:41:51
書いてある通りだろw

229:デフォルトの名無しさん
10/06/18 21:42:18
つ[英和辞書]

230:デフォルトの名無しさん
10/06/18 21:43:49
知らないなら黙っててください

231:デフォルトの名無しさん
10/06/18 21:46:54
>>227
宣言されてません

232:デフォルトの名無しさん
10/06/18 21:47:40
おい馬鹿教えるなよ

233:デフォルトの名無しさん
10/06/18 21:50:04
>>231
どういう事ですか?

234:デフォルトの名無しさん
10/06/18 22:01:57
>>233
関数・変数などの全ての識別子は、そのソースファイルにおいて最初に*使われる*までに
宣言されている必要がある。

例えば、以下のソースをコンパイルすると、そのメッセージがでる。
---ここから---
void foo() { x = 5; }
int x;
int main(void) { return 0; }
---ここまで---

1: error: ‘x’ undeclared (first use in this function)

これは1行めで変数xが*使われて*いるにも関わらず、この時点ではxの宣言がなされていないことを
意味する。
2行めのxの宣言を1行めより先に書けばエラーにならない。

---ここから---
int x;
void foo() { x = 5; }
int main(void) { return 0; }
---ここまで---

この場合は、xは同じファイルで定義されているが、別のファイルで定義されている場合も
宣言は必要。そのときは、以下のように書く。

extern int x;






235:デフォルトの名無しさん
10/06/18 22:04:00
意味がわからない
他の人説明してくれませんか?

236:デフォルトの名無しさん
10/06/18 22:04:24
使う前に宣言してください。

237:デフォルトの名無しさん
10/06/18 22:10:50
>>235
ソースコードとerror: ‘hoge’ undeclared (first use in this function)のhogeを晒せや

238:デフォルトの名無しさん
10/06/18 22:17:04
>>237
ソースコードさらしたら別にエラー内容なんていらんだろ

239:デフォルトの名無しさん
10/06/18 22:23:58
>>238
よく分からんマクロとかかも知れんだろ

240:デフォルトの名無しさん
10/06/18 22:27:23
ふつうソースコードなんて晒せないだろ
家にソースを持って帰ったり会社で2chにアクセスできたりするクソ会社じゃあるまいし

241:デフォルトの名無しさん
10/06/18 22:28:26
>>240
え?意味が分からない

242:デフォルトの名無しさん
10/06/18 22:37:10
>>235が業務用のプログラムをいじってるなら怖いな

243:デフォルトの名無しさん
10/06/18 22:37:47
エラーの内容から判断してこいつは学生だってわかるだろ
変数の宣言忘れてエラーの意味もわからないプロがいたら怖いわ

244:デフォルトの名無しさん
10/06/18 22:45:11
>>240
どう考えても仕事絡みの質問じゃないだろ

245:デフォルトの名無しさん
10/06/18 22:48:34
学生とは限らんだろ

246:デフォルトの名無しさん
10/06/18 23:01:29
そうだな趣味かもしれないしな

247:デフォルトの名無しさん
10/06/18 23:22:16
友愛数のペアを出力するプログラムを作ってみました

自分の思いつく限りの事はしたのですが、これ以上に速くなりますか?
ご指摘お願いします。

URLリンク(codepad.org)

248:デフォルトの名無しさん
10/06/18 23:32:41
n/mが複数回出てくるけどこういうのはコンパイラが取り計らってくれるのだろうか。

249:デフォルトの名無しさん
10/06/18 23:33:54
こんなスレで質問するって職業プログラマじゃないだろ
普通、職業プログラマなら職場のよくわかっている奴に聞くだろ

250:デフォルトの名無しさん
10/06/18 23:35:49
意外に聞かないわ

251:デフォルトの名無しさん
10/06/18 23:36:48
職場によくわかってない奴がいっぱいいるから?

252:デフォルトの名無しさん
10/06/18 23:37:27
>>248
どういう意味ですか?

253:デフォルトの名無しさん
10/06/18 23:39:48
>>247
なんでここまで遅くできるのかわからんw

普通に約数の和を関数化して戻り値と引数を比較すればいいのに

254:デフォルトの名無しさん
10/06/18 23:40:28
職業プログラマじゃないと質問してはいけないんですか?

255:デフォルトの名無しさん
10/06/18 23:40:36
n/mの結果を一度変数に入れてその変数を使い回したらって、ことじゃ

256:デフォルトの名無しさん
10/06/18 23:45:24
なるほど!
こういう事ですね


URLリンク(codepad.org)


それ以外にはありますか?

257:デフォルトの名無しさん
10/06/18 23:49:39
#include <stdio.h>

int divsum(int n)
{
int sum = 1, i;

for(i = 2; i * i < n; i++) if(n % i == 0) sum += i + n / i;

return i * i == n ? sum + i : sum;
}

int main(void)
{
int i, j, c = 0;

for(i = 220; i < 1000000; i++) {
if((j = divsum(i)) <= i) continue;
if(i == divsum(j)) {
printf("%d %d\n", i, j);
c++;
} }

printf("%d\n", c);

return 0;
}

258:デフォルトの名無しさん
10/06/18 23:57:47
友愛数を配列に保存して比較するのは意味がなくて無駄

259:デフォルトの名無しさん
10/06/19 00:06:09
作り変えちゃったか。仕方のないことかもな。

260:デフォルトの名無しさん
10/06/19 00:08:05
>>257
凄いですね・・・。
以前に作った事がありますか?

>>258
自分の作ったプログラムだと、
それが無いと同じペアを2回表示する事になるので・・・。

261:デフォルトの名無しさん
10/06/19 00:10:57
>>260
多分自分でそこまで作るのにあれこれ苦労したと思うんだけど、その苦労が経験となり、身につく。
おつかれさま。

262:デフォルトの名無しさん
10/06/19 00:20:15
>>260
if(n < s) があるから、同じの2回表示されないと思うけど。

263:デフォルトの名無しさん
10/06/19 00:23:58
>>262
ありがとうございます

264:デフォルトの名無しさん
10/06/19 00:32:58
>>260 もう少し高速化
#include<stdio.h>

long calc_yuai(long value){
long i, j, yuai=1, tmp, sum, value_org;

value_org=value;
for(i=2;value/i>=i;i++){
sum=1;
tmp=1;
for(j=0;value%i==0;j++){
value/=i;
tmp*=i;
sum+=tmp;
}
yuai*=sum;
}
if(value>1) yuai*=(value+1);
return yuai-value_org;
}

int main(void){
long i, yuai;

for(i=2;i<1000000;i++){
yuai=calc_yuai(i);
if(i<yuai && calc_yuai(yuai)==i){
printf("%ld %ld\n", i, yuai);
}
}
return 0;
}

265:デフォルトの名無しさん
10/06/19 00:41:58
一応プロだけど同僚よりGoogleとMSDNに聞いた方が速くて確実だわ

266:デフォルトの名無しさん
10/06/19 00:44:58
ふーん

267:デフォルトの名無しさん
10/06/19 01:05:41
>>264
速いな
今度からこれ使うことにしよう

268:デフォルトの名無しさん
10/06/19 07:07:03
自演乙

269:デフォルトの名無しさん
10/06/19 07:35:38
横からだけど、アルゴリズムの出典があったらおながいします。
ぐぐったけど互除法の変形とも違うし何やってるんだ、これ?

270:デフォルトの名無しさん
10/06/19 07:41:15
(1 + a + a^2 + ... + a^m) * (1 + b + b^2 + ... + b^n)
= 1 + a + ... + a^m + a * b + a^2 *b + ... + a^m * b + .... + a^m * b + ... a^m + b^n

271:デフォルトの名無しさん
10/06/19 07:42:35
= 1 + a + ... + a^m + b + a * b + a^2 *b + ... + a^m * b + .... + b^n + a * b^n + ... a^m + b^n
だった

272:デフォルトの名無しさん
10/06/19 07:43:38
また違った。
最後はa^m * b^nだ。

273:デフォルトの名無しさん
10/06/19 08:57:21
>>269
アルゴリズム名は知らないけど、例えば220の約数は1,2,4,5,10,11,20,22,44,55,110。
1を無視して、両端から数字をひとつづつ取って掛け合わせると、以下のように220になる。
2*100=220
4*55=220
5*44=220
10*22=220
11*20=220

約数の和sumを得るためには、a=2,3,4,5,6,...で割ってみるが、
割りきれたらsum=sum+a+220/a
a<=220/aの間、aをカウントアップして割りきれるか試す。
それ以上続けても、既に見つけた約数しかないので、無駄になるから計算しない。

274:デフォルトの名無しさん
10/06/19 08:59:05
>>273
X:2*100=220
○:2*110=220

275:269
10/06/19 10:36:30
>>273
理解しました!

>>270
言いたいことはたぶん理解しました!

276:デフォルトの名無しさん
10/06/19 10:47:13
アホだw

277:デフォルトの名無しさん
10/06/19 10:51:18
>>264のアルゴリズムを聞いてたんじゃないの?
>>273の説明は全然関係ないと思うんだが。

278:デフォルトの名無しさん
10/06/19 11:26:10
>>277
だから、>>264のアルゴリズムのfor(j=0以降は
>>270がヒントになってると思いますよ?

279:デフォルトの名無しさん
10/06/19 11:28:53
だから、>>273関係ないじゃんwってことなんだけど

280:デフォルトの名無しさん
10/06/19 11:33:28
俺がアホだwと煽られるのは結構だけど、
>>273が叩かれる筋合いはないのでは?
>>273の説明のおかげで>>264のiのforループも理解し易くなると思うんだが。

281:デフォルトの名無しさん
10/06/19 11:42:27
素因数分解したときに
1210=2^1*5^1*11^2
であるとき
全ての約数の和は
(2^0+2^1)*(5^0+5^1)*(11^0+11^1+11^2)=2394
ここから元の数を引けば
2394-1210=1184
となる

282:デフォルトの名無しさん
10/06/19 11:57:50
>>280
じゃあ遠慮なく・・・アホ!

283:デフォルトの名無しさん
10/06/19 12:06:30
関係ない説明すれば、煽られても仕方ないだろ

284:デフォルトの名無しさん
10/06/19 12:10:10
数学的な解方をそのままプログラムに置き換えると効率が悪いから、
コンピューターの性質を踏まえた上でもう一工夫するんだよ

285:デフォルトの名無しさん
10/06/19 12:18:58
今の女子って、正直、生理的に汚いよね。

286:デフォルトの名無しさん
10/06/19 12:54:11
はい

287:デフォルトの名無しさん
10/06/19 13:39:32
度々世話になります

#define RAKKA_SPEED 8.0
#define BLOCK_TATE 32.00

(略)
double rakka_calc=BLOCK_TATE/RAKKA_SPEED;

(略)
board[i][j][2][player_flag]+=double(rakka_calc*rakka_flag[player_flag]+shot_calc*shot_flag[player_flag]);


で計算が上手くいかないというか、
rakka_calkの値の小数点以下が計算されてないみたいで、
どうすれば小数点以下を反映できますか?

board[][][][]をdouble宣言ってのはなしの方向で。

288:デフォルトの名無しさん
10/06/19 14:01:46
なしの方向なら答えもなし

289:デフォルトの名無しさん
10/06/19 14:04:50
>>287ですが解決しました、ありがとうございました

290:デフォルトの名無しさん
10/06/19 14:45:17
いまどき、C言語のコンソールアプリの求人ってあるの?

291:デフォルトの名無しさん
10/06/19 15:07:38
ない

292:デフォルトの名無しさん
10/06/19 17:05:28
質問です。
穴掘り法で迷路を作成しようとしたのですが、参考にしたソースと同じ様に動かすつもりで
書いたのに、なぜか、掘られていない穴が残ってしまいます。
ソースを載せますので、自分のソースのどこに問題があるのか教えてください。
参考にしたもの
URLリンク(codepad.org)
自分で書いたヤツ
URLリンク(codepad.org)

よろしくお願いします。

293:292
10/06/19 17:08:18
すいません。掘られていないのは穴ではなくて、壁でした//

294:デフォルトの名無しさん
10/06/19 17:19:02
そこで穴があったら入りたいとか言っとけよ

295:デフォルトの名無しさん
10/06/19 17:19:26
アッー!

296:デフォルトの名無しさん
10/06/19 18:44:21
穴があったら入れたい

297:デフォルトの名無しさん
10/06/19 21:57:15
穴があったら塞ぎたい

298:デフォルトの名無しさん
10/06/19 23:56:17
>>264
前後もコードもちゃんとみてないんで、
何するコードか分からんのだけど、
jをインクリメントしてんの、何で?

299:デフォルトの名無しさん
10/06/20 00:01:48
>>298
途中で書き直した名残
j はいらない

300:デフォルトの名無しさん
10/06/20 00:32:45
jを使って等比級数の公式利用して
for(j = 1; value % i == 0; j++, value /= i);
yuai *= (pow(i, j) - 1) / (i - 1);
とか書くと笑えるくらい遅くなるなw

301:デフォルトの名無しさん
10/06/20 00:53:01
for(i = 2; i * i <= n; i++) {
for(j = 1; n % i == 0; j = j * i + 1) n /= i;
yuai *= j;
}
これなら計算回数変わらずに変数節約できる

302:デフォルトの名無しさん
10/06/20 01:45:17
プロプライエタリなライブラリを一部で呼び出してるソースコードを、GPLとして公開することは合法ですか?
具体的にはフォトショップSDKで書いたプラグインです。

303:302
10/06/20 01:48:44
BSDとして公開することは合法ですか?

304:デフォルトの名無しさん
10/06/20 02:16:54
GPLは無理だったような
BSDは別にいいんじゃないかな

305:デフォルトの名無しさん
10/06/20 02:37:28
GPL違反ではあるけど、法的にはグレーじゃないっけ?
まぁあえて危ない橋渡る人が居ないだろうけど。

306:デフォルトの名無しさん
10/06/20 06:10:19
>>292
URLリンク(codepad.org)
/* これ */

307:292
10/06/20 10:56:53
>>306
ですね。
デバッグするっていうのはなかなか難しいです。
ありがとうございました。

308:デフォルトの名無しさん
10/06/20 11:59:40
>>307
たいしたこと教えてないからお礼はいらないよ

309:デフォルトの名無しさん
10/06/20 14:40:40
>>308
お礼?ふざけんな
2chでちょっと投稿したからと言って何かもらえるという考えは甘い

310:デフォルトの名無しさん
10/06/20 14:44:44
回答者でもないのに毎回お礼に反応する頭のおかしい人が常駐してるからなw

311:デフォルトの名無しさん
10/06/20 14:48:24
>>307
いえいえ

312:デフォルトの名無しさん
10/06/20 18:01:02
VC++ 2008です

いったんプログラムを止めて
エンターキーを1回押して再開させたいのですが

fprintf(stdout,"Push Enter\n");
getchar();

と書いたらエンターキーを2回押さないと再開しません
仕方ないのでしょうか?


313:デフォルトの名無しさん
10/06/20 19:51:08
>>311
どうもどうも

314:デフォルトの名無しさん
10/06/20 20:37:23
getch()の結果が\nか判定

315:312
10/06/20 23:50:26
while(getch()!=10);

でいいのでしょうか?
これにするとエンターを何回押しても進みません。

エンター1回で進むようにする方法はないのでしょうか?


316:デフォルトの名無しさん
10/06/21 01:03:01
#include <stdio.h>
#include <conio.h>

int main(void)
{
  puts("before");
  while(getch() != '\r'){
  }
  puts("after");
  return 0;
}

317:デフォルトの名無しさん
10/06/21 01:16:40
>>312
俺の環境だと、その書き方でenter一回押したら再開されるんだが。

318:312
10/06/21 01:32:11
できました。
2回押さなければ進まなかった原因は
他の関数で入力待ちしている部分があったためでした。
ありがとうございました。

319:デフォルトの名無しさん
10/06/21 01:33:09
>>318
いいよ別に

320:デフォルトの名無しさん
10/06/21 21:59:08
int a = ( int )( 3 * 1.0f );

aは3であることが保証されるのでしょうか??
浮動小数点数は誤差とか怖いので気になりました・・・

321:デフォルトの名無しさん
10/06/21 22:07:10
>>320
保険をかけるなら四捨五入すべし

322:デフォルトの名無しさん
10/06/21 23:11:17
普通の浮動小数点数なら整数は(表現可能精度内でなら)誤差なしに表現できるので、
一旦循環小数や精度オーバーを経由して
整数に戻ってくるような演算でない限り、誤差は発生しない
(Cの規格で保証されているわけではないが)

323:デフォルトの名無しさん
10/06/21 23:16:30
0.5足しとけばいいじゃん

324:デフォルトの名無しさん
10/06/21 23:42:00
>>320
誤差が出るのは小数点イカでゲソ

325:デフォルトの名無しさん
10/06/21 23:45:07
>>320
URLリンク(ja.wikipedia.org)

326:320
10/06/21 23:46:34
みなさん、ありがとうございます。
>>320のケースは大丈夫なようですが、大事をとって0.5f足してからの丸め(四捨五入)をする方針でいくように
したいと思います。

327:デフォルトの名無しさん
10/06/21 23:47:20
>>326
round 使ったほうがいいかも

328:デフォルトの名無しさん
10/06/22 00:16:01
>>326
0.5f足して四捨五入しちゃだめー

329:デフォルトの名無しさん
10/06/22 00:34:01
>>328
ああああわわわてててるななな

330: ◆Jo8oQAGh3M
10/06/22 01:34:54
3次元の実数ベクトルを、要素がfloat型で要素数3の配列を用いて表すものとする。
二つの3次元ベクトルに対して、それらの和を求める関数を定義する。
和を計算する関数はaddvec関数定義の頭部は
void addvec(const float x[3], const float y[3], float z[3])とする。
プログラムの動作は、二つの3次元ベクトルaとbの各成分を順次に入力して、それらの和を求めて出力する。

というものをつくりたいです、そこで
#include <stdio.h>

void addvec(const float x[3], const float y[3], float z[3])
{
int i;
for(i = 0; i < 3; i++) z[i] = x[i] + y[i];
}
これに続くmain関数を作りたいのですがどうすればいいのかわからないので教えてください。


int main (void)
{
float x1,y1,z1,x2,y2,z2;

puts("各成分を入力してください.");
printf("ベクトルa:"); scanf("(%d,%d,%d)", &x1, &y1, &z1);
printf("ベクトルb:"); scanf("(%d,%d,%d)", &x2, &y2, &z2);

printf("和%d \n", addvec(わからない));
return (0);
}
上のように作ろうとしたのですが、どうも的外れな気がして…

331:デフォルトの名無しさん
10/06/22 02:12:27
#include<stdio.h>

void addvec(const float a[3], const float b[3], float c[3])
{
int i;
for(i = 0; i < 3; i++) c[i] = a[i] + b[i];
}

int main (void)
{
float a[3], b[3], c[3];//x,y,z成分

puts("各成分を入力してください.");
printf("ベクトルa:"); scanf("%f %f %f", &a[0], &a[1], &a[2]);
printf("ベクトルb:"); scanf("%f %f %f", &b[0], &b[1], &b[2]);
addvec(a, b, c);
printf("a+b:%f, %f, %f\n",c[0], c[1], c[2]);
return (0);
}

332:デフォルトの名無しさん
10/06/22 02:18:01
あ、コメントは配列の要素がx,y,z成分てこと

333: ◆Jo8oQAGh3M
10/06/22 02:27:16
>>332
ありがとうございます、凄く助かりました!


334:デフォルトの名無しさん
10/06/22 04:49:11
今更だけど
>>301 にするだけでも >>264 の 1.8 倍速
これだと >>264 の 2.5~3 倍速になる
除算は遅いから書き直せるものは書き直したほうがいいね
long calc_yuai(long value){
long i, j, yuai, value_org;

if(value<=1) return 0;

value_org=value;

for(i=0;(value&1)==0;i++) value>>=1;
yuai=(2<<i)-1;

for(i=3;i*i<=value;i+=2){
for(j=1;value%i==0;j=j*i+1){
value/=i;
}
if(j>1) yuai*=j;
}
if(value>1) yuai*=(value+1);
return yuai-value_org;
}

335:デフォルトの名無しさん
10/06/22 06:40:02
>>334
なるほど。書き方によってスピードがずいぶん違うね。
ところで、スピードアップしたいときには試行錯誤で、
早そうな書き方をいくつか試してるんだが、定石パターンってあるんだろうか?
処理系によっても、この演算は遅いor早い、とかあると思うんだが。

336:デフォルトの名無しさん
10/06/22 06:47:01
実数より整数のが速い
掛け算は遅いから可能ならビットシフトに置き換える
割り算はもっと遅いからできるだけ使わないように工夫する
条件分岐は足を引っ張る
ループの中で使う変数が増えると、ある時点でスピードががたっと落ちる
コードサイズが大きくなると不利

基本はCPUやパソコンの構造をよく理解すること
小手先の工夫をするよりアルゴリズムをよく練ること

337:デフォルトの名無しさん
10/06/22 06:49:19
スピードだけをとことん追求するとスパゲッティになる

338:デフォルトの名無しさん
10/06/22 07:18:10
そうかなあ

339:デフォルトの名無しさん
10/06/22 08:58:19
巧妙にビット演算とか使いまくって、作った自分があとから見ても何やってんのかわからなくなることは珍しくない
ちゃんとコメントは書いとこうね

340:デフォルトの名無しさん
10/06/22 09:02:26
前時代的な最適化だな

今どき乗除算も遅くないから
無理にシフト使って命令数増やすより1命令で済ませる方がいい

341:デフォルトの名無しさん
10/06/22 09:40:42
こういうくだらん高速化より、コードの保守性を上げる方が遥かに大切。
コードを汚くして.0001秒速くするなど、正に愚の骨頂。

そして演算時間が問題となり本当に高速化が必要なところでは、
こんな小学生的な発想のレベルの最適化など殆ど役に立たん。

342:デフォルトの名無しさん
10/06/22 09:48:38
はいはい、すごいすごい

343:デフォルトの名無しさん
10/06/22 10:59:45
組み込みやゲームだったら、0.001秒早くするほうが普通だけど

344:デフォルトの名無しさん
10/06/22 11:41:06
この程度の高速化なら、逆にコードがすっきりして見やすくなると思うんだが。

345:デフォルトの名無しさん
10/06/22 13:25:18
>>341
コードの保守性が高いかどうかはユーザに関係ないよ
なぜこの処理は遅いのですか?と質問されたら、保守性を下げない為です、と回答するの?
それともこれより速く出来ませんと回答するの?

346:デフォルトの名無しさん
10/06/22 13:29:35
具体的なことには何一つ答えられないアホが、
抽象論で他人を叩いて優越感に浸りたいだけ

まともに相手する必要なないと思う

347:デフォルトの名無しさん
10/06/22 13:57:39
>>340
データシート見てこい
SALは0.33クロック、IMULは0.5クロックに対してIDIVはmax36クロック
つまり100倍遅い

348:デフォルトの名無しさん
10/06/22 14:41:20
>>345
一万ぽ譲って関係ないとして、ユーザに関係ないなら無視して良いの?

349:デフォルトの名無しさん
10/06/22 14:50:21
>>348
速度が問題なのであればそれを改善するのは当然。
それによって保守性が下がると思うのであれば、同等のコード、または
普段よりも注意深く詳しいコメントを記述する
ってなんでこんな学生相手に話すような展開になってんだ?普通だろこれ。

350:デフォルトの名無しさん
10/06/22 14:52:06
>>347
ふおお。0.5がでてきたときもびっくりしたけど、いまや3命令が同時に行えるようになっているのか

351:デフォルトの名無しさん
10/06/22 14:56:10
>>349
でも遅い遅いとユーザから不満が出てる一般的なアプリケーションはビット演算なんて使ってないんだろうね

352:デフォルトの名無しさん
10/06/22 15:05:15
ん?
>>334 のコードの保守性が低いと言ってるんだよ。醜いということ。
で、こういうコードを書いた理由がこっちの方が速いだろ。

それに対して、その部分が速いといっても全体から見れば極々一部のコードなんだし、
そこが何倍になろうとも全体が速くなるわけではない。と言ったまで。

高速化というのは、その必要性が生じたときに、
ボトルネックとなっている部分を調べて、
その部分を対象に行うものだよ。

そもそも 334 は単に自分のスキルを自慢したいだけだんだろ?
当然ながらこういうコードは、以下略

353:デフォルトの名無しさん
10/06/22 15:20:38
ちなみにマシン言レベルで比較する程の高速化が必要な状況なら
その部分はアセンブリで書くのが普通。

C言語で書いておいて、シフト演算使ったから速いとか、
そのプログラマーのマスタベーションでしかありえない。

どうして究極の速度が要求されるような状況でC言語で開発してんだ?
そこまでの要求がないからだろ。

354:デフォルトの名無しさん
10/06/22 15:21:47
コンパイラさんのほうが優秀だから

355:デフォルトの名無しさん
10/06/22 15:22:22
>>334の高速化なんて2で先に割り切っておいて、
ループ変数を+=2にして高速化してるだけじゃんw

この程度で保守性低いとか、スキル自慢とか、やばすぎだろw

356:デフォルトの名無しさん
10/06/22 15:27:15
やべー、おまえやべー

357:デフォルトの名無しさん
10/06/22 15:42:55
>>334
>これだと >>264 の 2.5~3 倍速になる
>除算は遅いから書き直せるものは書き直したほうがいいね

流石にこれはないなw

358:デフォルトの名無しさん
10/06/22 16:19:38
>>334程度が理解できないアホは>>257でも使ってりゃいいんだよw

359:デフォルトの名無しさん
10/06/22 16:24:33
>>358
かわいそうに、いやマジで

360:デフォルトの名無しさん
10/06/22 16:46:58
>>352
ちょっと>>334の代わりになる保守性の高いコードとやらを書いてみてよ

361:デフォルトの名無しさん
10/06/22 16:59:32
そもそも>>352は根底からおかしいからな。
どこがボトルネックだと考えているのか教えてほしいわ。

362:デフォルトの名無しさん
10/06/22 18:13:59
>>360
高速化を考えるんだったら、そのマシンや環境がどうかで大きく変わるし、
それ以前に最大桁が幾らかでも手法は色々考えられる。
例えばその辺のWindowsPCとかなら、そこそこメモリも使えるから、

#include <stdio.h>
#define N 1000000

int main(void)
{
static long table[N];
long i, j;

for (i = 1; i < N; i++)
for (j = i+i; j < N; j += i)
table[j] += i;

for (i = 0; i < N; i++) {
j = table[i];
if (j <= N && i < j && table[j] == i)
printf("%ld %ld\n", i, j);
}

return 0;
}

363:デフォルトの名無しさん
10/06/22 18:20:07
>>362
はやいな、おい

364:デフォルトの名無しさん
10/06/22 18:24:47
>>362
>>264 の10倍速

365:デフォルトの名無しさん
10/06/22 18:56:50
>>361
え、一般論だと思うけど。それがコードチューニングってやつだよ
どこがボトルネックか教えろって、なに言ってるの?

366:デフォルトの名無しさん
10/06/22 19:00:10
>>365
ボトルネックの部分をチューニングしてるわけだけど、そこをチューニングするなといっているように見える

367:デフォルトの名無しさん
10/06/22 19:01:20
>>362
なんで動いてるのかが分からない!かっけー

368:デフォルトの名無しさん
10/06/22 19:03:56
と思ったけど理解できた!
逆転の発想スゴス

369:デフォルトの名無しさん
10/06/22 19:40:57
>>366
ボトルネックというのは、プログラムの実行時間の大半を占める部分だよ

370:デフォルトの名無しさん
10/06/22 19:52:51
>>362はかなりのやり手。

371:デフォルトの名無しさん
10/06/22 19:57:09
>>369
そんで、今回の友愛数を求めるプログラムのボトルネックはどこなの?

372:デフォルトの名無しさん
10/06/22 20:05:53
誰が友愛数を求めるプログラムの実行速度を要求してるの?
速くしたいのなら、いくらでもすればいいんじゃないでしょうか
保守なんていらないよ、そんなパーツには

373:デフォルトの名無しさん
10/06/22 20:11:41
>>371
Nの大きさに対する演算回数の多さじゃないの?
演算回数を減らす工夫が効果的ってことでしょ。

N*N だったものを 2*N にするとかはよくある話じゃないの。

374:デフォルトの名無しさん
10/06/22 20:17:00
だから、コンパイラが充分賢いなら小手先の最適化は慎んだ方がいいね。
>336の挙げた項目を整理すると、
・実数より整数の方が速いが、型変換は遅いから要注意。
・CPUによってはビットシフトは必ずしも速くない。
・条件分岐はできるだけループの外に。
・「ループの中で使う変数」だと意味不明だが、一次変数を利用してループ内の演算量を減らすのは有効。
・どうせ今時のコンパイラはstatic関数のインライン展開くらいしてくれるから、関数は機能ごとに分割すべき。
となるかな。

375:デフォルトの名無しさん
10/06/22 20:18:42
>>372
実行速度の要求もないのに、
自分の趣味で速くしたくてシフト演算使って高速化するの?
それで保守のことなど知ったことはないと開き直るの?

うちの会社なら即クビだ。

376:デフォルトの名無しさん
10/06/22 20:25:38
>>375
そういうことだ

377:320
10/06/22 20:44:43
>>327
ありがとございます。
残念ながら、VC++はC99に対応していないので、roundが使えないです・・・

>>328
あ、たしかに一律0.5f足すだと、負の四捨五入がおかしくなりますね・・・

調べてみたところ、次のようなやり方で絶対値的四捨五入ができると分かりました。

float a = -4.6f;
float b = ( a > 0 ) ? floor( a + 0.5f ) : ceil( a - 0.5f );

最終的に求めたいのはint型なので、以下のようなカタチでも良いと思うのですが、どうでしょう??

int b = ( int )( ( a > 0 ) ? ( a + 0.5f ) : ( a - 0.5f ) )

378:デフォルトの名無しさん
10/06/22 20:51:41
>>372
> 誰が
>>247

379:デフォルトの名無しさん
10/06/22 20:53:38
>>377
足して切り捨てしてるならおk。足して四捨五入ってところを心配したのだろうと思う。

380:デフォルトの名無しさん
10/06/22 20:56:36
割る数が2のべき乗の定数だと勝手に割り算をシフトに置き換えてくれるコンパイラもあるよ。
最近はその程度の最適化はやってくれる。

ただ、特定の乗除算とビットシフトが等価だって知らない人とは一緒に仕事したくない。
そんなの2進数の基本的な性質じゃん。
その程度のことで保守性が下がるとか、何寝言言ってんのって感じ。

381:デフォルトの名無しさん
10/06/22 20:58:16
>>375
ええと、あなたの会社のコーディング規約ではシフト演算が禁止、ただし要求速度を満たせない
場合を除くとなっているのですか?
どこからが複雑だから禁止になり、どこまでが許容される記述なのか、そのガイドラインを
社内で作成し、周知徹底されていますか?
また、速度に関する要件がない場合、速度はどれだけ遅くとも問題ないのですか?

382:デフォルトの名無しさん
10/06/22 21:06:49
職業プログラマが保守性とかって、お笑い

383:デフォルトの名無しさん
10/06/22 21:29:16
マ板に行けよ土方は

384:320
10/06/22 21:29:26
>>379
あ、そういうことでしたか。
了解です。

385:デフォルトの名無しさん
10/06/22 23:43:30
こんなところでまで会社に縛られてるなんて大変だね

386:デフォルトの名無しさん
10/06/23 00:23:48
scanfの引数に&をつける理由を大学の教授に尋ねたのですが、
「今は気にしなくていい。scanf使うときは&をつけるように」
といい加減な回答が返ってきました。
お金払ってるんだからちゃんと説明しろよ

387:デフォルトの名無しさん
10/06/23 00:25:40
その段階でポインタの説明始めたら一向に進まなくなるぞ

388:デフォルトの名無しさん
10/06/23 00:28:05
大学生だろ?
自分で調べられる程度の範囲は自分で調べろよ
小中学生じゃないんだから

389:デフォルトの名無しさん
10/06/23 00:40:32
>>388
俺が言いたいのは教授の教え方がいい加減だっていってるんだ。
他にもソースファイルの先頭に書くinclude文についてもそう。
教授は「プログラムを動かすためのおまじないだと思ってください」
とか抜かしやがる。

390:デフォルトの名無しさん
10/06/23 00:42:38
大抵の参考書もそう言ってるぞ。
物事には学ぶための順序ってもんがある。

391:デフォルトの名無しさん
10/06/23 00:44:00
>>389
何も分かってない人に教える場合はそれが普通

392:デフォルトの名無しさん
10/06/23 00:45:25
>>389
それが定番になってるけど、俺もどうかと思う。ガキに教えるんじゃないんだから

393:デフォルトの名無しさん
10/06/23 00:45:51
>>391
残念ながら最初に聞いたときぽかーんだったよ。
そもそも「おまじない」って何だよって?w
さすがに調べて分かったが。俺とおんなじこと考えてた人きっといるはず

394:デフォルトの名無しさん
10/06/23 00:49:33
includeやポインタくらいはちゃんと意味を教えたほうが良いのでは・・・
前者は至極分かり易いと思うぞ。

395:デフォルトの名無しさん
10/06/23 00:53:14
会社に入ってからも「おまじない」という単語はよく使うけどな。
「テスト済みの処理構造をブラックボックスとして使う」という意味で。
あとで暇な時にそのおなじないの内容を理解しておくことは必須

396:デフォルトの名無しさん
10/06/23 00:54:59
話が違いますが

397:デフォルトの名無しさん
10/06/23 00:56:16
なるほどね。
大まかには「お決まりの処理」という理解で、さらには「なぜその処理が必要か」という理解に踏み込んでいくという、
二段階の理解ステップとなるわけだ。
経験上、こういうのはけっこうあるね。
何となしにやっていたことの意味が徐々に明らかになっていくのは、成長を実感できてうれしいものだ。
>>386も是非この楽しさを知ってほしい。

398:デフォルトの名無しさん
10/06/23 00:57:51
調べる能力も大切って事を教授が教えてくれたんですね。

399:デフォルトの名無しさん
10/06/23 00:59:49
>何となしにやっていたことの意味が徐々に明らかになっていくのは
できれば本当の意味にすぐに気づきたい。時間はそんなに待ってくれないぞ

400:デフォルトの名無しさん
10/06/23 01:01:42
includeをおまじないと言っても、stdio.h以外を使う時点で
この関数を使うときはこれをインクルードと言っちゃうんだから
初めからprintfや標準入出力関数を使うためにこうすると言えばいいだろ、馬鹿らしい

401:デフォルトの名無しさん
10/06/23 01:01:45
>>399
printfの使い方とか、要所を抑えておけばあとは適当な理解でいいようなことは結構あるよ

402:デフォルトの名無しさん
10/06/23 01:01:49
>>393は言葉尻とらえてケチつけてるだけでなんの意味もない話だったな

403:デフォルトの名無しさん
10/06/23 01:04:48
慣行となってる教え方に問題があるって話だろ。意味を見い出せない馬鹿

404:デフォルトの名無しさん
10/06/23 01:08:40
Aを理解するには、Bを教えなければならない
Bを(ry
人に教えるならどこかで堺をつけないといけない

調べてわかるレベルならなおさら教えない
おしえてクンをその道に育てるのは自殺行為

405:デフォルトの名無しさん
10/06/23 01:11:04
全部調べて分かるだろ

406:デフォルトの名無しさん
10/06/23 01:11:40
調べて分かることならちゃんと説明できるだろう。
それを遠回しな表現で学生を撹乱させて時間稼ごうだってそうはいかない
お金払ってるんだから教授はちゃんと仕事しろってんだ

407:デフォルトの名無しさん
10/06/23 01:11:41
while(!関数名)ってあったんですけどこれってどういう意味なんでしょうか?
もし関数が0を返したらwhile(!0)になると思うんですがこれは真なんでしょうか?
よろしくお願いします。

408:デフォルトの名無しさん
10/06/23 01:13:00
人に聞く=調べる
金払ってんだ、質問した事に答えろよ。

409:デフォルトの名無しさん
10/06/23 01:13:43
えっ?

410:デフォルトの名無しさん
10/06/23 01:16:29
初心者にものを教える時に最初から1~10まで全て説明する馬鹿はいないだろ。順序を考えろ。
>>393>>400>>403みたいな馬鹿学生が山ほど潜んでるんだから教える方も大変だよ

411:デフォルトの名無しさん
10/06/23 01:18:17
誰が最初から1~10まですべて説明しろと言ったんだ?
順序を考えればおまじないなんて馬鹿なことを言わずに済むだろ

412:デフォルトの名無しさん
10/06/23 01:19:51
だよな。
「おまじない」とかふざけすぎ。
まず最初は printf を使わずに教えるべき。
C は、入出力は言語機能自体には含まれていない、と教えるべき。
苦C とかいうサイトはそういう始め方だったから好感が持てた。


413:デフォルトの名無しさん
10/06/23 01:22:05
>>411
#include で別のファイルを読み込みます

中を見てみましょう

???

これじゃ先に進みそうにないから
おまじないっていうんだよ

414:デフォルトの名無しさん
10/06/23 01:24:28
>>413
「おまじない」が「おまじない」じゃなくなる時点でもヘッダファイルの中身なんて見てないだろ
関数の概念だけ教えれば済む話。高校以上なら簡単なに受け入れられる

415:デフォルトの名無しさん
10/06/23 01:24:34
それが正しい順序?
初心者にはまず目に見える結果が出る部分を教えないと。
自分の覚えたことの結果が出ないと正しいのか間違ってるのかの判断も付かない。
だからprintfを最初に教えるのは理にかなっている。

printfを使うためにはインクルードがどうたらこうたらやり始めるのか?アホクセー

416:デフォルトの名無しさん
10/06/23 01:26:52
せめて printf は後にしろよ。
puts とか putchar が先だろ。


417:デフォルトの名無しさん
10/06/23 01:27:03
疑問があるから質問したんだろ。
授業とは違うんだよ、生徒の質問に答えろって話。

418:デフォルトの名無しさん
10/06/23 01:28:03
教えるのは後回しでもいいけど、「おまじない」って言葉を使うのはダメだと思う。

419:デフォルトの名無しさん
10/06/23 01:28:47
Java の System.Console.○○○ は最初から使えるのは何で?

420:デフォルトの名無しさん
10/06/23 01:29:44
単なる言葉の言い回しの是非をグダグダいうのも実に馬鹿らしいな

421:デフォルトの名無しさん
10/06/23 01:30:10
>>418
どんな言葉なら気が済むんだ

422:デフォルトの名無しさん
10/06/23 01:31:48
>>421
「これからC言語のプログラムを書きます」の合図でいいんじゃないです?

423:デフォルトの名無しさん
10/06/23 01:32:03
プリントフ

>>419 それC#。JavaはSystem.out.println()な。Java.langパッケージは宣言なしで使えるから。

424:デフォルトの名無しさん
10/06/23 01:32:33
>>422
おまじないよりタチ悪いな

425:デフォルトの名無しさん
10/06/23 01:33:21
>>422
おまじないと同レベルに糞。

426:デフォルトの名無しさん
10/06/23 01:33:58
>>425
ハァ?同レベル?

427:デフォルトの名無しさん
10/06/23 01:35:20
>>426
そう。どっちもまるで必須みたいで的外れ。printfを使いたいがために書いてるんだからそう言えばいいだけ

428:デフォルトの名無しさん
10/06/23 01:36:32
じゃあなんて言うんだよ!
お前も同レベルの事言うんだろ?言ってみろや

429:デフォルトの名無しさん
10/06/23 01:38:26
ここはCの教え方についてのスレになってるので>>407は取り消しますw

430:デフォルトの名無しさん
10/06/23 01:39:10
質問スレは別にあるし

431:デフォルトの名無しさん
10/06/23 01:39:36
>>427
それおまじないとどう違うの?
printfを使うためのおまじないじゃん

432:デフォルトの名無しさん
10/06/23 01:40:46
>>431
「おまじない」と「printfを使うためのおまじない」とには大きな差があるんだが

433:デフォルトの名無しさん
10/06/23 01:42:37
Q 「おまじない」ってなんですか?
A 「printfを使うためのおまじない」だよ

すげえ、大きな差だ
レベルたけえwwwwww

434:デフォルトの名無しさん
10/06/23 01:43:12
両方とも何も説明してないから同じだな

435:デフォルトの名無しさん
10/06/23 01:44:23
馬鹿学生は意味が知りたかったんだよな?
それを「printfを使うためのおまじない」と答えて大きな差だと言う。

436:デフォルトの名無しさん
10/06/23 01:44:42
もっと言えばスタンダードアイオー、標準入出力関数だよ。そう言えば良い
おまじないと言うより百倍良いだろう

437:デフォルトの名無しさん
10/06/23 01:45:39
馬鹿学生は意味が知りたかったんだよな?
それを「スタンダードアイオー、標準入出力関数だよ。」と答えて大きな差だと言う。

438:デフォルトの名無しさん
10/06/23 01:45:46
>>432
printf を使うためってのを理解させるには関数について教えなきゃいかんだろ
最初は #include も main も printf も return もおまじない

439:デフォルトの名無しさん
10/06/23 01:46:43
最初からprintfのポインタの説明から入って分かる訳ないじゃん。文字列リテラルとかの説明をいきなり教えるの?

440:デフォルトの名無しさん
10/06/23 01:46:45
>>436
それなんも教えてないよ。関数って何?ってなるだけだろ。

441:デフォルトの名無しさん
10/06/23 01:47:11
>>432で大きな差があると言ったら、それが答えみたいにとられてうざいんだが
>>438
俺は初めから関数について教えればいいと言ってるだろ

442:デフォルトの名無しさん
10/06/23 01:48:45
おまじない、に対しての答えが、関数を教える?

443:デフォルトの名無しさん
10/06/23 01:49:17
いきなり関数の説明から入るのかよ。ハードル高い授業だぜ。

444:デフォルトの名無しさん
10/06/23 01:49:59
int main()とかvoid main(void)とか書かれて混乱する入門者も多い
引数も戻り値も分かってないから当然だわな。関数を教えて、mainが特殊な関数だと教えればいいだろう

445:デフォルトの名無しさん
10/06/23 01:50:36
それって「おまじない」とどう違う?

446:デフォルトの名無しさん
10/06/23 01:50:56
意味が分かる

447:デフォルトの名無しさん
10/06/23 01:51:23
>>414
みるだろ。
printfってどうなってんの^^と気軽にのぞいて凹むステップは必要。

448:デフォルトの名無しさん
10/06/23 01:51:27
なんの意味だ

449:デフォルトの名無しさん
10/06/23 01:51:42
意味論の意味だよ

450:デフォルトの名無しさん
10/06/23 01:52:42
>>407
0は偽なので、その反対は真です。

451:デフォルトの名無しさん
10/06/23 01:52:50
結局おまじないじゃねえか

452:デフォルトの名無しさん
10/06/23 01:52:58
>>447
それには同意。用意されてるソートとかな

453:デフォルトの名無しさん
10/06/23 01:54:04
>>451
それはお前がやってるプログラミングが今もおまじないだからだろ

454:デフォルトの名無しさん
10/06/23 01:54:35
おっと罵倒きました!

455:デフォルトの名無しさん
10/06/23 01:54:38
>>453
話をすりかえるな
馬鹿学生の話をしてんだよ?

456:デフォルトの名無しさん
10/06/23 01:56:03
そもそもHello world.をprintfで出力することがおかしいとは考えないのか?
printfを用いるとしても、printf("%s\n", "Hello world.");と記述させるべきなのではないか?

457:デフォルトの名無しさん
10/06/23 01:56:10
そりゃ馬鹿文系学生のための一般教養のプログラミング入門ならおまじないでいいよ

458:デフォルトの名無しさん
10/06/23 01:57:21
おまじないで済ますなって話してんだよボケが!!!

459:デフォルトの名無しさん
10/06/23 01:57:36
おまじないが気にくわない→なぜそれが必要なのかの説明がないから気にくわない
ここまでいっておきながら、
なぜprintfでなければならないのかの説明がない
というところに進めないところに馬鹿の壁を見た。

460:デフォルトの名無しさん
10/06/23 01:58:18
>>459
なぜHello Worldでなければならないのかと同義だろ

461:デフォルトの名無しさん
10/06/23 01:58:46
おまえはどこに進んでんだwwww

462:デフォルトの名無しさん
10/06/23 02:00:17
おまじないって実生活ではただの気休めで効果があるのかないのかもわからないだろ。

プログラムにはそんな曖昧な要素が入り込む余地はないから、
おまじないって言葉を使うのはふさわしくない。

463:デフォルトの名無しさん
10/06/23 02:00:52
で、なんという言葉ならいいんだ?

464:デフォルトの名無しさん
10/06/23 02:01:03
願いを込めて、インクルード

465:デフォルトの名無しさん
10/06/23 02:02:07
質問に答えてください

466:デフォルトの名無しさん
10/06/23 02:02:50
説明すれば良いと言ってるのに、おまじないに代わる言葉を探してる時点でカス

467:デフォルトの名無しさん
10/06/23 02:03:03
>>460
文字列をコンソールに出力しましょう。文字列は別に何でも良いですが、Hello world.と出力しましょう。
これで十分理由に値する。
しかし、なぜprintfを用いるのかについては理由が明らかになっていない。
まるでリテラルを出力するためにはprintfでなければならないと思い込んでいるかのようだ。

scanfにはなぜアドレスを渡さなければならないのか。これについての疑問が解けた直後、
なぜ可変個の引数が渡せるのかという疑問を持つべきである。

>>461
もちろん、明日に向かって進んでいる。その延長には明後日がある。

468:デフォルトの名無しさん
10/06/23 02:04:07
>>462
実生活でも説明するのが面倒なときはおまじないって言うだろ
とくに子供に対して、前提となる知識や経験が不足している場合はとくに

プログラミングでも同様だよ
きちんと説明するには手間がかかりすぎるからおまじないって言われた、
つまり言われた側はまだまだレベルが低いってこと

469:デフォルトの名無しさん
10/06/23 02:04:28
>>466
説明?どれの事だね?

470:デフォルトの名無しさん
10/06/23 02:05:02
>>467
なんでもいいが、Hello worldと出力しましょう。なんでもいいが、printfを使いましょう

471:デフォルトの名無しさん
10/06/23 02:06:11
結局、満場一致で
おまじないでいい
という認識でいいのか?
教授は正しかったんだよな?

472:デフォルトの名無しさん
10/06/23 02:06:37
おまじない(笑)どんな低レベルな大学なんだよ、哀れ

473:デフォルトの名無しさん
10/06/23 02:07:03
>>470
ばかだなぁ。

高校出た時点で知識レベルをそろえる必要なんてなくなるんだから
おまじないで済ませてよい学生と、済ませてはならない学生が出てくるのは確か。
しかし、教授にその説明を求めるのもまた間違いだろうな。
金さえ払えばなんでもできるなんて甘えは捨てないと。

474:デフォルトの名無しさん
10/06/23 02:07:15
しかし、誰もおまじない以上の説明を書かないという。

475:デフォルトの名無しさん
10/06/23 02:07:53
>>473
は?俺教授に質問した学生なの?

476:デフォルトの名無しさん
10/06/23 02:08:18
同レベル

477:デフォルトの名無しさん
10/06/23 02:08:25
え、もしかしておまじないどまりの人?

478:デフォルトの名無しさん
10/06/23 02:09:05
>>475
ごめんね。後段はあなたへのレスじゃなかったんです。ツイート()なんです

479:デフォルトの名無しさん
10/06/23 02:09:15
>>474
じゃあお前は今もおまじないと思ってるわけ?ちゃんと分かってるなら、そう説明すればいいだろ

480:デフォルトの名無しさん
10/06/23 02:10:03
俺、教授じゃねえよ?

481:デフォルトの名無しさん
10/06/23 02:10:26
>>479
なんかずれてんぞ。
この場で説明してあげるべきだと考えてるなら説明すればいいだろ、じゃないのか?

482:デフォルトの名無しさん
10/06/23 02:10:58
>>474
プリプロセッサから解説しないといけないし
おまじないでいいと思うけどな。最初は不要な知識だし

483:デフォルトの名無しさん
10/06/23 02:11:35
結局物事には順序がある。
初心者にいきなり関数の説明とかポインタの説明したってわかる訳がない。
順序立てて学習して行くことでいままでおまじないだった事が理解できるようになる。scanfに何で&を付けるのかもわかるようになる。それで良いじゃないか

484:デフォルトの名無しさん
10/06/23 02:11:36
興味があって大学来てんだから、最初のプログラミングの講義受ける時点で半分以上はもうおまじないなんかじゃないんだよ
そこでおまじないとか言って二極化を促進させる教授パネェよ

485:デフォルトの名無しさん
10/06/23 02:12:05
ある変数(10桁)の
1の位:
10の位:
100の位:
1000の位:
  ・
  ・
  ・
ってな感じで出力する簡単な計算式教えてください

486:デフォルトの名無しさん
10/06/23 02:12:41
今の時代、大学なんて義務教育なんだよ

487:デフォルトの名無しさん
10/06/23 02:14:05
>>462
おまじないには自己暗示効果があるから、信じて実行すれば効果があるよ。
少しでも疑ったら魔法は消える。

488:デフォルトの名無しさん
10/06/23 02:14:46
おかげでレベルが下がった

ちゃんと試験でバカは落とせよ

489:デフォルトの名無しさん
10/06/23 02:14:56
あれもこれもインクルードして、いっぱいおまじないすればいいね

490:デフォルトの名無しさん
10/06/23 02:15:54
「プロセッサ」とか言ってるやつって何なの?
プロセスを「プロセッス」とか言うわけ?
「キッス」とか旧世代の言葉を使う人?w

491:デフォルトの名無しさん
10/06/23 02:15:59
>>484
マジレスすると大学のプログラミング講義でおまじないレベルからやるのって興味ない人向けの授業だよ
興味のある人は入門なんか飛ばして次の講義を受けるべき

492:デフォルトの名無しさん
10/06/23 02:16:54
>>489
あれもこれもインクルードするぐらいになったらもうおまじないじゃなくなってるだろ

493:デフォルトの名無しさん
10/06/23 02:17:00
おまじないはある種のパターナリズムなんだよ。
『お前には分からんかもしれんけど俺が正しいから従え』というのを言い換えただけ。

494:デフォルトの名無しさん
10/06/23 02:17:26
>>491
マジレスすると入門向けの講義受ければ休みまくっても余裕でいい成績が取れる

495:デフォルトの名無しさん
10/06/23 02:17:46
>>488
さがんないよ。授業余裕なら単位取れる最低限の行動だけして残った時間を有意義に過ごせばいい。
それが大学だろ。

496:デフォルトの名無しさん
10/06/23 02:18:13
プログラマになりたいのだったら小中学生のころにC言語くらいできるようになってんだろ
お前らもそうだったよな?

497:デフォルトの名無しさん
10/06/23 02:18:43
まさかFラン大学じゃないだろうな
質の高い教育はそれなりの場所へ行かなきゃ受けられないんだよ
授業料さえ払えばなんでも教えてもらえると思うのが大間違い
これが格差というもの

498:デフォルトの名無しさん
10/06/23 02:18:48
おまいら明日どうすんの?

499:デフォルトの名無しさん
10/06/23 02:19:23
小学生で既にLisperだった

500:デフォルトの名無しさん
10/06/23 02:19:52
>>490
URLリンク(www.intel.co.jp)
インテルにあやまれ

>>494
きちんとサボればおまじないが気になることなんて無い

501:デフォルトの名無しさん
10/06/23 02:21:14
>>496
中学の頃はPC-8001にカセットテープの時代だったのでCコンパイラが動く環境がありませんでした

502:デフォルトの名無しさん
10/06/23 02:21:42
>>500
サボりまくっても2chにこんだけおまじないの人がいるんだから気になるよ

503:デフォルトの名無しさん
10/06/23 02:22:01
くたばれジジイ

504:デフォルトの名無しさん
10/06/23 02:24:57
てか、そもそもその授業の単位を取得した時点で#include<stdio.h>がなんであるかの
具体的な説明をする予定がないんじゃないの?

505:デフォルトの名無しさん
10/06/23 02:26:38
>>485
while(n) {
printf("%d\n", n % 10);
n /= 10;
}

506:デフォルトの名無しさん
10/06/23 02:31:11
なんかマルチしまくってんのがいるなw

507:デフォルトの名無しさん
10/06/23 02:38:27
>>505
ありがとうございます

508:デフォルトの名無しさん
10/06/23 03:19:18
数学が(好き|得意)な奴には、「おまじない」が嫌いな奴が多い。
数学には「おまじない」など存在しない。
数学においては、新出の語句や定理は、必ずそれ以前に学習した定義・定理から導き出せる。
>>386の言い分もわからんでもない。
むしろ、「おまじない」になんの疑問も抱かない奴よりは見込みある。


教授にはぐらかされても放置せず、自分で調べようとしているならば、だが。

509:デフォルトの名無しさん
10/06/23 03:22:44
導き出せはしないだろ。
決めごとなんだから。

510:デフォルトの名無しさん
10/06/23 03:47:21
>>508
その定義・定理を自分で調べようともせず教授に教えろと言ってんだよ
どこに見込みがあるってんだ

511:デフォルトの名無しさん
10/06/23 04:06:01
>>510
ちゃんと最後の行読みなよ。

512:デフォルトの名無しさん
10/06/23 04:24:47
>>511
ちゃんと今までの話を読んだか?
最後の行はまるで的外れ。

513:デフォルトの名無しさん
10/06/23 04:30:08
詭弁の特徴のガイドライン

1:事実に対して仮定を持ち出す
2:ごくまれな反例をとりあげる
3:自分に有利な将来像を予想する
4:主観で決め付ける
5:資料を示さず自論が支持されていると思わせる
6:一見関係ありそうで関係ない話を始める
7:陰謀であると力説する
8:知能障害を起こす
9:自分の見解を述べずに人格批判をする
10:ありえない解決策を図る
11:レッテル貼りをする
12:決着した話を経緯を無視して蒸し返す
13:勝利宣言をする
14:細かい部分のミスを指摘し相手を無知と認識させる
15:新しい概念が全て正しいのだとミスリードする

514:デフォルトの名無しさん
10/06/23 04:30:22
>>512
もうすこし読解力をあげましょう。
または、もうすこし落ち着きましょう。
または、良い睡眠をとりましょう。

515:デフォルトの名無しさん
10/06/23 04:34:28
>>514
まさに詭弁だな。
おまえのことだよ、わかってるか?

516:デフォルトの名無しさん
10/06/23 04:50:47
>>506
本人乙

517:デフォルトの名無しさん
10/06/23 07:38:15
金払って受講してるんだから教授は辞書と同じ、質問しないと損だ。
授業でおまじないと言うのはいいが教えを乞いにきた学生に詳しく教えないのはおかしい。
ある講義で質問しに行ったら聞いてないことまで長々と話す教授もいた。
その教授はハズレ。

518:デフォルトの名無しさん
10/06/23 08:12:29
質問の良し悪しもあるが、せっかく質問したのに拍子抜けな答えしか返ってこない教授はつまらんからな
教授からすれば、馬鹿な質問はするなってことなんだろうけど。学生からすれば馬鹿な回答なんだよ

519:デフォルトの名無しさん
10/06/23 08:17:14
講義中にチラっと聞いただけなんじゃねーの?

520:デフォルトの名無しさん
10/06/23 12:38:31
質問者のレベルに合わせたんだよ

521:デフォルトの名無しさん
10/06/23 13:08:45
uzai

522:デフォルトの名無しさん
10/06/23 13:26:23
うざい

523:デフォルトの名無しさん
10/06/23 15:43:47
メイン文で宣言した変数に分割した別のファイルでその変数に代入して
メイン文でも反映されてるようにしたいんだけどいまいちポインタの使い方がわからない・・・
だれか教えてくれ

524:デフォルトの名無しさん
10/06/23 15:52:58
参照渡し
URLリンク(codepad.org)

525:デフォルトの名無しさん
10/06/23 19:56:22
おまじないより魔法のほうがしっくりくるよな。


526:デフォルトの名無しさん
10/06/23 20:08:49
マジックコード

527:デフォルトの名無しさん
10/06/23 21:51:58
>>524

そりゃ参照渡しじゃねーよ

528:デフォルトの名無しさん
10/06/23 22:03:15
枕詞だろ。

529:デフォルトの名無しさん
10/06/23 22:15:02
>>524
Cには参照渡しはねーんだよ
全部値渡し
それは「アドレス」を値で渡しているだけ

530:デフォルトの名無しさん
10/06/23 22:17:53
あるよバーカ

531:デフォルトの名無しさん
10/06/23 22:19:33
質問者の意図が参照渡しに該当してたからな
まあ言いたいことは分かるが、言い方がなんかダサいよ。なんで喧嘩腰というか、キレてんの?

532:デフォルトの名無しさん
10/06/23 22:21:26
>>531>>527>>529宛て。ポインタ渡しというなら分かるけど、断固として値渡しと主張する意味は分からん

533:デフォルトの名無しさん
10/06/23 22:26:14
>>529の言わんとするところは分かるが、怒らなくてもよくね。
ポインタの値渡しってのもなんか回りくどいしさ。

534:デフォルトの名無しさん
10/06/23 22:28:54
void main(void)
{
int *GetX(void)
{
return &x;
}


int *pGetX;
pGetX = GetX();
pGetX += 10;

535:デフォルトの名無しさん
10/06/23 22:32:32
>>534
ミス

536:デフォルトの名無しさん
10/06/23 22:44:08
ドンマイ

537:デフォルトの名無しさん
10/06/23 22:47:09
>>534
こいつなにしようとしたの?

538:デフォルトの名無しさん
10/06/23 22:47:47
>>532
キレてるようには見えないなぁ。
馬鹿にしてるようには見えるけど。

539:デフォルトの名無しさん
10/06/23 22:50:23
馬鹿にしてるようには見えない

540:デフォルトの名無しさん
10/06/23 23:02:55


541:デフォルトの名無しさん
10/06/23 23:48:19
人工無能に詳しい人いる?
居たら何で勉強したのか教えてくれ
それとオススメの本とかあったらそれも

542:デフォルトの名無しさん
10/06/23 23:56:28
人工無能は勉強しすぎると味わいが無くなる気がする

543:デフォルトの名無しさん
10/06/24 00:09:05
まあいいおてんき

544:デフォルトの名無しさん
10/06/24 01:55:07
ふーん

545:デフォルトの名無しさん
10/06/24 03:40:41
名無しさんはどんな仕事してるの?

546:デフォルトの名無しさん
10/06/24 03:43:23
農家

547:デフォルトの名無しさん
10/06/24 03:45:34
わぁ!カッコよさそうな仕事ですね^^

548:デフォルトの名無しさん
10/06/24 03:49:32
別に

549:デフォルトの名無しさん
10/06/24 04:54:16


550:名無し
10/06/24 07:56:44
ポインタとメモリアドレスの違いなんだけどさ

同じ表現と考えていいのか?

105 :デフォルトの名無しさん:2010/06/14(月) 18:40:33
>>102
文字列リテラルはそれ自体がchar *と言う型のポインタ値として扱われる。
つまり、printf("Hello\n");と書いただけで、printf()関数にcharへのポインタを渡すと言うプログラムになっているわけだ。

これあるじゃん?

char *だからさ "aiueo"だとしたら まずaiueoをメモリ上に確保して a,i,u,e,o,\0みたいな16進数だけど そして確保したら その先頭のアドレスaの場所のアドレスを返すんだろ?

aの場所が100番地だったら100をchar *へ渡すみたいな?

っで気になるのが ポインタを返す と アドレスを返すって同じ意味でとらえていいのか?

これは先頭のアドレスを返してるよな? char *に先頭のアドレスを渡している


ポインタを返す と アドレスを返す これって同じ意味なのか?

ポインタ変数を返すなら違うが ポインタとは で検索したら e-wordではアドレスを保持する変数とあるが

それならポインタ変数=ポインタだよな?どうなんだ?

ポインタを返す を アドレスを返す  検索しても ポインタを返す関数 アドレスを返す関数とあるが

だれか教えてくれー

551:デフォルトの名無しさん
10/06/24 08:17:10
文字列リテラルは配列な。

552:デフォルトの名無しさん
10/06/24 09:27:31
>>550
メモリアドレス→メモリ上の住所を示す「定数」
ポインタ→任意のメモリアドレスを示すことができる「変数」

553:デフォルトの名無しさん
10/06/24 09:38:33
char *a;

sizeof a と sizeof "aiueo" は違う

554:デフォルトの名無しさん
10/06/24 09:48:36
俺の感覚
アドレス = 型情報は含まない。
       "単なる住所"
ポインタ = アドレスと共に型情報も含む
       加減算や指し先の参照等で、与えられた型に応じて評価してくれる
       "どういう住人が住んでいるかを示している住所"

555:名無し
10/06/24 10:21:07
よくわからないが
"aiueo"はchar p[10]="aiueo";

ポインタを返すとは 先頭アドレスのpを返すこと?
配列の場合は&をつけなくていいんだよな先頭は
char *a;
a=p;
アドレスを返す場合は&p[0]などでいいんだよな?

文字リテラルは配列になるので &をつけなくても先頭のアドレスをポインタというのか?


556:名無し
10/06/24 10:37:49
char *p="abc";
があるとすると
>>この "abc" という式を評価すると、先頭の文字 'a' が格納されたメモリ領域を示すポインタが返ってきます!
と書いてあるのだが、100番地から始まったとして
a    b   c    \0
100番地,101番地,102番地,103番地
この領域をひっくるめてポインタというであっているのか

100番地とかはアドレスであり ポインタを返すという表現は
100~103番地全体を返すということ?

557:名無し
10/06/24 10:39:31
100~103全体がポインタで
100や101それぞれはアドレスでおk?

558:デフォルトの名無しさん
10/06/24 10:44:59
ポインタはアドレスを抽象化したもの。

559:デフォルトの名無しさん
10/06/24 11:00:06
名前:ピッコロ
アドレス:ナメック星一番地
ポインタ:住所はナメック星一番地、俺はピッコロだぁああああ

560:デフォルトの名無しさん
10/06/24 11:05:07
まぁビットから

561:デフォルトの名無しさん
10/06/24 12:26:09
>>556
通りすがりの元プログラマーです
ポインタは「アドレス用の変数」と思っておけばOKです
例えばアドレスが16ビットの環境なら

char *a;
int *b;
long *c;
printf("%d %d %d",sizeof(a),sizeof(b),sizeof(c));

↑16ビットなので全て2になる…はず(今、手元にCの環境が無いので確認できないw)

ポインタの型は
*c、← cにはアドレスが入ってるので、その位置にLong型があると解釈される
b++ ← int型ポインタなので、アドレスに(16ビット環境なら)+2される
などの時に必要になります

562:デフォルトの名無しさん
10/06/24 12:28:01
そんな決まりあったっけ?

563:デフォルトの名無しさん
10/06/24 12:29:35
ありますよ
調べてみてください

564:デフォルトの名無しさん
10/06/24 12:40:19
いまどき16ビット環境で語っちゃう人って……

565:デフォルトの名無しさん
10/06/24 12:43:34
まぁ揚げ足取りになるけど
ポインタ全部が同じ大きさであるような言い方は良くない

566:デフォルトの名無しさん
10/06/24 12:48:07
というか、ポインタのサイズを得々と語ってるけど
たからどうしたとしか思えない

567:デフォルトの名無しさん
10/06/24 13:27:39
ですね

568:デフォルトの名無しさん
10/06/24 16:04:53
そもそも返さねぇよ。ファンクシャンじゃねぇんだから。

569:デフォルトの名無しさん
10/06/24 17:13:14
>>554にある型情報の型ってどんな情報?
で型はどのように決められるの?

570:質問
10/06/24 17:13:52
国語、社会、理科の3科目の合計と平均を求める問題で、
URLリンク(www.geocities.jp)
こちらのHPにある解答を実行してみたら、
goukei=2144332132 average is=2442545234
のような表示結果が出てきてうまくいきませんでした。

どこが違うのかどなたか教えていただけますか?
よろしくお願いします

571:デフォルトの名無しさん
10/06/24 17:15:21
>>570
ここはエスパーを召還するスレか?
うまくいかなかったソースを貼れよ

572:デフォルトの名無しさん
10/06/24 17:17:41
ポインタ=アドレス値 と考えていいよ
>>557
>100~103全体がポインタ
仮にC言語に文字列型があれば、その例では、全体は(文字列型)

573:デフォルトの名無しさん
10/06/24 17:33:48
仮の話はいりません。C言語に文字列型はありません。

574:554
10/06/24 17:36:17
>>569 俺の感覚の話なので、イメージで

宣言時に * の前に型指定してるじゃん(ex int * 等) それを指して型情報を持っている と捉えてる。
void * 中の void も 型無し という型指示されている という意識ね

 int a[3]
 int *p = a;
 int *q = a + 2;
 void *hoge = a;

q-p は合法で sizeof(int) に関係無く 2 を返すし hoge - p は非合法。

アドレスは、ただの整数値 という意識

575:デフォルトの名無しさん
10/06/24 17:45:16
> sizeof(int) に関係無く 2 を返すし
ヴォケ

576:デフォルトの名無しさん
10/06/24 17:48:16
>>575
ポインタ - ポインタ の値だぞ? アドレスの距離を返さずに、要素差返すんだけど?

577:デフォルトの名無しさん
10/06/24 17:56:09
煽る前に確認しろってことだな

578:デフォルトの名無しさん
10/06/24 18:21:56
>>576
ポインタの差を出すことは合法だろ
専用の型まであんのに

579:デフォルトの名無しさん
10/06/24 18:25:37
>>570
#include <stdio.h>

main()
{
  int kokugo,shakai,rika;
  int goukei,heikin;

  printf("国語の点数=");
  scanf("%d",&kokugo);
  printf("社会の点数=");
  scanf("%d",&shakai);
  printf("理科の点数=");
  scanf("%d",&rika);

  goukei = kokugo + shakai + rika;
  heikin = goukei / 3;

  printf("合計=%d  平均=%d \n",goukei,heikin);
  return 0;
}

580:デフォルトの名無しさん
10/06/24 18:27:59
いやintじゃねぇだろって言いたかったんだ
レスも安価も間違っちゃってるが

581:デフォルトの名無しさん
10/06/24 19:04:55
>>570
>>579
正常に動作している。
cygwin 1.7/gcc 4.3.4/Windows XP SP3

582:デフォルトの名無しさん
10/06/24 19:07:19
cygwin()笑い

583:名無し
10/06/24 19:13:26
ポインタのことだが
char *p="ABC";

ポインタを返すという表現をのせてるサイトがあったが

abcを確保して
先頭のアドレスを返すって意味と同じだったらしい
ポインタを返すって書くんじゃなくて abcが保存されてる場所の先頭アドレスを返すっていみ

すっきりしたよ

584:デフォルトの名無しさん
10/06/24 20:09:13
const char* p = "ABC"; なのに
char *p="ABC";
でOKなの?

585:デフォルトの名無しさん
10/06/24 20:14:04
規格で保証されている
内容書き換えちゃだめだけど

586:デフォルトの名無しさん
10/06/24 20:22:53
>>584
C言語/C++03以前では非constポインタへの暗黙変換が許される

587:デフォルトの名無しさん
10/06/24 20:40:46
つかC言語では文字列リテラルを評価した時の型はchar*と違ったか?
確認して書いたわけじゃないんで記憶違いならすまん。

588:デフォルトの名無しさん
10/06/24 20:43:43
>>587
sizeof は char* とは異なる

589:デフォルトの名無しさん
10/06/24 20:45:39
>>586
C++03でも許されてるはずだけど
「以前」ってのは含むのか含まないのか

590:デフォルトの名無しさん
10/06/24 20:46:53
>>587
文字列リテラルは array of const char で、当然 const char* に暗黙変換可能
ただし、例外的に char* に暗黙変換可能

591:デフォルトの名無しさん
10/06/24 21:57:16
>>589
一般ピーポーじゃあるまいし含むのが普通だろう

592:デフォルトの名無しさん
10/06/24 21:58:54
void f(char const x); // f(char)でも呼べるのに

template<typename T>class A;
void f(A<char const>x); // void f(A<char>); で呼べないのは不便だとおもう。

593:名無し
10/06/24 22:06:51
一般ピーナッツだろ

ねえ、int a;
&a=0xbffff978;とか代入できないんだが何故?

アドレスを直接いれるってのは無理なの?

594:デフォルトの名無しさん
10/06/24 22:10:13
キャストしる
0は特別扱い

595:デフォルトの名無しさん
10/06/24 22:11:03
1+2=5;
と同じ

596:594
10/06/24 22:13:34
いや、ちげえ
なんだそれ

597:デフォルトの名無しさん
10/06/24 22:24:06
>>593
int a;
*(&a)=0xbffff978;


598:デフォルトの名無しさん
10/06/24 22:27:03
>>593
int *a = (int*)0xbffff978;
*a = 0;

メモリマップドI/Oならvolatileつけた方が良い

599:デフォルトの名無しさん
10/06/24 22:27:11
いやそれ只のa =

600:デフォルトの名無しさん
10/06/24 22:28:41
>>599>>597

601:デフォルトの名無しさん
10/06/24 22:30:37
そのアドレスがすでに使われてたりしないの

602:デフォルトの名無しさん
10/06/24 22:31:10
なんでアドレスとポインタの区別がつかないんだ?
アドレスは定数だっつーのに代入しようとすんなよ

603:名無し
10/06/24 22:31:53
>>597,598

もやっと解消してくれてありがとう^w^b
アドレスを直でいれられたとは初めてしったお

604:デフォルトの名無しさん
10/06/24 22:44:28
>>601
むしろシステム他に使われてるからこそ、そこを指したいだろ

605:デフォルトの名無しさん
10/06/24 22:49:46
ああ、任意の場所を確保しようとしてるわけじゃないのか
配列と混同した

606:デフォルトの名無しさん
10/06/25 00:43:54
本棚には入門者の本で埋め尽くされています。
いい加減入門レベルから卒業したいんですがどういうプログラムがかけるようになれば
中級、上級者になれるのですか。
私は、他の人が作成したプログラムにけちをつけるくらいの力は持っています

607:デフォルトの名無しさん
10/06/25 00:46:45
自分が作りたいプログラムがすぐに作れるようになったら

608:デフォルトの名無しさん
10/06/25 01:09:39
>>606
入門編としてマスターマインドを作ってみる

609:デフォルトの名無しさん
10/06/25 01:12:23
コンパイラをゼロから書けるようになったら「入門」だろ。

610:デフォルトの名無しさん
10/06/25 01:13:29
>>609
どこに入門するんだよ
ハードルたけぇよ

611:デフォルトの名無しさん
10/06/25 01:15:34
まーた口だけプログラマーかよ
gccレベルのもん書いてから偉そうなこと言えっつーの

612:デフォルトの名無しさん
10/06/25 01:16:20
>>611
偉そうなだけの人キタw

613:デフォルトの名無しさん
10/06/25 01:28:26
OSとコンパイラなら、どっちが先かえ?

614:デフォルトの名無しさん
10/06/25 01:32:02
比較するようなもんじゃない

615:デフォルトの名無しさん
10/06/25 02:02:05
規格に書いてある内容が一通り理解出来るまでが入門。
ある一つの処理系について何処が処理系依存がどう動くか、
その処理系の独自拡張や使えるライブラリ群に精通するぐらいが中級。
世にある代表的な多くの処理系について中級レベルに
分かるようになると上級。

実際に複雑なプログラムを作るには、Cの技術力より
設計やテストの技術、そして作りたい物の分野に対する
知識の方が重要です。

つまり>>606はスレ違い。
強いて言えば、コンパイラ作れて中級の入口じゃね?
構文解析手法やら機械語やらCそのものとは
あまり関係ない知識もたらふく要るけど。

616:デフォルトの名無しさん
10/06/25 02:16:03
>>612
あーん?

617:デフォルトの名無しさん
10/06/25 09:41:33
>>616
あなたの書いた「gccレベルのもん」を拝見させていただこうか

618:デフォルトの名無しさん
10/06/25 10:27:34
gccレベルという意味がわからん。

何と比べて、どの部分がどう高いんだ???

CでなくC++という意味か?
Unix系のOSが扱えるということ?

619:デフォルトの名無しさん
10/06/25 10:37:23
gccそのものを書けるぐらいのレベルって話だろw

620:デフォルトの名無しさん
10/06/25 13:00:01
gccって、あれ一人で作ってんのか?

621:デフォルトの名無しさん
10/06/25 15:41:51
gccを書いて偉そうな事を言ってる人もいるが
あれはあれで聞く気になれないよなw

622:デフォルトの名無しさん
10/06/25 16:06:35
>>621
そんな偉そうなことを言えるほどお前は有能なのか
身の程を知れよ

623:デフォルトの名無しさん
10/06/25 16:14:54
有能な>>622がgccをつくってくれるそうですよ

624:デフォルトの名無しさん
10/06/25 17:10:12
> コンパイラをゼロから書ける

と言われて gcc くらいしか発想にない頭の不自由な方イタすぎ

625:デフォルトの名無しさん
10/06/25 17:14:30
16進表記のテキストをバイナリ保存しなおすだけでもコンパイラと呼んでいい?

626:デフォルトの名無しさん
10/06/25 17:21:54
>>624
大学1年だろ、プログラミングを始めてまだ半年も経っていないから…

627:デフォルトの名無しさん
10/06/25 17:25:27
コンパイラのデザインと実装の講義・実験があったのは2回生のときだったなぁ。
今でもgccレベルのものなんて容易には作れないが。


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch