2012年09月プログラム16: C言語なら俺に聞け(入門編)Part 109 (392)
TOP カテ一覧 スレ一覧 2ch元 削除依頼 ▼
Androidアプリ制作依頼スレ (618)
【.cmd】 バッチファイルスクリプト %9 【.bat】 (300)
文字コード総合スレ part7 (921)
【Intel】OpenCV総合スレ 4画素目【画像処理】 (323)
なぜポインタで引っかかる人が多いのか (796)
C++相談室 part98 (372)
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 シンプルにしておけ!この間抜けの原則だっけか。そうか、それがあったな。
100 : >>98 そうそう。 慣れてくると、メンバ変数のポインタを渡すほうがわかりやすかったりする。 >分からんでもないけど、K&Rのコードのシンプルさ(分かりやすさ)の方が >入門書には合ってると思う。 入門書としては確かにそうだと思う。誰しも最初はこれからスタートする。 K&R は入門書だが、無理やりK&R を批評したかっただけかもしれませんね。 http://toro.2ch.net/test/read.cgi/tech/1313183984/403 に比較を書いてみました、基本書かないと理解できない体質です。 >>94 why そのものが書いてあるのにわからない? みえる、という単語に反応し過ぎてみえなくなったのね >>97 今後とも精進して参ります
101 : >>100 コテつけろよ。 returnするほうが明らかにわかりやすい。
102 : バイナリーツリーを必死こいて実装するようなやつが慣れとかw
103 : ふっふっ
104 : へっへっ
105 : >>100 テメーがヘボなのを言語(Java)の所為にしないように。ゴミクズにレクチャーするのは無駄だからしないが。
106 : >>105 できないのね
107 : ああ、バカにレクチャーするのは完璧なる無駄だから、出来ねーな。
108 : >>107 できないのね
109 : ああ、バカにレクチャーするのは完璧なる無駄だから、出来ねーな。
110 : 思ったんだけど関数から関数を呼び出せたりするというC言語の機能が プログラムを分かりにくい状況にしているんじゃないですかね? メモリ上では関数から関数を呼び出した時呼び出し側のデータがスタックに保持されて 帰ってきた時データをそのまま使えるけど構造は非常に複雑ですよね。
111 : 関数から関数を呼び出せなかったら困るのでは
112 : それはC言語に固有の機能ではない。 それでプログラムがわかりにくい状況になってると感じるなら、 プログラミングという思考作業に対して、キミの知能が足りないだけ。
113 : プログラムの構造が理解できなくなる
114 : お前がゴミだから仕方ない
115 : ならメイン関数のみで1万行を超えるプログラムを書いてみろよ
116 : たやすいことさ
117 : goto main01_005_08; main01_005_08_ret: goto main01_005_09; main01_005_09_ret1:
118 : 関数が とか仰っている御仁は 関数型プログラミングとかは ましてやラムダなんとかやらは 絶対に理解できそうもないな
119 : C言語の関数とそのての関数は違うべさ
120 : ローカル変数をスタックに置いてるから複雑になってるという主張かな。 デバッガ作る人にとっては複雑かもなあ。 アセンブリレベルで動作追うときにフレームポインタの間接参照見るのは面倒。 でも、この程度であって関数が基本リエントラントである恩恵の方がはるかに大きい。
121 : entry
122 : int main(){
123 : int a00000000001; int a00000000002; int axxxxxxxxxxx; return(0) }
124 : いまどき関数の無い言語ってバッチファイルぐらいでしょ なんで関数の無い方がいいと思ったのやら
125 : >>124 2段落目から推測すると「関数から関数を呼び出す」は再帰呼び出しを 意味していると思われる。 >>120 が書かれた後で理解できてないお前も大して変わらない低レベル。
126 : 再帰できなかったらスタックをよういせにゃならんのでしょ、そっちのほうが複雑じゃん
127 : 末尾再帰
128 : 末尾再帰じゃないものを末尾再帰に変形するのもまた複雑
129 : あたえられたコード読むのと やりたいことを考えた時に思い浮かんだやり方 思考が違うからなー
130 : >>124 バッチファイルもcall :label出来るし。黙ってた方が良かったね。
131 : ふっふっ
132 : へっへっ
133 : お互い呼び合うとか構造理解できないでしょ。 int happy() { yes();happy(); } int yes() { happy(); } こうなったらスパゲティ以外の何者でもないでしょ... 図を書こうと思っても同じ関数のブロック何回も出てきて訳がわからなくなる そりゃ階乗計算の再帰みたいに単純なのだといいけど....
134 : 詩ね
135 : そんなんあるか?
136 : コールバック関数
137 : min-max法とか再帰で書くとこうなるよね
138 : >>133 それはキミの知能がゾウリムシくらいしかないという証明。
139 : >>136 コールバックってjavaじゃなかったっけ?
140 : オイ マジモンの無能がいるぞww
141 : お互い呼び出すとか異次元スパゲティだわな
142 : 構文解析なんかは 式、項、因子の3つを相互再帰するが。。。 入門じゃ重い部類かもしれぬ
143 : 再帰下降パーサとか習ったことない土方か。土方はphpでも使って炉。
144 : ふっほっ
145 : >>128 できないのもあるしね二方向以上の再帰とかね
146 : >>142 因子を処理中括弧の中は式に丸投げは再帰を使わないで書けとか罰ゲームとしか
147 : そりゃ一番難しいところがプログラミングの初期に全部掘り起こされて 言語としてはドンドンあほになって行ってるじゃん
148 : へっほっ
149 : >>147 つまりアセンブラ最強
150 : ここってP2Pチャットのプログラムに関する質問も受け付けてる? 一応1カ月でスパルタされたポインタも怪しいにわかなんだが
151 : とりあえず投げてみるのも一興
152 : エィ
153 : やー
154 : 一ヶ月でポインタも怪しいって、教える方がよっぽど馬鹿じゃなきゃ見込みないから諦めるべきだな。
155 : さらばポインタ厨
156 : Cの経験1か月でポインタはスパルタ受けたという意味だろう。 ポインタ理解するのに1か月もかかる池沼が世の中に存在するはずがない。
157 : 長くとも30分で理解出来ないとこの業界にいるのはキツイね
158 : キツイね
159 : 30分では無理だ
160 : 何年経験してても、ポインタ関連のデバッグは、たいへん
161 : 恐れず侮らず
162 : ふぅ
163 : デバッグは大変、ならわかるが
164 : みなさま教えてください double型の数値の小数点以下の桁数を求めるにはどうしたらよいでしょう
165 : >>164 無理
166 : >>162 2進数でよければ仮数部を指数部でシフトして もっとも右にある1を探す感じで出来る
167 : >>166 10進数もそれと同じ桁数になるんじゃね? 0.1(2) → 0.5(10) 0.01(2) → 0.25(10) 0.001(2) → 0.125(10) 0.0001(2) → 0.0625(10)
168 : >>167 そもそも精度の関係で例えば0.7のときに巧くいかない。
169 : え、doubleから(おそらく10進数での)小数点下桁数を求めよってお題でしょ 0.7とかdoubleで表現できない数値を扱う必要あんの?
170 : 0.7の近似値の桁数になるだけ。問題なく求められる。
171 : P2P式の複数人用のチャットアプリなんだが、P2Pの概念がよくわからん OSはUNIX TCP通信マルチスレッドでC/S型の複数人チャットのソースは組めた ここからP2P型に改造する予定だが、サーバのソースにクライアント部分の接続〜送信を加えたらP2P? 同じプログラムで通信するのがP2Pって思ってるんだけど、違う?
172 : 同じプログラムじゃねえ、ダイレクトに相手IPアドレスでアクセスしてるし、これでP2Pなのかなって
173 : >>171 > サーバのソースにクライアント部分の接続〜送信を加え ここ意味わからん ただ、 > 同じプログラムで通信するのがP2Pって思ってる そんな定義はない。 (多数の)ピア同士が何か特定のホスト(サーバ)を 経由せずに通信できればP2Pだろ。 問題は、相手をIPアドレスやホスト名で指定せずに 済ませる方法がないと実用にならないし、 NAT越えも必要になる。
174 : >>173 >同じプログラム〜 ここは忘れてください、とち狂ってました >サーバの〜 親スレでconnect〜send 子スレでソケットをbind→listen→acceptの無限ループ 孫スレでrecv→printfで接続元が切断するまでループ これで説明になってるんだろうか
175 : なんか支離滅裂になってるorz 多分自己解決しました connectする時にNAT越えして相手のIPアドレス指定出来ればいいのかな…
176 : さあ
177 : C言語の質問はいつ出てくるんだ?
178 : 明日
179 : 明後日
180 : 明後後日
181 : ――そして一年が過ぎた
182 : WindowsプログラムでPC(レジスタ)を直接書き換えることってできるんでしょうか? あと、以下のように自由にアクセスってできるんでしょうか? a = ((char*)0)[10]; ((char*)0)[31] = 0xFF;
183 : それはC言語の範囲ではないので適したスレで聞いてください
184 : プリンタへの出力でわからないことがあるので教えて下さい イベントが発生したら、指定したwordファイルを自動で印刷するようにしたいのですが int StartDoc( HDC hdc, // デバイスコンテキストのハンドル CONST DOCINFO *lpdi // ファイル名を指定する ); この場合lpdiにどのような値を入れたらいいですか?
185 : >>184 Win32API のスレで聞け
186 : >>185 たらいまわし役人根性乙
187 : こんな記事みつけた http://beforeitsnews.com/japan-earthquake/2012/10/red-alert-fukushima-spent-fuel-pools-exploded-on-fire-now-radiation-levels-spiking-massively-2439520.html 福島では最悪のシナリオが絶賛進行中です。 福島から50マイルのところにいる研究者マイケル・エクスタインによれば、 過去4日間に、福島第一原子力発電所使用済み燃料プールにて 爆発および火事が発生し、現在、放射能レベルは急上昇しています。 使用済み燃料プールに含まれていた大量のプルトニウムが拡散するという最悪のシナリオです。 すなわちこれら放射能が大気中に気化、そして風により流出ことを意味します。 放射雲および放射線スパイクはおよぼ2週間以内に合衆国の西海岸を襲うと予想されます。
188 : >>184 MSDNを自分で読めよ。それでもわからなかったら教えてやる。
189 : 読んだけどわかりませんでした!!
190 : >>188-189 教えるのはいいが、余所でやってくれ。
191 : すみません charの例えば56と、fdをくっつけて、2バイトの変数に56fdとして代入したいんですが、どうやるのが最善でしょうか? 2バイトの変数を用意して、1バイトめを代入して、8ビットシフトし、2バイト目と0xFFのビット積をとって加えると出来るんですがまだるっこしい感じがします
192 : >>191 uint8_t bar = 0x56; uint8_t baz = 0xfd; uint16_t foo = bar << 8 | baz; ってこと? 何が不満なんだ?
193 : 不満点を上げるとすればまだるっこしいのあたり。
194 : >>191 4byteだろう
195 : >>192 うーんまぁ、そんなもんですかね foo = unite(bar, baz); みたいな感じでサクッと結合出来ないかなーと思ったんですが
196 : #define unite(x, y) ((uint8_t)(x) << 8 | (uint8_t)(y))
197 : ふっほっ
198 : 共用体でやったことある
199 : >>198 共用体だとビッグエンディアン、リトルエンディアンを気にする必要があるね。
200 : 200
201 : >>187 http://www.youtube.com/watch?v=koxU4nWvWys 3/18 01:04JST, 1/20遅速再生 3分過ぎあたりからキノコ雲あがって流れている
202 : きのこは素人には判別不可能
203 : お、お、おれのワライタケを判別してもらおうか
204 : (笑) www プゲラ
205 : いつからエノキダケがワライダケという名前になったんだよ
206 : >>205 ふっほっ
207 : ここだけの話、野生のきのこはまだ放射能があぶないらしい
208 : 一応、基準以上は出荷停止してるんじゃないのか?
209 : このスレも基準以下のは出荷停止の書き込み禁止にしてほしいな 放射能よりも害悪だ
210 : キノコはやばいよ 出荷基準は実質無意味だよ 自分で興味もって調べないと死ぬよ
211 : 「野生のきのこ」だよ、出荷されてるかどうかはしらね
212 : さすがに関東〜東北で野生のきのこ食う奴なんていないだろ 70歳以上くらいならただちに影響ないだろうけど
213 : 露地栽培だって同じようなもん、それを出荷しようと企むテロリストがいるから困る。
214 : C言語と関係ない話はやめろ
215 : ほっほっ
216 : 茸の話してるところすみませんがC言語の方でお願いします。 2〜1000の中から素数を出力するプログラム http://codepad.org/7ab7zj65 のi%jの計算回数を出来る限り減らせという課題ですが、色々やってこうなりました。 http://codepad.org/4ubNQTvg 計算回数自体は減りましたが、9とか15とか合成数も出力されるようになってしまいました。 プログラムを変えてみた時の変化や高専編入者からのアドバイスが入っていますが、パラメータで制御するならどのようにすればよいでしょうか? 計算回数は経験者を見ている感じでは1500〜2200辺りになりそうですが、計算回数を減らす方法も何かいいものはありますか?
217 : 自分でMOD実装すれば組み込みの剰余は0回で済むよ これが正解ね
218 : if(j > (int)sqrt(i))
219 : http://codepad.org/lAabhrNt
220 : この方式で剰余をさらに減らそうというなら、 候補の i = 3 5 7 9 11 13 15 ... のうち、3回に1回は調べなくてもいいよね、とか。 で、それを押しすすめると、エラトステネスになって、 自分で実装しなくても剰余が不要になる。
221 : >>216 素数の整数倍にチェック付けて チェックされてないヤツだけ余り調べる
222 : http://codepad.org/OycvFMyc
223 : http://codepad.org/dinAVSKf
224 : http://codepad.org/5n3lsWPJ
225 : 合成数は必ず平方根以下に約数があるってのはすぐわかることだと思うんだが 律儀に元の数字まで相手してる奴よくいるみたいだな 小さい方から調べていって2 3 5 7 11 13 17 19 ....と見つかっていくわけだが jはそれまでに見つけた素数だけを入れれば無駄はなくせる 偶数は最初から無視するとして 3 5 7は決め打ちでいいな 9-23 (8個)なら3 -> 8 25-47 (12個)なら3 5 -> 24 49-119 (36個)なら3 5 7 -> 108 121-167 (24個)なら3 5 7 11 -> 96 169-287 (60個)なら3 5 7 11 13 -> 300 289-359 (36個)なら3 5 7 11 13 17 -> 216 361-527 (84個)なら3 5 7 11 13 17 19 -> 588 529-839 (156個)なら3 5 7 11 13 17 19 23 -> 1248 841-959 (60個)なら3 5 7 11 13 17 19 23 29 -> 540 961-1367 (1000までで20個)なら3 5 7 11 13 17 19 23 29 31 -> 200 でそれぞれ割り切れるものがあるかどうかを調べればいい ↑で9以上で3328になるな 前j-1回分のうちに割り切れたjを除外すれば多分どーんと減る たとえば99の処理が3で終わるので101, 103では3を除外
226 : 日々の雑務を自動化する為に 中小規模のアプリをさっと作るのに最適な言語を探してるんだが何がイイかな 欲しい条件は ・GUIの扱いが楽 ・文字列の扱いが楽 ・XMLパーサーなど便利なライブラリが充実してる事 ・書きやすく読みやすく保守がしやすい事 ・Win Linux Macの最新か一世代前のOSで安定する事 なんやけどどうでっしゃろ?
227 : perl/tk 保守に関してはブードゥーの呪文 ttp://www.kotono8.com/2008/12/21if-programming-languages-were-religions.html > 上司があなたに金曜夜21時に緊急の仕事を命ずるときにしばしば使われる。 このようにスピードを重視した言語
228 : >>217-225 皆さんレスありがとうございます。 修正が少なくて%の演算回数が一番少ないのは>>218 ですね。 エラトステネスなどはアルゴリズムに入るのか?ということで学科内では避けられています。 >>221 >>225 素数の整数倍ですか、見た感じ一番効率よさそうですね。組んでみます。
229 : >エラトステネスなどはアルゴリズムに入るのか?ということで学科内では避けられています。 アルゴリズムじゃなきゃなんなんだよw
230 : その方法がアルゴリズムかどうか、 そこから議論してるのか? ヤヴァイ集団だぞそれ おまいらはアルゴリズムとそうでないものの区別がつかないような集団で、 そしてあなたはその一員か? アルゴリズムの定義ってなんだよ 素数とかそういう段階じゃネーゾソレ ましてやプログラミングの早さを競う段階でもない もっと根本的なことから勉強し直さないといけないような集団だろ マジでヤバイものの一端を見た 教育や学生の頭脳が劣化してる、 そして何よりも、アルゴリズムか否かを多数決で決めてるフシがある それが一番危険だ、 自分のアタマで判定してない
231 : 好意的に解釈すれば、この課題で認められた範疇かどうかってことじゃね? しかしそんなもん、出題者に聞けば一発なのに。
232 : 人類の知能低下は物理的な必然なんだよ 核実験時代の汚染が人々の遺伝子と脳を破壊し白痴が大量生産された 放射能汚染度の高い韓国の国民性をみればその恐ろしさが分かるだろう Fukushimaによってばら撒かれた超汚染によって世界は韓国と同じレベルに収束する事もはやが約束されているのだ
233 : アルゴリズム学ばないCマも多数活躍しています。
234 : >>226 C のスレで質問するのもどうかと思うが C 経験者にもおすすめなのは python
235 : >>226 C言語スレで他の言語を探してどうするよw
236 : C言語と関係ない話はやめろ
237 : >>230 論点が不明なのにそのように言い切ってしまうお前の知能の方が10000倍ヤバい。
238 : >>237 どんな論点で話し合った結果だったんだ?
239 : >>238 さあ? 傍観者のオレにはわからないが、「こういう理由で(オレらの定義の)アルゴリズム じゃない」という説明がなされた途端に>>230 の頭の悪さがはっきりとする。
240 : ぼくが2ちゃんでまなんだこと ・馬鹿はどこにでも居る ・馬鹿は伝染る ・ある馬鹿が居なくなっても必ず別の馬鹿がどこかから現れる
241 : 伝染るというか最初から最後まで一人じゃない?
242 : ・他人から見ると自分も馬鹿
243 : 卒業したら戦闘機に乗りたいと言う奴にまずバイク免許取れと言うような感じ
244 : 卒業したらメジャーに行きたいと言う奴にまず日本のプロ野球に入れと言うような感じ
245 : 桜庭ななみ
246 : 先週のプレイボ〜イのななみちゃんはエロくて良かった
247 : エロいの最高!
248 : 買いそびれた もう売ってなかった だれか持ってない?
249 : 女優板で聞いてみたら?
250 : for ( i = 0; i < 9; i++ ) fprintf(fp, "%2.2s\n", "123456789" + i*2 ); こんな感じで全角数字を順に1文字ずつ表示するプログラムがあったのですが理屈がよくわかりません。 %2.2sの意味と、文字列同士の加算のように後ろに数字がくっつく結果にならない理由辺りを中心に解説お願い致します。
251 : いやらしいやり方だな "123456" + i の半角でまず試せ 次は "123456"[5] とかで一文字ずつ出力しろ
252 : そのシステムで全角数字は2バイトで表現されている。 "123456789" は先頭から0バイト目が1, 2バイト目が2... と配置されている。 "123456789" + i*2 はiの値に応じて文字列"123456789"の先頭から 0バイト, 2バイト... のアドレスになる。 %2.2s は指定されたアドレスから2文字(2バイト)出力する。
253 : >>251-252 なるほど。ありがとうございます。
254 : いえいえ
255 : こういうのを書いて試すようになると色々解って楽しくなるからオススメ。 10年以上やってても色々実験する char wk[11] = "1234567890"; fflush(stdout);fprintf(stdout, "s =[%s]\n",wk); fflush(stdout);fprintf(stdout, "As =[%5s][%15s]\n",wk); fflush(stdout);fprintf(stdout, "-As =[%-5s][%-15s]\n",wk); fflush(stdout);fprintf(stdout, ".As =[%.5s][%.15s]\n",wk); fflush(stdout);fprintf(stdout, "A.Bs =[%5.7s][%15.17s]\n",wk); fflush(stdout);fprintf(stdout, "B.As =[%7.5s][%17.15s]\n",wk);
256 : 10年もやっててそんなミスするのかよ
257 : >>255 実験するな。 ドキュメント読め。
258 : 動作だけで判断すると後で後悔する 仕様を読んだうえで想定通り動くかの確認にすべき
259 : 動作させることで仕様の理解が深まることがある。 動作させられるなら、先に動作させてから仕様を確認したほうが効率的な場合が多い。 仕様書の文章が理解しやすい文章で書いているとは限らない。
260 : printfのフォーマットの仕様くらい、読んで理解できない池沼は向いていない。
261 : バグも含めて仕様です。(キリッ
262 : 仕様ですね
263 : うん(キリッ
264 : >>255 このコードを保存しとけばいいのに。 毎回こんなことやるのかw
265 : どこかでみたぞ
266 : >>255 引数が足らないのはわざと?
267 : えっ
268 : >>258 その通り 俺も若かりし頃に、言語仕様では「正常ならTRUE」を信じてコーディングして しばらくハマったことがある ここら辺で学ぶんだよな、実装ではどうなってるか確認する必要があると あと、条件式は合致するケースの少ないものを書いた方がいいとも ※true : 0以外、false : 0
269 : 例えば、仕様書に 「>>258 その通り」 のみ書いてあったとする。 だが実際の動作は 「俺も若かりし頃に、言語仕様では「正常ならTRUE」を信じてコーディングして しばらくハマったことがある ここら辺で学ぶんだよな、実装ではどうなってるか確認する必要があると あと、条件式は合致するケースの少ないものを書いた方がいいとも」 で、仕様書とは真逆だったりする。 文章なんてそんなもの。
270 : >>269 引用するならまともな引用でたのむよ 俺のと君のが混ざっとる
271 : 通常、引用は引用符でくくられている。
272 : 言語仕様じゃなくて、誰かの作った関数の仕様に誤記があっただけじゃないの?
273 : つまり、関数設計者は誤記するが、言語設計者は誤記しないと。
274 : いや、誤記というよりも、何を書いているのか曖昧な仕様書なら動作確認したほうが内容の理解が早いって話
275 : 言語仕様が曖昧な例 http://en.wikipedia.org/wiki/Sequence_point
276 : ok by japanese.
277 : >>272 ちゃう、例えばVC++6ではTRUEを1って#defineできってたから、if文で if(hogehoge(...) == TRUE) などと書くと、hogehoge関数の戻り値が2,3辺りが返ってきてもelseに なるんだわ これ、実際の標準ライブラリで起きた話ね
278 : >>277 仕様通りだね
279 : >>277 それは TRUE なんか使うからだ あるいは if(exp == 1) なんかやるからだ 仕様以前に文化を理解していないという問題かと isalpha()とかみっちり使ったことがあれば回避できる問題、ライブラリの問題じゃない、C はそこまで親切じゃない
280 : int *pって書くとint型のポインタって奴になるですよね データ本体(インスタンス)を指し示す変数自体は、どの型も同じ何で間違っていませんか? *pにHoge型のポインタをセットした時、Hoge型ではなくint型で参照しに行くとおもいます。 つまり、int *pって書いた時の「int」はインスタンスを参照しに行く時に、どのデータ型で参照するかをコンパイラに教えているためだけに書いてある けれども、実際には型がHogeなので落ちる 間違えてないでしょうか
281 : 別に落ちないけど。 ポインタの型による違いは、pに対して加減算を行なった時の値が違うだけ。 p+1がp+sizeof(int)になるかp+sizeof(Hoge)になるかの違い。
282 : >>280 java の経験があるのかな? だいたいあってる、 けれども落ちるとはかぎらない、だまって int のつもりでさっさと動いてしまうことも
283 : >どのデータ型で参照するかをコンパイラに教えているためだけに書いてある あってる >実際には型がHogeなので落ちる コンパイラが警告やエラーはだしてくれるだろうけど、動作時に落ちるかどうかは時と場合による 大抵は無理やり読み込んだ意図しない値で進んでしまいそうな気がする
284 : >>281-283 回答頂きありがとうございます 落ちるか落ちないかは時と場合によるんですね .net系の職業PGですorz C<--->.netの連携がさっぱりわからなくて、Cを勉強しようかなと
285 : 参考書の質問ってここで大丈夫ですか?
286 : はい。C言語なら。
287 : どうも。それなら 学科の授業では教科書にK&R2 日本語訳が指定されてるんですが、各所レビューなど見ても分かる通り、仕様書としては良くても入門書としてはどうかなと思っています。 授業ではそれも踏まえて「くどく説明します」と言ってるのに、実際はどこかで詰まると置いてかれる授業です。 そんな訳で何か別に入門書が欲しいと思うんですが、皆さんはどの本から入りましたか? 因みに、友人が他学科の教科書になってる柴田望洋先生の本を貰ってて、いいと言ってました。 あと、授業で配られたこのプリントの出典が分かる人は教えてください。 http://www.imgur.com/ysf9V.jpg
288 : >>278 >>269 俺は>>268 と>>277 なんだが、始めに「若かりし頃」と書いてるように相当昔の話だよ、書いた件は あとライブラリが悪いとも書いてない、どちらかというと実装と言語仕様の違いについて、こんな ことあったよという話
289 : >>287 K&Rで全く問題無いと思うけど、 新版 明解C言語 入門編 http://www.amazon.co.jp/dp/4797327928/ とか やさしいC 第4版 http://www.amazon.co.jp/dp/479737098X/ でいいんじゃないの。 あと、アルゴリズムも必要みたいだから、 珠玉のプログラミング―本質を見抜いたアルゴリズムとデータ構造 http://www.amazon.co.jp/dp/4894712369 を読んでおくとか。
290 : >>288 要するに、TRUEという名前の定数があることを知ってたから 「真を返す」を書いてあった文章をTRUE値を返すと勘違いしたってだけだろ TRUEを返すと書いてあって2とか3が返ったのならともかく、「真を返す」等の 記述だったなら勘違いしたお前が悪い
291 : BOOLは後付けで決まった仕様だからね
292 : えっ
293 : >>288 いいたいことはわかる。 しかし、真偽と非零/零が対応することはいにしえのN-BASICからのやりかたであるし文化の問題であることは否めない。 まあ、今はうまくやっているんだろう?
294 : >>293 ん?C言語ってN-BASICより新しい言語だっけ? C言語に慣習はよく聞くけど文化なんて聞いたことがない。
295 : >>288 どの言語仕様に「正常ならTRUE」と書いてあったんだ。そんなのがあるなら有害図書として殲滅しておけ。次世代につなぐな。 (アルツハイマーの症状が悪化しただけで、存在しないんだろうけど。)
296 : N-BASICは、 0:真 -1:偽 だったと思う。 一方、Cは、 非0:真 0:偽 なのに、main() の戻り値は 0:成功 非0:失敗 を期待してるっぽいのが訳判らんくて混乱したな。
297 : エラーコード 0:成功 非0:エラー、その値によりどういうエラーかの詳細も 真偽値 非0:真 0:偽
298 : >>296 そんなに必死でウソを書く、お前の原動力はいったい何なのだ?
299 : >>296 >N-BASICは、 > 0:真 > -1:偽 >だったと思う。 ぎゃくだ。0:が偽、非0 が真だ。 10 print 1==1 を実行すると -1 の結果を得る
300 : >>299 BASIC の一致比較は == でなくて = だと思うの
301 : char* str = "1234567890"; この str の文字数を求めたいのですがうまくいきません。 【試した方法その1】 int length = strlen(str); 【試した方法その2】 int length; for( length = 0; str[length] != '\0'; ++length ){ } 【結果】 いずれの方法でも length には 1 が代入されてしまいます。
302 : >301 どちらも正しい ttp://codepad.org/JZutIL4b 別の場所に問題があるはずだ strを書き換えていないか?lengthは正しく確認しているか?
303 : >>302 原因はlengthを使う場所にありました… 素早い回答をありがとうございました。おかげさまですぐに解決しました
304 : DOSのファンクションコールの戻り値は基本 負数:エラー 0以上の正数:正常処理 だっけ?
305 : Javaの参考書とCの参考書のページ数比べたら圧倒的にJavaの方が 多いし1冊じゃ足りないよね
306 : int i; int *ip; i = 5; ip = &i; printf("%p, %d\n",&i, i); printf("%p, %d\n",ip, *ip); とやったら、ポインタ変数ipのアドレス番地も変数iのアドレス番地も同じになりました。 ポインタ変数ipは具体的にどこかにアドレスがふられて変数として領域が確保される のではないのですか?
307 : >>306 ipのアドレスは&ipでしょ。 ipが指すアドレスは&iだけど。
308 : 「アドレスがふられて変数として領域が確保される 」 なんとなく違和感が ...
309 : 違和感を感じる
310 : 感じるね
311 : 感じないけど
312 : >>307 失礼しました。解決しました。
313 : いえいえ
314 : ポインタの大小比較は、 p > q でできるのですか? >の記号で正当に定義されていますか? それともlongとかintとかにみなされて比較されるのですか(それはまずいとおもう)
315 : ただの32ビットのデータ
316 : それはマズイな
317 : ポインタは64bit
318 : 少なくとも、同じ配列内を指すポインタの大小比較はちゃんと出来るはず。
319 : 出来るはずだね
320 : 同じ配列内でポインタの大小比較は、禁止されていないわけですね
321 : まあね
322 : >>314 どういう比較をして欲しいのかがわからん。 ポインタはアドレスなんだから32ビットの数値として比較されて当然。 大きくなると負数判定されるかもとか気にしてるの?
323 : Cの規格としては、32ビットとかぎらないでしょ hugeポインタを検索したら、16ビットの時代の話がでてくる
324 : でてくるの?
325 : hageポインタ
326 : >>325 使えないとのうわさがちらほら、far を自分で管理するのが吉
327 : >>320 末端+1までが合法だったっけ? int foo[10]; int *p = foo + 9; /* 実体のある最後尾 int *q = foo + 10;
328 : foo < foo + 11 まで保証
329 : d 少なくとも 0〜確保数+1 までは大小関係の維持が保障されてるのか
330 : 宣言したサイズのアドレス外の値を参照するなら問題だけど、ポインタの比較なら確保数とか関係ないでしょ。 p < p + nは、nが幾らだろうと(正の整数でね)保障されるんでないの?数値演算の結果でしかないんだから。 #include <stdio.h> int main(){ int a[10]; int *p; for(int i=0; i<15; i++){ if(!(i>= 3 && i<=8)){ // 途中は表示省略 p=a+i; printf("p=a+%d : p = %p, p-a = %d, (int)p-(int)a = %d, a < p = %d\n", i, p, p-a, (int)p-(int)a, a < p); } } return 0; } ---実行結果--- p=a+0 : p = 0012FF4C, p-a = 0, (int)p-(int)a = 0, a < p = 0 p=a+1 : p = 0012FF50, p-a = 1, (int)p-(int)a = 4, a < p = 1 p=a+2 : p = 0012FF54, p-a = 2, (int)p-(int)a = 8, a < p = 1 p=a+9 : p = 0012FF70, p-a = 9, (int)p-(int)a = 36, a < p = 1 p=a+10 : p = 0012FF74, p-a = 10, (int)p-(int)a = 40, a < p = 1 p=a+11 : p = 0012FF78, p-a = 11, (int)p-(int)a = 44, a < p = 1 p=a+12 : p = 0012FF7C, p-a = 12, (int)p-(int)a = 48, a < p = 1 p=a+13 : p = 0012FF80, p-a = 13, (int)p-(int)a = 52, a < p = 1 p=a+14 : p = 0012FF84, p-a = 14, (int)p-(int)a = 56, a < p = 1 当然の結果になる。"大小関係"っていう認識が違ってるのだろうか?
331 : 確保数+1 まではオーバーフローしない位置に配置してポインタとする ってことでしょ
332 : R的なアーキテクチャでも一定の範囲では大小比較を保証するよ、みたいな意味かと思った。 R的なのが実際にあるのかは知らないけど。
333 : 4kページングとかで struct a{char a[4096-(管理情報領域)];};をmallocしたときにfault出さないようコンパイラ側に2ページ確保する責任がある てことでしょ
334 : アクセスは保証する必要がないから、確保しなくてもいいんじゃないの?
335 : struct Hage { int size; char hoge[0]; (または char hoge[1];) }; struct Hage *hage = (struct Hage *)malloc(sizeof(struct Hage) + size); hage->size = size; で hage->hoge[n] (0 <= n < 1) じゃなくて (0 <= n < size) ってアクセスすることがあるから >327-329 はおかしい
336 : >>335 規格書読んで出直しなさい
337 : >>335 mallocで思いっきり確保してるじゃん。
338 : >>335 そういう文法的に未定義の動作とされている書き方をやめさせるために C99では0長配列メンバを構造体の一番最後に書けるようになった char hoge[]; という具合 http://seclan.dll.jp/c99d/c99d04.htm#dt19990726
339 : 不定長構造体はわりとよく知られていたCFAQにもあるくらいだ http://www.kouno.jp/home/c_faq/c2.html#6 >Dennis Ritchieは「Cの実装への根拠 のない馴れ馴れしさ」と呼んだ。 どういう意味だろう?
340 : おまいらがいつもよくやってる 他人の心に土足で踏み込むっていう意味じゃないかな
341 : 合意がないのに女子中学生にR入れるお前のことだろ
342 : 入れる気満々で先っぽだけって言ってるようなもんだからな。
343 : AVL木の回転の操作方法が全然分からん Cやっぱ難しいな............
344 : そりゃお前の頭が悪いだけだ
345 : Cは全く関係ない
346 : >>344 生まれつき頭悪いのは自分でも承知です A[10]を例にして教えてくれませんか? A[0]=1..........A[9]=10
347 : どこがAVL木?
348 : >>339 だから undefined behavior なんだって 鼻から悪魔
349 : Cで悪魔召喚プログラムの書き方を教えてください
350 : >>346 こんばんは桃白白です。 教えてやろうか? 教えてあげるよ? 聞きたいでしょ? 桃白白ひまだから教えてあげてもいいよ? どうする? 教えてほしいでしょ? じゃあ教えちゃう。A[10]の意味がわからないのでそれは無視するけど。 AVL木の回転操作には一重回転と二重回転がある。 これが右方向への一重回転 http://uploda.cc/img/img508fcfd7ebf3e.png 回転後にトップノードとなるノード、この場合はBを変数にコピーして Aの左にBの右の子を付けてやっちゃうわけ。そしてBの右の子にAをつけちゃえば回転完了。 これが右方向への二重回転 http://uploda.cc/img/img508fd26919772.png まず子のノード(B)で一重回転を行って、そのあと親のノード(A)で一重回転を行う。 子のノードで回転後にトップノードとなるのはEなのでEを変数にコピーして 一重回転の要領で付け替える。Eは親のノードで一重回転したときにもトップノードとなる ノードだったりしちゃうわけ。もういちどこんどは親のノードのところで一重回転の要領で ノードを付け替えちゃったら回転完了。 プログラムはこんな感じ。 http://ideone.com/yAWgFX 一重回転のコードが4行、二重回転のコードが6行、簡単っしょ。
351 : >>350 ありがとう 要素の入れ替わりが激しくて どこで回転してるのか分からない 何が回転なのかわからない................................. ちなみに配列は単に木を保存してるだけです。
352 : >>351 わからないわけないだろ、B、Dが右上に上がってA、Cが右下に下がってるだろ。 完全に回転してるだろ、これこそが回転だろ、まごうことなき回転だろ、これが回転なんだよ。
353 : 魔界の転送屋と悪魔召喚の契約をした後、魔界銀行のある口座に代金を振り込む。すると転送サービスを通じて人間界に悪魔が転送される。
354 : >>352 3が1から離れてるのとかアクロバティックすぎてよく分からん 割と本気で困ってる
355 : >>354 わからないわけないだろ、なにがアクロバティックだ、あまりふざけたことぬかしてっと桃白白は ドドンパを行使することも視野に入れる覚悟だ。AVL木は平衡二分探索木。 平衡二分探索木は左右の平衡を保つ二分探索木。二分探索木は、左の子が親の子より 小さくて右の子が親の子より大きい二分木。二分木は2つの子を持つ木。 回転したとき2が一番上に位置するだろ、3は2より大きいから2の右側にいなければいけない。 1は2より小さいから2の左側にいなければいけない。二分探索木の条件を崩さずに平衡を保つために ノードを付け替える、それがAVL木における回転操作。
356 : >>355 ありがとう図付いてるし考えてみる ただ計算量まで求めるとなるとお手上げ ちなみに俺が持ってる回転のイメージは 1 2 3 4 5 → 5 1 2 3 4 → 4 5 1 2 3 こんな感じ 複雑な回転の仕方はイメージできないんだ
357 : だれかすまんが、なんで木が1次元配列になってんのか説明してくれ
358 : >>356 それただ単に、 一次元の配列をrotateしただけ…
359 : >>357 大丈夫だ問題ない、桃白白にもそれはわからない。
360 : >>357 A[0] A[1]A[2] A[3]A[4]A[5]A[6] ................... こんなイメージですかね?
361 : Heapなんかも1次元配列だけど実質木構造だしな
362 : マジで言ってんのかよ…… いまの計算機、木構造をそのまま入れれんのか? 実質もクソもなんも 最終的なデータの形態なんてメモリにならんだビットのコマ切れじゃん それが意味あるように見えてる、見せてるだけだろ……
363 : 木作る時は 配列複数作ったほうがいいのか?
364 : >>361 ヒープは木の構造は配列サイズで確定されて、 操作が内容のスワップだけだから配列で表現できるってだけだろ。 AVLで同じことやろうとしたら、空き要素が大量にいるだけじゃなくて、 回転したとたんに要素の大移動しなきゃならん。
365 : ならねーよカス
366 : >>289 返事遅くなりましたが、ありがとうございます 明解C言語はすぐにでも試し読みできそうなので、見てみたいと思います
367 : >>364 じゃぁポインタ?
368 : >>364 もちろん一次元配列で平衡木は非現実的だよ ヒープソートがどういう動きをしてるのか分からない人がいるのでちょっと触れてみた
369 : >>362 うん、だからわざわざ連続領域の配列に持たせる意味がないんだよね
370 : int x; while(1){ x=getchar(); if(x==EOF) break; printf("%d",x); putchar(x);} char型の理解を深めようと色々試していたところ これの%dを%sにして出来たファイルを実行したらセキュリティーソフトからウィルス警告来たのですが 無視しても大丈夫ですか?
371 : ウイルス作成罪キター ってのは冗談だが、"%s" に文字(char)とか整数(int)を与えちゃいかんよ。 いまどきのコンパイラなら警告オプションちゃんとつければ、 だめよって警告してくれるはず。
372 : セキュリティソフトってハッシュで確認するだけのもんだと思ってたわ
373 : 入門用のコード書いてコンパイルしたらAvast!に隔離されちゃうことがあるな 下のコードを MinGW gcc 4.6.2 で -O2 オプションでコンパイルすると ld がマルウェア作ったとかいってブロックされるwww #include <stdio.h> int main(void) { int a, b; scanf("%d", &a); scanf("%d", &b); printf("%d %d\n", a, b); return 0; }
374 : >>370 話は署で聞こうか
375 : scanfは糞
376 : 一律に糞扱いして思考停止するんじゃなくて、 使える条件が整えば便利に使えると思うよ
377 : 条件確認して慎重にコーディングしなきゃダメな時点でクソだろ それで得られるメリットがめんどくささを凌駕するならまだしもそんなこともないしな
378 : sscanf()はけっこう使う
379 : まぁ、sscanf()も入力が想定できるケース以外では出番が減るけどね。
380 : バッファ突破の話とは別で scanf は解釈に失敗した場合に巻き戻せないのが難点 sscanf ならバッファを書き換えない限りいけるので まだ融通が利く
381 : 実務では結局他のパーサー使うんでスキャンエフの出番はないです
382 : scanf は糞。論外。 sscanf は入力行のチェックをしてから通す。常識。
383 : >>380 ungetc
384 : ところで標準のファイルストリームで扱えるサイズを超える巨大ファイルをOSのAPIなしに扱うにはどうすればいいんすか? シーケンシャルアクセスだけですべて解決する問題なら気にしなくていいのだけどランダムアクセスしたい時に困ります
385 : longが32bitのシステムでfseek(3)じゃ足りないってこと? POSIXにはoff_tで使えるfseeko(3)があるけど。
386 : fseek64 とか
387 : Cの仕様が時代についていけなくなりつつあるね。 拡張関数とかでお茶にごしてるけど。
388 : C の仕様というよりは処理系の実装上の問題では? >>384 は long を必要分だけ拡張すれば済む話。 sizeof(int)=4 はいいとして sizeof(long)=4 とした処理系が跋扈し、というかそれ以外の処理系とライブラリが主流にならなかった点に問題がある。 C の規格自体にはそのあたりに縛りはないから「時代にとらわれる」ということは基本ない
389 : >>384 外部設計を見直し、ランダムアクセス不要にする
390 : 標準関数はおまけに過ぎない 拡張こそ肝心で、これを妨げないことが標準の使命だ
391 : 普通にfseekoじゃないのか
392 :2012/11/02 うん
TOP カテ一覧 スレ一覧 2ch元 削除依頼 ▲
Java低速GUI Swing & JavaFX 10 (371)
Ruby 初心者スレッド Part 50 (489)
【会津】パソコン甲子園2004【若松】 (779)
iPhone iPad iOSプログラミング Part1 (541)
人気プログラミング言語ランキング (744)
NullPointerExceptionを「ぬるぽ」と呼ぶスレ6 (378)
--log9.info------------------
沖縄の釣り (627)
■■■多摩川の情報交換 PART 20■■■ (891)
エクリプス レクシータ 9.9 その2 (549)
【広島岡山】福山近郊の釣り情報 其の11【備後】 (237)
【チャリ】 自転車釣行を語ろう 2輪目 【ケッタ】 (239)
☆川崎区東扇島西公園専用!☆ 2匹目 (892)
【釣ってよし】千葉の釣りPart34【住んでよし】 (575)
東海地方の釣り新聞、釣り雑誌を語ろう【7匹目】 (849)
【鹿児島】長島周辺の磯釣り【フカセ】 (435)
【ロックフィッシュ】根魚ロッド専用スレ16 (256)
●愛知【評判の良い釣具屋】愛知●其の二 (592)
【団子】紀州釣り【黒鯛・チヌ】5投目 (393)
ラインノットスレ part3 電車 FG SF ノーネーム (942)
【ヒラマサ】伊豆のショアジギング【カンパチ】 (678)
釣りはしたいけど行くのが面倒くさい【4面】 (382)
【釣ってよし】千葉の釣りPart235【住んでよし】 (833)
--log55.com------------------
冷静に牙狼 GOLD STORM翔を語るスレ
CRぱちんこ必殺仕事人X 大コケの原因
パチ屋に求める最低限の設備は?
【今こそ立ち上がれ】男女平等の世の中っていう割に女のが優遇されがち【野郎共】
CRテレサ・テン2(Daiichi)
2017年に倒産してほしいメーカー
社員を皆殺しにすべきメーカー
パチ依存の相談窓口に電話した結果ww