C言語なら俺に聞け 146

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 839f-AnMQ)
垢版 |
2018/04/30(月) 04:47:37.50ID:XX4FB8lc0
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
http://codepad.org/

C11
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf

C99
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf
http://kikakurui.com/x3/X3010-2003-01.html

C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/

JPCERT C コーディングスタンダード
https://www.jpcert.or.jp/sc-rules/


C言語なら俺に聞け 144
https://mevius.5ch.net/test/read.cgi/tech/1514025223/

次スレを立てる時は本文の1行目に以下を追加して下さい
!extend:on:vvvvv:1000:512
-
※前スレ
C言語なら俺に聞け 145
http://mevius.5ch.net/test/read.cgi/tech/1519046038/
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
642デフォルトの名無しさん (ワッチョイ cf80-gYkF)
垢版 |
2018/08/03(金) 23:20:08.07ID:yp/iEsny0
>>616なんかではgoto使うケースなんかほぼない
普通にコード書いてればgotoなんかなくなる
後始末の仕方が判定できないコードを書くと
初期化が終わったあと、その初期化がむしろ不要になった場合その後始末が大変になる
知恵遅れほどいちいち不要なgotoを使いたがるからな

#define ERROR_INIT_AHO0 -1
#define ERROR_INIT_AHO1 -2
#define ERROR_INIT_AHO2 -3
#define ERROR_INIT_AHO3 -4
typedef struct tag_aho { char* p1; int fd2; FILE* fp3; } t_aho_t;

