はてなキーワード: 擬似コードとは
ビビるぐらい適当に回答した感があったので補足を、言語を習得するには向き不向きがあるので、最低限のプログラミングセンスは必要です。
このあたりはやってみて確認してください。ドキュメントを読んで思った処理が書けるならプログラミングセンスとしては十分です。
もし働くって観点で、ステップアップを望むなら、数学力が必要になります。もし理系出身で数学的センスの下地があるなら、数学科に行く必要はないです。
アルゴリズムの数式を理解できれば良いので最低限は代数と行列計算です。その他は特化した数学を都度身につけていけばいいです。
言語習得と擬似コードやフローチャート、英語など、必要なものはほかにもあるのでバランス良くね。
言語の勉強も入門レベルを終えたら、本やブログなどに頼るのではなくて、APIドキュメントを読んで勉強するようにしてください。
"sudo code"
いや、そもそも"sudo code"で検索してるんだからそれが出てくるだろ。。。
sudo codeに別の意味があるわけでもないんだから。。。
それくらいは理解しようよ。。。
少なくとも上がってるsudo codeで検索した上位陣の方ではほとんどがpseudoだよね?的な指摘を受けてる感じだが。
確かにお前みたいに英語が出来ないバカが間違えてる奴が多いのか、スルーして"そのpseudocodeは。。。"みたいに言い直してる人もいるが。
それが、結構いるんだろ、って話って言ってるけど、それ、
知らんがな。
pseudoをsuu dooって読んでて、そのままsudoって書く人結構いるんだってぐらいの話だろ?
"sudo code"
あとオレは元増田じゃねーって。
えーと、よく知らんのだが、
アスペな増田を無理やりにでもその後の発言から解釈してあげようとすると、
どこか英語のフォーラムで、明らかに擬似コードの話をしている所で、
"sudo code"と表していた、ということでよろしいか?
とりあえず、そう書いてあるページのリンクの1つでも貼って確かにお前の言うとおりなら皆納得すると思うよ。
そうでない限りお前は恥ずかしいだけだよ。
きちんとリンク貼れば皆が恥ずかしい思いするからお前は上から笑えるわけだし、見たページを出せば良いだけだから簡単でしょ?
ちなみにお前の最初の論理が意味分からんってのがなんでかと説明すると、
あくまで"sudo"というコマンドがあって、それを"pesudo"と読む人がいる、っていうだけで、
決して"pseudo"を"sudo" (soo-doo)の様に読む、という話だからだぞ?
"sudo"コマンドってのが他のユーザーに成り代わってコマンドを実行するので、pseudoユーザーとしてのコマンド、的な意味にも取れるから
語源をそれだ!と思ってたりする人もいるってこと。で、語源のまま発音してる人も居るってこと。
sudoがsuper user doとする人もいるけど、一番強そうなのはsuコマンドも含めて"switch user" doみたいだけど(super user以外にもなれるので)。
1. そうなって欲しいこと・願望・コンセプトを得る。得ようと思っても得られない。ここは偶然起こること。
2. 何をするか・What・思い付きを挙げる。ブレインストーミング。
3. どうやるか・How・方法を考える。「できそう」という段階まで。
4. 必要なもの・使える技術・前例を集める。他人を説得できるようになる。
5. 機能・クラスといった実装上の分割、役割分担など行動に移すための細分化と割り当てを行なう。
7. やること別に「そのためにやらなければならないこと」を実行順通りに書き下す。擬似言語(擬似コード)
8. 擬似言語→設計→擬似言語にフィードバック、設計と擬似言語→実装
擬似コードを書くならアサーションも一緒に書く。不要な用語や用語の重複があるとうまくアサーションを書けない(かみ合わない)。用語の最適化は変数やコードの最適化でもある。
事前条件→事後条件をアサーションで表明、事後条件→他の事前条件へ連鎖。契約によるプログラミング(契約プログラミング)
擬似言語でのアサーションはそのままプログラムコードでもアサーションになるか、テストコードになるか、メソッド|関数|手続きのパラメーター・戻り値コメントになる。アサーションは「実行可能なコメント」(Executable Comments)とも呼ばれている。
RIGHT:[[:t/Prog]]
----
例えば下記の擬似コード
i = 1; while( i & 7 ) { i++; }
勘弁して。いや、わかるよ。言いたいことはさ。でも俺こういう書き方慣れてないから脳内で素早く2進数変換できないの。
いや単なるイディオムとして覚えてればいい話ってのはごもっともだけど普段こういう書き方しないからパッと出てこないんだよね。
一応これがいまいちわからない人のために説明すると
i = 1; while( i < 8 ) { i++; }
ってことだから。(厳密に言えば少し違うが、ここでの話はこれで良い)
なんちゅーかさ。条件が10以下とかに変わるだけで破綻するしさ。
ってかもう今時のコンパイラならコレくらいの変換勝手にやってくれるんじゃねーの?(さすがにまだまだ?この辺疎い)
そうであれば速度的は変わらないわけで単純に可読性&拡張性低下させてるだけの存在になるよね。
まあでもこれは基本的なことなんだけど、自分では書かなくても読めるようにはならないといけないってのは真なので文句を言ってるだけじゃ何も変わらない。
もっともっと書いて書いて書きまくろう。
上のような処理は各ビットが全部立ってる場合に有効になるので算出方法としては
(1 << x) - 1
となる。
つまり2の累乗から1引くと各ビットが立った数値となるわけなのです
10進数 2進数 1 00000001 3 00000011 7 00000111 15 00001111 31 00011111 63 00111111 127 01111111 :
ビットが全部立ってる数値を&で評価すると、その値を一つ超える数値、すなわち2の倍数が来るまでは常に真となるわけですね。
先ほどの処理で言うならばこういうことになります。
i & 7 = x (1)00000001 & (7)00000111 = 00000001 (2)00000010 & (7)00000111 = 00000010 (3)00000011 & (7)00000111 = 00000011 (4)00000100 & (7)00000111 = 00000100 (5)00000101 & (7)00000111 = 00000101 (6)00000110 & (7)00000111 = 00000110 (7)00000111 & (7)00000111 = 00000111 (8)00001000 & (7)00000111 = 00000000
という感じでiが8になった時点で7との論理演算の結果が偽となるため、ループが終了します。
正直スクリプト系言語から入るとこういう低レベルな計算を行うことは殆どないし、逆にこういうコードを書いてると先輩から怒られます。
なので自分で学ばない限りなかなかこれらのコードを直に理解できる状態にはならないので注意が必要です。
コードというのは「書けなくても、書かなくても、読めなければならない」これ鉄則。