[PC 関係のお知らせ] 1. HP ProBook のバッテリィ異常の問題 栗野ページ http://edu-gw2.math.cst.nihon-u.ac.jp/~kurino/ にアナウンスがあるので、個々に対応 自分で、調べて、問題があれば、メーカーに連絡して、交換してもらう 2. 新しい windows update 件 (2019 の春の大型アップデート)が始まっている => 基本、update はしてほしいが、「人柱」にはなりたくない # もしかしたら、問題があるかもしれず、安易に update すると、トラブルにあうかも.. # => すでに、問題点がある事がわかっている <= [対応] 現在は、windows update は、「自動更新」になっていて、制御できない => 「自動更新」をいったん、「無効」にしてしまうとよい (how to) 「Windows update の自動更新の無効・有効を簡単に切り替える(wub)」ソフトがある これをインストールして使う 栗野のページ => 2019 担当科目 => コンピュータ概論 => 5/28 のページ => wub.zip をダウンロード 使い方 まず、「すべて展開」(インストールはこれだけ) 新しくできたフォルダの中の wup.exe を実行 on/off の切り替えができる おすすめ 春/秋の大型の時には、事前に off にして、update しない 公開されて 1 月位経つと、安定するので、その時に on にして update する [ファイルのダウロードと展開] 本日のページから、hanoi.zip と miku.zip をダウロード ダウロード先は、今日のフォルダ(を先に作って、そこに..)保存する ダウンロードした二つの zip ファイルは、ともに、「展開」しておく [前回(2019/05/24)の内容] 「繰り返し」の復習 : 再帰呼出しする関数の定義は「繰り返し」を表現 再帰呼び出しを使って、「何か」を「繰り返す」という関数が作れる 「繰り返す」という機能は、繰り返したい、「何か」とは独立に記述できる # どのような命令でも繰り返す事ができる 命令の組み合わせ : 順接/条件分岐/繰返し、これがあれば「万能」になる 順接 命令 A, B => A;B を順番に実行する 条件分岐(if 構文) 命令 A, B と条件 Q => Q の成立時に A, 不成立時に B を実行する 再帰呼び出しを利用して定義した関数 命令 A と実行回数 N => A を N 回繰り実行する !!! N は固定(プログラム作成時に決まるの)でなくて、プログラムの実行時に定まる !!! => 有限の記述で、無限の命令の実行が可能になる 原理的に計算可能(大学院にいって、志村先生の講義を受けると習う) 当時の三者が「計算ができる」とは何かと、独立に考えた チューリングマシン ラムダカリキュラス 帰納的関数 => どれも「同じ」事しかできない (どれも同じなのだが..) どれかと同じ能力がある事を「万能の計算能力がある」と呼ぶと決めた => 順接と条件分岐と繰り返しの表現が可能なプログラミング言語は、「万能」である Turtle Gaphics (亀プログラミング) : 画面上の「亀」を制御して、図を書く # TG そのものは、単なる遊び(C 言語やって、絵も描ける..) Turtle Graphics のライブラリの利用と API の体験 API : Application Program Interface (応用プログラムを作成する時の規約) C 言語(一般にプログラミング言語)では、 基本命令を組み合わせて、プログラム(より高機能な命令:アプリケーション)を作る printf(); 文字列を出力する API => このような基本命令(として使える命令)を定めるルール 亀を操作するには、どのような命令を使えばよいか ? という規則 # C 言語を学ぶ # 基本命令となる「単語」を増やす => いろいろな API を学ぶ # 命令を組み合わせる手段を学ぶ「制御構造:順接/条件分岐/繰り返し」<= これで十分 「巨人の肩に載る」: 既存の成果を上手に再利用する API がどのように提供されるか ? # API は、「他人が作った関数群(ライブラリ)の使い方」を示したもの # => ライブラリを作った人が、(勝手に考えて)作る # cf. s_XX は、栗野が作ったので API も同様 # => OpenGL というライブラリ(API)を利用して作った => 機能を「0 から作る(車輪の再発明..)」の大変 => できるだけ、人の作ったものをそのまま、あるいは、それを組み合わせて、新しい機能を作る 「文字」の扱い : C 言語では「文字列」以外に「文字」が扱える 文字のリテラル(文字自身の表現) : 「'」+「一文字」+「'」 例 : 「'A'」という表現は、「A」という「文字」を表す cf. 「"A"」という表現は、「A」という「文字」が一つからなる「文字列」を表す !! 文字と文字列は違う(同じ操作に対する応答が異なる) !! cf. "A" に +1 すると、文字の長さが一つ減って "" (空文字) !! 'A' に +1 すると、'B' (次の文字)になる !! => 「型(type)」が異なる !! その型を持つ要素の集合や操作の種類と結果が異なる 文字の入出力 : getchar/putchar 関数で、文字が入出ができる printf の API( 暫定 : 実は、もっと色々な機能を持つ超高機能関数だが.. ) 一つの文字列引数をもち、その文字列を標準出力(通常は画面)に出力する putchar の API 一つの文字引数を持ち、その文字を標準出力(通常は画面)に出力する getchar の API 標準入力(通常はキーボード)から一文字入力して値として返す 入力する文字は、「改行キー」が押されるまで待つ(入力待ちする) 「改行キー」そのものも、入力の一部となる !! 「入力」=> プログラムの実行時に情報を与えて、その情報に基づいて、振る舞いが変えられる == 前回「文字」を学んだ 「文字列」と「文字」は違うもの 「文字列」は複数(0個以上)の「文字」が並んでいて、最後に特別な文字「\0」(NUL 文字/EOS)がある 文字列の前に「*」を付けると、先頭の文字が得られる。 すでに学んでいる 「文字列に +1 すると、文字列の先頭の文字が欠けて、文字の長さが短くなる事」を 利用すると、先頭以外の文字も取り出せる 「再帰」と「文字と文字列の関係」を利用とすると、いろいろな事ができる 特に 繰り返す二つのパターン 1. => 文字列を先頭の方から順に扱う 繰り返し命令 再帰 2. => 文字列を後ろの方から逆順に扱う 再帰 繰り返し命令 ミクの遊び方 先頭に #include "s_walk.h" miku の API s_walk_turn(); ミクの向きを 45 回転 s_walk_move(); ミクを一歩前に進める プログラムを作成して、 miki のフォルダに保存 コンパイル実行 make BASE=ファイルのベース名 test # 「ファイルのベース名」は、ソースコードファイル(例:foobar.c) # の拡張子(.c)を取り除いたもの(例:foobar) # 例: # プログラムソースファイル名が foobar.c なら # make BASE=foobar test # とする hanoi 中に libSK.a というファイルがあるが、これが邪魔をして、うまくゆかない => libSK.a を削除すればよい