情報領域演習第三

が投稿

FAQ

CEDへの接続が面倒くさい

全然書けない

  • 図書館で適当にC言語の入門書を借りて一冊真面目に読み込んで、自分でコードを書いて理解しましょう。
  • I類情報系科目自習の集まり を活用しましょう。

どこがおかしいかわからない

  • 誰かに「何がどうわからないのか」「どう考えているのか?」「どこまでわかっているのか」を話してみましょう。このとき、相手は実在の人間でもいいですし、ぬいぐるみ等でもいいです。自分の考えを言語化していく過程で、問題が整理されて、解きやすくなります。

メールで問い合わせる際の注意

  • メールには自分の名前と学籍番号を書いて下さい。誰からのメールかわからないとスパムになってしまいます。
  • ソースコードは 添付 で送って下さい。本文に貼り付けるとどこまでがコードがわかりません。また改行などが代わってしまったために、そのままコピー&ペーストできないことが多いです。
  • コードにはそのコードの方針などをコメントで記載して下さい。
    • 変数名などは適当におかず、その変数が何を意味しているのかがわかりやすいように命名には気をつけて下さい。
      • 最大値や最小値なら max_とかmin_にする。
      • 頭ならfirst_、末尾ならlast_とかにする。
  • 図やメモなど、考えた過程が分かるものを送って下さい。図の書き方は下記の参考書で確認下さい。
  • どの資料(参考書等)のどの部分を読んで、どこまで何を理解しているのかを簡単に説明して下さい。理解度に応じて、別の参考書を勧めるなど対応します。

コントロールキーの使い方がわからない。

よく使うのは以下の入力です(ctrl= control キー、 + x = xキーを同時に押す)。

  • ctrl + d: EOF(End Of File)
  • ctrl + c: 割り込み(Interrupt)。SIGINTを送る。
  • ctrl + z: 一時停止。SIGTSTP(SIGnal Terminal SToP)を送る。

例えば、fgets は 改行も1行に含めて一緒に取り込みますので、改行だけでも1文字以上という扱いになります。したがって、下記のコードを実行する際に、ターミナルから入力する場合は、入力の最後にctrl + d(Control キーと d キー)を押す必要があります。

while( fgets(buffer, 256, stdin) != NULL ){ .... }

Tips

I類情報系科目自習の集まり

出力を反例と比較する方法

  • ファイル出力して、hexdumpで見て下さい。
  • hexdumpに関してはGeneral Commands Manualをご確認下さい。

警告の意味が分からない

  • 制御が非 void 関数の終わりに到達しました [ -Wreturn - type ]
    • ifelse を良く見直して、 return 漏れがないかどうかを確認して下さい。
    • 参考(釧路工業高等専門学校の平成27年度 3J プログラミング言語IIのページ)

自宅からCEDにアクセスする方法

$ ssh UECアカウント@yellow99.ced.cei.uec.ac.jp
  • またはsol経由でアクセスする。詳細は2017度受講学生のページを参照下さい。
  • オススメ自宅のマシンにもVScodeをインストールして、Remote - SSH等のExtensionをインストールしてcedにアクセスするのがいいです。

サクサク書きたい

  • visual studio codeを使いましょう。CEDの管理者にお願いして2019年度から、visual studio codeを導入してもらったので、活用してください。

デバッカを使いたい > gdbを覚えてみよう

下記サイトにgdbの手順が書いてあります。法政大学情報科学部・情報科学研究科のコンピュータ資源を管理している学生有志によるチームによるページらしく、とても丁寧に記載されています。 - gcc+gdbによるプログラムのデバッグ 第1回 ステップ実行、変数の操作、ブレークポイント

参考書

アルゴリズム

