[表示 : 全て 最新50 1-99 101- 201- 301- 2chのread.cgiへ]
Update time : 05/09 11:06 / Filesize : 84 KB / Number-of Response : 305
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【◆QZaw55cn4c 隔離】C/C++の問題を片付けます



1 名前: ◆QZaw55cn4c mailto:sage [2010/11/14(日) 15:15:49 ]
あなたが解けないC言語/C++言語の問題を ◆QZaw55cn4c が有償で片付けるスレッドです。

・モリタポ(moritapo.jp/)により決済を行います。
・投稿にあたっては、トリップを使ってください。トリップがなければ決済の確認ができません。
 ◆QZaw55cn4c は、トリップ以外の質問者の情報を知ることができませんので安心です。

【回答掲示までの流れ】
1. 質問者がトリップを使って問題を投稿する。
2. ◆QZaw55cn4c が回答できる問題があれば、◆QZaw55cn4c が受諾レスを行う。
 受諾レスには決済日を基点とした回答期日が示される。
3. 質問者が ◆QZaw55cn4c にモリタポを進呈する。
 進呈の際には、問題を投稿したときに表示されたトリップ(パスワードではない)をメッセージに記入する。
4. モリタポの進呈を確認したら、◆QZaw55cn4c は回答を掲示する。(codepad.org/, ideone.com を使用します。)

【料金】
・一問あたり 500円(5000モリタポ・手数料込み)です。
・一つのレスに記述できる内容を一問とします。アップローダーを使用してもかまいません。
・◆QZaw55cn4c が受諾レスを行い、受諾レスに回答期日を示したにも関わらず、回答期日に間に合わなかった場合には、モリタポを返還します。
それ以外の場合にはモリタポの返還はいたしません。

【修正】
・◆QZaw55cn4c が一度示した回答に対しては、明白な錯誤があった場合を除いては、◆QZaw55cn4c は修正は基本的に行いません。

ただし、最大限ご希望に応じたいと考えていますので、修正希望があれば、トリップを使用して投稿してください。
修正希望回数は、最大3回を目安としてください。3回を超えて修正を希望する場合は、新規に質問を投稿しなおしてください。
いずれも場合も、修正に応じることを保障するものではありません。

255 名前:デフォルトの名無しさん mailto:sage [2010/11/30(火) 13:48:07 ]
Visual C++とC++は別言語です
それすらも◆QZaw55cn4cは分かってないのか

256 名前:デフォルトの名無しさん mailto:sage [2010/11/30(火) 13:51:47 ]
◆QZaw55cn4cは真性のアホだな

257 名前:デフォルトの名無しさん mailto:sage [2010/12/01(水) 11:49:06 ]
お前はこの巣から出てくるな
C++が使えないカタワちゃんw

258 名前:デフォルトの名無しさん [2010/12/01(水) 14:55:17 ]
>>257
役立たずの池沼のお前は宿題スレに来るな、キモイから

259 名前:デフォルトの名無しさん mailto:sage [2010/12/01(水) 15:35:30 ]
>>258
役立たずで荒らすしか能がない◆QZaw55cn4cは悔しいでちゅねー

260 名前:デフォルトの名無しさん [2010/12/01(水) 15:53:55 ]
>>259
宿題スレで答えもせずにギャーギャー騒いでいた池沼のガキ
早く死ねよ

261 名前:デフォルトの名無しさん mailto:sage [2010/12/01(水) 15:54:34 ]
>>260
ガタガタ言わずにお前が死ね

262 名前:デフォルトの名無しさん [2010/12/01(水) 17:28:25 ]
>>259
宿題に関係のない争いで荒らしていたのはお前だろ、自覚症状のない痴呆症

263 名前:デフォルトの名無しさん mailto:sage [2010/12/01(水) 17:30:22 ]
>>262
自分の事を言っているわけですね、わかります
つーかいちいちageんなカス



264 名前:デフォルトの名無しさん mailto:sage [2010/12/02(木) 08:50:00 ]
codepad.org/sUQVhvlb

265 名前:デフォルトの名無しさん [2010/12/02(木) 09:13:36 ]
>>263
荒らしてたのはお前だろ!何しらばっくれてんだ。
>自分の事を
お前の事だよ、ageられて都合が悪いのは池沼のお前だろ!

266 名前:デフォルトの名無しさん [2010/12/02(木) 09:22:12 ]
>>263
宿題に答える気も無く個人攻撃の為だけに宿題スレを荒らしやがって!
お前の書き込みは運営、管理者にバレてんだよ。通報しておくぞ。

