1read 100read
2012年09月プログラム16: C言語なら俺に聞け(入門編)Part 109 (392) TOP カテ一覧 スレ一覧 2ch元 削除依頼
Ruby>>>>>Java (640)
C#, C♯, C#相談室 Part76 (831)
Visual Studio IDE環境 (549)
MFC相談室 mfc22d.dll (304)
C++11が動的言語よりも開発効率が良くなってる… (222)
ゲームプログラムなら俺に聞け26 (465)

C言語なら俺に聞け(入門編)Part 109


1 :2012/10/17 〜 最終レス :2012/11/02
C言語の入門者向け解説スレッドです。
★前スレ
C言語なら俺に聞け(入門編)Part 108
http://toro.2ch.net/test/read.cgi/tech/1348995216/
★過去スレ
http://makimo.to:8000/cgi-bin/search/search.cgi?q=%82b%8C%BE%8C%EA%82%C8%82%E7%89%B4%82%C9%95%B7%82%AF&andor=AND&sf=0&H=&view=table&D=tech&shw=5000
★教えて欲しいのではなく宿題を丸投げしたいだけなら
  ↓宿題スレ↓へ行ってください。
C/C++の宿題片付けます 159代目
http://toro.2ch.net/test/read.cgi/tech/1342966104/
★C++言語については避けてください。C++対応明記スレへどうぞ。
★分からない事をなるべく詳しく書いて下さい。
★ソースコードを晒すと答えやすくなるかもしれません。
  # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること。
  # サイズが大きい場合はアップローダ等を利用してください。
http://codepad.org/
http://ideone.com/
★開発環境や動作環境も晒すと答えが早いかもしれません。
★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。

2 :
< `∀´> ニダー

3 :
/* NOTREACHED */

4 :
/* FALLTHROUGH */

5 :
lint厨か

6 :
え?lint 使える環境まだあるの?kwsk

7 :
BSD系

8 :
小学校の先生とプログラマってどっちがデスクワーク多い?

9 :
みなさま、お知恵をお貸しください。
私は、関数電卓を作っている者です。
文字列を構文解析し、現れたワードごとに演算を行うという簡単なプログラムです。
私は、ある問題に直面しました。
sin(n*M_PI)が0にならないのです。(nは整数です)
DBL_EPSILONを使った切り捨ては試しました。
しかしながら、nが大きくなると再び誤差が表示されてしまいます。
例 sin(1000000*M_PI)=誤差
この誤差はgoogle電卓でも現れました。
驚いたことに、市販の関数鵜電卓では、いっさいこの誤差が現れません。
C言語で、市販の関数電卓のように誤差をなくすにはどうしたらよいでしょうか?
詳しい方ご教授お願いします。

10 :
                |
                |
                |
                |
     /V\        ,J
    /◎;;;,;,,,,ヽ
 _ ム::::(;;゚Д゚)::| ジー
ヽツ.(ノ::::::::::.:::::.:..|)
  ヾソ:::::::::::::::::.:ノ
   ` ー U'"U'

11 :
nが整数かどうかを
まず判定すりゃいいじゃん

12 :
SINの中にM_PIが入ってたら2M_PIでmodするようにすれば?

13 :
10年ぶりにunixCの開発に関わって、修正差分見ていたら
memcpy(wk, '\0', sizeof(wk));
なんて見つけたんだけど、なぜかコアは吐かないし同じ使い方してる本番アプリが他にもある
コンパイル調べたらなんか「NULL文字ポインタ」だとかで、
実験したら最大8192バイトまでヌルの配列が取れるようでカルチャーショックを受けました
でも書くならNULLだろ、'\0'は文字だろとか思ったけれど、俺はもう古い人間だってことでしょうか?
memcpy(wk, " ", sizeof(wk)); のほうはさすがに理解してないようですが

14 :
その市販関数電卓で sin(0.1)-sin(1000000*PI+0.1) を計算させてみてほしい

15 :
>>13
日本語で

16 :
>>13
>書くならNULLだろ
残念ながらこの場合は http://www.kouno.jp/home/c_faq/c5.html#13 の「ASCIIのナル文字(NUL)」だ
書くなら 0 だ
>俺はもう古い人間だってことでしょうか?
古いだけでまったくわかっていない人間だってことだ、猛省しろ

17 :
え?いいの?

18 :
>>11さん
>>12さん
返信ありがとうございます。double型でmodが使えるんですね。初めて知りました。
if(fmod(SINの中身,M_PI)<DBL_EPSILON && fmod(SINの中身,M_PI)>-DBL_EPSILON){
return 0;
}else{
return sin(SINの中身);
}
てなかんじですかね?
>>14さん
返事ありがとうございます
3.3727E-9です

