お前らがニートの俺にC言語を1から丁寧にゴミ虫でもわかるくらいわかりやすく教えて最終的にはオリジナルウェブブラウザを作るところまで行くスレ ID:RF8uLsXx

219以下、名無しにかわりましてVIPがお送りします:2015/11/13(金) 13:03:40.19 ID:RF8uLsXx

>>202-206
メモリの実際の操作はコンパイルされた機械語とOSの共同作業で成り立ってる
メモリ周りはそれだけで一冊本がかけてしまう位なので
初めのうちはあまり深く立ち入らないのが吉

>abcという名前を記録した場所と
>abcの内容を保存する場所が別にあるわけで
確かにその通りで変数に「アドレス(住所)」があるとすれば、
それらを見渡せる「地図」に相当するものも存在する

とあるプログラムが起動されると、OSはそれをメモリ上に展開して、そこからプログラムが実行されるんだが、
展開された中に「データセグメント」なる領域があって、それが変数の名前・型・アドレスを記録している

220以下、名無しにかわりましてVIPがお送りします:2015/11/13(金) 14:05:08.45 ID:RF8uLsXx

っと最後の二行は全然違うな、忘れてくれ

>>205の通り変数の名前と言うものは実行形式にした時に消去されてアドレスそのものになる
だけどそのまま変数を格納するメモリの場所が固定されてしまうと
他のプログラムでそこを使えなくなってしまうため、変数名はただのアドレスでなく「仮想アドレス」に変換されている

データの本当の場所「物理アドレス」はOSが知っていて、プログラムとメモリ装置を仲介している

225以下、名無しにかわりましてVIPがお送りします:2015/11/13(金) 15:39:32.69 ID:RF8uLsXx

素晴らしい出来
これをいじりながら構造化していこうぜ

実はc言語は2次元配列を使える
つまりcharも配列に出来る
するとこうなる(10行目に注目)
http://ideone.com/qCJKZ6

228以下、名無しにかわりましてVIPがお送りします:2015/11/13(金) 16:08:10.03 ID:RF8uLsXx

>>226
>[5]は箱が5個で[16]がそこに入る文字数って事で良いのかな
yes
>全てでinptが使われているようだが
toi1-toi5がそれぞれ一回ずつしか使われてないのでまとめちゃっただけよ
もちろんinpt[5][16]とすればtoi[5][16]の各要素と対応させられるからこれも非常に便利

230以下、名無しにかわりましてVIPがお送りします:2015/11/13(金) 16:16:12.86 ID:RF8uLsXx

おもしろいのはこれからよ
入れ子を嫌がってたけど
変数・関数やループ・breakなどを使えば
このゲームをよりスッキリ書き換えることが出来る

俺もやってみるけど是非>>1も挑戦してみてくれ
本読むより相当勉強になる

231以下、名無しにかわりましてVIPがお送りします:2015/11/13(金) 16:33:58.86 ID:RF8uLsXx

テトリスを作ろう!
www3.nit.ac.jp/~tamura/pdf/tetris.pdf

c++への移行を視野に入れてるとも聞いたし、
当面の目標はこれが良いと思うんだが、
いきなり取り組むと重すぎて体力が持たない可能性もある

しばらくは今みたいな100行位の簡単なCUIゲーム→改良
を続けて慣れるのが無難だとは思う

238以下、名無しにかわりましてVIPがお送りします:2015/11/13(金) 19:54:29.18 ID:RF8uLsXx

そういった「辛さ」を軽減するためにプログラミングには
いろんな手法だったり機能が備わってたりする

例えば統合開発環境はデバッグ機能が充実してて例えばステップ実行で順々に
プログラムを動かして動作を確認出来たり
各種ライブラリがコーディングの手間をイッキに解消してくれたりする

今は一から作ってる段階だから何するにしても正直キツイ
でも練習には一番よ

239以下、名無しにかわりましてVIPがお送りします:2015/11/13(金) 20:12:57.15 ID:RF8uLsXx

途中だがhttp://ideone.com/lFougI
出題の機能を分離して
問題数の拡張に対応できるようにしてみた

243以下、名無しにかわりましてVIPがお送りします:2015/11/13(金) 20:35:10.30 ID:RF8uLsXx

>>241
うーん分からん
nextはlinux使い結構多いみたいだけれど

244以下、名無しにかわりましてVIPがお送りします:2015/11/13(金) 21:02:51.03 ID:RF8uLsXx

>>239
エンディングの分岐にミスがあったので修正

247以下、名無しにかわりましてVIPがお送りします:2015/11/13(金) 21:20:52.84 ID:RF8uLsXx

int youso=sizeof(toi)/sizeof(toi[0]);
toiの要素数を数えただけやで
つまりint youso=5;と書いたのと何も変わらん

ただtoi[5][16]は2次元配列なのでsizeofに関する仕様がちょっと複雑
sizeof(toi)/sizeof(toi[0])なら5が、
sizeof(toi[0])/sizeof(toi[0][0])なら16が出てくる

わざわざこうしたのは後で問題を増やしたい時があるかも知れんからな
4行目char toi[5][16]={"int", "double", "char", "printf", "break"};を
char toi[8][16]={"int", "double", "char", "printf", "break", "for", "switch", "return"};に書き換えれば
そのまま動くハズになってる

250以下、名無しにかわりましてVIPがお送りします:2015/11/13(金) 22:00:50.84 ID:RF8uLsXx

>>249
正直今回はコードを書き換えたメリットなんて全くないんだけれど
これで終わりって訳じゃない

書き換え方は他にいくらでもあるし
6800円目指して追加するべき機能はいくらでもある(出題をランダムに・時間制限をつける他)
実装するうちにC言語の新しい機能が必要になるときもある
自分で作ったコードが一番の教材だと思うよ


このIDをNGリストに追加する

今後このIDの書き込みやスレッドを表示したくない場合、以下のボタンをクリックしてください。
NGリストに追加

このスレッドは過去ログです。