267 名前:デフォルトの名無しさん mailto:sage [2010/12/02(木) 18:56:34 ]
>>265>>266
荒らしの当事者が必死です

268 名前:デフォルトの名無しさん [2010/12/02(木) 19:09:05 ]
( ´,_ゝ`)プッ

269 名前: ◆QZaw55cn4c mailto:sage [2010/12/02(木) 21:47:27 ]
hibari.2ch.net/test/read.cgi/tech/1289913298/829
codepad.org/qQAUIrSP

270 名前:デフォルトの名無しさん mailto:sage [2010/12/02(木) 22:10:16 ]
>>269
なんだが"void*のサイズが未知です"ってエラーが一杯出るんですが・・・

271 名前: ◆QZaw55cn4c mailto:sage [2010/12/02(木) 22:25:17 ]
>>270
ご指摘ありがとうございます。gcc では OK でも、bcc32 ではダメなことがわかりました。
今、C89/C99 を確認しています。
動くものが必要でしたら、とりあえずの解決方法に思いいたっておりますので、ご連絡いただければすぐに書き直します。

それにしても stdlib.h の qsort() などは、C で実装するとなると、どうすればいいのでしょうか。

272 名前:デフォルトの名無しさん mailto:sage [2010/12/02(木) 22:58:35 ]
int * にキャストすれば済む話だと思うんだが

273 名前:デフォルトの名無しさん mailto:sage [2010/12/02(木) 23:23:20 ]
>>269
やっぱりよく分からんなクイックソート。
シンプルに作ってくれてるようなので、
しばらく追いかけて遊んでみるわ。
モリタポはやれんが、宿題どうもありがとう。



274 名前: ◆QZaw55cn4c mailto:sage [2010/12/02(木) 23:23:31 ]
>>272
いや、キャストするなら char * でしょう。sizeof(char) == 1 ですから。

void myqsort(void *base, int n, int size, int (*comp)())
にたいして、
double a[N];
myqsort(a, N, sizeof(a[0]), cmp);
と呼び出した場合、内部で、&a[i] をもとめるのに、
base + i * size
としているのが問題になっています。
void *base なので、sizeof(void) がわからないというエラーのため、base + i * size が計算できないのです。

275 名前:デフォルトの名無しさん mailto:sage [2010/12/02(木) 23:50:23 ]
1つ目はこうしたらもっとよくなるという内容です。
Bsort関数中
 n--;
 } while (flag > 0);
こうしたほうが、効率かなり上がります。
まぁQsortとは比較になりませんが。

もう一つは質問で、
cmpで型不問にしたいのなら
 #define cmp(a,b) ((a) == (b)) ? 0 : ((a) > (b)) ? 1 : -1)
見たいにマクロにしちゃうのはだめでしょうか?

276 名前:デフォルトの名無しさん mailto:sage [2010/12/03(金) 00:02:08 ]
>>274
gccでは通るということは void* が char* に暗黙キャストされてるって事なのかい?
それって規約的にはどうなんだろう?

277 名前: ◆QZaw55cn4c mailto:sage [2010/12/03(金) 00:08:55 ]
>>275
バブルソートの改良案は理解できます。
>>269 に沿って記述すれば、一回のループで値が大きいものから順に配列の引数の大きい側に寄せられていきますから、
i 回ループをまわれば配列の大きい側から i 個までは比較交換する必要はない、というわけですね。
ただ、以前よりバブルソートのお題は、en.wikipedia.org/wiki/Bubble_sort に沿ってかくようにしています。
改良しても計算オーダーは、やはりΟ(n^2) で変わりがない、ということもあります。
(改良前:n^2, 改良後:1/2 * n * (n + 1))

>マクロにしちゃうのは?
構造体の配列があって、その構造体独自の大小関係を自前で定義して、ソートをかけることを想定しています。
struct c { double r, i; } a[100];
cmp(struct c *a, struct c *b) { return (a->r * a->r + a->i * a->i) - (b->r * b->r + b->i * b->i); }
myqsort(a, 100, sizeof(struct c), cmp);

stdlib.h の qsort() を一度自分で実装したくなって、この問題に着手した次第です。

278 名前:デフォルトの名無しさん mailto:sage [2010/12/03(金) 01:26:01 ]
>>276
こいつ多分 -ansi オプションを付けないでコンパイルしてるんだろう

279 名前:デフォルトの名無しさん mailto:sage [2010/12/03(金) 01:27:30 ]
今見たら>269はひどい
void *に対して演算子ちゃだめでしょ、たまたまsizeof(void) == sizeof(char)だったわけで
普通はchar const*にキャストして演算する

cmp()についても関数ポインタのキャストは可能であるんだけど、
JISX3010(C言語)の6.3.2.3ポインタ
型変換されたポインタを関数呼び出しに用い、関数の型がポインタの指すものの型と適合しない場合、その動作は未定義とする。
らしいんでint(*)(const int*,const int*)な関数をqsortに渡すのは動作が未定義となる。

280 名前:デフォルトの名無しさん mailto:sage [2010/12/03(金) 01:33:14 ]
◆QZaw55cn4cって
宿題スレの他回答者のコードを良く理解しないままパクる事多いよね

281 名前:デフォルトの名無しさん mailto:sage [2010/12/03(金) 01:59:12 ]
>>277
オーダー同じなら改良しなくていいとか思ってるなら、プログラムやめろ

282 名前:デフォルトの名無しさん mailto:sage [2010/12/03(金) 10:15:43 ]
>>279
C99の規格票で済まないがこんな項目がある

26 A pointer to void shall have the same representation and alignment requirements as a
pointer to a character type.39) Similarly, pointers to qualified or unqualified versions of
compatible types shall have the same representation and alignment requirements. All
pointers to structure types shall have the same representation and alignment requirements
as each other. All pointers to union types shall have the same representation and
alignment requirements as each other. Pointers to other types need not have the same
representation or alignment requirements.

この規格票から見れば、void * に対する演算は、char * に対する演算と等価だと言っている。
だからBCCがおかしいと言えない事もない。

ちなみにgcc 4.5.1に-ansiを付けてコンパイルしてもコンパイルは通る
gccが正しいのなら、BCCが規格通りではない(C89はどうだが知らないが)という事になる

283 名前:デフォルトの名無しさん mailto:sage [2010/12/03(金) 10:19:52 ]
あ、言うのを忘れた

gccでは>>269はコンパイルは通るし、「正しく動く」つまり規格票通りなわけだ



284 名前:デフォルトの名無しさん mailto:sage [2010/12/03(金) 10:22:17 ]
mingwらしいから多分gcc3.4ぐらいを想定すべきだよな

285 名前:デフォルトの名無しさん mailto:sage [2010/12/03(金) 12:22:35 ]
>>282
なんか shall って弱くねぇか?「としても良い」くらいにしか読めないんだけど
別に bcc に限らず void* に対して加減算するのは変だってのは一般的感覚に思えるんだけどねぇ
実際にそんなコード書いたらレビューで叩かれるし....

286 名前:デフォルトの名無しさん mailto:sage [2010/12/03(金) 12:39:35 ]
>>285
JIS-X3010には同じ箇所は

voidへのポインタは、文字列型への表現及び同じ境界調整要求を「持たなければならない」。

とあるね。
「としても良い」とは訳してないようだ。

287 名前:デフォルトの名無しさん mailto:sage [2010/12/03(金) 13:03:34 ]
>>286
単に >>282 を見ての意見だから JIS がどう訳したなんて知らんよ、この業界は誤訳も多いしね

少なくとも void* に加減算なんてタココードは普通の現場では許されないって話は確かだよ
bcc がその規約から外れてるのはこれを一般的と解釈しての結果だろうな

288 名前:デフォルトの名無しさん mailto:sage [2010/12/03(金) 13:37:26 ]
>282
C89でもそうなっていったわ
3.1.2.5 Types
A pointer to void shall have the same representation and alignment
requirements as a pointer to a character type. Other pointer types
need not have the same representation or alignment requirements.
まさかのキャラポ、まぁ感覚的には気持ち悪いが規格が正義だからいいや

C99ではさらに、引数、戻り値、共用体のメンバにおいてそれが暗に行われるっぽいね
これ以上はガチスレ行った方が良さそうだ

char*と同じ表現(?)と境界を満たすのはvoid*が無かったころの関数と互換性を保つためなのだろうか

289 名前:デフォルトの名無しさん mailto:sage [2010/12/03(金) 13:41:59 ]
まあ、1バイトの型の代表だからじゃね? memsetも、

 void *memset(void *s, int c, size_t n);
 sは、unsigned char *型にキャストされ、cは、unsigned char型にキャストされる。

とある。

290 名前:デフォルトの名無しさん mailto:sage [2010/12/03(金) 14:02:22 ]
>288
なんか書いてないかなぁと思ってRationale読んだら書いてあった
3.1.2.5 Types
A pointer to void must have the same represen-
tation and alignment as a pointer to character; the intent of this rule is to allow
existing programs which call library functions (such as memcpy and free) to con-
tinue to work.
やっぱりそうだったか

291 名前:デフォルトの名無しさん mailto:sage [2010/12/03(金) 15:08:09 ]
ちなみにC++では規則はかなり異なっていて

§3.9.2
4 Objects of cv-qualified (3.9.3) or cv-unqualified type void* (pointer to void),
can be used to point to objects of unknown type. A void* shall be able to hold
any object pointer. A cv-qualified or cvunqualified (3.9.3) void* shall have the same
representation and alignment requirements as a cv-qualified or cv-unqualified char*.

はいいのだが

§C.1.2.4.10
Change: Converting void* to a pointer-to-object type requires casting
char a[10];
void *b=a;
void foo() {
char *c=b;
}
ISO C will accept this usage of pointer to void being assigned to a pointer to object type.
C + + will not.
Rationale: C + + tries harder than C to enforce compile-time type safety.
Effect on original feature: Deletion of semantically well-defined feature.
Difficulty of converting: Could be automated. Violations will be diagnosed by the
C++ translator. The fix is to add a cast For example:
char *c = (char *) b;
How widely used: This is fairly widely used but it is good programming practice to add
the cast when assigning pointer-to-void to pointer-to-object. Some ISO C translators
will give a warning if the cast is not used.

などなどいろいろ制限が強くなっている

292 名前:デフォルトの名無しさん mailto:sage [2010/12/03(金) 15:30:29 ]
sizeof(void)ってw

293 名前:デフォルトの名無しさん mailto:sage [2010/12/03(金) 15:58:55 ]
個人的な主観で説明する人も増えて、アスペルガーっぽい融通の利かない人も
目立ちますね。最終的には「お前がそう思うんならそうなんだろう、お前ん中ではな」
って言われて一蹴されますよ。



294 名前:デフォルトの名無しさん mailto:sage [2010/12/03(金) 16:14:57 ]
>>293
規格の話をしてるんだが、なぜそこでアスペルガーの話が出てくるんだ?馬鹿かお前?
規格は規格だ
それ以上でもそれ以下でもない
主観が入る余地もない

295 名前:デフォルトの名無しさん mailto:sage [2010/12/03(金) 16:59:19 ]
話についていけないけど、とにかく他人を煽りたい

296 名前:デフォルトの名無しさん mailto:sage [2010/12/03(金) 17:24:40 ]
>>295
とにかく他人を煽りたい奴は自己愛性人格障害と考えられます
現在の精神医学では不治の病です
最も人に嫌われる精神障害です

297 名前:デフォルトの名無しさん mailto:sage [2010/12/03(金) 19:57:26 ]
printf("%d\n",sizeof(void));
してみたら
 gcc(v3.2.2 , v3.4.5 , v4.3.4)実行結果 1
 cl(Version 12.00.8804)実行結果 0
 bcc32 コンパイルエラー
 CC38H コンパイルエラー (H8用Cコンパイラ)
となった。まともに動くのは gcc のみかな。

298 名前:void* = void* + size_t mailto:sage [2010/12/03(金) 19:59:33 ]
linux-2.6.37-rc4
/include/linux/relay.h の30行目

/*
* Per-cpu relay channel buffer
*/
struct rchan_buf
{
    void *start;          /* start of channel buffer */


linux-2.6.37-rc4
/karnel/relay.c の1090行目

/*
*   subbuf_read_actor - read up to one subbuf's worth of data
*/
static int subbuf_read_actor(size_t read_start,
               struct rchan_buf *buf,
               size_t avail,
               read_descriptor_t *desc,
               read_actor_t actor)
{
    void *from;
    int ret = 0;

    from = buf->start + read_start;



299 名前:デフォルトの名無しさん mailto:sage [2010/12/05(日) 22:30:17 ]
テスト

300 名前:デフォルトの名無しさん mailto:sage [2010/12/05(日) 22:33:57 ]
テスト

301 名前:デフォルトの名無しさん mailto:sage [2010/12/05(日) 23:48:48 ]
テスト
Σ(☉◇☉)

302 名前:デフォルトの名無しさん mailto:sage [2010/12/05(日) 23:51:19 ]
学期末テストですか?

303 名前:デフォルトの名無しさん mailto:sage [2010/12/06(月) 00:19:59 ]
test



304 名前:デフォルトの名無しさん mailto:sage [2010/12/06(月) 09:38:05 ]
ポスト






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](*・∀・)<84KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef