ホーム » t-saitoh の投稿 (ページ 186)

作者アーカイブ: t-saitoh

2025年5月
 123
45678910
11121314151617
18192021222324
25262728293031

検索・リンク

リストのデータ追加処理とデータの型

# 先週の講義のメモが残してないので、1週遅れで記載。

前回の説明では、リストを処理で手作業で作っていたが、 データの入力に合わせて追加して区処理を説明する。

先頭挿入型の追加処理

配列でデータを扱えば、C言語では固定サイズになるため、リスト構造を使えば不定長の データの取り扱いも楽。

struct List {
int data ;
struct List* next ;
} ;
struct List* cons( int x , struct List* n ) {
struct List* ans ;
if ( (ans = (struct List*)malloc( sizeof(struct List ))) != NULL ) {
ans->data = x ;
ans->next = n ;
}
return ans ;
}
void main() {
struct List* top = NULL ;
int  x ;
while( scanf( "%d" , &x ) == 1 ) {
top = cons( x , top ) ;
}
}

このプログラムでは、リストの先頭に次々とデータを挿入していく。 このためデータは、挿入順と逆に並ぶことになる。

末尾追加型の追加処理

前の例では、管理するためのポインタがtopだけで良いため、シンプルではあるが、 データが逆順になってしまう。データの挿入順に並びたいのであれば、以下のような プログラムとなる。

void main() {
struct List* top = NULL ;
struct List** tail = &top ;
int  x ;
while( scanf( "%d" , &x ) == 1 ) {
*tail = cons( x , NULL ) ;
tail = &( (*tail)->next ) ;
}
}

しかしこのプログラムでは、tail の宣言が『Listへのポインタのポインタ』といった宣言で、 必ずしも読みやすいものではない。しかし、式の部分的な型が何なのかを明確に 理解できれば、イメージ図があれば、それなりに理解もできるようになるはず。

// ややこしい部分の型を考える。
&( (*tail)->next ) の型は?
tail               : List**
*tail              : List*  (List**の先を参照)
(*tail)->next      : List*  (List*の先のnext部を参照)
&( (*tail)->next ) : List** (next部のアドレスを取り出す)

UML:構造図

先週のUMLの全体像の説明を受け、今日はデータ構造の説明のための図ということで、 構造図について説明する。

