09/04/14 16:10:58
6個のreal型変数x1、y1、x2、y2、x3、y3を定義しそれぞれに実数つを読み込んで、xy平面上の3点
(x1、y1)(x2、y2)(x3、y3)を頂点に持つ三角形の面積を計算して、その値を表示するプログラムを作成してください。
・公式:底辺x高さ÷2を使って計算してください。
お願いします!!
325:tuguti
09/04/14 16:30:26
すいませんスレ間違えました
326:デフォルトの名無しさん
09/04/14 22:34:34
>>324-325
間違えましたじゃねーよ
そう言うのは意図的なマルチポストって言うんだろ。
帰れ。うざいから。
327:デフォルトの名無しさん
09/04/14 22:38:36
>>324
とおもったら
スレリンク(tech板:493番)
スレリンク(tech板:770番)
スレリンク(tech板:499番)
スレリンク(tech板:774番)
スレリンク(tech板:876番)
スレリンク(tech板:66番)
スレリンク(tech板:499番)
スレリンク(tech板:808番)
スレリンク(tech板:821番)
スレリンク(tech板:16番)
スレリンク(tech板:934番)
これはひどいwww
ここまで来ると逆に尊敬するマルチ野郎だな。
良識を疑う。
328:デフォルトの名無しさん
09/04/14 23:32:52
>>326-327
てなことを、10スレ以上で言って回ってるのかおまえらは? おヒマですね
マルチポストがどーたらを言ってる奴自身、ろくな回答してねえのが多いんだよな
# 加えてクロスポストを知らなかったりするし
329:デフォルトの名無しさん
09/04/14 23:34:37
マルチにろくな回答をしてあげる必要があるのかとか、この件で
クロスポストがなんの関係があるのかとかいろいろ疑問のわく書き込みだな。
330:デフォルトの名無しさん
09/04/14 23:57:24
>>328
いんやこれはマルチポスト
しかもIDも無い板で”奴自信”とかイッちゃうアンタはe視野狭窄の発症者
だれも相手に出来ない
331:デフォルトの名無しさん
09/04/15 00:58:12
実行結果を正しく予測できますか?
#include <stdio.h>
int main(void)
{
> int n = 0, *p;
> p = &n;
> fprintf(stdout, "n, p = %d, %p\n", n, p);
> (*p)++;
> fprintf(stdout, "n, p = %d, %p\n", n, p);
> ++*p;
> fprintf(stdout, "n, p = %d, %p\n", n, p);
> *p++;
> fprintf(stdout, "n, p = %d, %p\n", n, p);
> return 0;
}
332:デフォルトの名無しさん
09/04/15 01:07:55
>331
未定義動作が含まれているぞ
333:デフォルトの名無しさん
09/04/15 01:19:46
'>'のせいでコンパイルが通らない
334:331
09/04/15 02:02:58
/*
再挑戦
実行結果を正しく予測できますか?
*/
#include <stdio.h>
int main(void)
{
int n = 0, *p;
p = &n;
fprintf(stdout, "n, p = %d, %p\n", n, p);
(*p)++;
fprintf(stdout, "n, p = %d, %p\n", n, p);
++*p;
fprintf(stdout, "n, p = %d, %p\n", n, p);
*p++;
fprintf(stdout, "n, p = %d, %p\n", n, p);
return 0;
}
335:デフォルトの名無しさん
09/04/15 03:31:19
どっちにしろ副作用完了点前に同じオブジェクトに代入と参照を行ってる気がするので
実行結果は鼻から悪魔が出るなりなんなりOK
336:デフォルトの名無しさん
09/04/15 03:35:20
>>334
見てるかもしれないけど一応リンク張っておく
URLリンク(www.st.rim.or.jp)
337:デフォルトの名無しさん
09/04/15 06:44:11
>>335
気のせいじゃないの
338:デフォルトの名無しさん
09/04/15 06:54:48
気の所為だね。
339:デフォルトの名無しさん
09/04/15 09:26:02
*p++; の評価について勉強になった。
あんがと
340:デフォルトの名無しさん
09/04/15 12:52:51
グローバル変数をいっぱい作れば、ポインタ使わなくて済みますか?
341:デフォルトの名無しさん
09/04/15 13:01:57
>>340
小さいプログラムならいいかもしれないけどシステム固有のAPIとか
使うようになった際ポインタわからなければアドレス渡しとかでてきたら
どうするの?
342:デフォルトの名無しさん
09/04/15 13:30:02
そういうAPIが使える程には成長しないので大丈夫
343:デフォルトの名無しさん
09/04/15 13:32:09
>>340
ポインタを使うときは、使うなりの理由がある。
別にグローバル変数をいっぱい作っても仕様によっては
ポインタを使う可能性が出てくるかもしれない。
344:デフォルトの名無しさん
09/04/15 20:29:47
シングルトンだろ
345:デフォルトの名無しさん
09/04/15 21:05:22
warning LNK4099: PDB 'vc90.pdb' が '.\libjpeg.lib' で、または~
となります。ぐぐりましたが、大概は無視してOKとかいてあるんですが
根本的な原因がわかりません。どうしたらこの警告がでなくなりますか?
346:デフォルトの名無しさん
09/04/16 01:54:20
ライブラリをコンパイルするときにpdbを出力しなければよかったような
もしくはlibだけじゃなくてpdbファイルも一緒にコピーすればおk
「pdb 設定」あたりでググってみれば参考になるかも
347:デフォルトの名無しさん
09/04/16 22:25:38
.txtファイルに書いてある数字を入力として配列に格納するにはどーすればいいのか
分からん
348:デフォルトの名無しさん
09/04/16 22:27:50
fopen と fscanf
349:デフォルトの名無しさん
09/04/16 23:18:00
#include <stdio.h>
int main()
{
int tbl[100];
int i;
FILE* fp = fopen("a.txt", "r");
i = 0;
while (fscanf("%d", &tbl[i++]) != EOF)
;
return 0;
}
350:デフォルトの名無しさん
09/04/17 07:41:18
>>349
ありがとう 参考になりました
351:デフォルトの名無しさん
09/04/17 21:27:18
すいません。
URLリンク(xn--n9q36mh1hnxuksz7wt.jp)
の「プログラム」部分で、
if ( replaceChar( □□□ ) ) {
なんたらかんたら~
}
って部分があるじゃないですか。
この□□□には " *input "が入るらしいんですが、
なぜこうなるのかイマイチよくわからないのです。
この "*input "の内容によっては 0 か 1 が帰ってくるみたいなんですが、
このifってのは( )の中の内容が当たっているか当たってないかだけでなくて
0か1でもいいってことなんでしょうか?
352:デフォルトの名無しさん
09/04/17 21:37:00
if( expression )
statement1
[else
statement2]
expression が真 (0 以外) であると、if キーワードによって statement1 が実行されます。
else があり、expression が偽 (0) であると、statement2 が実行されます。
statement1 または statement2 の実行後は、制御が次のステートメントに移ります。
353:デフォルトの名無しさん
09/04/17 21:43:55
>>352
ifの内容が0だと内容が偽と同じだってことですか。
ありがとうございました。
354:デフォルトの名無しさん
09/04/17 22:15:26
>>350
>349の条件判断は、 != EOFではなく== 1にすべきだな。
355:デフォルトの名無しさん
09/04/17 22:18:13
>>354
そこだけ突っ込むのは釣りか?
356:デフォルトの名無しさん
09/04/17 22:23:17
目に付いたところだけ書いたんだが。
あー、fopen()の戻り値はチェックすべきだし、fclose()位してもばちは当たらんね。
357:デフォルトの名無しさん
09/04/17 22:30:42
そんな細かいこと言うなら == 1もダメだろ。
358:デフォルトの名無しさん
09/04/17 22:32:14
>>357
なんで?
359:デフォルトの名無しさん
09/04/17 22:33:30
すいません。
URLリンク(xn--n9q36mh1hnxuksz7wt.jp)
で、 *inputの中身を4ビットだけ右にずらす作業があるみたいなんですけども、
なぜ、4ビットずらすと " ! "が " 2 "になるのか全くわかりません。
4ビットだけずらすと0x21が0x32になるらしいんですけども・・・・
360:デフォルトの名無しさん
09/04/17 22:35:00
>>358
オープンはエラーチェック必要でリードは必要なし?
361:デフォルトの名無しさん
09/04/17 22:36:24
>>360
エラーチェックしているじゃん。
362:デフォルトの名無しさん
09/04/17 22:37:37
>>359
4ビット抽出した後、chars配列を参照するので文字になる。
363:デフォルトの名無しさん
09/04/17 22:41:48
>>359
パッと見でなんですが、
! -> 0x21 -> 0x32,0x31 ではないかな。
364:デフォルトの名無しさん
09/04/17 22:53:25
>>362
あ、なるほど。
0x21の場合 0011 0001 → 0000 0011で、10の位にあったものが一の位になり、
chars[ 0011 (つまりは2)] = 2 で表されるってことですか。
どうもありがとうございました。
365:デフォルトの名無しさん
09/04/17 22:53:28
なんだ、答え載ってるじゃん。
366:デフォルトの名無しさん
09/04/17 23:16:49
>>364
0011じゃなくて0010だけどね。
367:デフォルトの名無しさん
09/04/17 23:21:57
スレに書いてあること8割分からないレベルなんだが最初は何から入ればいいか教えてくれないか
368:デフォルトの名無しさん
09/04/17 23:27:56
>>367
カーネルのコンパイル。マジで
369:デフォルトの名無しさん
09/04/17 23:33:49
だめだググっても意味が分からない
370:デフォルトの名無しさん
09/04/17 23:39:30
>>369
初心者向けのC入門とか言ってもプログラムやりたい奴が
目にする環境だとすぐにどうでもいい感じになるので
ここでもみて開発環境とか含めて勉強しろ
URLリンク(homepage2.nifty.com)
URLリンク(dixq.net)
371:デフォルトの名無しさん
09/04/17 23:48:28
すいません。
URLリンク(xn--n9q36mh1hnxuksz7wt.jp)
で
if ( ( Len1 >= Len2 ) && ( Len1 >= Len3 ) ) {
点を描画~
}
ってところがあるんですけれども、
問題によると3点が隣接していれば点を打つっていうことになっているらしいんです。
三辺の長さを比べて、Len1が一番長かっただけでどうして隣接しているとわかるんでしょうか?
372:371
09/04/17 23:51:15
すいません。問題よく読んでいませんでした。
373:デフォルトの名無しさん
09/04/18 00:44:01
>>370
thxxxx
374:デフォルトの名無しさん
09/04/18 00:44:33
教えてください
operation on 'hoge' may be undefined
というワーニングがでて
hoge=(++hoge)%3;
問題の箇所はという処理になってます。
元はVC++でコンパイルしてたものをgcc上でコンパイルしています
どう対処すればいいでしょうか?
375:デフォルトの名無しさん
09/04/18 00:45:45
>>374
hoge = (hoge + 1) % 3;でいいと思う。
376:デフォルトの名無しさん
09/04/18 00:46:05
>>374
hoge=(hoge+1)%3;
にするとか。
377:デフォルトの名無しさん
09/04/18 00:47:00
>>374
hoge=(hoge + 1) %3;
おまえのやってることは未定義動作だからおこられてる
378:374
09/04/18 00:49:51
>>375>>376>>377
なるほど
わかりました
379:デフォルトの名無しさん
09/04/18 01:17:37
てst
380:デフォルトの名無しさん
09/04/18 06:03:54
ワーニング(笑)
381:374
09/04/18 06:48:48
ワーニングでもいいんじゃない
なんかこれも読み方でひと悶着ありそうだな
382:デフォルトの名無しさん
09/04/18 07:20:47
スレリンク(tech板)
ここ埋めてやれよ
383:デフォルトの名無しさん
09/04/18 20:49:44
>>381
プログラムを書く人って、変に細かいことにこだわる人が多いからね。
384:デフォルトの名無しさん
09/04/18 20:55:45
細かけぇ事はいいんだよ
385:デフォルトの名無しさん
09/04/18 20:58:14
>>384
いやよくないだろ
386:デフォルトの名無しさん
09/04/18 21:08:45
errorはエラーだけどwarningは警告って言う人が多いイメージ
387:デフォルトの名無しさん
09/04/18 21:15:28
>>386
警告かあ。ウォーニングってくるのかとオモタ。
388:デフォルトの名無しさん
09/04/18 21:24:32
StarWars
スターワーズ
389:デフォルトの名無しさん
09/04/18 22:03:09
MicrosoftWord
マイクロソフトウォード
390:デフォルトの名無しさん
09/04/18 22:05:22
その程度を許容できないからキモイ認定されるんだろうな
391:デフォルトの名無しさん
09/04/18 22:08:57
スィー言語
392:デフォルトの名無しさん
09/04/18 22:36:37
iterator
393:デフォルトの名無しさん
09/04/18 22:43:58
イテラトール
394:デフォルトの名無しさん
09/04/18 22:48:03
スペイン訛りっぽいな。
395:デフォルトの名無しさん
09/04/18 22:51:35
ローマ人なら分かってくれる
396:デフォルトの名無しさん
09/04/20 18:39:40
質問です。
授業でteratermを使って、emacsでプログラミングをしているのですが
とりあえず、先生の用意したプログラムをコピペして起動してみろとのことで
普通にコピペして、コンパイルしようとしたのですが
警告: null 文字は無視されました
という文章が何十行にも渡ってでて、コンパイルできません。
調べてもなかなか対処がわからず、過去ログでの質問は自己解決していたりでわかりません。
断片的な情報から、文字コードの問題かと設定をUFT-8からEUCなどに変えてみましたが
UFT-8以外では文字化けしてしまいます。
とりあえず、インデントをしっかりTabに書き換えたりもしましたが、解決しませんでした。
どなたか、解決法を教えてください。
397:デフォルトの名無しさん
09/04/20 18:47:45
C言語の問題じゃないから先生に聞け。そうでないならLinux板にでも逝け。
398:デフォルトの名無しさん
09/04/20 19:02:50
>>397
ありがとうございました。
やっぱりCじゃ無かったですか・・・。
399:デフォルトの名無しさん
09/04/20 19:06:11
環境依存可のC/C++スレに池
400:デフォルトの名無しさん
09/04/20 22:44:18
とりあえずemacsは糞だからviを使え
401:デフォルトの名無しさん
09/04/20 23:03:47
また論争の種を…
402:デフォルトの名無しさん
09/04/20 23:26:41
aファイルとlibファイルの具体的な差異を教えていただけますか?
バイナリ見るとヘッダー情報も同じように見えるのですが…
403:デフォルトの名無しさん
09/04/21 09:16:33
libは知らんが、.aなら単なるarというアーカイバーのアーカイブファイルだ。
例えば、tar cf foo.tar *.oするのと本質的に変わらない。
tar tvf foo.tarするのと同様にar tvf foo.aできる。
404:デフォルトの名無しさん
09/04/21 11:51:27
>>402
.aがLinux用で.libがWindows用
知らんけど
405:デフォルトの名無しさん
09/04/22 22:07:53
C言語で実用的なアプリってもう書かれる事はないの?
406:デフォルトの名無しさん
09/04/22 22:11:21
>>405
Winアプリって意味なら最近は殆ど無い。
流石にこんな古臭いのでWinアプリは書いてられない。
407:デフォルトの名無しさん
09/04/22 22:15:14
まあせめてC++だなあ
でも.netもじわじわと進出してるからc#とかで書かれてるのも結構あるし
まあVBのおかげもあるんだろうけど
408:デフォルトの名無しさん
09/04/22 22:15:57
>>405
組み込み系ならあるでしょ。
409:デフォルトの名無しさん
09/04/22 22:22:29
int a[3][3]={{1,2,3}{2,5,3,}{3,2,7}}
と定義したaの値の中から、bとcの値をキーボードから入力して、
例えば、bが3でcも3なら7といったような結果を出すには
どうすればいいのか教えてください。
410:デフォルトの名無しさん
09/04/22 22:28:18
>>409
ごめん日本語が意味不明なのは俺だけじゃないはず。
>aの値の中から、bとcの値をキーボードから入力して、
???
411:デフォルトの名無しさん
09/04/22 22:29:58
>>409
こういう事かな?
printf("%d\n", a[b-1][c-1]);
412:デフォルトの名無しさん
09/04/22 22:29:59
printf("%d\n", a[b - 1][c - 1]);
413:デフォルトの名無しさん
09/04/22 22:32:28
ヒントを言うとこれだ
printf("%d",a[foo][bar]);
414:デフォルトの名無しさん
09/04/22 22:33:39
すみません…。初心者なので説明するのが難しいです。
えっと、3×3の表があって、縦の一列目、横の二列目という風に
それぞれ1から3までの数字をキーボードから入力するということです。
3×3の表をa、縦をb、横をcとしてしまいました…。
415:デフォルトの名無しさん
09/04/22 22:33:42
そうかそうか0から始まるな
416:410
09/04/22 22:35:48
お前らesper何級持ち?
すげーな
これだけesperがいればもう大丈夫だな。後はまかせた。
417:デフォルトの名無しさん
09/04/22 22:37:23
すみませんもう一ついいですか?
int b,c;
これって初期化したことになりませんか?
418:デフォルトの名無しさん
09/04/22 22:38:17
なりません。
419:デフォルトの名無しさん
09/04/22 22:38:22
初期化っつーか宣言だなそれは
420:デフォルトの名無しさん
09/04/22 22:38:50
ならないですね
あくまで確保しただけ
int b = 0;
int c = 0;
とか書いたら初期化
421:デフォルトの名無しさん
09/04/22 22:50:06
C言語難しいですね…。
きちんと縦の一列目、横の二列目にある数字が最後にでてきません…。
422:デフォルトの名無しさん
09/04/22 22:51:11
C言語の前に日本語勉強しなさい
423:デフォルトの名無しさん
09/04/22 22:51:38
申し訳ない。
国語は得意だったんですが。
424:デフォルトの名無しさん
09/04/22 23:01:10
これなんですが…。
%dのところに変な数字がでてきてしまいます。
scanfのところが間違っているのでしょうか。
int a[3][3]={{7,5,8},{6,5,7},{9,6,6}};
int b=0,c=0;
printf("好きな番号を入力してください。\n",b);
scanf("%d",&b);
printf("好きな番号を入力してください。\n",c);
scanf("%d",&c);
printf("\n表の文字は、%dです。\n",a[b-1][c-1]);
425:デフォルトの名無しさん
09/04/22 23:03:55
printfの第二引数いらないよね
426:デフォルトの名無しさん
09/04/22 23:09:19
,bのところですか?
これ、つけなくてもよかったんですね。
427:デフォルトの名無しさん
09/04/22 23:10:18
static int b,c;
なら初期化
428:デフォルトの名無しさん
09/04/22 23:17:22
staticですか。まだ習っていないのでよくわかりませんが今度から
初期化はstaticを使わせてもらいます!
適当にちょこちょこ直してたらなぜかきちんとできました!
いまいちどこがだめだったのかはわかりませんが…。
答えてくださった方々、ありがとうございました!
429:デフォルトの名無しさん
09/04/22 23:17:52
staticは静的変数だかんな
430:デフォルトの名無しさん
09/04/22 23:48:47
>>428
まてまてまて!
staticってなんだか分からないのに使うとたぶんとても困ったことになる。
頼むから適当な書籍で勉強してくれ。
431:デフォルトの名無しさん
09/04/23 00:08:30
staticなんて使わない方がいい
使うケースなんてレアだ
432:430
09/04/23 00:12:37
>>431
> staticなんて使わない方がいい
> 使うケースなんてレアだ
俺は使いまくるけど・・・。
(C++だからか?staticメンバ関数とかとても便利。)
433:デフォルトの名無しさん
09/04/23 00:35:14
俺も使いまくり。ある関数が実行された最初の一回だけ特定の処理をしたいときとか。
void func(void)
{
static int flag;
if(flag==0){
flag = 1;
init_fuck();
}
(処理)
}
434:デフォルトの名無しさん
09/04/23 02:41:05
そのパターンだとコード中の毎回のif分岐とマシン語のstaticチェックがあまりにも邪魔くさい。
typedef void(*func)(void) = func_1st;
void func_1st(void){
init_funk(); func=func_ord; func();
}
void func_ord(void){
//処理
}
だな
435:デフォルトの名無しさん
09/04/23 02:57:47
>>434が分からない…。
436:デフォルトの名無しさん
09/04/23 03:04:26
>>435
変数funcの初期値がfunc_1st()なので、初回のfunc()はfunc_1st()を呼ぶ。
そのfunc_1st()の中でfuncを書き換えておくから、二回目以降のfunc()はfunc_ord()を呼ぶ。
437:デフォルトの名無しさん
09/04/23 03:07:27
なるほど。天才ですね。
438:デフォルトの名無しさん
09/04/23 03:08:16
よく言われる。
439:デフォルトの名無しさん
09/04/23 03:57:02
お世辞も通じない馬鹿か
440:デフォルトの名無しさん
09/04/23 04:05:07
訳:うらやましいな
441:デフォルトの名無しさん
09/04/23 08:26:54
>>434
関数アドレスをコールの度にメモリ間接参照するのと
コールの度にフラグをメモリアクセスするのは、あまり変わらない
ブランチはブランチヒストリで予測されるだろうということで
442:デフォルトの名無しさん
09/04/23 10:27:08
もし頻繁に呼ばれる関数なら、分岐予測が分岐履歴から予測されるのでオーバーヘッドはほぼない。
もし頻繁に呼ばれない関数なら、分岐予測のオーバーヘッドとかどうでもいい。
443:デフォルトの名無しさん
09/04/23 14:49:51
はじめまして。
今C言語の勉強中で
構造体配列をソートしたいのですが
どうしたらいいのかわかりません。
テキストに載ってるソート方法はみんなint型で
実際int型でソートしようとしても
要領の大きさが足らないとかでてきて…
で、かわりにintのところをstructにしてもエラーになっちゃって…
私の実行したいことは
構造体の中のint型の数だけを判断してソートして出力させたいんです。
よろしくお願いします(>_<)
444:デフォルトの名無しさん
09/04/23 14:51:21
(>_<)←この顔文字使う奴は例外なく糞
445:デフォルトの名無しさん
09/04/23 14:54:36
つまり>>444も……
446:デフォルトの名無しさん
09/04/23 15:03:09
エラーになったコードを貼るとどこを直せばいいのかアドバイスしやすい
447:デフォルトの名無しさん
09/04/23 15:08:25
ソートアルゴリズムの比較のところを構造体のintにして、
入れ替えのところを構造体の入れ替えにすればいいだけだろ。
448:デフォルトの名無しさん
09/04/23 16:28:36
//遅くなりました。分けて載せます//
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void swap(struct data *, struct data *);
void printData(struct data *);
main()
{
struct data{
int no;
char food[12];
char eto[8];
char aisatsu[16];
};
struct data e[5] ={ {1, "すし", "ねずみ", "おはよう"},
{3, "たまごやき", "とら", "こんばんは"},
{4, "ステーキ", "うさぎ", "おかえりなさい"},
{5, "秋刀魚", "たつ", "おやすみなさい"},
{2, "やきうどん", "うし", "こんにちは"}
};
449:デフォルトの名無しさん
09/04/23 16:31:37
int i;
int j, k;
int n = 5;
struct data swap;
for(i = 0; i < 5; i++){
printf("%2d %12s %8s %16s \n",e[i].no, e[i].food, e[i].eto, e[i].aisatsu);
printf("------------------------------------------\n");
}
for(j = 0; j < n-2; j++);{
for(i = j+1; i < n-1; i++);{
if(e[j].no > e[i].no){
swap("e+i, e+j");
}
}
}
printData(e);
}
450:デフォルトの名無しさん
09/04/23 16:35:04
void swap(struct data *y, struct data *z)
{
int t;
t = *y;
*y = *z;
*z = t;
}
void printData(struct data *e)
{
int i;
for(i = 0; i < 5; i++)
printf("%d",e[i]);
printf("\n");
}
//これで終わりです//
451:デフォルトの名無しさん
09/04/23 16:37:23
int t; じゃなくて struct data t だろ
452:デフォルトの名無しさん
09/04/23 16:49:40
それでもだめでした・・・
453:デフォルトの名無しさん
09/04/23 16:59:01
struct dataの定義を main()の外に出す。
struct data swap;を消す
swap("e+i, e+j"); じゃなくてswap(e+i, e+j);
454:デフォルトの名無しさん
09/04/23 17:03:04
↑のとおりにしたらエラーが出なくなって
出力されました!!!
だけど番号が昇順にならない…昇順にしたいんですけど
何が間違っているのでしょうか???
455:デフォルトの名無しさん
09/04/23 17:08:01
ソートのループがおかしい
456:デフォルトの名無しさん
09/04/23 17:14:08
ソートのループはまあ、やればわかるけど
それよりもfor文の後ろのセミコロンだ、これに騙されて時間かかっちまったw
457:デフォルトの名無しさん
09/04/23 17:14:55
for(j = 0; j < n - 1; j++){
for(i = j+1; i < n; i++){
if(e[j].no > e[i].no){
swap(e+i, e+j);
}
}
}
こうだな
458:デフォルトの名無しさん
09/04/23 17:14:58
すいません、今いじってたら解決しました!!!
ご迷惑をおかけしました
ありがとうございました!!!
459:デフォルトの名無しさん
09/04/23 17:18:15
結局参考にはなりませんでしたが
本当にありがとうございました!!!!
460:デフォルトの名無しさん
09/04/23 17:20:24
全く参考にはなりませんでしたしここに来た甲斐も全くありませんでしたが
自己解決しました
ありがとうございました!!
461:デフォルトの名無しさん
09/04/23 17:23:13
下らない成りすましの何が面白いんだか
462:デフォルトの名無しさん
09/04/23 17:54:06
(>_<)
463:デフォルトの名無しさん
09/04/23 19:06:49
園児が部屋の隅で会議して大人には理解できない論理で結論に達し
「そうだよねー!!」と合唱してる感じだ
464:デフォルトの名無しさん
09/04/23 19:23:32
さーて、全員あぼんするか。
465:デフォルトの名無しさん
09/04/23 19:26:14
>>463
園児が大人達の会話にまざれなくて、かまって欲しくて奇行に走ってるのほうがふさわしいだろw
466:デフォルトの名無しさん
09/04/23 23:30:48
【神】
深夜の公園で全裸になり「裸で何が悪い!」と叫び続けたアイドル
【横綱】
磐田市内の県立高に侵入、女子生徒のスク水着て脱糞
【大関】
女子高生の上履きを盗み、コンビニでコピーしたものを見て楽しむ
19~71歳女性に一瞬で精液をかける18歳少年「早撃ちマック」
「セーラームーン」のコスプレで女性に近づき網タイツ越しに下半身を露出
改造した釣竿を使い、足掛け30年で500枚もの女性下着を盗み続けた
【関脇】
ブルマー持参で小学校侵入、「学校ではくと快感」
女性宅に侵入し何も盗らずPCのスクリーンセーバーをエロ画像に変えた男
京阪電鉄の特急電車内で男が幼虫200匹バラまく。「驚く女性客見たかった」
【破門】
10年以上に渡り女児パンツを履いては近隣の家に投げ込んでた男。
ストッキングと女児用パンツを組み合わせる独特の手法にこだわりを見せ、
取り調べに対しても悪びれることなく「女性の下着は密着感が気持ちいい。」という名言を吐き一気に番付を駆け登る。
しかし過去に殺人事件や巨額の横領事件を起こしていたことが発覚。
再逮捕され、「変態道から外れた外道」と非難され破門。
2008年9月27日、大阪拘置所にて自殺。
【外国人力士】
深夜にオムツだけを着て女性に「このへんにオムツ交換室はありませんか?」と尋ねる男(イギリス)
467:デフォルトの名無しさん
09/04/24 07:04:43
リストの先頭から検索するロジックがいたるところにあるんですが
ほぼ定型なのでマクロ化しようと思ってるんですが下記のような
場合はどうすればいいでしょうか?
HOGE* ptr = HOGELIST();
while(ptr)
{
何かの処理
ptr = HOGELIST();
}
マクロ化したいのは「何かの処理」の前後になります。
複数行かけるマクロで書いてみたのですが暴走してるようなので
本来のロジックのように展開されてないようです。
{}をマクロ内部できっちり閉じない場合は何かおまじない?をする必要があるんでしょうか?
468:デフォルトの名無しさん
09/04/24 07:22:46
>>467
マクロはすべて一行に収めないといけない
複数行になる場合は行末に \ を書けば
次の行は前の行の続きとして扱われる
でも、マクロに変更しても処理速度UP効果はほとんど無い
そんなことよりもアルゴリズムを見直したほうが有意義だ
469:デフォルトの名無しさん
09/04/24 07:28:15
>>468
処理速度の向上といよりは手間ですね
関数の引数をはしょってますがこの関数で複数管理してるリストのリードが
できるようになってまして、その手間を省くために作成しようとおもってます。
一応実際というか理想は
#define HOGE_MAE (a) {\
HOGE* ptr = HOGELIST(a);\
while(ptr)\
{\
}
#define HOGE_ATO (a) {\
ptr = HOGELIST(a);\
}\
}
という感じで定義しておいて
HOGE_MAE(A_LIST)
何かの処理
HOGE_ATO(A_LIST)
としてます。
470:デフォルトの名無しさん
09/04/24 07:29:18
補足
A_LISTもdefineで定数が設定されてます。
リスト識別子とでも言えばいいんでしょうか
471:デフォルトの名無しさん
09/04/24 07:37:10
>>469
引数付マクロにしたければ丸括弧の前にスペースをいれては駄目
472:デフォルトの名無しさん
09/04/24 07:44:14
>>471
すみません
ここに記述する際に手打ちでやったのでいれてしまいましたが
実際は入ってません
473:デフォルトの名無しさん
09/04/24 07:55:44
>>472
中括弧の位置を間違ってるんじゃないの?
「手打ちだから間違えたけど実際は入ってない」とか
エスパーじゃないからわかんね
マクロでできるのは間違いないとしかいえないな
474:デフォルトの名無しさん
09/04/24 08:56:22
同じような処理を何度も書くよりはマクロにした方がいいね
475:デフォルトの名無しさん
09/04/24 09:07:53
マクロを関数のように使うのはよくないとコードコンプリート様は言っておられる。
476:デフォルトの名無しさん
09/04/24 09:12:36
何でそこまでしてマクロにしたいのか判らんが、可読性は確実に落ちるね。
それに、マクロの使い方を間違えたら泣けないバグが発生しそうだ。
477:デフォルトの名無しさん
09/04/24 10:53:46
>>469
それをやるんだったら、「何かの処理」を関数化して、
リスト検索の関数の引数として渡したほうがいい。
478:デフォルトの名無しさん
09/04/24 15:10:52
C言語のソースを文字列として処理するプログラムで
「*」(アスタリスク)が出てきた時にそれが
乗算演算子か間接参照演算子かポインタ変数宣言の記号かを判別する手順を教えてください。
479:デフォルトの名無しさん
09/04/24 15:23:50
>>478
状況設定がなさ過ぎで無理な気がするけど。
誰かエスパー頼む。
480:デフォルトの名無しさん
09/04/24 15:34:05
事前に型情報がわかってないと無理じゃないかな
int* a;
int INT;
int b;
INT* c;
481:デフォルトの名無しさん
09/04/24 15:34:48
ちがった
int* a;
int INT;
int b;
INT* b;
482:デフォルトの名無しさん
09/04/24 16:06:08
>>478
本気でやるなら、コメントやリテラル内での出現の場合も考慮する必要があるから
コンパイラ並のトークン解析処理を実装することになる。
483:デフォルトの名無しさん
09/04/24 16:07:34
そこは簡単
484:デフォルトの名無しさん
09/04/24 16:33:45
質問よろしいですか?
リンクリストについて今勉強中なんですけど
リンクリストのことを簡単に言うとどんな役割なんですか?
頭弱いんでほんとに簡単にお願いします。
どのテキスト読んでもよくわかんなくて…
よろしくお願いします。
485:デフォルトの名無しさん
09/04/24 16:36:23
頭(あたま)悪(わる)いのはよくわかったから、先(さき)に日本語(にほんご)の勉強(べんきょう)をしてくれ
486:デフォルトの名無しさん
09/04/24 16:54:54
■質問です■
ひとつの関数内に2つ以上のreturn文があるのはよくないですか?
もしそうならその理由もお教えください。
自分としては問題ないと考えてますが・・・
487:デフォルトの名無しさん
09/04/24 16:56:59
>>486
良いだろ別に、その人が制御出来ていれば。
変にフラグ変数とかgotoとかを乱発されるよか、returnが複数ある方がよっぽど良いと思うがね。
488:デフォルトの名無しさん
09/04/24 16:59:06
>>487
ありがとう。もっともですよね?
gotoで関数のケツにある一括エラー処理に落とすのも無問題ですよね?
489:デフォルトの名無しさん
09/04/24 17:24:27
質問してよろしいでしょうか。
Numerical Recipesを使って数値計算(runge kutta)のプログラムを組んだのですが、コンパイルは通ってもexeファイルが動きません。
どこかおかしいところがないか見ていただけないでしょうか。
#include <stdio.h>
#include <stddef.h>
#include <stdlib.h>
#define NRANSI
#include "nrutil.h"
#define N 2
#define dist 0.01
#define M 100
void derivs(float x,float y[],float dydx[])
{
dydx[1] = y[1];
}
void main(void)
{
double t;
float y[N],dydx[N],x=1.0,yout[N];
int j,i;
derivs(x,y,dydx);
scanf("%f",&y[1]);
for(j=0;j*dist<M;j++){
t=j*dist;
rk4(y,dydx,1,x,t,yout,derivs);
printf("%f\n",yout[1]);
}
}
490:デフォルトの名無しさん
09/04/24 17:27:55
>>489
nrutil.hは?
491:デフォルトの名無しさん
09/04/24 17:30:18
>>490
Numerical Recipesのインクルードファイルです。分割コンパイルしてあるのでわかりづらくてすみません。
もうひとつのファイルを貼り付けているので少しお待ちいただければと思います。
492:デフォルトの名無しさん
09/04/24 17:32:07
>>490
Numerical Recipes って製品みたいだな。 URLリンク(www.nr.com)
>>489
言語・文法の問題より、(仕様を含めての)ラブラリ利用法の話っぽいので
ここでは回答得られないかも? 適切な場所はワカラン
493:デフォルトの名無しさん
09/04/24 17:34:20
一緒にコンパイルしたものです。
#define NRANSI
#include "nrutil.h"
void rk4(float y[], float dydx[], int n, float x, float h, float yout[],
void (*derivs)(float, float [], float []))
{
int i;
float xh,hh,h6,*dym,*dyt,*yt;
dym=vector(1,n);
dyt=vector(1,n);
yt=vector(1,n);
hh=h*0.5;
h6=h/6.0;
xh=x+hh;
for (i=1;i<=n;i++) yt[i]=y[i]+hh*dydx[i];
(*derivs)(xh,yt,dyt);
for (i=1;i<=n;i++) yt[i]=y[i]+hh*dyt[i];
(*derivs)(xh,yt,dym);
for (i=1;i<=n;i++) {
yt[i]=y[i]+h*dym[i];
dym[i] += dyt[i];
}
(*derivs)(x+h,yt,dyt);
for (i=1;i<=n;i++)
yout[i]=y[i]+h6*(dydx[i]+dyt[i]+2.0*dym[i]);
free_vector(yt,1,n);
free_vector(dyt,1,n);
free_vector(dym,1,n);
}
#undef NRANSI
nrutil.hはこちらのプログラム中にある、~vectorを定義しています。中身は単純に配列取ってるだけだと思います。
494:デフォルトの名無しさん
09/04/24 17:40:23
>>492
やはりライブラリの利用法になるのでしょうか・・・。
解説書を見てもやっている数式の説明ばかりで具体的な使用法が載っておらず困っていたのです。
アドバイスありがとうございました。
あと、スレ違いでしたら申し訳ありません。
495:デフォルトの名無しさん
09/04/25 09:36:24
>>494
「exeファイルが動きません。 」って何かエラーメッセージが出てない?
DLLや共有ライブラリにパスが通ってないとかでは
496:デフォルトの名無しさん
09/04/25 10:52:49
とあるプログラムの速度を向上させるためにCPUの仕様上doubleをfloatに変えると
有効ということになり変換作業していたのですが特定の箇所でフリーズするため
調査したところ0で割っていたことがわかりました。
doubleのときは問題なかったのですがfloatにしたことで起きるというのは
やはり桁の問題なのでしょうか?
double = 0;
は実は0.000000000000000・・・・1とかなんでしょうか?
497:496
09/04/25 10:54:01
>double = 0;
double HOGE = 0;
とした際のHOGEの中は・・・
ですね失礼しました
498:デフォルトの名無しさん
09/04/25 11:15:44
>>496
0を入れたら0だよ。
誤差で0以外が入るってなさそう。
499:デフォルトの名無しさん
09/04/25 11:46:22
>>496
元(doubleのとき)からのバグか、変換作業中のミスじゃないの。
いずれにしても、生半可な知識でfloatにしても速くなるとは限らないけどね。
一つだけヒント。floatにすると、doubleへの暗黙の型変換が発生するかもしれない点に注意。
例えばfloat foo = bar + 0.1;なんて書くと、とっても遅い型変換が二回も発生してしまう。
500:496
09/04/25 12:02:02
>>498>>499
うーん・・・
ソース全体のdoubleをfloatに置換して問題が発生してるところの
変数だけdoubleにするとフリーズ無しで、floatにするとフリーズ
という不可解な・・・
物理演算のちょっとしたソースなんですが元はwindows上で動いてた物を
どちらかといえば組み込み系のCPUに持ってきてるんですがやはりdoubleの
ほうが計算速い構造なんですかね?
501:デフォルトの名無しさん
09/04/25 12:07:15
ゲームプログラマになる前に覚えて起きたい技術を読め
502:496
09/04/25 12:17:34
>>501
そうします
503:デフォルトの名無しさん
09/04/25 12:29:26
>>500
doubleとfloatとどっちが速いかは環境による。
(PCでやるときは、サイズが問題になるとき意外はdoubleをつかっとけば
いいと思うけど)
実測するか確かな資料にあたるかしたほうがいい。
504:489
09/04/25 12:46:28
>>495
遅レスですみませんorz
共有ライブラリborlandC++/Cはcw32.libとimport32.libを加えています。
これでいいのかどうかいまいち自信はもてませんが大丈夫だと思っています。
DLLについてはコンパイラが勝手にやってくれるものだと・・・。ちょっとググってきます。
505:489
09/04/25 12:55:45
何度もすみません。よく考えたらmakefileをさらせばすむ話なのでは・・・。
runge4-2.exe:runge4-2.obj rk4.obj nrutil.obj
ILINK32 /ap /w- /x /C runge4-2.obj rk4.obj nrutil.obj cw32.lib import32.lib
runge4-2.obj:runge4-2.c
bcc32 -c -w- -Od runge4-2.c
rk4.obj:rk4.c
bcc32 -c -w- -Od rk4.c
nrutil.obj:nrutil.c
bcc32 -c -w- -Od nrutil.c
と、こんなかんじで作りました。DLLと共有ライブラリどちらも問題ないと思っています。
506:デフォルトの名無しさん
09/04/25 13:04:18
>>500
フリーズするのは組み込み系のCPUでの話?
それだと使っているコンパイラにも拠るのでなんとも判らん。
そもそも実数なら0割り算で一一フリーズしないから、その変数のサイズに依存したコードでもあるかもね。
いずれにしても、どうしても高速化したいならアセンブリ出力を読めるくらいの知識が欲しいところだ。
507:デフォルトの名無しさん
09/04/25 16:12:29
>>505
えーとですね、"exeが動きません"ていうのが何を指してるのか分からないのですよ
runge4-2.exe を実行すると、何もメッセージが出ずにプロンプトに戻るとか
エラーダイアログが出るとか。
そうじゃなくて、実行結果(printfの出力)が期待と違うというのなら、
>>492 のいうように言語・環境の問題じゃないので、専門家を召還するしかない
508:デフォルトの名無しさん
09/04/25 17:08:57
静的ハフマン符号ってのを見てるんですが
1バイトのデータごとに出現回数を見て、頻度の高いものから2進数の符号を
割りあてるようにしようと思っています。
置換後の符号をそれぞれ
0, 10, 110, 1110, 11110, 111110, 1111110, 11111110, 11111111
とすると1バイトでは上記の9通りのデータしか置換できませんが
残りのデータはどうするんでしょうか。
509:デフォルトの名無しさん
09/04/25 17:22:22
>>508
2バイト以上使えばよい
510:デフォルトの名無しさん
09/04/25 18:11:51
ハフマン符号の説明は糞ばかりだからな
511:デフォルトの名無しさん
09/04/25 19:14:11
9通りの内の一つを次の符号参照にしてそれを繰り返す。
byte* return_buf={次符号参照の記号,頻度最大の値,頻度最大の値-1,・・頻度最大-7の値,{入力の符号化},次符号参照の記号,頻度最大-8の値,・・頻度最大-15の値,{入力の符号化}次符号参照の記号,頻度最大-16の値,・・};
殆どの場合酷いことになるが。
512:デフォルトの名無しさん
09/04/25 20:24:00
byteって何ですか?
組み込み型ですか?
513:デフォルトの名無しさん
09/04/25 20:25:55
企業というか社会に巣食う大人が都合よく使い捨てる労働力です
514:デフォルトの名無しさん
09/04/26 02:36:30
L'Arc~en~CielのVOCALです
515:デフォルトの名無しさん
09/04/26 09:42:46
>>513 そうアルね
516:489
09/04/26 12:46:48
>>507
なるほど。肝心な部分が抜けていたようですみませんでした。
runge4-2.exeを実行するとscanfすら実行せずにエラーで強制終了します。
出力先を指定してもなにも返さない(値が入っていない)のでプログラム自体がまったく動いていないのだと思います。
エラー報告の詳細にはAppver:0.0.0.0 Modver:0.0.0.0 Offset:00001017と出ていました。
要領を得ない説明で申し訳ないです。これでどうでしょうか。
517:デフォルトの名無しさん
09/04/26 23:53:39
すみません、C#しかやったことのない初心者なんですが、
C言語はじめてみて、日付の演算がもの凄く面倒に感じました。
(1ヶ月先の日付等を取得する場合などに、
年越しでの年+1や閏年なんかはデフォルトでは判定してくれないようなので)
みなさんはやはりラッパ書かれて対処されているのでしょうか?
518:デフォルトの名無しさん
09/04/27 00:04:04
A: そんなことが必要になったらCを使わない。
C#とかC++とかでいいじゃない。
というのはあんまりだけど、とりあえずmktimeはある程度考慮してくれたはず。
519:デフォルトの名無しさん
09/04/27 01:13:06
教えてください。
小学生の問題みながら作ってみたんですが、うまく作動しません。
もしかしたら根本的に間違えてるかもです。
指摘おねがいします。
main(){
int a,n,y,x;
scanf("%d%d%d",&a,&n,&y);
x=y-a*n;
printf("%d\n",x);
}
520:デフォルトの名無しさん
09/04/27 01:14:29
どう作動したらよくて、現状はどうなってるからダメなのか書け
521:デフォルトの名無しさん
09/04/27 01:32:00
小学生の問題はちょっと背伸びしすぎじゃないかい君
522:デフォルトの名無しさん
09/04/27 01:40:18
さすがもっとも小学生に近い男、言うことが違うなw
523:デフォルトの名無しさん
09/04/27 03:48:49
>>520
えと、X=Y-A×N
の計算をやらせたいのですが、なにも表示されません。エラーの表示もでません。
空白です。
つかってるのはめじろってやつです。
524:デフォルトの名無しさん
09/04/27 03:51:02
>.521
えっと、
A円のものをN個買いました。
Y円で支払いをしました。
おつりはX円になるか求めよ。
ってのを作ったつもりなんです。
525:デフォルトの名無しさん
09/04/27 03:54:06
>>523
キーボードで入力はしたのか?
526:デフォルトの名無しさん
09/04/27 04:14:48
>>525
といいますと・・・?
メモ帳で作成したのを、メジロで実行しております。
文字列やその他は間違えていませんか?
527:デフォルトの名無しさん
09/04/27 04:36:55
scanfの意味がわかってないのに使ってるのか?
528:デフォルトの名無しさん
09/04/27 09:11:34
xが全角の文字な気がするのは気のせいか?
529:デフォルトの名無しさん
09/04/27 09:33:36
エラーメッセージも書けないような奴を相手にするだけ無駄ってことだな。
530:デフォルトの名無しさん
09/04/27 09:44:01
小学生に厳しいですね
531:デフォルトの名無しさん
09/04/27 09:46:08
大丈夫、今時の小学生だってコピペくらいできる。
532:デフォルトの名無しさん
09/04/27 09:58:03
メジロってC言語インタプリタか
ググったけどよく分からんかった
533:デフォルトの名無しさん
09/04/27 10:36:57
入れて見たがVista64だとうまく動かんな、、、VMWareのほうに入れてみるか
534:デフォルトの名無しさん
09/04/27 10:48:19
#define <stdio.h>
int main(void) {
・
・
・
}
535:デフォルトの名無しさん
09/04/27 10:49:16
XPだと何とか動いた。
>>519そのまま実行して、
14 5 1000(リターン)
で
930
と表示されたが
536:デフォルトの名無しさん
09/04/27 12:36:01
>>519
何も表示されないのがいやなら
printf("1個の値段を入力:");
scanf("%d", &a);
printf("個数を入力:");
scanf("%d", &n);
printf("所持金を入力:");
scanf("%d", &y);
とかしろ
537:デフォルトの名無しさん
09/04/27 19:48:23
すみません。どうも求められている答えがわかりません。
6桁の16進数で入力されたカラーをRGBに分解して表示するプログラムを作成しましょう。
int color, r, g, b;
scanf("%6X", &color);
r=[空欄] ([空欄]);
g=[空欄] ([空欄]);
b=[空欄] ([空欄]);
printf("RGB(%d,%d,%d)\n", r, g, b);
return 0;
538:デフォルトの名無しさん
09/04/27 20:04:32
r=RGB_GETRED( color );
g=RGB_GETGREEN( color );
b=RGB_GETBLUE( color );
RGB_GETRED(rgb) (((rgb) >> 16) & 0xff)
RGB_GETGREEN(rgb) (((rgb) >> 8) & 0xff)
RGB_GETBLUE(rgb) ((rgb) & 0xff)
539:デフォルトの名無しさん
09/04/27 20:09:28
>>537
俺なら
r = (color >> 16) & 0xFF;
g = (color >> 8) & 0xFF;
b = (color >> 0) & 0xFF;
にする
540:デフォルトの名無しさん
09/04/27 21:32:51
空欄にあってないがな
541:デフォルトの名無しさん
09/04/27 22:23:57
>>516
scanf()の前で死ぬというのは不可解だけど、
rk4()の5番目の引数が >>489 と >>493 で違っている。
いずれにせよ >>489 のソースに rk4のプロトタイプ宣言を入れたほうがいい。
あと、>>489 の scanf と derivs の呼び出しは順番が逆じゃないかね
これじゃ不定値を dydx[1] にコピーしちゃう。
542:デフォルトの名無しさん
09/04/27 22:26:04
下みたいな2つのコードを書いた場合
int a = INT_MAX;
a += 1;
unsigned int b = UINT_MAX;
b += 1;
aの方は0にならないというか未定義だと思うんだけど、
bの方も未定義になる?
bは0になるんじゃないかと思ってるんだけど実は処理系依存とかだったりする?
543:デフォルトの名無しさん
09/04/27 22:29:05
すまん、上の例だとaが0になることなんて殆どないな。
まあこちらに関しては未定義だと思うからあんまり意味は無いけども。
544:ごすけ
09/04/27 22:30:40
教えてください。
/*引数n(<=1000)の入力に対して1~nの間の素数をすべて求めて、
コンソールに表示するプログラムを作成せよ。(ちなみに1は素数ではない)*/
を、for文を使ってお願いします。
545:デフォルトの名無しさん
09/04/27 22:31:17
>>542
符号付き整数がオーバーフローした場合は未定義動作だが、
符号なし整数が範囲外にでたときは、
(MAX+1)を何回か足したり引いたりして範囲内になるようにした値になることになってる。
546:デフォルトの名無しさん
09/04/27 22:31:33
>>544
ググれ
547:デフォルトの名無しさん
09/04/27 22:31:53
>>544
宿題スレいけ
548:デフォルトの名無しさん
09/04/27 22:36:49
>>544
だいたいそれぐらい出来なくて将来どうする気だ
働く先がないぞ。
549:デフォルトの名無しさん
09/04/27 22:36:53
>>544
エ***ふるい
550:ごすけ
09/04/27 22:41:37
初心者だったんで、教えてほしかったんです。
ググりました。引数は見つからなかったんです。
私の将来、これからなんで。
ご丁寧にありがとう。
551:デフォルトの名無しさん
09/04/27 22:42:04
>>545
レスありがとうございます。
一つよくわからないんですがこの場合は必ずある特定値になるんでしょうか?
それとも単に範囲内に収まるって事だけが決められていて、
0~UINT_MAXの値ならどれでも取りうるってことでしょうか?
例えばintが32ビット長なら計算結果の下位の32ビットがbに入ってるとは限らないのでしょうか?
552:デフォルトの名無しさん
09/04/27 22:46:08
特定の値だろ。MAXと-1はかなり関係がある。MAXで1足したら0だろ。
553:デフォルトの名無しさん
09/04/27 22:47:11
2の補数、1の補数とかCPUの依存はあるかも知れないが、通常だと0のはずだ。試してないが。
554:デフォルトの名無しさん
09/04/27 22:48:51
>>551
unsigned intの取り得る値は(UINT_MAX+1)個しかないから、
ある範囲外の値に(UINT_MAX+1)の整数倍を足して得られる
範囲内の値はただ一つに定まる。
ただし、(UINT_MAX+1)が2の冪乗である保証はどこにもないので、
下位ビットにそのままなるとは限らない。
555:542
09/04/27 22:57:01
なるほどよくわかりました。
上司からこれは未定義といわれてしまって納得がいかなかったので質問させていただきました。
>ただし、(UINT_MAX+1)が2の冪乗である保証はどこにもないので、
>下位ビットにそのままなるとは限らない。
たしかにこれはそうですね。
ただ今の環境だとUINT_MAX+1は2のべき乗なのでこれに関しては大丈夫そうです。
556:デフォルトの名無しさん
09/04/27 22:59:16
stringで、
str.find("hoge") == -1
という比較が出来る。
左辺は、unsignedだが。
557:デフォルトの名無しさん
09/04/27 23:01:18
>>555
変なスレタイだけど、次からこっちいくといいよ
【初心者お断り】ガチ規格準拠C専用スレ Part133
スレリンク(tech板)
558:デフォルトの名無しさん
09/04/27 23:08:08
>>556
それは厳密には環境依存なので、正しくはnposと比較すべきです。
559:489
09/04/27 23:20:46
>>541
レスありがとうございます。
たしかにプロトタイプ宣言が抜けていました。基本的なミスとはorz
関数宣言での変数は関数の型宣言だけで中身は何でもいいのかと思っていました。こちらも改善します。
また、derivesの値もたしかに不定のままになっていました。
なぜかまだ動かないままなのでなんともいえませんが、プログラムがかなり改善できたと感じます。
ご助言ありがとうございました。
560:デフォルトの名無しさん
09/04/28 01:28:12
ツェー言語
561:デフォルトの名無しさん
09/04/28 01:55:55
>>345
エスパーで
ファイルの先頭に
#pragma comment(lib,"libjpeg.lib")
を置いてみたら?
562:デフォルトの名無しさん
09/04/28 23:26:14
>>508でハフマン符号について質問した者です。
0には割り当てず、8通り以外のデータは0の次に持ってくる方法にしました
(勉強のため圧縮率は考えていません)。
時間をかけて何度もデバッガを使いながら実装してみたのですが、
多くの文字については復号できているのです
(zip内のdata.txtがオリジナル、huffman.txtが復号したものです)が
バイナリエディタかvim等で見て頂ければわかる通り、
一部の文字が0x00になってしまい、正しく復号できません。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
ご教示お願いします。
563:デフォルトの名無しさん
09/04/29 00:13:00
point[5]=
564:デフォルトの名無しさん
09/04/29 00:19:16
point[5]={10,50,20,40,30}という配列があります。
これを大きいものから順に並べてjyuni[5]の配列に入れたいと思っています。
jyuni[5]={50,40,30,20,10}となるように格納するのではなく、pointの何番目が一番大きいという形で格納したいのですが。
今回の場合で言うと、jyuni={1,3,4,2,0}となって欲しいのですが、このような処理はどうやったら良いでしょうか?
わかりにくいかと思うのですが、よろしくお願いします
565:デフォルトの名無しさん
09/04/29 01:23:21
>>564
{ {10,0},{50,1},{20,2},{40,3},{30,4}}
をソートして
{{50,1},{40,3},{30,4},{20,2},{10,0}}
とするとお望みのことが出来るのでは?
566:デフォルトの名無しさん
09/04/29 01:42:02
//ソート前
point[5]={10,50,20,40,30}
...
//ソート関数中のスワップ部分
tmp = point[i];
point[i] = point[j];
point[j] = tmp;
...
//ソート後
point[5]={50,40,30,20,10}
↓
//ソート前
point[5]={10,50,20,40,30}
index[5]={0,1,2,3,4}
...
//ソート関数中のスワップ部分
tmp = point[i];
point[i] = point[j];
point[j] = tmp;
tmp = index[i];
index[i] = index[j];
index[j] = tmp;
...
//ソート後
point[5]={50,40,30,20,10}
index[5]={1,3,4,2,0}
567:デフォルトの名無しさん
09/04/29 01:59:22
>>566
pointの中身は動かしたくないのですが・・・・できませんか?
568:デフォルトの名無しさん
09/04/29 02:09:18
pointをコピーした配列を用意してそっちをソートすれば
569:デフォルトの名無しさん
09/04/29 02:12:15
>>564
#include <stdio.h>
int main(void)
{
int i, j, point[5] = {10,50,20,40,30}, jyuni[5];
for(i=0; i<5; i++) {
for(j=i; j> 0; j--) {
if(point[i] < point[jyuni[j-1]]) break;
jyuni[j] = jyuni[j-1];
}
jyuni[j] = i;
}
for(i=0; i<5; i++) printf("%d ", jyuni[i]);
return 0;
}
570:デフォルトの名無しさん
09/04/29 02:24:03
ソートしてみたり
#include <stdio.h>
int main(void)
{
int i, j, point[5] = { 10, 50, 20, 40, 30}, jyuni[5] = { 0, 1, 2, 3, 4};
for(i=4; i> 0; i--) {
for(j=0; j<i; j++) {
if(point[jyuni[j]] < point[jyuni[j+1]]) {
int temp = jyuni[j];
jyuni[j] = jyuni[j+1];
jyuni[j+1] = temp;
}}}
for(i=0; i<5; i++) printf("%d ", jyuni[i]);
return 0;
}
571:デフォルトの名無しさん
09/04/29 02:34:01
かた~いw
572:デフォルトの名無しさん
09/04/29 05:09:47
おまえらqsortを使え
#include <stdlib.h>
int point[5] = {10, 50, 20, 40, 30};
int jyuni[5] = { 0, 1, 2, 3, 4};
int cmp(const void *s1,const void *s2)
{
int *p1 = (int *)s1;
int *p2 = (int *)s2;
if(point[*p1] == point[*p2])return 0;
else if(point[*p1] < point[*p2])return 1;
else return (-1);
}
main()
{
qsort(jyuni,5,sizeof(int),cmp);
}
573:デフォルトの名無しさん
09/04/29 05:20:16
>>572
>>567
574:デフォルトの名無しさん
09/04/29 05:29:03
>>573
バカ発見
575:デフォルトの名無しさん
09/04/29 05:45:08
debtさん
コントローラーの状態正しく取得するには
・ProcessMessage()もしくはRenewInput()を一定サイクルで呼び出す。
・上記処理の後でGetJoypadInputState()もしくはGetInputState()でボタン別の情報を取得
としないとだめです。
ProcessMessage()の中でRenewInput()を呼び出していますので
下記部分を崩してなければ取得はできるはずなんですが・・・・
//ループで必ず行う3大処理
int ProcessLoop(){
if(ProcessMessage()!=0)return -1;//プロセス処理がエラーなら-1を返す
if(ClearDrawScreen()!=0)return -1;//画面クリア処理がエラーなら-1を返す
GetHitKeyStateAll_2();//現在のキー入力処理を行う
return 0;
}
int main()
if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化
while(ProcessLoop()==0)
{//メインループ
576:デフォルトの名無しさん
09/04/29 05:45:49
みすwww
577:デフォルトの名無しさん
09/04/29 09:07:16
>>567
pointの中身を動かしたくなければpointの配列へのポインタを
作ってそちらをソートすればよかろう
578:デフォルトの名無しさん
09/04/29 09:25:34
ソートするのはjyuniなんだからpointなんて最初からコピー作る必要がない
と思うよ。
579:デフォルトの名無しさん
09/04/29 09:47:02
>>564
#include<stdio.h>
#include<stdlib.h>
int cmp(const void *x, const void *y)
{
int * const *a, * const *b;
a=x;
b=y;
if(**a>**b) return -1;
return **a<**b;
}
int main(void)
{
int point[5] = {10, 50, 20, 40, 30};
int *p_point[5], jyuni[5], i;
for(i=0;i<5;i++) p_point[i]=&point[i];
qsort(p_point, 5, sizeof(int*), cmp);
for(i=0;i<5;i++) jyuni[i]=p_point[i]-point;
for(i=0;i<5;i++) printf(" %d", jyuni[i]);
return 0;
}
580:デフォルトの名無しさん
09/04/29 10:02:05
>>572
int cmp(const void *s1,const void *s2)
{
return point[*(int *)s1] - point[*(int *)s2];
}
581:デフォルトの名無しさん
09/04/29 14:45:45
mallocで確保したメモリーは必ず""で埋められているものなのでしょうか?
不定な値が入っていることはないんでしょうか?
#include <stdio.h>
#include <stdlib.h>
int main()
{
char *str;
str = malloc(8);
printf("'スレリンク(tech板)l50'", str);
return 0;
}
以上ソースをcompileして1万回実行してみたんですが、変な文字列が出力されることはありませんでした。
しかし、man malloc を読むと"The memory is not cleared"と書かれており、
環境によっては不定な値が出力されたりするのか心配です…
* 環境
コンパイラ: gcc-4.3.2 ($ gcc -Wall hoge.c -o hoge とcompileしました)
OS: Linux (Debian-Lenny)
582:デフォルトの名無しさん
09/04/29 14:48:32
>>581
たとえば、どこかでメモリ使ったあとfreeして
その場所がまたmallocで割り当てられたら?
583:581
09/04/29 14:49:40
誤植が多くすみません。再投稿いたします。
---
mallocで確保したメモリーは必ずNULLで埋められているものなのでしょうか?
不定な値が入っていることはないんでしょうか?
#include <stdio.h>
#include <stdlib.h>
int main()
{
char *str;
str = malloc(8);
printf("%s", str);
return 0;
}
※以下581に同
584:デフォルトの名無しさん
09/04/29 14:53:38
>>581
検証プログラムがワルワルだな。
もっとしっかり検証汁
585:デフォルトの名無しさん
09/04/29 14:54:29
>>583
確保したメモリが'\0'でクリアされている保証があるのはcalloc()のみ
malloc()はローカル変数と同じで不定値
586:デフォルトの名無しさん
09/04/29 14:55:29
>>583
たまたま埋まってる場合もあるけど、ほとんどは埋まってないはず。
mallocで確保したエリアはmemsetなどでクリアするのが普通です。
587:デフォルトの名無しさん
09/04/29 15:02:29
>>586
わざわざbcopy() するのですかねえ。
588:デフォルトの名無しさん
09/04/29 15:05:36
4.3BSD. この関数は廃止予定である (POSIX.1-2001 では過去の名残 (LEGACY) とされている)。
新しいプログラムでは memcpy() や memmove() を使用すべきである。
memcpy() や memmove() では、最初の 2 つの引数の順序が入れ替わっていることに注意すること。
POSIX.1-2008 では、 bcopy() の仕様が削除されている。
589:デフォルトの名無しさん
09/04/29 15:16:52
一発でエラーがでますた。
#include <stdio.h>
#include <stdlib.h>
#define TEST_SIZE 100000
main()
{
unsigned char *test;
int i;
test = (unsigned char *)malloc(TEST_SIZE);
for(i = 0;i < TEST_SIZE;i++){
test[i] = i % 0x100;
}
free(test);
test = (unsigned char *)malloc(TEST_SIZE);
for(i = 0;i < TEST_SIZE;i++){
if(test[i]){
printf("%7d %2x\n",i,test[i]);
}
}
}
590:デフォルトの名無しさん
09/04/29 15:37:36
>最初の 2 つの引数の順序が入れ替わっていること
なんでこんな余計なことするんだろw
591:デフォルトの名無しさん
09/04/29 15:38:13
とりあえず calloc を使え
592:581
09/04/29 15:43:27
>>589
私の環境でもコンパイルして実行してみたんですが、エラーとかセグメンテーションフォールトが
でませんでした…たまたまかな…… gccでワーニングでないように以下のソースで実行してみました。
#include <stdio.h>
#include <stdlib.h>
#define TEST_SIZE 100000
int main()
{
unsigned char *test;
int i;
test = (unsigned char *)malloc(TEST_SIZE);
for(i = 0;i < TEST_SIZE;i++){
test[i] = i % 0x100;
}
free(test);
test = (unsigned char *)malloc(TEST_SIZE);
for(i = 0;i < TEST_SIZE;i++){
if(test[i]){
printf("%7d %2x\n",i,test[i]);
}
}
return 0;
}
593:581 (1/2)
09/04/29 15:44:23
レスありがとう!やっぱり不定なんですね…参考になります。
実は今、標準出力から文字列を読み込んで処理させるようとしています。
読み込む文字列の長さに応じて1KBづつreallocで文字列格納領域を拡張しながら
strncatで文字列をつなげようとしてるんですが、格納領域を最初にNULLで埋める
必要があるのかないのかどうか?迷っています。
realloc(NULL, n)はmalloc(n)と同等だと思うのですが、
reallocしてstrncatする前に、文字列格納領域の最初に'\0'を書き込んで置くべきでしょうか?
mallocの結果が不定だとすると初期化が必要なのかな?
以下は、検証用に標準出力から文字列を読み込んでそのまま表示させるソースです。
文字列格納領域(str)に、最初に'\0'を書き込んでおかなくても今のところ問題はないのだけど、
場合によっては不定な値になって問題出てくるのかな?
標準入力からの入力をつなげるときって、みなさんどうされてますか?
594:581 (2/2)
09/04/29 15:45:29
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BLOCK 1024
int main(int argc, char *argv[])
{
char buf[BLOCK + 1];
char *str = NULL;
int n;
int size_str = 1;
/* str = malloc(1); */ ←この部分がいるのかいらないのか?
/* *str = '\0'; */
while (1) {
n = fread(buf ,1 , BLOCK, stdin);
if (n == 0) {
break;
} else if (n < 0) {
perror("fread");
return -1;
}
*(buf + n) = '\0';
size_str = size_str + n;
str = realloc(str, size_str);
strncat(str, buf, n);
}
printf("%s", str);
free(str);
return 0;
}
595:デフォルトの名無しさん
09/04/29 15:48:36
realloc()もmalloc()と同じくもし領域を拡大した場合は
その領域の値は不定値
要注意
596:581
09/04/29 15:51:13
標準出力じゃなくて入力でした。何度も誤記申し訳ない…
$ gcc -Wall test.c -o test
$ echo 'hoge...fuga' | ./test
hoge...
...
...fuga
のように検証しています。パイプで渡したデータを処理するプログラムが書きたい…
597:デフォルトの名無しさん
09/04/29 15:53:56
strcatでつないでいくのであれば
最初の1バイト目に0を書き込んでおけばあとは何もいらんだろ。
598:デフォルトの名無しさん
09/04/29 16:10:36
低レベルな質問で申し訳ないですが
メイン関数から受け取った文字列の領域の長さを求める方法を教えてください
サブ関数の仮引数で(char* str)で受け取った場合とかsizeofでやると4の値が返ってきてしまいます
599:デフォルトの名無しさん
09/04/29 16:12:24
int len = 0;
while(*str++) len++;
600:デフォルトの名無しさん
09/04/29 16:12:54
>>598
そりゃchar*であろうがポインタのサイズだからだよ
4バイトってことは32bitCPUかな?
strlenでいけると思うけど、関数を呼ぶ側がちゃんとstrlenが暴走しないような
文字列を送ってくれるならそれでいいけどそれ以外は長さをもらうとかしないと
検知はできないね
601:デフォルトの名無しさん
09/04/29 16:16:56
stringつかえよ。
602:デフォルトの名無しさん
09/04/29 16:20:03
>>600
ふむふむなるほどですね
でも例えばstr[10] = "abc";でstrlenを使うと3の値で返ってきてしまうんですよね
そうするとstrの変数の全領域の長さがわからなくなってしまう
サブ関数内でポインタ変数の指す領域の長さってどうやれば良いのかな?
やっぱり上位関数から長さも引数として与えなければいけないんですかね?
603:デフォルトの名無しさん
09/04/29 16:22:13
>>602
>上位関数から長さも引数として与えなければいけないんですかね?
その通りです
そういうのが保証されるのが望ましいならCは無理ですね
604:デフォルトの名無しさん
09/04/29 16:25:53
>>603
ありがとうございました!
大人しく引数を増やします
605:デフォルトの名無しさん
09/04/29 16:48:24
小手先でどうにかなるほどCの歴史は浅くないけど
struct simple_str {
int len;
char *str;
};
みたいなのを昔使ってたことはヒミツ
いまじゃStringです
606:デフォルトの名無しさん
09/04/29 16:57:50
pascalの文字列だな
607:デフォルトの名無しさん
09/04/29 17:03:37
しかし直近のmallocの初期化といい、文字列といい
マネージド開発から流れてきてるのがいるのかね?
Cはぶっちゃけアセンブラにかぶせた皮程度だからほぼ自分で面倒見るしかないし
なんらかの安全のためのソフトウェアスタックをかぶせるくらいなら後発の言語使えば
いいだけだしなあ
608:デフォルトの名無しさん
09/04/29 17:05:03
いつの時代もC初心者はいるよ。
今ならそうだな、新入社員とか。
609:デフォルトの名無しさん
09/04/29 17:08:14
とはいえ、初期化の時に何がデフォルト初期化されて、
何がされないかは、言語ごとにいつも戸惑うことになるのも事実。
610:デフォルトの名無しさん
09/04/29 17:11:25
>>609
それは実行形式 PE とか elf を考えればおのずとわかるのでは
611:デフォルトの名無しさん
09/04/29 17:14:09
考えたくない事実
612:デフォルトの名無しさん
09/04/29 17:22:50
ちゃんと必要な値で初期化してればデフォルトなんて考える必要なし
613:デフォルトの名無しさん
09/04/29 17:23:54
しかしその非効率性すら惜しむのがC
614:デフォルトの名無しさん
09/04/29 18:00:55
変数の未初期化は、lintでも(最近の)Cコンパイラでも警告だすだろ
malloc()で取った領域の初期化は、プロセスのメモリサイズ増えるし余計なお世話
615:デフォルトの名無しさん
09/04/29 18:14:27
バブルソートで質問。
for( i = 0 ; i < 10 ; i++ ){
for( j = 0 ; j < 10 ; j++ ){
if( a[i] > a[j] ){ //iとjの数値は同じなので比較。
temp = a[i]; //tempにa[i]を格納
a[i] = a[j]; //a[i]にa[j]を格納
a[j] = temp; //先ほど格納したa[i]をa[j]に格納
}
}
}
これの1,2行目って同時に回してる訳じゃないよね?
そうだったらi=0とj=0の時、if文での比較で「同じ配列の数字」が判定されるんだよね?
i=1の時に、j=0と比べてるって事でいいんだよね?
初心者ですまんが、ここがどうしても分かりづらいから解説頼む。
616:デフォルトの名無しさん
09/04/29 18:18:23
良く似た話だけどc++でnewを使って領域を確保した時はどうなん?
0でメモリを初期化してるのかな?
617:デフォルトの名無しさん
09/04/29 18:24:22
してません。
クラスや構造体の場合はコンストラクタの振る舞いに依ります。
618:デフォルトの名無しさん
09/04/29 18:24:29
>>615
それバブルソートじゃないからw
619:デフォルトの名無しさん
09/04/29 18:26:23
>>616
コンストラクタ、デストラクタを理解してください
620:デフォルトの名無しさん
09/04/29 18:28:05
単純ソートだな。
for( i = 0 ; i < 10 - 1 ; i++ ){
for( j = i + 1 ; j < 10 ; j++ ){
こうじゃないの?
621:デフォルトの名無しさん
09/04/29 18:31:39
int flg;
do{
flg = 0;
for( i = 0 ; i < 10 - 1 ; i++ ){
j = i + 1
if( a[i] > a[j] ){ //iとjの数値は同じなので比較。
temp = a[i]; //tempにa[i]を格納
a[i] = a[j]; //a[i]にa[j]を格納
a[j] = temp; //先ほど格納したa[i]をa[j]に格納
flg = 1;
}
}
}while(!flg);
いっそ こうだと思うよ
622:デフォルトの名無しさん
09/04/29 18:37:01
>>620
それだと降順になった。
結局
for( i = 0 ; i < 10 - 1 ; i++ ){
for( j = i ; j < 10 ; j++ ){
でiとjは同じ数字でループしているのか
iの方が1多い数字でループしているのか
どっち?
623:デフォルトの名無しさん
09/04/29 18:39:01
2重ループがまったく理解できてないと思われる。
624:デフォルトの名無しさん
09/04/29 18:39:28
ソートとかリストのような有名なアルゴリズムはぐぐってもでてくるだろ
625:デフォルトの名無しさん
09/04/29 18:41:04
まずはループの中でprintf("%d, %d\n", i, j);とかやってみそ
626:デフォルトの名無しさん
09/04/29 18:44:30
>>621
なんかバグっぽいけど、こんな感じです
627:デフォルトの名無しさん
09/04/29 19:23:41
>>625
あーなるほど。
もの凄い分かりやすかったw
助かった、ありがとう
628:デフォルトの名無しさん
09/04/30 10:56:05
光沢液晶のディスプレイなんかでよくプログラミングなんかする気になるな
629:デフォルトの名無しさん
09/04/30 13:40:13
1 #include<stdio.h>
2
3 #define CONST_VAL 10.8
4 #define CONST_VAL2 (CONST_VAL*10)
5 #define CONST_STR "C Language"
6
7 int main(void){
8 printf("CONST_VAL = %g\n",CONST_VAL);
9 printf("CONST_VAL2 = %g\n",CONST_VAL2);
10 printf("CONST_STR = %s\n",CONST_STR);
11 return 0;
12 }
~ /*実行結果*/
CONST_VAL = 10.8
CONST_VAL2 = 108
CONST_STR = C Language
このとき10行目の%sを%gとすると、C Lanfuageのところが108と表示されます。
これはなぜなんでしょうか?ぼくの考えではでたらめな数字がでるか表示されない
と思ったんですが・・・詳しい方教えてください。
630:デフォルトの名無しさん
09/04/30 13:46:36
鼻から悪魔がでてるから
631:デフォルトの名無しさん
09/04/30 13:54:49
環境は?
たまたま、を除外するとなるとアセンブラ出力してみてるのが確実
うちはそうならんけどな
632:デフォルトの名無しさん
09/04/30 13:56:19
>>629
出鱈目な数字がでて、予想通りじゃないか。
633:デフォルトの名無しさん
09/04/30 14:02:35
>>631
コンピュータ初心者なので
環境といわれて何を答えたらいいかわかりません。すみません・・・
コンパイラーはgccです。
>>632
そうなんでしょうか?
数値からしてCONST_VAL2と何か関係があるような気がしてならないのですが・・・
634:デフォルトの名無しさん
09/04/30 14:04:19
まさかみなさんのパソコンでやるとでたらめな数字がでてくるということですか?
635:デフォルトの名無しさん
09/04/30 14:05:29
>>633
もしかすると関係しているかもしれないが、「未定義」とはそういうことも含めて出鱈目な動作になるってこと。
636:デフォルトの名無しさん
09/04/30 14:06:23
未定義動作なんだから、それでどうなるかを論じるのはナンセンス。
どうして108になるか知りたければ、-Sつけてコンパイルしろ
637:デフォルトの名無しさん
09/04/30 14:09:45
>>635
>>636
回答ありがとうございました。
未定義動作の意味がわからないので調べます。
638:デフォルトの名無しさん
09/04/30 14:10:43
-S付けてもわかるとは限らん
つかFP数を関数に渡すときはFPレジスタを使うという
APIで、直前に設定した108が上書きされず残っていた
ということだろう
639:デフォルトの名無しさん
09/04/30 14:13:14
>>630
未定義動作のことをいっていたのですね。
回答ありがとうございました。
640:デフォルトの名無しさん
09/04/30 14:15:14
>>638
回答ありがとうございます。
よくわからない単語がたくさんあるので調べます。
641:デフォルトの名無しさん
09/04/30 14:44:43
>>640
>638を調べて理解しようとしない方がいいよ。今の段階ではそこまで意識する必要はないから。
642:デフォルトの名無しさん
09/04/30 14:58:16
>>640
そうですね。
調べてもよくわかりませんでした。
初心者にはまだ早いようです。
643:デフォルトの名無しさん
09/04/30 19:02:41
久々にこのスレに来た。教えてやれよみんな。
スレタイ的には俺に聞けだぜ?
>>642
待て。
それが分からないとC言語プログラミングは諦めた方がいいくらいの大事な事項ですよ。
未定義undefinedの動作ってのはつまり何がおきるか定義されていないってことです。
未定義undefinedの動作になるようなソースコードをコンパイラに渡した場合、
コンパイラは好き勝手なコードを出力していいよとC言語の仕様書にあるという意味です。
例えばその実行ファイル(Winなら.exe)を実行した次の瞬間に
君のPCが爆発してもおかしくない(C言語の使用に反していない)ってことです。
これを表すのに鼻から悪魔がでるという表現を使うこともあります。
644:デフォルトの名無しさん
09/04/30 19:05:15
最近東京図書館開かないな・・・
645:デフォルトの名無しさん
09/04/30 19:18:16
>>644
どうしたつぶやき。
646:デフォルトの名無しさん
09/04/30 19:20:35
>>643
「未定義」であることだけ判ればいいと思うよ。
少なくとも、>638にあるような「FP数」だとか「API」だとか、
言葉の使い方もいい加減だし理解するべきことでもない。
647:デフォルトの名無しさん
09/04/30 19:22:45
別に未定義でも処理系定義でも、初心者的には書いちゃダメなコード程度のもので、
その辺の言葉を覚えるのは入門レベルの話じゃないと思った。
648:643
09/04/30 19:23:04
>>646
俺もほぼ君に同意。
まあ未定義であるということは、
うまく動くかもしれないしとんでもないバグになるかもしれないということは
肝に銘じておいて欲しい。
それがC言語を扱う者のマナーというか命綱。
649:デフォルトの名無しさん
09/04/30 23:09:46
>>646
FP=Floating Point
API = Application Interface
覚えて帰ってね
650:デフォルトの名無しさん
09/04/30 23:13:19
>>649
Programming が抜けてるぞ
651:デフォルトの名無しさん
09/04/30 23:28:37
w
652:デフォルトの名無しさん
09/05/01 11:03:32
下敷きにつながらない
653:デフォルトの名無しさん
09/05/01 13:22:58
>>649
背伸びするときくらいシャキっとせい
654:デフォルトの名無しさん
09/05/01 14:08:13
浮動小数点数のことを"FP数"なんて普通言わない。
URLリンク(www.google.co.jp)
引数の渡し方を"API"なんて普通言わない。
URLリンク(www.google.co.jp)
655:デフォルトの名無しさん
09/05/01 15:42:31
じゃあ何て言うの
656:デフォルトの名無しさん
09/05/01 16:02:46
引数の渡し方は呼び出し規約じゃないの
stdcallとかfastcallとか
657:デフォルトの名無しさん
09/05/01 16:06:24
まあ確かにAPIも見た目は関数そのものだけどだからと言って関数をAPIとは言わないなあ
自分たちで作るコードが対外的に機能を提供する物であれば使ってもらうときに
APIと呼ばれるかもしれないけどねえ
でもAPIの場合はオプソでもなければブラックボックスだし
658:デフォルトの名無しさん
09/05/01 21:53:09
関数の行数を減らすためだけに一部の処理を別関数にすることに意味があるんだろうか
659:デフォルトの名無しさん
09/05/01 22:08:10
あまりに長い関数なら、機能で区切る意味はある
660:デフォルトの名無しさん
09/05/01 22:23:47
電卓プログラムを作ろう。というやつで、
/* hello.c */
#include<stdio.h>
int main(void){
double a,b,tasi,hiki,wari,kake;
scanf("%lf%lf",&a,&b);
tasi=a+b;
hiki=a-b;
wari=a/b;
kake=a*b;
printf("計:%f\n",tasi);
printf("差:%f\n",hiki);
printf("積:%f\n",kake);
if(b==0){
printf("0除算によるエラーです。。\n");
}else{
printf("商:%f\n",wari);
}
return 0;
こいつを作りました。
bが0ときにメッセージを出すつもりだったのですが、
間違った答えが出るわけでもなく、反応がないだけです。
どこを直せば大丈夫ですか?
661:デフォルトの名無しさん
09/05/01 22:25:42
割る前にエラー判定しろ、0除算で落ちてるだけ
662:デフォルトの名無しさん
09/05/01 22:35:40
C言語を学ぼうと思って、はじめてのAPIって本を買ったのですが自分には敷居が高すぎるようです。
初心者にもわかりやすい本を教えて下さい。
663:デフォルトの名無しさん
09/05/01 22:36:12
>>661
できました。
ありがとうございました。
664:デフォルトの名無しさん
09/05/01 22:38:59
>>662
私も初心者なんですが、
本はよくわかりませんが、ニコニコの講座はおすすめできます。
URLリンク(www.nicovideo.jp)
最初のうちはこれでいいような気がします。
まぁまだそんなに詳しくはないのでわからないですが・・・
665:デフォルトの名無しさん
09/05/01 22:46:42
自分の手を動かさないと意味ない。
666:デフォルトの名無しさん
09/05/01 22:50:21
>>662
初心者にこんなこと言うのもなんだがスレ違いだな
C言語を学ぼうとしているのに何故APIの本を買ったのかがわからない
667:デフォルトの名無しさん
09/05/01 22:50:37
初心者がいきなりAPIはむりっぽ。