各種加算等自己点検シート、各種加算・減算適用要 …...加算・減算 実 施 体 制 加算・減算 加算・減算適用要件 緊急時訪問看護加算
第1回 担当: 長谷川晶一@5階522/520haselab.net/class/basic/lesson/01/bp01.pdf ·...
Transcript of 第1回 担当: 長谷川晶一@5階522/520haselab.net/class/basic/lesson/01/bp01.pdf ·...
University of Electro-CommunicationsHuman Interface section
基礎プログラミングおよび演習
第1回担当: 長谷川晶一@5階522/520
University of Electro-CommunicationsHuman Interface section
自己紹介&研究室紹介
自己紹介&研究室紹介長谷川晶一高校1年のときに初めてプログラミング
MS-DOSのバッチファイル⇒ C言語、C++言語
大学サークルでバーチャルリアリティ作品を作る
会社(SONY)でデジタルテレビのソフトを作る (100人で開発)大学に戻り、バーチャルリアリティ研究者になる
バーチャルリアリティコンテスト1996の様子 最近の状況はhttp://ivrc.net/
研究室URLhttp://haselab.hi.mce.uec.ac.jp/
University of Electro-CommunicationsHuman Interface section
プログラミングの紹介
プログラミングの重要性
自律ロボットの研究はプログラム作成時間が半分以上
ラジコンならばソフトウェアがなくても動く
自分で判断して動くロボットでは、ソフトが主役たとえば、家庭用ロボットの研究・開発
コンピュータ(=計算機)とは
計算=ややこしい処理をする機械
プログラムに従って動作する
階差機関(Charles Babbage 1791~1871)の復元 数表の計算と印刷
解析機関(Charles Babbage 1791~1871)
を作ったもの プログラム可能なコンピュータ
コンピュータの歴史
プログラムとは
コンピュータの動作を決める手順書
ジャガード織機 (wikipediaより)
ロボット
PCとロボットとプログラム
PCの構成
制御マイコンの構成
CPUメモリ
ビデオメモリ GPU ディスプレイ
キーボード
マウス
USB
CPU メモリA/Dコンバータ
カウンタ
D/Aコンバータ
パラレルI/O
ポテンショメータ
エンコーダPWMモータドライバ
アナログモータドライバ
スイッチ/ソレノイド
CPUとメモリCPUの動作
1. 命令カウンタを1増やす
2. メモリの命令カウンタのアドレスから命令を読み出す
3. 命令に従って計算するメモリから読みして、計算して、メモリに書き戻す。命令によっては、命令カウンタを書き換えることもある(ジャンプ)。
メモリ0123456
10011010
3FFFFFFE3FFFFFFF
11000011000100010011110000111001
111000010111000110011011
プログラム
CPU命令カウンタ アドレス
命令命令レジスタ
計算ユニット
プログラムの表現
1011 0000 0110 0001 0101 0100 1111 0110
1101 0111 0001 0010
メモリ
プログラム(マシン語)命令レジスタに読みだす値を並べたもの
add r0 61
sub r1 r2 @r3
sub r1 r2 @r4
jmp r2
プログラム(アセンブリ言語)人に分かりやすいように命令を意味のある単語に置き換えたもの
アセンブラ
プログラムの表現
高級言語(C言語,BASIC,Perl,Ruby…)コンピュータが実行できる言語で、かつ、
人が読み書きしやすい,わかりやすい言語
int main(){printf(“Hello, world!”);return 0;
}
0101 0100 1111 01101101 0111 0001 00101101 1110 1001 10000101 0100 1111 01101101 1110 1001 1000
mov r0 61sub r1 r2 @r3sub r1 r2 @r4jmp r2コンパイラ
アセンブラC言語(ソースコードファイル)
実行形式
アセンブリ言語
マシン語
なぜC言語
人にわかりやすいプログラムのための言語はたくさんある(暇な人はHello_world.htmを参照)が…
C言語はなんにでも使える
実行形式を小さくできる。→家電製品などの組込マイコンなどでも使える。
実行速度が高速な実行形式を作ることができる。→ OS(オペレーティングシステム)の中核部に使える。
わりと、人にもわかりやすい。→大規模なプログラムの開発にも使える。
みんなが使っている
入門用としてはちょっとむずかしめの言語です。
その他の言語 C++ C言語を拡張、オブジェクト指向
Java Sunが作ったC++に似た言語どこでも動くのが特徴
FORTRAN スパコン用 最適化が効きやすい
Ruby, PHP Webサーバで動くサービスに多い
シェルスクリプト(Unix),バッチファイル(Windows)使えるとOSがちょっと便利になる
C# Microsoftが作ったC++に似た言語SunのJavaに対抗して作った
Visual Basic Microsoft Officeのスクリプトなど
University of Electro-CommunicationsHuman Interface section
プログラミングの手順
プログラミングの手順
ビルド:ソースコードから実行形式を作ること
int main(){printf(“Hello, world!”);return 0;
}
C言語(ソースコードファイル)
コンパイラ+アセンブラ
(gcc)
ビルド実行形式ファイル
0101 0100 1111 01101101 0111 0001 00101101 1110 1001 1000
OS (Mac OS XのFinderやTerminal)
1011 0000 0110 0001 0101 0100 1111 0110
1101 0111 0001 0010
メモリ
プロセス
実行形式ファイルをメモリにロードして
実行
プログラム開発の手順1.ソースコードを書く2.ビルドする3.実行してみる
問題があったら
問題があったら
プログラム開発の実際
Xcodeビルドと実行とデバッグをするための開発環境
テキストエディタ
コンパイラ (gcc)デバッガ(gdb)
デバッグ・デバッガとは?
デバッグ:プログラムが正しく動作するように修正すること
デバッガ:修正を助けるプログラム– プログラムを1行ずつ実行して動作の様子を見ることなどができる。
開発環境の起動
画面下のメニュー(Dock)のファインダーをクリック
一番上のメニューから「移動ーコンピュータ」を選ぶ
開発環境の起動
Xcodeを起動する
System-Developer-Application-Xcode
Dockに登録
DockメニューのXcodeを右クリックしてDockに保存しておくと便利
Xcodeの設定
初めてXcodeを起動したときにだけ出てきます
次へと完了でOKです
新規プロジェクトの作成
プログラムを作る「プロジェクト」の作成
新規プロジェクト(コマンドライン)
授業では、「Command Line Tool-Standard Tool」を使います。ほかは使いません。
新規プロジェクトに名前をつける 英字で始まり、英数字で名前をつけます。
名前は何でもかまいませんが、ここでは課題1ということで、ex1にします。
提出課題には通し番号がついています。
プロジェクトの構成
プロジェクトの構成が示されますmain.c というファイルから ex1 が作られます。
main.c の中身
main.cの中身です。“Hello world!”と表示
するだけのプログラムを作るC言語のソー
スコードになっています。
プログラムのビルドと実行
「ビルド」でXcodeがgccを使ってビルドしてくれる。
「ビルドして実行」でそのまま実行できる
プログラムの出力&プログラムへのキー入力
ターミナルからプログラムを実行
「Finder」で、「ユーティリティ」フォルダの
「ターミナル」を起動
ターミナルで、cd ex1/build/Debug と入力ls と入力./ex1 と入力
このex1がXcodeで作ったプログラム実行すると
Hello, World!と表示が出る。
C言語の基本
#include <stdio.h>int main(int argc, const char* argv[]){
// insert code hereprintf (“Hello, World!¥n”);return 0;
}
標準入出力機能(standard I/O)を使うことを宣言
メインのプログラムの始まり
メインのプログラムの終わり
コメント
「Hello, World!」と表示
メインから戻る
灰色 :なくてもいいところ青 :ないとだめだけれど、後で説明する部分黒 :今回説明する部分
C言語の基本
#include <stdio.h>int main(int argc, const char* argv[]){
// insert code hereprintf (“Hello, World!¥n”);return 0;
}
C言語では、この部分に書いた
プログラムが上から順に実行されます。
// insert code hereprintf (“Hello, World!¥n”);return 0;
//から行末までを、コメントといいま
す。コンパイラはコメントを読みません。他の人がプログラムを読むときに助けなるようなことや、自分のためのメモを書くために使います。このコメントは、Xcodeが書いたコメ
ントで、「ここにコードを挿入してください」ということです。
C言語の書き方
// insert code hereprintf (”Hello, World! ¥n”);return 0;
printf という関数(function: 機能)を
呼び出しています。
printf( ”出力したい文字列” ) ;関数の名前 関数の引数 文の終わりをあらわす
セミコロン
関数 printf は文字列を出力します。
¥n は表示すると、改行になる文字です。MacとPCでフォントが違うので、¥の代わりに、 =バックスラッシュになります。
とりあえずいろいろ表示してみよう
printf(” と ”);の間にいろいろな文字列を入れて
いろいろな文字列を表示するプログラムを作ってみてください。
#include <stdio.h>int main(int argc, const char* argv[]){
// insert code hereprintf (”Hello, World!¥n”);printf (”2 Hello, World!”);printf (”3 Hello, World!”);printf (”3 Hello, World!”);printf (” ¥n ¥n ¥n4 Hello, World!”);return 0;
}
上から順に実行されます
ビルドがうまくいかない?
いろいろ書いていると、ビルドがうまくいかないことが起こりえます。たとえば、次の例では、
なぞの machigai という文字列があります。コンパイラ(gcc)がその旨を伝えるためにエラーメッセージを出します。(xCodeが表示します)
#include <stdio.h>int main(int argc, const char* argv[]){
// insert code heremachigaiprintf (”Hello, World!¥n”);return 0;
}
ビルド時のエラー
「プロジェクト」のエラーと警告を見るか、
main.c の 赤丸×印にマウスをあわせるとメッセージが見られます。
エラーメッセージを読もう
先ほどの例では、error: `machigai‘ undeclared (first use in this function)エラー:machigai は宣言されていません(この関数の中では、ここで初めて使われました)と出ています。C言語には、まだお話していない文法がたくさんあるので、意味が取りにくいと思います。ですが、
コンパイラ(gcc)が machigai をどう解釈してよいかわからず、なにか言っている。
この行の machigai のあたりに何か問題があるようだ
ということは判ると思います。メッセージはいろいろありますが、必ずよく読んで、意味を考えてください。
エラーメッセージの例
error:parse error before ‘}’ tokenエラー:語 ‘}’ の前で構文解析エラーが起きました
}の前に、何かが足りないために、コンパイラ(gcc)がC言語の解析(解釈)ができなくなったと言っています。
この場合前の文の最後に足りない文字がありますね。
#include <stdio.h>int main(){
printf (”Hello, World!¥n”);printf (”Hello, World!¥n”)
}
エラーメッセージの例
error: missing terminating “ characterエラー:終わりの文字 ” が必要です。
error:parse error before ‘}’ tokenエラー:語 ‘}’ の前で構文解析エラーが起きました
文字列の終わりの”がないと言っています。
コンパイラは、 ); も表示する文字列(Hello World! ¥n)の続きだと思ったようです。このため構文解析エラーも起きています。
このように、ひとつの原因で複数エラーが出ることもあります。エラーメッセージは最初の方から見て行きましょう。
ひとつ直すと全部直ることもあります。こまめにビルドしましょう。
#include <stdio.h>int main(){
printf (”Hello, World!¥n”);printf (”Hello, World!¥n);
}
エラーメッセージの意味
そのほかのエラーメッセージについては、C科大久保先生のページhttp://www.tnlab.ice.uec.ac.jp/~sokubo/class/language/ref/error.htmlを見てください
MacOSのgccは日本語のエラーメッセージを出し
てくれません。Windowsの場合、Visual C++ / Borland C++ /cygwinのgccで日本語のメッセージが出ます。
関数をもうひとつ
上から順に実行されることを確かめるために、もう1つだけ関数を覚えましょう。
#include <stdio.h>int main(){
printf (”Plase hit ENTER key¥n”);getchar();printf (”Thankyou¥n”);
}
1文字入力[ENTER]キーが押される
まで、キーボードからの文字入力を待ちます。
[ENTER]が押されたら、
最初に入力されたキーを読み出します。
順番に実行される様子を見る
いろいろ変えてみて様子を見てください。
#include <stdio.h>int main(){
printf (”Plase hit ENTER key 3 times.¥n”);getchar();getchar();getchar();printf (”Thankyou¥n”);printf (”Plase hit ENTER key 2 times.¥n”);getchar();getchar();printf (”Thankyou¥n”);
}
プログラムのデバッグ
ビルドがうまくいっても、プログラムが思ったように動作しないこともあります。
デバッグ・デバッガとは?
デバッグ:プログラムが正しく動作するように修正すること
デバッガ:修正を助けるプログラムプログラムを1行ずつ実行
動作の様子をゆっくり見ることなどができる。
デバッグの実際
メニューからデバッガを選んでデバッガを起動
デバッグ
ブレークポイントを設定
ブレークポイントを設定してデバッグを始めると、プログラムがブレークポイントのところで止まる。
int main(….の行にブレークポイントを設定して、デバッグを開始してみてください。
デバッグ – ステップ実行
ブレークポイントで止まった後は、ステップオーバーで1行ずつ実行して様子を見る
ことができます。
参考 mainが終わっても
しばらくプログラムは続きます。C言語のソースがない
ので、アセンブリ言語やマシン語が表示されます。驚かないで。
ステップインを選ぶと関数の中にどんどん入っていきます。printfの中身が全部
わかるためには結構勉強が必要です。
課題と提出
課題提出Webサイト
http://haselab.hi.mce.uec.ac.jp/class/basic/
ここをクリックして指示に従ってWebのアカウントを作る
・パスワードを設定させられます・一度ログアウトしてからログインしなおすよう指示されます
ログイン
ここに設定したユーザ名とパスワードをを入力
ユーザー情報の編集
ログインしたらユーザ情報を書き入れて下さい
メールアドレスを間違えないように
授業の連絡に使います
課題の提出
資料課題一覧に毎回の授業の資料と課題を用意します。
まずここをクリック
授業の説明と授業で使用した資料へのリンク
課題の説明と提出 課題の説明と提出
成績について
出席、課題、試験で成績をつけます。
出席課題提出Webサイトのログイン時に出席を記録します。
授業中に教室から必ず一度ログインしてください。
教室外からでもログインできますが、どこからログインしたか記録していますのでご注意を。
課題
次の授業までに提出してください。間に合わない場合はそれ以降でも出してください。
他の人のプログラムの丸写しはだめです。必ず自分で作ってください。(簡単にチェックできます)
試験
期末試験をする予定です。
プログラミング上級者の方へ
すでに、C言語でプログラムを作ったことがあり、ポインタも構造体
も使ったことがあって、授業や演習の内容が退屈な人もいるかもしれません。そのような方は、 困っている人を助けてあげてください。
作ってあげるのではなくて、教えてあげることが勉強になります。人のプログラミングを後ろからみて、邪魔せず手伝えれば一流です。
課題は、一応出してください。課題より高度なプログラムを出していただいてもかまいません。
それでも退屈な方には、OpenGLを勉強することをお勧めします。http://www.wakayama-u.ac.jp/~tokoi/opengl/libglut.htmlを見て、自習してください。Xcodeの場合、プロジェクトにGLUT Frameworkを追加し、ソースに#include <GLUT/glut.h>と書けばGLUTが使えます。