トップページ⇒tech
1002コメント327KB

C言語なら俺に聞け(入門編)Part 131 [転載禁止]©5ch.io

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2015/11/22(日) 17:49:08.07ID:+9G59Pl/
C言語の入門者向け解説スレッドです。

★前スレ
C言語なら俺に聞け(入門編)Part 130
http://peace.2ch.net/test/read.cgi/tech/1439071526/
★過去スレ
C言語なら俺に聞け(入門編)Part 129
http://peace.2ch.net/test/read.cgi/tech/1432674955/
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++の宿題片付けます 168代目
http://peace.2ch.net/test/read.cgi/tech/1408962564/
★C++言語については避けてください。C++対応明記スレへどうぞ。
★分からない事をなるべく詳しく書いて下さい。
★ソースコードを晒すと答えやすくなるかもしれません。
  # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること。
  # サイズが大きい場合はアップローダ等を利用してください。
http://codepad.org/
http://ideone.com/
★開発環境や動作環境も晒すと答えが早いかもしれません。
★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
【重要】
当たり前の事ですが、2chではコピペ荒らしは禁止されています
0002デフォルトの名無しさん2015/11/22(日) 18:25:54.05ID:a00B+hc9
C言語でWindowsのフォルダやファイルの検索プログラムを作っています。
疑問なんですが何故エクスプローラだとファイル探索に時間がかかるんですか?
N個のファイルがあった場合、全部調べても計算量はO(N)だと思うのですが、
何秒、何十秒とかかるのは何故でしょう?
C言語の文字列操作関数使ってエクスプローラに変わる機能が作りたいんですが
そもそも何故こんなにエクスプローラが使えないのか分かりません…
僕の使い方が悪いのかもしれませんが
0003デフォルトの名無しさん2015/11/22(日) 18:26:37.05ID:a00B+hc9
ちなみにエクスプローラ作成は大学の冬の自由課題です。
これ作れたら結構便利なんじゃないかと。
0004デフォルトの名無しさん2015/11/22(日) 18:51:07.88ID:zgumCplV
エクスプローラで何すると遅いって言ってるの?
ウィンドウ右上にある検索ボックスでの検索?

まあ何であれ自分で作ってみれば原因もわかるんじゃない
CUIで作るだけじゃ分からんかもしれんけど
0005デフォルトの名無しさん2015/11/22(日) 18:54:04.16ID:dFORHBUS
前スレ最後盛り上がってたなー
0006uy ◆Qawu9.2l1E 2015/11/22(日) 19:16:19.32ID:hFpqZnLD
Windowsは10になっても作りがおかしい
新規アカウント作るとその後数日間だけは速い
でも、どこかにキャッシュが蓄積されてんだろうね
少しずつエクスプローラーが重くなる
もう大容量ファイル以外はSSD推奨の流れ
0007デフォルトの名無しさん2015/11/22(日) 19:20:17.51ID:ISFyIiRr
>>2
あの検索はファイル名のみを検索してるわけじゃないから
0008デフォルトの名無しさん2015/11/22(日) 19:29:21.11ID:vggKhYqJ
>>2
プログラムが完成したあたりでEverythingの存在を知って愕然とするが良い
コンマ何秒でリアルタイム検索が出来るWindows最強の検索ソフト
これ使ったこと有ったら自分でつくろうなどと言う発想は最早出てこない

>>3
Vista以降であればIExplorerBrowserってのが有るから
殆ど何も書かなくてもエクスプローラ風のファイラーが作れる
http://oldworldgarage.web.fc2.com/programing/tip0010-1_IExplorerBrowser.html
http://eternalwindows.jp/shell/explorerbrowser/explorerbrowser01.html

ツリービューがほしい場合はINameSpaceTreeControlを使うらしい
http://eternalwindows.jp/shell/explorerbrowser/explorerbrowser04.html
こちらに関しては使ったことがないので良く知らない
0009デフォルトの名無しさん2015/11/22(日) 19:50:08.20ID:yPUHF/WV
>>5
ちょっと理解力の足りない子が暴れてたからね
0010デフォルトの名無しさん2015/11/22(日) 19:53:44.91ID:yPUHF/WV
>>7
むしろファイル名だけの検索に戻して欲しい
ファイルの中身を検索したい時はエディタとかでやるし
0011デフォルトの名無しさん2015/11/22(日) 20:01:06.71ID:ISFyIiRr
ファイル名だけで検索したけりゃコマンドプロンプトから検索するだけの話だろ
0012デフォルトの名無しさん2015/11/22(日) 20:05:04.34ID:/loq94Ox
>>9
そういうことにしたければそういうことにすればいいんじゃ…