19 :
>>18
> 3.3727E-9です
つまり、整数*pi の時だけ特別扱いしてるってことだな

20 :
>>16
memcpyの第2引数が何であるべきか調べてから書け

21 :
>>19さん
そのようです。
はずかしながら、私は整数の判別法が思いつきません。
キーを監視するしかないのでしょうか?

22 :
>>16
>>13が言いたいのはmemcpy( void *dest, const void *src, size_t count )の引数srcはポインタなのに'\0'=0=NULLポインタを渡して大丈夫なのかという事だと思うの。
memset( void *dest, int c, size_t count )の引数cならintだからナル文字だけど、memcpyの場合はぬるぽと解釈されているはずだからね。
よく見ずにレスしちゃったんだね。猛省だね。

23 :
>>20
memset() と思い込んでいた。
>>16
古いだけでまったくわかっていない人間だったのは俺だった。猛省する。

24 :
トークンが実数か整数かなんて文字列的にわかりそうなもんだけど

25 :
許してやるよ

26 :
>>24
変数だったらどうすんの?
sin(sin(pi/2)*2*pi)だったら?

27 :
>>13
まず、このコードでcoreを吐くかどうかは、OS, アーキテクチャによるが、
一般にはcoreを吐きうる不正なプログラム。
次に、'\0' は整数の 0 とまったく区別はなく、
ポインタやポインタ引数に代入されたら NULL と同じになる。

28 :
>>26
字句解析した時点で定数の型は分かるじゃん。
計算して求まる値は整数同士なら結果も整数とか決めておけばいいし、
変数は値を設定する時にどの型かわかるじゃん。

29 :
整数同士を足したら結果も整数、とか

30 :
ごめんやっぱ嘘でw

31 :
というか、指定した1文字(この場合'\0')で領域を初期化することに対して、
memsetではなくmemcpyを使用するメリットが分からない。
紛らわしいだけでしょ、絶対にレビューでつつかれるわ。
>>13の検証によると8192バイトの制限まであるらしいし。
処理速度でも違うのかね?

32 :
携帯から稚拙な文で失礼しました、一般には不正な文と見て良いようで安心しました。
このサイトでは問題なく動くのだから受け入れます。ポインタに'\0'を使うのは違和感ありますが、慣れます

33 :
たまたま0番地から8Kゼロなページがマップされてる環境なのでは

34 :
>>32
> 慣れます
慣れずに、こんな糞コード書くな、正解はこうじゃ、って修正してやる気概が必要

35 :
Oracle関係のらしく ccに-v /(忘れた)/0@0.so.1 付けたら落ちない、付けないとコアです
makeの詳細は理解していないのでこれ以上は解らない、参照でポインタを0から回したら8192で落ちます

36 :
>>23みたいにmemsetとmemcpyをとりちがえて、たまたま動いて、そのままってケースかな

37 :
みなさま
様々な回答ありがとうございます。
整数の判断について調べていたところ
floor()==ceil()の条件式を使うと良いことがわかりました。
if (floor(x/PI)==ceil(x/PI)) {
return 0;
}else{
return sin(x);
}
コードはこのようになります。
これで希望の動作ができるようになりました。
調べていて、「処理理系によってはうまく働かないことがある」
という記述を見つけたので、少し不安ではありますが
これで様子をみてみます。

38 :
マヌケな古いプログラムを救済するために0番地から8Kメモリが割り当てられてるだけだろ。
そんなのになれたら阿寒。

39 :
>>37
> 調べていて、「処理理系によってはうまく働かないことがある」
だろうな

40 :
C言語初心者にオススメの書籍を教えてください

41 :
>>40
ちょっと古いけどK&R

42 :
typedef int (*iarr)[]; // (1)
typedef int (*iarr10)[10]; // (2)
int a[10];
iarr aa1 = &a; // error
iarr10 aa2 = &a; // ok
うーん?
(1)の型は何処で出てくるんだ?

43 :
>>41
ありがとうございます!買ってみます

44 :
>>40
独習、初めてのとか、本すれ見たら

45 :
>>43
いえいえ

46 :
>>43
それは古すぎるからやめとけ
つかそもそも本を買うなんてバカな真似はやめておきなさい
図書館で読んで自分に合ってそうなものを持ち帰って読む
重要なところは自分で書き写す
図書館に無ければ注文する
プログラムの勉強は自習するだけならこれで十分
たかが文字情報に金を払う必要は無い
あらゆる情報はすべての人にとって平等で無料かつ自由に扱えるもので有るべきだ

