ホーム » スタッフ (ページ 194)
「スタッフ」カテゴリーアーカイブ
リスト構造の演習
先週にリスト構造への先頭挿入型の追加と、末尾追加型のリスト処理を説明したので、 今週は演習。 テーマは以下のデータ構造にてデータを入力し、何らかの簡単なデータ処理(特定データの検索など)。
- 名前と電話番号のデータ
- 名前と誕生日のデータ
- 名前と年齢のデータ
コマンドプロンプトで絶対PATH,相対PATHの演習
コマンドプロンプトで相対PATH,絶対PATHの説明をした後、 以下の演習の内容をレポートとして提出してもらう。
ミニ課題
以下に示すファイルやディレクトリの生成を、コマンドプロンプトを用いた作業で行い、その際にタイプした命令と出力された内容を記載せよ。 ただし各作業では、絶対PATHを使用するとか相対PATHを使用するといった条件を満たすこと。
- Z:ドライブ上に、以下のような構造を作成せよ。 作成の際には、絶対PATHのみを使用すること。
- 上記のファイルbirthday.txt,like.txt の内容を表示せよ。 ディレクトリの移動には絶対PATHを使用、ファイルの表示には相対PATH。
- "cd Z:\20110705\saitoh"でディレクトリを移動した後、自分のbirthday.txt,like.txt を表示する命令を、相対PATHを使用して。 ただしディレクトリの移動はしないこと。
- 作成したディレクトリの内容を、すべて削除せよ。相対PATHや絶対PATHの方法は問わない。
Z:¥--+--[20110705]--+--[自分の名前]--+--(birthday.txt) 内容は誕生日 | +--(like.txt) 内容は好きな物 | +--[saitoh]----+--(birthday.txt) 1965/02/07 +--(like.txt) cats...
C言語でファイル操作
C言語での簡単なファイル操作ということで、下記のようなプログラムを示す。 特に「Windowsのディレクトリ名区切り文字がC言語のエスケープ文字」にあたるため、 問題が発生することを説明する。
#include <stdio.h> void main() { FILE* fp ; fp = fopen( "Z:¥¥abc.txt" , "r" ) ; if ( fp != NULL ) { char name[ 20 ] ; int age ; while( fscanf( fp , "%s%d" , name , &age ) == 2 ) { printf( "%s %d¥n" , name , age ) ; } fclose( fp ) ; } }
当面はOSと絡んだC言語での注意点を説明するのが目標。 来週は、fopen( … , "r" ) での「テキストモード/バイナリモード」の説明を行う予定。
絶対/相対PATHの演習とファイル処理
先週の講義でPATHの概念を説明したので、 授業前半でコマンドラインを用いてPATHの演習を行い、 後半はC言語でのファイル処理ということでfopen,fclose等の説明。
絶対/相対PATHの演習
簡単な演習ということで、Windowsのコマンドライン(cmd.exe)を起動し、 dir , type , cd , mkdir , rmdir , echo string>PATH などのファイル操作を 説明する。
最初は、C:¥Windows¥Help ディレクトリなどを使って ディレクトリの中を色々と移動しながら、絶対PATH/相対PATHを理解してもらう。 後半は、カレントドライブ(Windows固有の概念)を Z: に移動し、 Z:¥Japan¥Fukui¥Echizen¥yourname.txt といったような ディレクトリやファイルを作ったり消したりしながら、コマンドラインの操作を 理解してもらう。 途中、エクスプローラでGUIも横で見ながら、作業をしてもらう。
fopen() , fclose() などの説明
授業の後半は、fopen() , fclose() の説明として、 以下の様なサンプルプログラムを動かして fopen / fclose を説明。 来週は、説明が不十分だった、バイナリモード/テキストモード、 fgets , fputs , fgetc , fputc といった行入力,文字入力を説明し、 その翌週あたりに実際の演習とする予定。
(( fopen / fclose サンプル )) FILE * fp ; if ( (fp = fopen( "hoge.txt" , "rt" )) != NULL ) { int c ; // 入力データが無くなるまで、ファイルから1文字入力し、それを出力。 while( (c = fgetc( fp )) != EOF ) { printf( "%c" , c ) ; } fclose( fp ) ; }
また、fopenでの PATHの指定では、Windowsの場合ディレクトリ区切り文字が "¥"であるため、C言語の文字定数として、"C:¥test.txt" といった書き方を すると、"¥t"の部分がタブ文字として扱われて、ファイルが開けなくなる 可能性があることを説明する。 これらの対応として、WindowsのC言語ではディレクトリ区切り文字に、 "/"も使えることなども補足説明を行う。
FILE* fp ; if ( (fp = fopen( "c:¥¥test.txt" , "rt" )) != NULL ) { char name[ 100 ] ; int point ; int sum = 0 ; while( fscanf( fp , "%s %d" , name , &point ) == 2 ) { printf( "%s さんの点数は %d¥n" , name , point ) ; sum += point ; } printf( "合計は %d¥n" , sum ) ; fclose( fp ) ; }
evernoteの表の修正
最近、クラウド利用として、DropboxやらEvernoteやらを便利に使っている。 Evernoteは最初、そんなのDropboxやGoogle Docでいいじゃん…って思ってたけど、 使ってみるとエディタと統合されていて、それなりに便利。
ただ、表の編集機能はかなりダメダメ。難しい機能つけるとiPhoneアプリやAndroidアプリが無駄に複雑化しそうだし、妥協点とは思うけど。 丁度、今扱っているデータで、表を使っているんだけど、他の人にデータを見せるときに プロジェクタ投影したら画面幅が狭い状態になり、その時に編集作業を行ってから、表幅が右に余白があるのに狭く表示されるようになってしまった。 しかし、変更しようにも編集機能が無い。
Evernoteはデータは、XML形式のデータに過ぎないらしいので、 Emacs の evernote-mode を使ってみた。これを使うと、Emacs のエディタで、 テキストを編集できる。 んで、今回は、Emacsでノートの表の<table …. width="70%"> の部分を見つけて、 手作業でwidth="100%" への変更を行った。 やっぱり、面倒なんだけど…
2011年7月3日(第223回)
- マニアックタイムズ 第5回 2年電子情報工学科 山田さん
シミュレーションゲームについて - 2011年半年間を振り返って
リストの生成
リスト構造の生成。テスト直しの後に実施した説明が抜けているので、 リストの生成と処理の部分も含めて2週分を記載。
リスト生成の基礎
リスト構造のイメージを分かってもらうために、面倒だけど データ生成を単調に書いた例。
struct List { int data ; struct List* next ; } ; // 最初は単純に... // malloc失敗チェックは省略 struct List* top ; top = (struct List*)malloc( sizeof( struct List ) ) ; top->data = 1 ; top->next = (struct List*)malloc( sizeof( struct List ) ) ; top->next->data = 2 ; top->next->next = NULL ;
さすがに面倒なので、補助関数を使う。
// 補助関数を使って struct List* cons( int x , struct List* n ) { struct List* ans = (struct List*)malloc( sizeof( struct List ) ) ; if ( ans != NULL ) { ans->data = x ; ans->next = n ; } return ans ; } struct List* top = cons( 1 , cons( 2 , NULL ) ) ;
リストを使った簡単な処理
リストの末端には、これ以上データが続いていないことを表すNULLが入っている。
void print( struct List* p ) { for( ; p != NULL ; p = p->next ) printf( "%d¥n" , p->data ) ; } int sum( struct List* p ) { int s = 0 ; for( ; p != NULL ; p = p->next ) s += p->data ; return s ; } void main() { struct List* top = cons( 1, cons( 2, cons( 3, NULL ) ) ) ; print( top ) ; printf( "%d¥n" , sum( top ) ) ; }
リスト構造の応用では、2分木なども説明するので、その説明の導入として、 再帰で同じ処理を書いてみる。
void print( struct List* p ) { if ( p != NULL ) { printf( "%d¥n" , p->data ) ; print( p->next ) ; } } int sum( struct List* p ) { if ( p == NULL ) { return 0 ; } else { return p->data + sum( p->next ) ; } }
入力しながらリストを追加
手作業でリストを生成するような処理では、汎用性が無いので、 データを入力しながらリストを生成してみる。
void main() { struct List* top = NULL ; int x ; while( scanf( "%s" , &x ) == 1 ) { top = cons( x , top ) ; } }
しかし、上記の例では、新しい要素をリストの先頭に挿入する方法なので、 データは入力順序と逆順に保存される。 入力順序と同じように、最後のデータが末尾に入るように書くには、 末尾に挿入するデータの場所を覚えるポインタ(tail)を使って、 以下のように書くことができる。
void main() { struct List* top = NULL ; struct List** tail = &top ; int x ; while( scanf( "%s" , &x ) == 1 ) { *tail = cons( x , NULL ) ; tail = &( (*tail)->next ) ; } }
OSとファイル…
前期の後半はファイルについての説明を細かく行う。 まずは、ファイルとOSは切っても切れない関係ということで、 簡単にOSの歴史を説明。
OSの歴史と役割
簡単にOSの意味を説明するために、簡単に歴史を紹介。 最初のコンピュータが出てきた時代は、すべてが機械語で、 ハードディスクにデータを記録するためにも、面倒なプログラムを自分で書いていた。 しかし、ハードの複雑化と共に、ファイルにデータを記録するといった一般的な処理は 基本となる共通の処理をあらかじめ書いておくことで、 プログラムを共通化できるようになった。
OS,CPUの歴史をパソコンに限定して説明する。 最初のパソコンのOSはBASICだった。しかし機能が不足して16bit化される時に、 新しいOSが必要となりMS-DOSが作られ、異なるハードウェアでも 共通の機能で使えるようになった。
一方、8bit時代にAppleⅡを開発していたApple社は、 Lisaなどを経てGraphical User Interface(GUI)で操作しやすいMacintoshを開発する。 この操作性の影響を受け、Microsoft社は Windows などを開発していく。
これ以前のOSは、シングルタスク・シングルユーザが普通であった。 しかしWindows などのGUI環境では、ウィンドウ毎に別プログラムを動かすことから、 マルチタスク機能が重要となってきた。そしてこれらの機能を安定して動かすために、 i80286,i80386のような32bitコンピュータの開発時に、 プログラム保護機能が実装された。これにより、 不当な動きのプログラムを強制的に止めたりすることができるようになり、 マルチユーザ・マルチタスク機能が普及する。
ファイルとPATH
unixやMS-DOSでは、木構造ファイルが採用され、ディレクトリを使って ファイルを分類して保存ができるようになった。この中でファイルの場所を 指定するために、ディレクトリの名前を根幹から書き連ねる絶対PATHが 使われる。一方で、巨大なファイルであれば、PATH表現は長くて不便となる。 このため注目している場所を起点としてファイルの場所を表現する相対PATHも 使われる。
2011年6月26日(第222回)
- 新任教員紹介 電子情報工学科 村田先生の2回目
- 北陸地区高専体育大会の壮行会の様子
- マニアックタイムズ 第4回 2年電子情報工学科 山田さん
シミュレーションゲームについて
振る舞い図と相互作用図
http://www.itsenka.com/contents/development/uml/communication.html 振る舞い図と相互作用図について説明を行う。
相互作用図
- アクティビティ図
フローチャートを起源とする図で、状態変化と制御の流れ・データの流れを表現する。
rarestyleの記事の図を引用
- ユースケース図
Think ITの記事の図を引用
- ステートチャート図(状態遷移図)
慶応・藤原氏の記事の図を引用
相互作用図
- シーケンス図
IT専科の記事より図を引用
- コミュニケーション図
IT専科の記事より図を引用
DebianにMaharaをインストール
eポートフォリオのMaharaを使ったネタをやりませんかとのお誘いで、 自分の環境にひとまずMaharaを入れてみることからやってみよう。
# aptitude install mahara 色々と競合とかでてきたので、競合相手も追加してinstallをかける... # dpkg-reconfigure -plow mahara データベースの種類: mysql5 データベースのホスト名: なし データベースのポート番号: なし データベース名: mahara データベースのユーザ名: mahara データベースのパスワード: パスワード SMTPホスト名: なし ## /usr/share/doc/mahara/README.Debian に書いてある通り # mysql -u root -p Enter password: MYSQLの管理者パスワード > CREATE DATABASE mahara CHARACTER SET utf8; Query OK, 1 row affected (0.00 sec) > GRANT ALL ON mahara.* to mahara IDENTIFIED BY 'パスワード'; Query OK, 0 rows affected (0.00 sec) > FLUSH PRIVILEGES; Query OK, 0 rows affected (0.00 sec) > exit (( /etc/mahara/apache.conf )) # http://ホスト名/mahara/ で使えるように、先頭の以下のコメントをはずす。 Alias /mahara /usr/share/mahara
このあと、http://ホスト名/mahara/にアクセス。いろいろチェックがかかって インストール作業がおこわなわれて、最後に Admin User のパスワードとメールアドレスを登録して終了。
参考サイトの情報を元に、https://wiki.mahara.org/index.php/Language_Packs より、 ja-1.3_STABLE_tar.gz をダウンロードし….
# cd /usr/share/mahara/lang # tar zxvf ...PATH.../ja-1.3_STABLE.tar.gz
あ、日本語化の途中で何か壊しちゃった….site settings が表示できなくなった…