VLAとは関係ないpush/pop最適化の話をやぶから棒に振っておきながら、
そんな最適化はループ状況でスタックオーバーフローを起こすと突っ込まれたとたん
話題を最初からTCCのVLAの実装の話であったかのように捻じ曲げた醜態はdatと皆の記憶に残ったであろう…
0013デフォルトの名無しさん2015/11/22(日) 20:09:00.46ID:vggKhYqJ
お前もう出てくんな
0014デフォルトの名無しさん2015/11/22(日) 20:31:44.48ID:dHfinU55
>>12
まだ言ってるのかよ…
マジ、お前の理解力が無さすぎ
0015デフォルトの名無しさん2015/11/22(日) 20:41:53.91ID:/loq94Ox
>>14
ID:dHfinU55が何と主張しようとも、>>12と次の3点が事実なわけだが…
 ・ループ状況におけるpush/pop最適化がうまく働くケースと、スタックオーバーフローを引き起こすケースについては漏れが述べた(特に否定されず
 ・VLAについて、ループ内でサイズが増える場合は都度新たな領域の確保が必要であることも漏れが述べた(特に否定されず
 ・gotoでいかに関数ないジャンプしようとも、VLAの開放は関数を抜ける際に問題なく行えることも漏れが述べた(特に否定されず
この上何を理解せよというのか
傷ついたID:dHfinU55の心?

>>13
(以下略
0016デフォルトの名無しさん2015/11/22(日) 20:52:05.39ID:yPUHF/WV
>>12
> VLAとは関係ないpush/pop最適化の話をやぶから棒に振っておきながら

VLA も push/pop もスタック操作であることも理解できないのかよ…

> そんな最適化はループ状況でスタックオーバーフローを起こすと突っ込まれたとたん

元々その話なんだが…
ひょっとしてスタックオーバーフローは自分が最初に指摘したとか思ってたりするのか w

> 醜態はdatと皆の記憶に残ったであろう…

確かにそうだな
誰の醜態とは言わないけどさ
0017デフォルトの名無しさん2015/11/22(日) 20:54:00.98ID:dFORHBUS
議論点は若干ズレ気味だったけど、個人的にはいい気付きになったなー
可変長配列がスタックオーバーフローの原因になり得るって、言われてみればわかる話だけど、そこに目がいかなかったからね

でも次からはその可能性も検討材料にできるので、傍観者だったけど俺は成長出来たな
0018デフォルトの名無しさん2015/11/22(日) 21:09:49.71ID:yPUHF/WV
>>17
> 可変長配列がスタックオーバーフローの原因になり得るって

いやいや、ブロックの終端で普通に解放すればいいだけ
個人的には TCC の実装がおかしいと思う
どこかのアホが約一名勘違いしてるみたいだけど w
0019デフォルトの名無しさん2015/11/22(日) 21:12:54.40ID:/loq94Ox
>>16
>VLA も push/pop もスタック操作であることも理解できないのかよ…
素人カヨ…
1. 藻前が出したpush/popはcallerが準備する(引数領域の)話
本来は領域を残すことは必須では無い
2. VLAはcalleeが中でやる話であって、対象となるスタックフレームの位置が違う
なおかつ、ループ状況かつサイズ増大する配列が複数のときは、領域を残すことが必須となる。

これらが一緒とか、TCCの話にすり替えた件といい、話の捻じ曲げはお得意のご様子で…

>> そんな最適化はループ状況でスタックオーバーフローを起こすと突っ込まれたとたん
>元々その話なんだが…
>ひょっとしてスタックオーバーフローは自分が最初に指摘したとか思ってたりするのか w
語るに落ちた?
本来のpush/pop最適化はスタックオーバーフローなんて起こしません
スタックオーバーフローを起こすぐらいなら、ループ内でSPをオフセットして帳尻を合わせるインストラクションを1発実行する方がまだマシだからだ
(>>15の箇条書きの一発目、または前スレ>>998の「ワカル」2発目

どっちがより深く理解して喋ってるのか衆目に明らかになったってカンジ?
0020デフォルトの名無しさん2015/11/22(日) 21:23:33.30ID:vggKhYqJ
だから、ループ内で毎回allocaして、かつ、ループ毎にSPをリセットしない環境があって
allocaしまくってスタックオーバーフローしましたってだけの話だろ
お前が一人で勝手にもつれさせているだけ
https://www.youtube.com/watch?v=BKorP55Aqvg
↑これの「赤い線なのに君が書いた線は青いせんじゃないか」
とかいってるやつがお前
0021デフォルトの名無しさん2015/11/22(日) 21:32:00.55ID:/loq94Ox
スマン漏れも半分語るに落ちてたわorz
>>19の前半のは撤回
ループ内でサイズ増大するVLAが複数あっても、ループの終わり(そのVLAがスコープを抜けたとき)にSPリセットすれば済むわ;

それはそうとして、
>>20
んまーそんな感じやね
ただ「実体を残す事にはパフォーマンス上の理由がある。 」と言い出した
(SPリセットしないことを言い出した)のは前スレの>966であって漏れジャナーイ
0022デフォルトの名無しさん2015/11/22(日) 21:35:19.68ID:zgumCplV
20の動画面白いな こういうのを起点に英語リスニングしてみるかな
でも今回は一人だけおかしい側だったから動画の状況とは違うな
0023デフォルトの名無しさん2015/11/22(日) 21:50:13.11ID:zgumCplV
直角にできるのは2本の線だけ というのは間違いだな
3次元空間なら3本お互いに直角にできる
もっと多い次元の空間とか考える方向があるのならもしかして7本もできるのかも?(よくわからん)

背景色と当てる光の色をうまくすれば緑のインクで赤い線を書くこともできるような気がしなくもない
と思ったが緑のインクの時点で赤い光は吸収されるからどう頑張っても無理か
0024デフォルトの名無しさん2015/11/22(日) 21:57:25.25ID:yPUHF/WV
>>19
> なおかつ、ループ状況かつサイズ増大する配列が複数のときは、領域を残すことが必須となる。

はあ?
何のために領域を残すことが「必須」なのか説明してからほざきなよ w
ちなみにそんなアホな主張をしてるのは君だけだから
0025デフォルトの名無しさん2015/11/22(日) 22:01:48.36ID:yPUHF/WV
ああ、すでに書いてあったか

> ただ「実体を残す事にはパフォーマンス上の理由がある。 」と言い出した
> (SPリセットしないことを言い出した)のは前スレの>966であって漏れジャナーイ

そいつはパフォーマンス上「やることが」あるって書いてる
「必須」と勘違いしたのは君だけ
0026デフォルトの名無しさん2015/11/22(日) 22:16:32.92ID:wAq+seW6
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef unsigned char byte;

int main(void) {
&nbsp;for (size_t a = 4; a; --a) {
&nbsp;&nbsp;size_t size = sizeof(size_t);
&nbsp;&nbsp;byte b[size + a * 16];
&nbsp;&nbsp;fprintf(stderr, "%p %u\n", b, sizeof(b));
&nbsp;&nbsp;memcpy(b, &a, size);
&nbsp;&nbsp;printf("%u\n", *(size_t *)b);
&nbsp;}
&nbsp;return 0;
}

>>18も勘違いしてないか?
こんな風に"ちゃんと"可変長配列にするとgccでもアドレスずれるよ。
http://www.c-tipsref.com/words/stackframe.html の2番目の図を拝借させてもらうと、
ローカル変数領域が途中結果領域を超えてしまうから必然的にallocaし直すハメになる。
スタックに取らずにvectorみたいにヒープに取れば無問題なんだけど。
とにかく一時変数のスコープは短くってのとループ内のvlaは気をつけたほうがいい。
0027デフォルトの名無しさん2015/11/22(日) 22:22:36.57ID:wAq+seW6
TCCのケースはあくまでも「固定長配列とみなせる場合の最適化」の話だからね。
0028デフォルトの名無しさん2015/11/22(日) 22:33:39.14ID:/loq94Ox
>>25
>そいつはパフォーマンス上「やることが」あるって書いてる
漏れがスコープを抜けた変数の実体を残す必要は無い、と書いたのに対して
なんかスゲー剣幕で、実体を残す奴はバカいわんばかりに(実際には「アホウ」と書いてた;
「実体を残す事にはパフォーマンス上の理由がある。 」と書いてた気がするYO

ていうかやっぱあんまりVLAに関係ない発言だったのねん(そもそも>>966のときはまだbが通常の自動変数というスレの流れだったし、
0029デフォルトの名無しさん2015/11/22(日) 22:58:13.24ID:vggKhYqJ
>漏れがスコープを抜けた変数の実体を残す必要は無い、と書いたのに対して
                     ~~~~~~~~~~~~~~~~~~~~~~~~
>なんかスゲー剣幕で、実体を残す奴はバカいわんばかりに
              ~~~~~~~~~~~~~~~~~~~~~
この時点で日本語としてのつながりがおかしいでしょ
他人の文章を読み取ったり表現したり論理的に考える能力が無いから
話がもつれるんだよ
0030デフォルトの名無しさん2015/11/22(日) 23:06:28.73ID:vNSTGRzm
マ板から移動してきました。
https://github.com/kazz0117/LED-Displaay-Digital-Clock-Using-H8-3694F
始めてマイコンボードで作った作品です。
ソースレビューをお願いします。
29歳のアマチュアPGです。
0031デフォルトの名無しさん2015/11/22(日) 23:34:21.20ID:/loq94Ox
>>29
ちょっそれtypoだから
>>28訂正
誤: 実体を残す奴はバカいわんばかりに
正: 実体を残さない奴はバカいわんばかりに
0032デフォルトの名無しさん2015/11/22(日) 23:54:10.80ID:vNSTGRzm
すまませんurl間違えました。
https://github.com/kazz0117/H8-3694F-Digital-Clock
これでプロとして通用する見込みがあるか判定もお願いします。
0033デフォルトの名無しさん2015/11/23(月) 00:10:09.36ID:b98i53Mh
いいねー、このカオス感
これぞ2chだって感じだなー
0034デフォルトの名無しさん2015/11/23(月) 00:10:57.31ID:AALv4lAu
>>18
gotoでスコープ外れる時も解放しなきゃならんが、
GCCの拡張でラベルのアドレスをvoid *変数に入れた間接gotoだと、実行時までブロックの外に抜ける事が
決定しないので、解放できなくなる。
0035デフォルトの名無しさん2015/11/23(月) 00:31:50.54ID:fxSBPtHV
>>32
さっと見た感じ読みやすいコードだと思います。
気になった点としては、
1. せっかくtypedef unsigned char _UBYTEとかで型を隠してるのに使われてない
2. #define hoge 0とか1とかは可能な限りenumを使いたい
3. そのファイル内でしか使われない関数はstaticを付けてスコープを制限したい
4. 3の結果グローバルな関数のプロトタイプ宣言は.hに移す
5. main()とか若干長いのでもうちょっと短くしたい(冒頭の処理をhoge_init()にまとめるとか)
あまり細かく見てないけどこんな感じです。
0036デフォルトの名無しさん2015/11/23(月) 00:33:56.81ID:fxSBPtHV
>>35の補足
アンダースコアで始まるシンボル名はコンパイラ側でリザーブされているので使わないように。
インクルードガードとかもね。どうしても付けたいなら末尾に。
0037デフォルトの名無しさん2015/11/23(月) 00:50:28.55ID:m2YBTfVY
>>35
>>36
見ていただいてありがとうございます。
ご指摘の改善点、のちほど適用させていただきます。
0038デフォルトの名無しさん2015/11/23(月) 00:51:27.18ID:VAY4UJYX
【 オンラインTCGエディター 】 >>1

デュエル・マスターズ的な非電源TCGの 《 オンライン化ツクール系ソフト 》 制作の企画。

例えば、ガチンコ・ジャッジを直ぐにでも導入できる機能を持っておりながら、
当面それを扱わず単純化させておいて、事後的に導入拡張する際に当該システムを
ブロック構造の組み合わせで後付け挿入できるように予めシステム化してあるソフト(エディター)。
既存の非電源TCGを劣らずに再現できるならば大概のニーズに応えられる筈。
バトスピ、ヴァンガ、ウィクロス、ポケカ、デジモン、ゼクス、モンコレ、ガンダム・ウォー、ライブオン、ディメンション・ゼロ、カードヒーローなど
のシステムを完全再現できるように設計するけど、他に此のTCGの此のシステムは再現希望とか有ったら書いて。
マジック:ザ・ギャザリングの全システムを完全に再現するのは無理だから、此れだけは必用だ!って部分のみリクエストして。
WEB通信での対戦は、個vs個、多数乱戦、チームvsチーム、個vsチームを可能な仕様とする方針。

設計思想は 《 RPGツクール 》 が良いかな?  他に、優れたエディター有ったら挙げてみて。

個人や企業などのベンダーが提示する開発費(見積もり)で折り合えば、発注する。
↓
エディター群から基本コンセプトを絞り込む(もちろんオリジナルで優れた新ネタが有れば導入する)。
↓
遊戯王OCGに関しては、タッグフォース、ADS、デュエルオンラインを発注先ベンダーに研究させる。
なるべく前述3つで可能な再現は全て実装させる方向を目指す。 まぁ努力する・・・
バトスピ、ヴァンガ、バディ、デュエマなど発売済みゲームソフトが存在してるケースはベンダーに研究させる。
↓
各社TCGを再現するテストプレイ ⇒ 更に改良や修正。
↓
機能制限した下位版を5万円以上で発売 + デュエリ−グ用に改造した上位版でサーバー稼動=営業開始。
↑
下位版の改造および商用利用には、別途で当社との契約が必要。

さ〜て、製作ベンダー見つけよっと!ww(クス
http://wc2014.2ch.net/test/read.cgi/entrance2/1447639727/-18
0039デフォルトの名無しさん2015/11/23(月) 07:52:00.20ID:UOHAVa5A
>>23
グラムシュミットの正規直交化ってまさにそれじゃないの?
0040デフォルトの名無しさん2015/11/23(月) 19:33:30.67ID:1C9r5blK
ラズベリーパイをPCからリモート接続して、ビルドしてる時に以下のエラーが出ました。
何故でしょうか。
最初のうちは、問題なくビルドできていたのですがヘッダファイルを追加した際に
発生しています。
なので、ヘッダファイル関連の部分をコメントアウトしても同様のエラーになるます。
ビルドはPC上のNetBeansを使って、ラズベリーパイ上に転送してラズベリーパイ上でコンパイルしています。
ちなみにMAKEは良くわからないので、NetBeans任せです。

「main.c:(.text+0x1c): `softPwmWrite' に対する定義されていない参照です」
0041デフォルトの名無しさん2015/11/23(月) 19:59:18.70ID:7jQqFmWD
>>32
これ、プロとして通用以前にまともに動かないだろ?
メインのループの中でLED表示もキー読み取りもしてないじゃんwww
0042デフォルトの名無しさん2015/11/23(月) 20:19:49.24ID:4hTn3ZTz
>>41
詳しく見たわけじゃないけど、タイマ割り込みを使ってLED表示とキー入力のルーチンを
呼び出しているように思える。
組み込み系のタスク管理処理だと一般的なやり方のような気がするけど。
0043デフォルトの名無しさん2015/11/23(月) 20:27:30.18ID:+Ddm9172
ただ、短すぎてプロとして通用するかどうかは判断つかないよねー
題材もちょっとねー
大学生でもこれぐらいは書くからねー
0044デフォルトの名無しさん2015/11/23(月) 20:38:46.63ID:7jQqFmWD
>>42
OK,OK.理解した。俺がちゃんと読んでなかったわ(恥
DispDigit()の中で自分自身をSetTimer()で登録しているから
周期的にDispDigit()が呼ばれるってわけね
わかりずれーww
0045デフォルトの名無しさん2015/11/23(月) 20:46:54.29ID:fxSBPtHV
>>40
エラーメッセージそのままだよ。定義(実装)の前に参照しようとしている。
関数ならプロトタイプ宣言を先にしておく、もしくは関数ブロック自体を使うより前に配置する。
ファイルの上から下へ流れることを思い出すべし。
0046デフォルトの名無しさん2015/11/23(月) 20:58:25.33ID:1C9r5blK
>>45
ありがとうございます。
確認してみます。
0047デフォルトの名無しさん2015/11/23(月) 23:28:30.23ID:1C9r5blK
解決しました。
色々調べてみたら、wiringPiをgccのリンクオプションで指定しなければならなかったようです。
全然関係ない普通の関数でビルドエラーが出まくるので、原因特定に時間が掛かってしまった。。
0048デフォルトの名無しさん2015/11/24(火) 10:58:57.10ID:tJqlgFat
>>37
いいからhoge厨は二度と来るな。
0049デフォルトの名無しさん2015/11/24(火) 11:42:48.48ID:d6tP0hfQ
最近c言語を学び始めた者ですが、自動販売機のお釣りと枚数を表示するプログラムを作ろうとしていておつりの表示までは何とか書けましたが、枚数の計算をどう書けば良いのかイマイチ分かりません。
どうかお願い致します
0050デフォルトの名無しさん2015/11/24(火) 12:15:08.25ID:2IyJeQ15
500で割って、余りを100で割って、余りを50で割って、余りを10で割って、余りを5で割って
ってすれば出来るよ
0051デフォルトの名無しさん2015/11/24(火) 12:46:17.07ID:WDNAFAEr
>>49
その聞き方だとCってよりアルゴリズムの話になる
どういう計算、判断をCで書きたいか書いてくれ
0052デフォルトの名無しさん2015/11/24(火) 13:15:35.66ID:cksHvZaS
>>49
まず1000円札と1円玉だけで練習
それができたら紙幣と硬貨の種類を増やしてやり直し
0053デフォルトの名無しさん2015/11/24(火) 17:03:51.24ID:zj3pUKBA
金額を指定して最小枚数の貨幣の組み合わせを求める方法なら
アルゴリズム(というほど大げさでもないか)の話題だが…。

C特有の整数の除算結果や剰余を得る演算子の質問かも知れぬ。
0054デフォルトの名無しさん2015/11/24(火) 19:07:30.92ID:UGtu2+cg
#define ATC=6;
const int coin[ATC]={1,5,10,50,100,500};

bool tsuri(int x, const int *stok, int *r) { // int stok[ATC], int r[ATC]
int i=ATC;
while (i--){ if (stok[i]>=(r[i]=x/coin[i])) x-=r[i]*coin[i]; else r[i]=0; }
return x==0; }
0055デフォルトの名無しさん2015/11/24(火) 23:37:59.56ID:GksIIF6P
>54にとっては、お札の使える自販機は想定の範囲外らしい。
それはさておき、定数6が余りにダサ過ぎる。
0056デフォルトの名無しさん2015/11/24(火) 23:53:59.47ID:UGtu2+cg
難癖つけるにも最低限の知識と洞察力さらに注意力が必要だとわかる一例
0057デフォルトの名無しさん2015/11/25(水) 00:01:30.37ID:DK24seVo
折角だから俺はsizeof演算子を選ぶぜ!
0058デフォルトの名無しさん2015/11/25(水) 00:19:25.37ID:Sra0FKsR
いやおまえ、難癖つけても良いと思うぞ
そのコード、例えば、おつりが400円でストックの100円玉が3枚のとき
100円玉はスキップされて一枚も使われないぞ
0059デフォルトの名無しさん2015/11/25(水) 00:35:40.61ID:Zpo4a/J3
んなん書いた本人が書き込むボタン押した時点で気付いて壁ドンしてるつのw
0060デフォルトの名無しさん2015/11/25(水) 00:44:00.54ID:d8/Xbbzt
山田太郎かいな
0061デフォルトの名無しさん2015/11/25(水) 01:19:42.11ID:Vd1+RMMI
const int coin[=6;]={1,5,10,50,100,500};
0062デフォルトの名無しさん2015/11/25(水) 01:35:50.94ID:rAklTrAk
どうでもいいけど自販機に1円5円は入れなくね
0063デフォルトの名無しさん2015/11/25(水) 01:40:29.76ID:wwtRzQvg
ニッポンの平均最低月給と人口の都道府県別、市町村別ランキング
求人情報113,957件の平均最低月給196,400円 ♬

あなたの住む街は第何位?平均最低月給はいくら??
http://jobinjapan.jp/area/
0064デフォルトの名無しさん2015/11/25(水) 07:43:59.70ID:7xFqT66+
>>58
横から失礼。
>>54 が何だか複雑な処理をしてるなぁと思ったが、
おつり用の小銭ストックの残数を調べてたのか。


すると客が金を投入して商品を選択した時点で
(商品を出す前に)おつりを払い出せるか確認しないといかんな。

「おつりが出せません。あと3本買ってください」とか
表示される自動販売機ができちゃうな。
0065デフォルトの名無しさん2015/11/25(水) 07:48:49.66ID:vDBW4/m6
つり切れランプとランプ点灯時の挙動
0066デフォルトの名無しさん2015/11/25(水) 14:58:04.94ID:IJD2vpFF
ついでにストックがゾロ目になると当たりでもう一本出るんだぜ
0067デフォルトの名無しさん2015/11/26(木) 07:14:29.70ID:KF/aoe7N
Cではなくアルゴリズムの用語について
正しいスレはわからないためここで質問します
ふさわしいところがあれば誘導お願いします
「Cプログラマのためのアルゴリズムとデータ構造」という本を読んでいるのですが
237ページからのヒープソートのセクションで
ヒープ=半順序木を配列に実装にしたもの
というようなことが書かれていますがgoogleする限り
ヒープ=半順序木
という意味でつかわれていることが多いようです
実際のところヒープの定義はなんですか?
0068デフォルトの名無しさん2015/11/26(木) 07:52:24.60ID:cMOPjOrt
Cでヒープというとヒープ領域のこと
https://ja.wikipedia.org/wiki/%E3%83%92%E3%83%BC%E3%83%97%E9%A0%98%E5%9F%9F
0069デフォルトの名無しさん2015/11/26(木) 08:19:55.65ID:egDOh8oE
>>67
このスレには文法バカの言語オタクしかいません
というか真面目な質問を今の2ちゃんねるでする方が間違っています
まだ、某知恵袋とかで質問した方がまともな回答がもらえるでしょう
0070デフォルトの名無しさん2015/11/26(木) 09:19:41.42ID:8/48+RLP
>>67
半順序木とヒープは別物
ヒープはその本にある通り、半順序木を配列に実装したもの
Cには半順序木というデータ構造がないので、Cで半順序木を実装するにはヒープとして実装する必要がある
0071デフォルトの名無しさん2015/11/26(木) 15:01:07.41ID:3WTjKhoC
>>70
ありがとうございます

しかしwikpediaには「ヒープの実装」のセクションにて

古典的な二分木データ構造を使って、二分ヒープ木を構築することは完全に可能である。

中略

しかし、より普及しているやり方は、配列に写す方法である。
以下のように、ほとんど完全な二分木の要素に番号を付けてみる。
まず、根元の要素に 1 という番号を付ける。
以下幅優先で順番に番号を振ってゆく(図を参照)。

https://ja.wikipedia.org/wiki/%E4%BA%8C%E5%88%86%E3%83%92%E3%83%BC%E3%83%97

しかし実際現場または一般では(私は学生です)
あなたや本の言う通り「ヒープ」と同義ということになっているのであれば
Wikipediaが間違っているのでしょうか?
それともヒープの実装が現実的には配列しか選択肢がないために
実質的に「配列の実装」とうことになっており学術的な定義では半順序木と等価なのでしょうか?
(はたまた私の(Wikipediaについて)日本語の解釈が間違っているのでしょうか?)
0072デフォルトの名無しさん2015/11/26(木) 15:03:02.52ID:3WTjKhoC
どうかんがえても私の日本語おかしいですね。すみません
なんとか意味わかります?
0073デフォルトの名無しさん2015/11/26(木) 17:49:14.82ID:bZdq0+/9
そりゃいくらでも出来るだろうけど挿入とか削除が遅くなるからじゃないの?
配列上だとキャッシュに乗りやすくて速いだろうし
0074デフォルトの名無しさん2015/11/26(木) 19:31:11.82ID:AipKzKjF
>>71
正直何を聞きたいのかよくわからない。

ヒープソートで半順序木を使っている。
半順序木は配列で実装できる。
半順序木は配列と等価なのですか?

って言ってるんだよね。
実装するものとされるものだから、明らかに等価じゃない。

「配列以外の実装ってありますか?」とか
「配列で実装するとこういう問題があると思うんですけど・・」とか
聞きたいことを明確にすべき
0075デフォルトの名無しさん2015/11/26(木) 19:41:04.28ID:KF/aoe7N
>>74
すみません
最終的に知りたいこと(聞きたい事)はヒープの定義です。
それにあたって本とWikipediaの説明の記述の食い違いについても説明がほしいのです
本の記述ではヒープとは半順序木の配列を使った実装だとあります。
しかしWikpediaによればその定義は半順序木と等価であるような説明(実際に半順序木とは書かれていないが)です。
0076デフォルトの名無しさん2015/11/26(木) 19:58:00.51ID:ofQuFmMz
>>75
Wikipediaなら出典も書いてあるはずだからあたってみたら?
0077デフォルトの名無しさん2015/11/26(木) 20:19:11.22ID:QqGRNt0R
>>75
セジウィックのアルゴリズム本でも読め
Wikipediaに書いてある事が怪しいと思うんなら自分で編集しなおせよ
ロックされてない項目なら
編集合戦になるかもしれないけどな
0078デフォルトの名無しさん2015/11/26(木) 20:24:40.74ID:QqGRNt0R
ちなみに今

https://ja.wikipedia.org/wiki/%E3%83%92%E3%83%BC%E3%83%97

ここを読んでるんだけど、
>ヒープ(英: heap)とは、「子要素は親要素より常に大きいか等しい(または常に小さいか等しい)」という制約を持つ木構造の事。

という定義になってる

https://ja.wikipedia.org/wiki/%E3%83%92%E3%83%BC%E3%83%97%E3%82%BD%E3%83%BC%E3%83%88
上のリンクにもここにも「半順序木」という言葉は見つからない

だから木構造でいいだろ
たまたま配列表現も可能でそちらの方が実現も楽だし速度も速いし、現在のCPUのアーキテクチャに
とっては都合がいいってだけの話

なんならヒープを二分木で書いてそれでヒープソートを書いてそれを講師に見せて「こういう事ですか」
とでも聞いてみりゃいいじゃん
007922015/11/26(木) 20:25:03.78ID:IxMwzK+N
>>7
Windowsのエクスプローラーがファイル名だけ検索してないってどういうことですか?
ファイル名で検索してるのにそれ以外の事って検索しようがなくないですか?
例えばファイルの中身を調べても何の意味もないかと…
実際何してるんでしょう?
0080デフォルトの名無しさん2015/11/26(木) 20:30:46.59ID:KF/aoe7N
レスありがとうございます
ヒープは半順序木の配列をつかった実装ということで決着です!
決まりです!ありがとうございます!
0081デフォルトの名無しさん2015/11/26(木) 20:31:10.47ID:ofQuFmMz
>>79
C言語スレだぞここは
ファイル名だけで検索してるって具体的にどういう方法で検索してるのかも書かずによく言い切れるな
008222015/11/26(木) 20:37:34.42ID:IxMwzK+N
>>81
Winndowsの仕組みが分からないんですよね
あのエクスプローラの検索機能って何を目的としてるんでしょうか?
0083デフォルトの名無しさん2015/11/26(木) 20:43:21.67ID:xvh9rNnd
受け答えになってない
重症患者
0084デフォルトの名無しさん2015/11/26(木) 20:49:25.70ID:ofQuFmMz
>>82
ファイル名だけで検索させているのかどうかも分かりませんってことか
お前の使い方が悪い
0085デフォルトの名無しさん2015/11/26(木) 21:30:45.65ID:uW3Onm83
「ヒープ」の指す意味は本や文脈によって変わる。

一義的な定義は木構造だと思うけど、
配列を用いた実装が有名なので、
その実装方法や、特定の実装自体のことをヒープと呼ぶこともある。

wikipediaをwikiと呼ぶようなもんだ。
0086デフォルトの名無しさん2015/11/26(木) 21:36:01.67ID:KF/aoe7N
>>85
すごい安心する
回答ありがとうございます!
0087デフォルトの名無しさん2015/11/26(木) 21:37:40.68ID:R9Nnr2R1
>>85
嘘こけ
木構造はtreeって呼ぶし二分木もbinary tree
お前が言ってるのはtreeとheapが同じってことだぞ、わかってんのか
0088デフォルトの名無しさん2015/11/26(木) 21:41:03.68ID:KF/aoe7N
正解がわからん!!!!!!!!!!!!!!!!!!!!!!
0089デフォルトの名無しさん2015/11/26(木) 21:54:42.91ID:uW3Onm83
第一義としては、

> ヒープ(英: heap)とは、「子要素は親要素より常に大きいか等しい(または常に小さいか等しい)」という制約を持つ木構造の事。

が正しい。ただし、実装方法や特定の実装のことをヒープと呼ぶこともある。
「ヒープ」と言って実際に何を指しているかは、文脈から判断するしかない。
0090デフォルトの名無しさん2015/11/26(木) 21:59:33.46ID:KF/aoe7N
「子要素は親要素より常に大きいか等しい(または常に小さいか等しい)」という制約を持つ木
とは半順序木と同じことではないのですか???
0091デフォルトの名無しさん2015/11/26(木) 22:11:00.55ID:uW3Onm83
>>90
同じ
0092デフォルトの名無しさん2015/11/26(木) 22:18:50.31ID:KF/aoe7N
だったらやっぱり
半順序木==ヒープってことですよね?
んで文脈によってヒープは半順序木の配列による実装を指すことがあるということですね?
0093デフォルトの名無しさん2015/11/26(木) 22:20:50.93ID:gSiocztQ
スタックとヒープ
0094デフォルトの名無しさん2015/11/26(木) 22:29:31.14ID:uW3Onm83
>>92
その理解でいいと思う

ただ、「ヒープ==半順序木」が本当に第一義かというと異論あるかも。
おそらく世界で最初にプログラムとして実装された半順序木は
配列を使ったものなので、明確に区別されていなかった可能性はある。
広義と狭義だと考えといた方がいいかもしれない
0095デフォルトの名無しさん2015/11/26(木) 22:33:27.35ID:R9Nnr2R1
>>89
自分で第一義をコロコロ変えるなよw
0096デフォルトの名無しさん2015/11/26(木) 22:35:47.83ID:R9Nnr2R1
木構造を簡単に実現できるのはリストだろ
最初は配列とか知ったか振り恥ずかしいぞ
0097デフォルトの名無しさん2015/11/26(木) 22:41:24.58ID:KF/aoe7N
>>94
ありがとうございます
いまのところこれが一番他の文章と矛盾せず納得できるものです
コロコロ回って申し訳なく思いますが現状はこの形で頭に入れます
ほかの方も意見をありがとうございます

またひっくり返りそうな文章がみつかればここへ凸するつもりです!
そのときはまたよろしくお願いします!
ではおやすみなさい!
0098デフォルトの名無しさん2015/11/27(金) 07:43:46.38ID:OSV5eH1L
実装の要素を元に名称を付けたからといって
名称に含まれる要素全てが実装に含まれるとは考えてはいけない。
0099デフォルトの名無しさん2015/11/27(金) 22:17:07.99ID:p4Ja58Mt
>>84
あれってまさかファイル内のテキストまで検索してるんですか?
余計な事しなくていいのに…
0100デフォルトの名無しさん2015/11/27(金) 22:39:28.89ID:TNfNeR16
>>99
そのまさか
副次ストリームなんかも含めて読む
逆にアホな実装すると副次ストリームのデータ考慮しないでいろいろやらかす
0101デフォルトの名無しさん2015/11/27(金) 23:21:25.77ID:FVkBDZy0
やらかすっても実行ファイルの警告ぐらいにしか使ってないじゃん
■ このスレッドは過去ログ倉庫に格納されています