47 :
そんな労力使うくらいなら買った方が安上がりだなwww

48 :
時間の価値は人によって違うからな
本を買った方がいい人と、そうでない人がいる

49 :
お前らはわかってない
時間が大切だからこそ写しなんだよ
いつでもさっと検索してWebより密度の高い情報にアクセスできるという利益はなかなか代えが効くものではない
「あーあれなんだっけな調べよう…でも資料は家だ明日にまわすか」なんてことをしてるからお前らはゴミなんだ
それでもまだこの期に及んで書き写す手間が嫌だというなら機械にやらせれば良い
われわれはIT技術者なのだから物事を自分でやる必要は無い
たった一度の投資で図書館のすべての本が自分のものになるのだからやらない理由は無いぞ

50 :
>>46
K&Rも読みこなせなかったのか?

51 :
>>50
時代にそぐわないと言ったんだが、君の理解力大丈夫か?

52 :
時代にそぐうお前に合ってたすばらしい本挙げてけよ

53 :
「窓から捨ててください」
「焼く捨ててください」

54 :
C言語初心者にK&Rはない

55 :
それしかない時代もあったんだから問題ない。

56 :
問題ないね

57 :
CってK&Rじゃ対応できないほど新しいこと増えた?

58 :
>>57
関数プロトタイプは重要

59 :
>>58
今入手可能なK&R2には書いてあるから

60 :
読み物として面白いのは
「C言語を256倍使う本」
今では不要となった技術がてんこ盛りだが
侍魂にも通じるフォントいじりがなされていて
読んでいてマのなんたるかを直接に面白おかしく知ることができる

61 :
東海道中膝栗毛なみの本だな

62 :
>>60
どんな本?ちょっとだけ教えて

63 :
Cの初心者ならK&RとエキスパートCプログラミングあたりでいいだろう
コンピュータ自体の初心者なら、ハードルが少し高いかもしれないが

64 :
ans = 'C'<<8;

65 :
>>63
エキスパートCプログラミングは天才達の昔話が読み物としても面白いし、実用小ネタも多くていいよね。
変数や関数の宣言を読み解くフローは目から鱗だったわ。

66 :
目から鱗だったね

67 :
桜庭ななみ

68 :
>>65
>変数や関数の宣言を読み解くフロー
K&R2 にのっているネタでは?

69 :
うん、載ってるよ

70 :
結論:K&R2 でほぼ十分
反例:K&R2の線形リストは糞実装

71 :
>>70
どういう実装なの?

72 :
自分で嫁馬鹿野郎

73 :
>>71
え?

74 :
>>71
そいつはこの板に粘着している技術力0のクズで、そいつのレスには1oの
信ぴょう性もないからかまってはいけない。

75 :
talloc使ってたやつか?

76 :
桜庭ななみ

77 :
桜バナナ実

78 :
>>71
http://toro.2ch.net/test/read.cgi/tech/1316592884/270-271
>>74
零はちょっとかわいそうじゃないですか?0.57721566 くらいは恵んでくださいな

79 :
>>71
線形リストもしらずに「K&R2の線形リストは糞実装」といってるクズだってわかっただろ。
相手にするだけ時間の無駄。

80 :
>>9
バイナリツリーに言及している時点で線形リストは既知と判断するのが普通なのですけれども
K&R2 のその部分が初心者向けで終わっているとのはまぎれもない事実
読んだことないの?

81 :
うん、ないよ

82 :
で、その「クソな実装の線形リスト」はK&Rのどこに載ってるんだ?

83 :
カンカンカンカンカン、終了〜

84 :
そこの処理には絶対行かないのに
そこ(whileとかforやブロックの中身)変更すると実行結果が変わる時ってありますか?
printfチェックで
絶対そこの部分には行かないのに
変更すると実行結果が変わってしまいます。

85 :
それはメモリ破壊してます
検査してみて

86 :
絶対行かないとかホザいてるアホは
さっさとその臭いソースを出せよ
お前のタコなソースなんて
オレ様がみりゃー
一発だよ

87 :
>>84
>>86 と同意見です。この手のバグとりは結構難解で、printf() デバッグではどうしようもなく、デバッガ出動に踏み切らざるを得ないと思います。
もしよろしければソースをみせていただけると何かヒントを提案できるかもしれません。