まずは、基本のクラス図について説明し、 可視性:public(+),private(-),protected(#)を、要素やメソッドにつけてあらわす。 継承がある場合には、派生側から基底クラスに白抜き三角矢印"―▹"で結ぶ。 クラス間の関係は、関連(assosiation)といい、直線で結ぶ。 直線の上には関連の説明をする意味を書き添え、両端には役割(ロール)を記載する。 直線の下には、多重度などを書き添える。

クラス間に包含関係がある場合には、全体と部分という関係があり、集約と呼ぶ。 この集約のうち、特に結びつきが強いものは合成(コンポジション)と呼ぶ。 単なる集約は、部品が単独でも存在しうる場合に使われ、"―◇"で接続する。 一方、コンポジションは親クラスと共に消滅するような強い結びつきであり、 UML記号としては"―◆"で接続する。

クラス図を具体的なデータを交えて記載するものは、オブジェクト図と呼ばれ、 設計開始時に関係者にヒアリングしながら書いたり、クラス設計が進む中で、 設計を検証するために具体的なインスタンスを書き込んで使う。

パッケージ図は、複数のクラスからなるものの全体的なグルーピングして記述するもので、 グループ化されたものをフォルダアイコンでまとめて、その間の関連を記載する。

コンポーネント図は、複数のクラスで構成される処理で、1つ以上のインタフェースを用意し、 あたかも1つのクラスのように取り扱って表現する図。 提供側インタフェース"―○"と、要求側インタフェース"―⊂"で結びつきを表現する。

(図は、Wikipediaなどからの引用)

第21回高専プロコン予選通過2チーム

先日、課題部門2チーム、自由部門2チーム、競技部門1チームにて、 第21回・全国高専プログラミングコンテストに作品の応募を行った。 最終的に自由部門1チームが書類審査を通過し、 競技部門1チームと合わせて2チームが本選に参加することになりました。

  1. 自由:「砂であそぼう!!~砂で描くメッセージ~」(4EI:本山、久世、小林成、森、ツェンデ )
  2. 競技:「4セルくれ~2セルで十分ですよ~」(4EI:戸嶋、直江、八田、原、山田)

4EIの学生のみなさんは、夏休み期間のインターンシップもあり、準備が大変ですが、 頑張っていきましょう。

ポインタとOSの歴史

例年だと前期の中間試験の範囲で説明していたポインタの説明で、 ポインタに対する加算を伴う処理を解説していなかったので、説明を行った。 特に、p++,++pといった前置演算子、後置演算子の違いや、演算子の優先順位などを交えながら、 説明を行った。

// 配列でマイナスを見つけるまで積算
int sum( int* p ) {
int s = 0 ;
while( *p > 0 )
s += *p++ ;
return s ;
}

OSの歴史

前期期末までは、ファイルを中心に説明を行うので、説明の内容にはOSの話が欠かせない。 そこで、OSの歴史について話を行う。 基本汎用機の発達の中で、Multics のような複雑なOSを、ミニコンで動かしたいという 話が出てきて、トンプソン、カーニハン、リッチーなどにより、C言語の開発とともにunixが 開発される。

同じころ、家庭用のパソコンの世界では、ビルゲイツの活躍で tiny basic などの言語+OSとしての環境が発達 していく。開発者の中では、汎用機などのOSのパソコン版として、CP/Mなども作られていた。 ここで16bitパソコンの登場に合わせ、マイクロソフト社が作られMS-DOSなどが開発される。 一方、Apple社は8bitパソコンのApple][などの開発の後、16bitパソコンのMacintoshを 開発する。Macintoshは、GUIの操作性から教育機関で普及していく。 この結果、マイクロソフト社は負けずにWindowsを開発していく。 しかしながら、この時代のパソコンは、シングルタスク・シングルユーザであった。

ミニコンでのマルチタスク・マルチユーザのOSのunixは、 研究機関ではBSD、企業ではSystem-Vとして発達する一方で、 パソコンOSにも影響をあたえる。 特に、IBM社のOS/2あたりから、マルチタスク・マルチユーザが実装され始める。 32bitパソコンが出てくる頃から、保護機能などが実装され、マルチタスク・マルチユーザ機能を 実装できるようになり、Windows-NT,2000,Xp,Vista,7と発達していく。

unixの世界では、オープンソースな開発により無償のLinuxが発達していく。 Linuxでは、インターネットを使ってソースコードが誰でも見ることができ開発に協力できる 所が特徴的である。

課題レポート採点

今日は寮の日直ということで、 その間にプログラミング応用と情報構造論の課題レポートの採点。

プログラミング応用のレポートは、がんばって書いている人もいるけど、 すでにテスト生点でそれなりの点数が取れた人は、 ちょっと手抜きの様子。 成績は、max(テスト生点,テスト*60%+レポート40%)という計算方法なので、 レポートの加点を入れても、成績が上がらない人がほとんど。 まあ、プログラムがそれなりに書ければ、こんなものかな…. レポートの説明で、変数表とか処理の説明してくれているけど、 どちらかというとイメージ図を交えたりといった説明が欲しかった。 といっても、簡単な課題だし説明を丁寧にといっても、 変数表ぐらいしか丁寧に書けないか….

不在者投票してみるか…

7/11(Sun)に選挙が予定されているが、 この日は北陸地区の高専体育大会で、前日から金沢の予定。 ということで、この日の選挙投票はムリ。 初めてだけど、不在者投票してみるか…

越前市の場合(追記)

期日前投票する場合、越前市(旧武生)では、『生涯学習センター』にて できるみたい。 当日投票だと入場券が必要だけど、越前市は市議会選挙もあって、 7/5以降の配布。 このため、入場券があれば持参。無ければ免許証or保険証(印鑑までは不要)をもって、 行けば良いらしい。

さっそく、帰りにでも行ってみようかと思ったが、 今日じゃ越前市市議会選挙の投票ができないのか… 両方不在者投票するのなら、7/5〜7/10の間に行くべし。

学生のみなさん(over20)は、国の借金はらうのが後世の自分たちに全部背負わされることに 理不尽さを感じるのならば、必ず選挙に参加しましょう。 選挙に行かない人が多いようなら、 私が払わされそうな消費税分を、その無関心層に支払ってもらうことに賛成します。 しかし、自分の子供に背負わさせられるのなら、 消費税増税されてもしかたがないと思っています。

北陸地区高専バドミントン部春期交歓試合

昨日のオープンキャンパス明けで、福井高専からの参加者が少なく、団体戦で連戦状態。 中間試験あけで体もなまっているはずだし、怪我や故障が出ないか心配。 1006201235_320x240.jpg

サーバアップデート

オープンキャンパスが暑くて、体の汗がひくまで…と、 自分の管理しているサーバ群を、まとめてアップデート作業を行う。 オープンキャンパス、ネットだけでやれると、楽なんだが…(^_^;

あじさいオープンキャンパス2010

今日は中学生の入学向けのオープンキャンパスが行われました。授業や実験風景をみてもらいました。

1006191542_320x240.jpg

体育館の中などは、暑くて疲れました。 参加した生徒さん・保護者の方々、お疲れさまでした。

あじさいオープンキャンパス ustream 中継

福井高専では、明日はあじさいオープンキャンパスということで、授業を土曜に振り替え、 昼から中学生保護者向けの見学会を行う。

私の担当は、歯みがきロボットコンテストに出した自律ロボットを展示説明を行う予定。 その中で、ロボットに先日購入した CEREVO CAM を搭載させて動かそうと画策。

ただ、学内無線LANへの接続をどうするかで一悩み。 CEREVO CAMは、無線LANの設定はサーバWeb画面で登録し、QRコードを読み込ませる方式。 んで、Web画面ではWEP/WPKの2種類…のはずだったんだけど、今日サーバ画面を見ると、 設定に認証なしなどの項目が増えている。 電子情報では、FERECというWeb認証型のルータが間に入っていて、 無線LANには無認証接続という方式。 だから、CEREVO CAMだと、WiFi無認証とWeb認証がネックだった。 そこで、FERECに、CEREVO CAMをスタティックNATに登録し、Web認証無しにして、 新しく増えたCEREVO CAM サーバのWeb画面で、MACアドレスを登録しWiFi無認証とした。 これで、電子情報の学内であれば、どこでも『ustream/だだもれ』できるようになった。

ということで、明日6/19,14:30-15:00 の間、オープンキャンパスで ustream で中継します。 ただし、CEREVO CAM を自走ロボットに乗せるので、 見てると乗り物酔いするかもしれません。

システム

最新の投稿(電子情報)

アーカイブ

カテゴリー