int 初期化(t_aho_t** ppt_aho) {
 t_aho_t* pt_aho;
 *ppt_aho = NULL;
 if ((pt_aho = malloc(sizeof(t_aho_t)) == NULL) { return ERROR_INIT_AHO0; }
 *ppt_aho = pt_aho;
 if ((pt_aho->p1 = malloc()) == NULL) { 後始末(pt_aho); return ERROR_INIT_AHO1; }
 if ((pt_aho->fd2 = open()) < 0) { 後始末(pt_aho); return ERROR_INIT_AHO2; }
 if ((pt_aho->fp3 = fopen()) == NULL) { 後始末(pt_aho); return ERROR_INIT_AHO3; }
 return 0;
}

void 後始末(t_aho_t* pt_aho) {
 if (pt_aho == NULL) return;
 if (pt_aho->p1 != NULL) { free(pt_aho->p1); }
 if (pt_aho->fd2 > 2) { close(pt_aho->fd2); }
 if (pt_aho->fp3 != NULL) { fclose(pt_aho->fp3); }
 free(pt_aho);
}
2018/08/03(金) 23:26:42.29ID:Fao22p7ya
gote使う前にそのループを関数化で分ける
644デフォルトの名無しさん (ワッチョイ cf80-gYkF)
垢版 |
2018/08/03(金) 23:29:40.43ID:yp/iEsny0
正解!
645デフォルトの名無しさん (ワッチョイ cf80-gYkF)
垢版 |
2018/08/03(金) 23:34:32.92ID:yp/iEsny0
>>642の簡単な例なら最初のmallocのあと
pt_aho->p1 = NULL;
pt_aho->fd2 = -1;
pt_aho->fp3 = NULL;
と初期化しておくだけでどう後始末すれば判定できる
2018/08/03(金) 23:44:52.51ID:8VyIMXmS0
>>645
後始末ってエラー時だけじゃなく終了時にも使いたいから
未使用かどうかを分かる様にしとくと色々便利だよね
2018/08/04(土) 00:39:50.00ID:iUNKVgUH0
Linux は、goto でエラー処理をまとめてる

return も、2箇所以上で使っている。
関数の冒頭で、処理しないものを、return ではじいたりしてる

MISRA-C のルール違反

トヨタなんか、MISRA-C で、5/100点とか聞くw
ルールの95% に違反w
648デフォルトの名無しさん (ワッチョイ a39f-Xflc)
垢版 |
2018/08/04(土) 04:04:56.84ID:2zclIjyW0
>>642
それだと毎回その関数用の構造体を作らねばならなくなっていまいち面倒ではないか?俺は>>616とその方式組み合わせたような感じにしてるよ。

int func()
{
 int r = -1;
 char *p1 = NULL;
 int fd2 = -1;
 FILE *fp3 = NULL;

 if ((p1 = malloc()) == NULL) goto func_exit;
 if ((fd2 = open()) == -1) {
  r = -2;
  goto func_exit;
 }
 if ((fp3 = fopen()) == NULL) {
  r = -3;
  goto func_exit;
 }

 /* 処理 */
 // ここで p1, fd2, fp3 を使い終わった場合は func_exit より後でメモリ開放や
 // クローズされないようにするために -1 や NULL を代入する。

 r = 0; // 成功
func_exit:
 if (p1) free(p1);
 if (fd2 != -1) close(fd2);
 if (fp3) fclose(fp3);
 return r;
}
2018/08/04(土) 05:10:46.07ID:YA1hWK5Y0
>>641
適切に構造化できないアホさん乙
2018/08/04(土) 05:53:52.28ID:I5yMWHTla
>>648
goto使わず普通に関数呼べばいいだけでは
2018/08/04(土) 07:40:44.39ID:YA1hWK5Y0
int func()
{
int r = 1;

//無駄な初期化はしない
char *p1;
int fd2;
FILE *fp3;

p1 = malloc(); if(p1 == NULL) goto malloc_failure;
fd2 = open(); if(fd2 == -1) goto open_failure;
fp3 = fopen(); if(fp3 == NULL) goto fopen_failure;
r = 0; // 成功

//フラグの類は極力使わない
fclose(fp3);
fopen_failure:

close(fd2);
open_failure:

free(p1);
malloc_failure:

return r;
}
2018/08/04(土) 08:12:49.13ID:mQQzn2Q+0
gotoを使った方がシンプルで見易いコードになるにも関わらず
頑なに使わない信者さん
>>606の振りで始まったにも関わらずたくさん出てくるね
2018/08/04(土) 08:15:22.02ID:mQQzn2Q+0
わざわざ専用構造体と専用後始末関数と専用エラーコードをつくってわざわざ複雑にしてるアホもいるし
変数名で自己紹介してるから自覚はあるんだろうけど
2018/08/04(土) 08:22:18.05ID:mQQzn2Q+0
初期化と後始末を包んだ関数もいるね

十数行で済むシンプルな関数に
何十行使うつもりだか
2018/08/04(土) 08:32:14.97ID:cyc8bEPyM
Ok, so I'm looking at your code and your code is pure and utter *shit*.
2018/08/04(土) 08:42:16.32ID:+vznLLf60
goto hell
2018/08/04(土) 09:32:53.84ID:AH7fLvgn0
>>647
MISRAの話だとそういう制御の話がよく取り上げらてて俺もほとんど守ってないけど、データ変換の話はよく考えられててなかなか為になるよ
2018/08/04(土) 09:33:52.60ID:AH7fLvgn0
>>650
最初の一文も読めないよのかよ…

> それだと毎回その関数用の構造体を作らねばならなくなっていまいち面倒ではないか?
659デフォルトの名無しさん (ワッチョイ cf80-gYkF)
垢版 |
2018/08/04(土) 10:21:26.55ID:CpwGeL+S0
アホは後始末しないのもわかったわ

初期化がおわったあと
ファイルあけたらずーっとあけっぱなし
ヒープ作ったら作りっぱなし
なにがおきようが関数抜けたらずーっと放置

まずその部分で完結したコードが書けない

だいたいどんな知恵遅れがコード書いてんのか分かった
アホが自己紹介のコード書いてるしな
2018/08/04(土) 10:43:47.43ID:+vznLLf60
それは時代遅れの化石言語Cのせい
661デフォルトの名無しさん (ワッチョイ cf80-gYkF)
垢版 |
2018/08/04(土) 11:02:01.24ID:CpwGeL+S0
やはりな
Cはオレみたいにエレガントなコード書けるヤツでないと使えない
オレみたいなプロフェッショナルでないとムリ

Cは言語規格が非常にシンプルで非常に優れている言語だからな
シンプルなせいで敷居も低い
そのせいでアホでも酷いコードが簡単に書けてしまう
非常に根が深い問題といっていい
2018/08/04(土) 11:09:25.30ID:tEqwX/6gd
C11で開発してる人はいる?
2018/08/04(土) 11:14:47.57ID:/DYnKp4Pa
fp = fopen(filen, "rb+");
if(fp == null) {
return 0;
}
func(fpやら処理する価);
fclose(fp);

ファイルオープンに失敗したらもどるし
関数呼び出しの結果がどうだろうと解放されるしgoto使う前にint func(void){return 0;}でわければいい
2018/08/04(土) 12:43:49.90ID:2dadGiC9d
小さな機能の関数でgotoを避ける為に関数を分けるとか
2018/08/04(土) 12:44:20.27ID:2dadGiC9d
まさしく宗教ですね
2018/08/04(土) 12:51:53.82ID:6FzZ70UGa
goto使った方が見易いコードがとかいって関数分けた方が見やすいし戻る場所も関数呼んだ場所で分かりやすい

逆にgotoじゃなきゃ絶対駄目って宗教にはいってるんだろうか
667デフォルトの名無しさん (ワッチョイ cf80-gYkF)
垢版 |
2018/08/04(土) 13:03:02.54ID:CpwGeL+S0
gotoをさけるためじゃない
適切な初期化と適切な後始末ができる機能を提供している

しかもオレが書いたコードは
全部眺めなくても初期化のしかたと後始末の仕方が分かるエレガントなコードだからな
コードの見通しもよくなる

int void func() {

 t_aho_t* pt_aho;
 int i_ret;

 // 初期化処理
 if ((i_ret = 初期化(&pt_aho)) < 0) {return i_ret; }

 if (read(pt_aho->fd, p_mem, 1) < 0) { 後始末(pt_aho); return ERROR_INIT_AHO4; }
 if (fprintf(pt_aho->fd, "%c\n", *p_mem) < 0) { 後始末(pt_aho); return ERROR_INIT_AHO5; }

 // 終了
 後始末(pt_aho)
}

なんの処理をやってるコードかすぐに分かる
初期化処理と後始末ばっかりが何行も続くコードなんかだれも読みたくないからな
2018/08/04(土) 13:06:33.93ID:F7vd0ILk0
何年か前、一連のファイル群を読み、内容の検査をするプログラム書いたことがあった
複数Diskに跨がって処理を行っていたが、このDiskの検査はここで打ち切っていいとなったとき
三重ループから一気に抜けるのにgoto使ったな
goto next_disk;
使わないとそうしないと何分も時間を無駄にすることになるのでね
禁止しても良いけど、処理時間が掛かります、我慢してくれますか?ってことだな
2018/08/04(土) 13:17:16.66ID:uWq17v08a
三十ループなんてやるのだったら間違い無く関数わけする
しかし、関数分けたら処理hourが時間がかかるって
コンパイラが最適化してくれるだろうに
2018/08/04(土) 14:02:50.07ID:AH7fLvgn0
>>651
まあ俺もこれかな

>>667
正常終了時に戻り値が不定になるコード書いててエレガントとか言われてもなぁ w
2018/08/04(土) 14:16:48.41ID:2dadGiC9d
>>669
小さな小さな3重ループでも
3重ループという理由だけで
わざわざ関数を分けるの?

関数を分けるべきか分けないべきかは
内容に大きく依存する

分けないべきな時に
gotoの使い方を知らないという理由で
わざわざ複雑にするのがアホだ
672デフォルトの名無しさん (ワッチョイ cf80-gYkF)
垢版 |
2018/08/04(土) 14:34:30.00ID:CpwGeL+S0
むしろそんなループは関数で分けるほうが適切だからな
だいたいそういうソースは知恵遅れしか追えないようなコードになってる
そして知恵遅れもどういう動きしてるか分からないようなコードになってる
2018/08/04(土) 14:34:45.90ID:2dadGiC9d
リソースの確保と解放
リソースが単一関数内でしか使わないのであれば
その関数内で1:1で行うのが一番シンプルで分かりやすくコストも低い
gotoを使えばそれがシンプルに実現出来る場合もある

gotoを使わなくても出来る
そりゃそうでしょうが
問題は出来る出来ないじゃない

コード量、パフォーマンス、使用リソース、
分かりやすさ、シンプルさ、安全性、
メンテナンス性、

>>642のような重いコードが良い場合もあれば
>>651のような軽いコードが良い場合もある

色々な方法を臨機応変に使えるのが良い
674デフォルトの名無しさん (ワッチョイ cf80-gYkF)
垢版 |
2018/08/04(土) 14:49:05.09ID:CpwGeL+S0
だいたいこの程度の制御文で十分なハズだからな
バカはいちいちgoto使って追えないようなコードにするワケ

int ahoaho_exam() {
 for (int i = 0; i_disk_count; ++i) {
  switch (i_ret = ahoaho_exam_disk()) {
   case SKIP_ALL: return SKIP_ALL;
   case SKIP_DISK: continue;
   default: break;
  }
  ・・・(ここでもSKIP_ALLが返却かもしれない)
 }
 return 0;
}
int ahoaho_exam_disk() {
 for (int i = 0; i_dir_count; ++i) {
  switch (i_ret = ahoaho_exam_dir()) {
   case SKIP_ALL: return SKIP_ALL;
   case SKIP_DISK: return SKIP_DISK;
   case SKIP_DIR: continue;
   default: break;
  }
  ・・・(ここでもSKIP_ALL、SKIP_DISKが返却かもしれない)
 }
 return 0;
}
675デフォルトの名無しさん (ワッチョイ cf80-gYkF)
垢版 |
2018/08/04(土) 14:50:14.72ID:CpwGeL+S0
(続き)
int ahoaho_exam_dir() {
 for (int i = 0; i_file_count; ++i) {
  switch (i_ret = ahoaho_exam_file()) {
   case SKIP_ALL: return SKIP_ALL;
   case SKIP_DISK: return SKIP_DISK;
   case SKIP_DIR: return SKIP_DIR;
   case SKIP_FILE: continue;
   default: break;
  }
  ・・・(ここでもSKIP_ALL、SKIP_DISK、SKIP_DISKが返却かもしれない)
 }
 return 0;
}

int ahoaho_exam_file() {
 ・・・(ここでもSKIP_ALL、SKIP_DISK、SKIP_DISK、SKIP_FILEが返却かもしれない)
 return 0;
}

簡単にループなんか制御できる
こんなもんにgoto使うとか愚の骨頂
676デフォルトの名無しさん (ワッチョイ cf80-gYkF)
垢版 |
2018/08/04(土) 15:17:23.18ID:CpwGeL+S0
まず処理を小さな単位に分割する能力がない

初期化処理は初期化処理
終了処理は終了処理

基本的にgoto濫用するヤツは知能に著しい欠陥がある傾向がある
複雑な問題を簡単な単純な問題に分割する能力もない
複雑な問題を簡単な問題へと段階的に詳細化していく能力もない

オツムに致命的な欠陥があるとそうなるワケ
677デフォルトの名無しさん (ワッチョイ a39d-10BI)
垢版 |
2018/08/04(土) 16:00:07.62ID:rXNKJXgT0
goto くらいで混乱するような頭が不思議でならない。
gotoもlongjmpも普通に使う。
まあでも一つの関数はA4一枚くらいにはまとめて書くようには言っているが、1mくらい
の長いコードを書くやつもいるし俺も2mくらいなら十分ついていける。
2018/08/04(土) 16:03:48.29ID:d5qEm5S/0
50行で辛い
100行以上は無理
2018/08/04(土) 16:06:56.87ID:F7vd0ILk0
>>677
昔、ソースが2万行、各関数が200行〜400行と言うプログラムをメンテしてた
しかも、それぞれがグローバル変数とスタティック変数を使いまくり
一つの関数がそのスタティック変数の値で自在に動きが変わるという
680デフォルトの名無しさん (ワッチョイ cf80-gYkF)
垢版 |
2018/08/04(土) 16:20:59.53ID:CpwGeL+S0
あの程度の初期化処理で重いとか軽いとかいってる時点で
もうね知能の程度がしれるワケ

そんなミジンコ未満の検出できないようなレベルの差よりな
オマエが書いたクソコードのボトルネックになってるアルゴリズムを見直したほうがいいわ
なにがボトルネックになってるか検証する能力がまずないからな

前のクイックセレクトのときも知恵遅れの程度がしれたからな
知恵遅れは目的に応じた適切なアルゴリズムの選択もできない
知恵遅れにテキトーにコード書かかせるとだいたいガッカリするような結果になる
2018/08/04(土) 16:33:39.62ID:WQN/l48RM
gotoの有無なんかより関数の行数、変数の数、ネストの方を気にして欲しいわ
プログラムなんぞ如何にエントロピー抑えるかだけだからな
2018/08/04(土) 16:40:55.55ID:eIBb6soGM
半角カナ使う奴がドヤッてて笑うわ
683デフォルトの名無しさん (ワッチョイ a39f-Xflc)
垢版 |
2018/08/04(土) 18:18:57.70ID:2zclIjyW0
>>651
変数が多くなって途中で出るエラーが増えた時に goto の飛び先も同時に増えるな。

まあ、混乱するぐらい増えたら既に何か書き方がおかしくなっているような気もするがw
684デフォルトの名無しさん (ワッチョイ cf80-gYkF)
垢版 |
2018/08/04(土) 18:40:31.54ID:CpwGeL+S0
例えば、このコード

https://ideone.com/SGwLK0

 turnaround time ::= 0.0290 sec
 turnaround time ::= 3.9219 sec

この差はなにに起因してるか
この差を解消する必要があるならどうすればいいか
そういったことを検証や分析できないからダメなワケ

もうねレスしてることがトンチンカンすぎるワケ
2018/08/04(土) 19:22:28.12ID:2dadGiC9d
遅いコードしか書けないヤツが何言っても説得力ゼロ
2018/08/04(土) 19:30:28.40ID:YA1hWK5Y0
gotoを宗教とか言ってるバカに説得力なんてあったのかw
2018/08/04(土) 19:34:25.24ID:2dadGiC9d
>>680
クイックセレクトwww
わざわざ自分で恥を広めなくても
688デフォルトの名無しさん (ワッチョイ cf80-gYkF)
垢版 |
2018/08/04(土) 19:34:56.79ID:CpwGeL+S0
知恵遅れの負けず嫌いは異常だからな
知恵遅れは知恵遅れであることを自覚できない
だから知恵遅れは知恵遅れのまま
一生知恵遅れのまま

頭悪い低学歴底辺ほど自尊心だけは強い
もともとなにもないからっぽだからな
2018/08/04(土) 19:36:15.87ID:2dadGiC9d
明らかに適さないアルゴリズムを
「クイックセレクトを選ぶのが正解」
とか言い出したアホ
まだこの発言が正しいと思ってるわけじゃないよなwww
2018/08/04(土) 19:38:00.61ID:2dadGiC9d
速度が要求される低レベル処理に対して
遅い関数を使うアホ
2018/08/04(土) 19:38:10.32ID:YA1hWK5Y0
形容詞に比較をつけない世間知らずが人様つかまえてアホとかもうあいた口が塞がらない
692デフォルトの名無しさん (ワッチョイ cf80-gYkF)
垢版 |
2018/08/04(土) 19:38:18.83ID:CpwGeL+S0
クイックソートとかいってた池沼がなんかいってるわ
2018/08/04(土) 19:38:36.44ID:2dadGiC9d
おまけに学歴コンプ
2018/08/04(土) 19:40:09.36ID:2dadGiC9d
クイックソートを使うのはアホ
と最初に書き込んだのは私だけど

自分以外は全て同一人物だと思ってるのか?
2018/08/04(土) 19:42:04.94ID:2dadGiC9d
おれの書き込みを読めば
>>686 が勘違いということがわかる
2018/08/04(土) 19:43:24.56ID:YA1hWK5Y0
宗教だからね
教祖様が勘違いということにしたければ
いくらでもそういうことにできる

つきあってらんねー
2018/08/04(土) 19:43:52.39ID:2dadGiC9d
>>683
エラーが増えても修正は2箇所だけ
半角君のコードは何箇所?
2018/08/04(土) 19:48:39.81ID:YA1hWK5Y0
>>688
自己紹介乙

ここはム板
技術的な話に全く無用のアホワード連発して
何がしたい
699デフォルトの名無しさん (ワッチョイ cf80-gYkF)
垢版 |
2018/08/04(土) 19:57:51.70ID:CpwGeL+S0
https://ideone.com/GZWy0t
別の知恵遅れがお勧めしてた方法では(総なめ)
1000万件いかないうちに上位0.1%ですらWebシミュレータが拒否するほど酷い結果になってる
turnaround time ::= 4.8076 sec
※ 5秒越えたら実行されない

オレのエレガントなコードでは知恵遅れが最悪のケースといってたデータでも同じ条件も余裕
https://ideone.com/SGwLK0
turnaround time ::= 0.0534 sec
turnaround time ::= 0.0126 sec
700デフォルトの名無しさん (ワッチョイ cf80-gYkF)
垢版 |
2018/08/04(土) 20:01:49.72ID:CpwGeL+S0
やっぱりなPGなんか日本では低学歴しかやってない
2018/08/04(土) 20:03:50.94ID:YA1hWK5Y0
自己紹介乙

類は友を呼ぶ
つきあってる範囲がそういうこと
というだけ
702デフォルトの名無しさん (ワッチョイ cf80-gYkF)
垢版 |
2018/08/04(土) 20:03:55.23ID:CpwGeL+S0
低学歴ですと自白してるヤツが何人かいるわ
わかりやすい
2018/08/04(土) 20:04:35.09ID:YA1hWK5Y0
おまえだよ、おまえ
704デフォルトの名無しさん (ワッチョイ cf80-gYkF)
垢版 |
2018/08/04(土) 20:05:02.83ID:CpwGeL+S0
よほど低学歴なのが悔しいらしいな
残念なことに低学歴なのはレスからすぐにわかっちゃうワケ

バレてないと思ってるわけか。。。
2018/08/04(土) 20:06:23.48ID:YA1hWK5Y0
高学歴が1人でもいたら
おまえの主張は破綻する

つーかセンズリこき野郎はwinnyくらい使ってるだろ?
2018/08/04(土) 20:13:46.86ID:QBtHPmTG0
コンストラクタ/デストラクタの機構があれば楽できるのにな と思うことはある
2018/08/04(土) 20:15:59.70ID:2dadGiC9d
>>699
トップ3個だぞ

あと最悪データの意味わかる?
なんで最悪データの方が速い?
708デフォルトの名無しさん (ワッチョイ cf80-gYkF)
垢版 |
2018/08/04(土) 20:18:25.93ID:CpwGeL+S0
そもそもクイックセレクトがどんなアルゴリズムかすら分かってない
だから最悪な条件がどういう状態をさしてるのか分かってすらない
まあお話にならないわ

まともな教育を受けてないヤツと
話がかみあうわけがない
2018/08/04(土) 20:19:50.04ID:YA1hWK5Y0
低学歴→まともな教育受けてない
ぶははは
710デフォルトの名無しさん (ワッチョイ cf80-gYkF)
垢版 |
2018/08/04(土) 20:22:49.07ID:CpwGeL+S0
低学歴じゃなかったら
最低でも最悪の条件が分かってる上で
議論に参加するからな

そんなことも分からずに低学歴でもテキトーな書き込めるのが2ちゃんねるだからな
バレてないと思ってるらしいが低学歴とニートというのはレスからすぐにバレる
残念なことにな
2018/08/04(土) 20:23:44.55ID:2dadGiC9d
>>708
お前の言う最悪な条件の方が4倍以上速い
おまえの最悪な条件の定義は何だ?
712デフォルトの名無しさん (ワッチョイ cf80-gYkF)
垢版 |
2018/08/04(土) 20:25:19.01ID:CpwGeL+S0
定義?
なにいってんのコイツ

>>684 をみて
オレがなにをいってるか
理解できないしな

ココが知恵遅れの限界
2018/08/04(土) 20:35:20.71ID:jfaT+4IfM
>>706
だね
C++ならスマートポインタ、C#ならusingでもっと楽にかつ確実にやれるのになにアホな言い合いしてるんだろうって感じ
2018/08/04(土) 21:07:34.69ID:YA1hWK5Y0
低学歴とニートがすぐわかるなら具体的に名指ししてみな
誰にでも再検証できるように
つまり工学者として当たり前の様式で
2018/08/04(土) 21:27:00.60ID:RenjJImm0
quickse;ectの件(ELEMS=20,TOPSS=10)で試すとp2の結果が違うのだが
初期値: 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0
10.0 9.0 8.0 7.0 6.0 5.0 4.0 3.0 2.0 1.0

結果:
>>684: 10.0 9.0 9.0 8.0 8.0 7.0 7.0 6.0 6.0 5.0
>>699: 10.0 9.0 8.0 9.0 8.0 7.0 6.0 7.0 6.0 5.0
716デフォルトの名無しさん (ワッチョイ cf80-gYkF)
垢版 |
2018/08/04(土) 21:30:24.21ID:CpwGeL+S0
両方とも選択された要素の順序は保証されてない
そういうアルゴリズムだ

ソートすれば同じ結果になる
上位の抽出結果のソートなんか一瞬でおわる
2018/08/04(土) 21:35:47.02ID:mQQzn2Q+0
出題は上位3個で要素数が可変
718デフォルトの名無しさん (ワッチョイ a39d-10BI)
垢版 |
2018/08/04(土) 21:43:01.41ID:rXNKJXgT0
Cが優れているのでC++なんて全く必要性を感じなかったが、gotoで頭が混乱する
とか1mのコードくらいで頭が混乱するような人はC++をぜひ使ってみるといいと思う。
最近C++を使ってみて驚いた。Cと何ら変わらない低レベルコードを吐き出す
低レベル言語のくせに機能的には100倍も優れている。
その優れた機能を一切使わなくてもいいが、namespaceやクラスをパッケージ化の
機能としてだけつかってもCよりは随分楽に管理できる。
Cの場合はパッケージにして頭の悪い人でも分かりやすくするにはサブルーチンを使う
以外に方法がない。しかしC++はnamespaceでスコープを自由に制限できてパッケージ化
ができる。しかも50行程度に小さく刻んでもコードには何の影響も与えない。
2018/08/04(土) 21:45:18.43ID:mQQzn2Q+0
https://ideone.com/tDEfnI
0.01423812秒

半角君のコードの4倍くらいの速さ
2018/08/04(土) 21:47:30.05ID:mQQzn2Q+0
高速
コードサイズ小
1回スキャン
非破壊
721デフォルトの名無しさん (ワッチョイ a39d-10BI)
垢版 |
2018/08/04(土) 21:50:33.63ID:rXNKJXgT0
>>679
そうだよ。昔の人はそれでも平気だったんだよ。昔の人は賢かった。まあわが社では
いまでもそれは普通にやっている。
わが社の社員は現代人だから頭は変わらないと思うが特別根気があるのだろう。
だから賢くなる。つまり昔の人も頭が良かったというよりも根気があったのだろうと思う。
2018/08/04(土) 21:50:37.85ID:mQQzn2Q+0
半角君のコード

低速 (最悪値は特に)
コードサイズ大
複数回スキャン
破壊
723デフォルトの名無しさん (ワッチョイ cf80-gYkF)
垢版 |
2018/08/04(土) 21:53:40.18ID:CpwGeL+S0
オレのエレガントなコードに対して
最悪値になるデータ作ってみ

1000万件中上位3件程度しか抽出できないコード書いても意味ないからな
お題どおりなら3%は抽出できないといけない

上位30万件は抽出できないとな
2018/08/04(土) 21:56:59.42ID:mQQzn2Q+0
あ、なんか間違った
まあ時間は変わらんでしょう
725デフォルトの名無しさん (ワッチョイ cf80-gYkF)
垢版 |
2018/08/04(土) 21:58:48.83ID:CpwGeL+S0
https://ideone.com/uQbHYf

オレのエレガントなコードでは
上位30万件でもこの速さ

turnaround time ::= 0.0534 sec
turnaround time ::= 0.0126 sec


オツムが弱いのがコードではまず実現は不可能
まず処理が終了しない
726デフォルトの名無しさん (ワッチョイ cf80-gYkF)
垢版 |
2018/08/04(土) 22:01:03.23ID:CpwGeL+S0
なんか更新されてないわ

https://ideone.com/TbWDDb

turnaround time ::= 0.1077 sec
turnaround time ::= 0.0172 sec

オレのエレガントなコードにはまず勝てない
2018/08/04(土) 22:02:32.21ID:mQQzn2Q+0
「最悪値」って確率は関係ないから
文字通り「最悪値」

勝手に条件を変えてwww
出題は上位3個
出題後の書き込みもずっと上位3個という前提
728デフォルトの名無しさん (ワッチョイ cf80-gYkF)
垢版 |
2018/08/04(土) 22:03:24.81ID:CpwGeL+S0
ランダムな値使ってるのに
まず最悪値になりようがない

だからな最悪値になるデータ作ってみろよ
2018/08/04(土) 22:05:26.79ID:mQQzn2Q+0
修正したら速くなっちゃった
https://ideone.com/yWEbrv

0.01262593秒
730デフォルトの名無しさん (ワッチョイ cf80-gYkF)
垢版 |
2018/08/04(土) 22:06:09.00ID:CpwGeL+S0
知恵遅れはランダムの値といってるから
入力値に疑似乱数使ってると思ってるかもしれないが
そもそもピボットの選択がランダムという意味だからな
2018/08/04(土) 22:06:54.29ID:mQQzn2Q+0
「最悪値」って確率は関係ないから
文字通り「最悪値」
732デフォルトの名無しさん (ワッチョイ cf80-gYkF)
垢版 |
2018/08/04(土) 22:07:29.19ID:CpwGeL+S0
だからな30万件抽出できるコード書いてみ
2018/08/04(土) 22:09:41.04ID:mQQzn2Q+0
--普通の人のコード--
高速
コードサイズ小
1回スキャン
非破壊

--半角君のコード--
低速 (典型例で4倍の時間、最悪値は特にひどい)
コードサイズ大
複数回スキャン
破壊
734デフォルトの名無しさん (ワッチョイ cf80-gYkF)
垢版 |
2018/08/04(土) 22:12:28.07ID:CpwGeL+S0
0.01秒オーダーが4倍とか議論不要なレベルだからな

そもそも知恵遅れが書いたコードは条件が少しかわるだけで
待ってても結果が戻ってこないからな
2018/08/04(土) 22:13:07.54ID:+vznLLf60
データふやして比較しよう
2018/08/04(土) 22:15:28.18ID:mQQzn2Q+0
>>734
恥の上塗りwww
お前の負けwww
737デフォルトの名無しさん (ワッチョイ cf80-gYkF)
垢版 |
2018/08/04(土) 22:16:12.21ID:CpwGeL+S0
知恵遅れの精神的勝利きたわ。。。
2018/08/04(土) 22:45:56.56ID:+Ac7xD+T0
半角また負けたのか…
739デフォルトの名無しさん (ワッチョイ cf80-gYkF)
垢版 |
2018/08/04(土) 22:47:55.10ID:CpwGeL+S0
オレのエレガントなコードには勝てない
要素数,抽出数,エレガント(sec),アホ(sec)
10000,300,0.0000,0.0040
20000,600,0.0000,0.0150
30000,900,0.0000,0.0330
40000,1200,0.0000,0.0590
50000,1500,0.0000,0.0920
60000,1800,0.0010,0.1330
70000,2100,0.0000,0.1760
80000,2400,0.0010,0.2300
90000,2700,0.0010,0.2920
100000,3000,0.0020,0.3620
110000,3300,0.0020,0.4360
120000,3600,0.0020,0.5300
130000,3900,0.0020,0.6080
140000,4200,0.0020,0.7030
150000,4500,0.0030,0.8170
160000,4800,0.0020,0.9260
170000,5100,0.0020,1.0470
180000,5400,0.0020,1.1740
190000,5700,0.0030,1.3080
200000,6000,0.0020,1.4490
210000,6300,0.0020,1.5970
220000,6600,0.0020,1.7690
230000,6900,0.0020,1.9170
240000,7200,0.0030,2.0870
250000,7500,0.0030,2.2660
260000,7800,0.0050,2.4590
270000,8100,0.0040,2.6380
280000,8400,0.0020,2.8350
290000,8700,0.0010,3.0500
300000,9000,0.0020,3.2750
740デフォルトの名無しさん (ワッチョイ cf80-gYkF)
垢版 |
2018/08/04(土) 23:17:38.19ID:CpwGeL+S0
やっと処理が終わった
アホのコードのせいでCPUが熱くなったわ
数10万件レベルでコレだからな

↓処理結果
http://fast-uploader.com/file/7088947692690/

一部抜粋
950000,28500,0.0140,33.5910
960000,28800,0.0100,33.4880
970000,29100,0.0190,34.1070
980000,29400,0.0080,34.8320
990000,29700,0.0100,35.4970
1000000,30000,0.0080,36.5600

↓グラフ
https://i.imgur.com/nr9h0pH.png

知恵遅れ息してない
2018/08/04(土) 23:21:13.53ID:F7vd0ILk0
いつまでこの話続けるの?
専用スレ立てたら?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況