無償のプログラミング入門講座CS50xをやってみる Week4
全体(13h)
この講座は0週目からなので、始まって5週が経ちました。月日が経つのは早いですね。今週は仕事でかなりバタバタしていたため平日は全然進めることが出来ず、週末にグイッと10.5時間ほどまとめて作業しました。食事以外はずっとCloud9に向き合っていたので、いつもパソコンに向かって仕事しているとはいえ、さすがにクラクラします。
土日が過酷になるので、来週はもうちょっと平日に作業を進めたい所存。
レクチャー動画(2.5h)
CS50.hで読み込まれている関数は、ポインタについて理解しなくてもC言語でプログラミングできるようにするための補助輪だったのだ。という衝撃の告白から始まる動画。といっても課題を解くために検索して色々わかってたけどね。「malloc」とか「ヒープ領域」、「stuck overflow」などの用語についてもなんとなくわかった。再帰関数で「Stuck overflow」を起こすのはわかりやすかった。
Lab4(1h)
wavファイルの音量を変更する問題。wavファイルは各オーディオサンプルに2をかけてやると音量が倍に、0.5をかけてやると音量が半分になる。非常にシンプルなファイル形式なのでこういったことが出来る。
動画を見てから解くまでに1週間あいてしまったので、「note」の見直しなどを行ったので、回答まで時間がかかった。
この問題もほぼ完成したソースコードが提供されているので9行ほど追記すればコードは完成。ただ、ポインタやビット等の、レクチャー動画で出てきた低レイヤーな内容もある程度理解していないと追記できないので、教育的に非常に良い問題だと感じた。「malloc」は使う必要がないので使わなかったが、利用が強制されていると、なお理解が進んでよかった気がする。
Problem Set 4 ‐ Filter(6h)
ビットマップファイルを読み込んでフィルタをかけたファイルをアウトプットする問題。プログラミングに自信がある場合の問題にはエッジの検出が追加されています。
画像に変更を加えるプログラムを作るのは結構面白かったですが、すごい時間がかかりました。もっと簡潔に書くことが出来る筈ですが、合計480行になってしまいました。グレースケールや反転は併せても1時間かからないぐらいでサクッとイケたんですけどねエッジで結構苦労しました、特に画像ファイルを扱うと端っこの処理に悩まされますね。
個人的にはフィルターをかけるとどうなるのかが分かっていると、自分のコードが間違っているのかあっているのかわかりやすかったと感じたので加工前と後の写真をここに示しておこうと思います。
元画像
グレースケール
反転
ブラー
エッジ
グレースケールのフィルターはRGBの平均値を求める必要があるんですが、値を整数型に変換する際に切り捨てではなく、まるめないと不正解になるのでその点注意が必要です。
Problem Set 4 ‐ Recover(3.5h)
実は現在進行中、SDカード内の削除された写真を復元する問題です。特にエラーなく復元されているように見えるんですが、1枚目と2枚目の社員がチェック通らない。。。
これ以上やると睡眠に支障が出そうなので今日は諦めて明日以降に持ち越します。と思ったんですが、ちょっと粘ったらやったら通りました。中途半端だと寝付きも悪いですしね。(22:30頃)
通らかなった理由は、条件分岐が甘くて一部のファイルでデータを捨ててたからでした。(22:45分ごろ追記)booleanが使えなかったり変数定義が一個ずつしかできなかったり、色々大変だなC言語。