88 :
>>82
K&R2 6.5、手元の和訳ではp171とか。
おっとよくみると線形リストじゃなかったね。記憶が混同していました。
ともあれ、ここで終わっているのは非常に惜しい

89 :
またQZの敗北かw
負け惜しみが笑えるww惜しいのはお前だよwwww

90 :
線形リストを知らずに「K&R2の線形リストは糞実装」といってたクズ。
かまわない方がいいって証明できただろ。>>71

91 :
秘密だよ

92 :
>>88
手元の原書だと
6.5 Self-referential Structures (P.139)
(ツリーを使って単語の出現数を出力するプログラム)
だけど合ってる?
何がクソなのか分からない

93 :
>>92
void addtree(struct tnode **p, char *w) {
if (p == NULL) {
...
} else if ( ... ) { ... } else if (cond < 0)
addtree(&((*p)->left), w);
else
addtree(&((*p)->right), w);
}
あるいは
struct tnode *root;
addtree(&root,word);
まで踏み込みたかった。
root = addtree(root, word)
は実にムダにみえないか?

94 :
見える見えないじゃねーんだよ
whyを書けよアホ
自分の能力が低いから「みる」とかアバウトでアホでクズな単語使ってんだろ
そういうやつはお願いだからこのスレに書き込むなよテイノウ

95 :
>>93
>>94
まあまあ、せっかくだから比較してみよう、ちょっと書いてみるわ

96 :
ビット演算が8進数wwwww

97 :
クズは他人のものにケチつけるより、自分のコードからムダを省くよう努力しろよw

98 :
>>93
つまり、addtree()の返り値の代入は、最初の一回以外ずっと同じ値の
コピーだからムダだ。ってこと?
分からんでもないけど、K&Rのコードのシンプルさ(分かりやすさ)の方が
入門書には合ってると思う。
ググったらこのページが見つかった
http://www.s.kyushu-u.ac.jp/~z7kh03in/maekawa/bintree/source.html
K&R 2ndの件のページと同じコードだと思う

99 :
結構違った
http://ideone.com/DmuaH6
>>98
シンプルにしておけ!この間抜けの原則だっけか。そうか、それがあったな。

100read 1read
1read 100read
TOP カテ一覧 スレ一覧 2ch元 削除依頼
★★Java質問・相談スレッド157★★ (759)
C++相談室 part98 (372)
「コンパイラ・スクリプトエンジン」相談室15 (590)
VB.NET質問スレ(Part39) (362)
Ruby 初心者スレッド Part 50 (489)
Gtkプログラミング on Windows!!! (343)
--log9.info------------------
ウロコインコ (0g0) (647)
【専門書・洋書】爬虫類の読みもの【雑誌etc】 (461)
【大土蜘蛛】タランチュラ専用スレ4歩脚目【軍曹】 (439)
【デグー】 アンデスの歌うネズミ 【デブー】15 (504)
★アオダイショウってかっこいい!★ (872)
インコの可愛さは異常だよな (805)
最も可愛い生物はうささんに決定しました (924)
【こけ】にわとりってかわいいね 6羽目【こうろう】 (794)
………我が家にイモリがやって来た………【その5】 (540)
アジアンスネークを語るスレ2 (512)
レプティリカスを語るスレ4 (487)
イシガメについて語ろう 10 (331)
【オオトカゲ】 モニター総合スレpart6 【大蜥蜴】 (693)
Hoshi Family異常な動物愛護 (548)
【両爬】HBM&ぶりくら&JRS10【祭典】 (803)
レオパードゲッコー・ヒョウモントカゲモドキ36匹目 (216)
--log55.com------------------
北朝鮮「安倍は森友をごまかそうと拉致だ圧力だの言ってる」と何故かパヨクと同じ論調展開…ネット「野党とマスコミと北朝鮮はワンセット」
【中国】「精神日本人」は病気、しかも重症で治療が必要―中国誌[05/10]
【韓国】北抑留米国人3人は送還されたが…韓国人6人は生死も不明[05/10]
【日韓】韓国語を学ぶ日本の高校生 慶煕大国際教育院で語学研修[04/05]
◆スレッド作成&継続依頼スレッド★203◆ 記者キャップを取得したいコテ(トリップ付)募集中!
【韓国】 済州島 中国人の支配に続き今度はイスラム難民が押し寄せる [05/16]
【IOC】東京五輪で合同入場提案 南北にバッハ会長[03/31]
【聯合ニュース】 北朝鮮住民2人が亡命 1人は兵士 南北関係に影響を与えるか注目が集まる [05/19]