アルゴリズムの自習用の参考図書をあげています。 上にあげているもの入門書で、徐々に本格的な書籍になります。書籍名の下に授業で扱う内容が書かれたページを追記しました。授業でつまずいたときはそのページをよく読んでください。

  • アルゴリズムを、はじめよう. 伊藤 静香. インプレスR&D/インプレスビジネスメディア. 2012. 図書館ebook Amazon

    • ⑧ pp.190 - 216:第10章 クイックソート
    • ⑨ pp.154 - 170:第 8 章 単純交換法(バブルソート)
    • ⑩ pp.101 - 116:第 5 章 二分探索法(バイナリサーチ)
    • ⑩ pp.118 - 138:第 6 章 ハッシュ探索法
  • アルゴリズム図鑑 絵で見てわかる26のアルゴリズム. 石田 保輝 https://www.amazon.co.jp/dp/4798149772/

  • 改訂第4版 C言語によるはじめてのアルゴリズム入門. 河西 朝雄 https://www.amazon.co.jp/dp/4774193739/

  • 新・明解C言語で学ぶアルゴリズムとデータ構造(明解シリーズ) . 柴田 望洋 https://www.amazon.co.jp/dp/4797390522/

    • ③ pp.173 - 201 : 第5章 再帰的アルゴリズム
    • ④ pp.143 - 169 : 第4章 スタックとキュー
    • ⑤ pp.333 - 383 : 第9章 線形リスト
    • ⑧ pp.228 - 247 : 6 - 6 クイックソート
    • ⑧ pp.248 - 253 : 6 - 7 マージソート
    • ⑪ pp.387-407 : 第10章 木構造
  • プログラミングの宝箱 アルゴリズムとデータ構造 第2版. 紀平 拓男 https://www.amazon.co.jp/dp/4797363282/

    • ③ pp.137-147: 第5章 再帰呼び出し
    • ④ pp.97-126: 第4章 スタック&キュー
    • ⑤ pp.70-83: 第3章 リスト
    • ⑧ pp.6-15 : クイックソート、マージソート
    • ⑪ pp.161-199 : ツリー構造(p.191にAVL木、p.194にB木についてかかれています。)
    • ⑭ pp.358-375:グラフ
  • セジウィック:アルゴリズムC 第1~4部基礎・データ構造・整列・探索. ロバート セジウィック 図書館ebook Amazon

    • ④ pp.121-123: プッシュダウンスタック抽象データ型
    • ⑤ pp.80-97: リンクによるリスト、初等的なリスト処理、リストに対する記憶領域の割付け
    • ⑧ pp.273-299: クイックソート
    • ⑧ pp.300-323: マージソート
    • ⑪ pp.195-203: 木
    • ⑪ pp.208-213: 木の走査
    • ⑫ pp.494-501: 赤黒木 (高さ平衡木=AVL木も書かれています)
    • ⑬ pp.106-111: グラフ
  • アルゴリズムイントロダクション 第3版 第1巻 基礎・ソート・データ構造・数学(世界標準MIT教科書) T. コルメン 図書館ebook
    Amazon

  • 渡部 有隆, Ozy, 秋葉 拓哉. プログラミングコンテスト攻略のためのアルゴリズムとデータ構造. マイナビ出版. 2015. 図書館ebook

  • 秋葉 拓哉, 岩田 陽一, 北川 宜稔. プログラミングコンテストチャレンジブック ―問題解決のアルゴリズム活用力とコーディングテクニックを鍛える―第2版. マイナビ出版. 2012. 図書館ebook

コンピュータサイエンス

計算機そのものに関する本としては、下記の書籍がおすすめです。Computer Scienceにおける基礎的な内容をギュッと凝縮した本で、計算量・データ・アルゴリズム・データベース・アーキテクチャ・言語などが書かれています。

  • みんなのコンピュータサイエンス いま知っておきたいIT技術を支える基礎教養. Wladston Ferreira Filho(著), 小山 裕司(監訳) https://www.amazon.co.jp/dp/B07KXP79Y9/ https://www.honyaclub.com/shop/g/g19498276/
    • ③ p63-66: 動的計画法
    • ③ p45-46: 再帰処理
    • ④ p77-78: スタック
    • ④ p78-79: キュー
    • ⑤ p79-85: リスト、配列、連結リスト
    • ⑧ p96-98: ソート
    • ⑪ p86-90: 木、二分探索木
    • ⑬ p99-102: グラフ

コーディングマナー

アルゴリズムだけではなく、コーディング自体の書籍としては、下記の書籍がおすすめです。

Linux

Linux関係の本では、下記の書籍がおすすめです。Linuxプログラミングの本で、プログラムを通してLinuxの基本的な動きを理解できるようになります。

  • ふつうのLinuxプログラミング 第2版 Linuxの仕組みから学べるgccプログラミングの王道. 青木 峰郎

その他

下記サイトの情報も参考になります。

YouTubeの講義動画