プログラミング演習I 2004年4月21日(第2回) 木村巌.

Slides:



Advertisements
Similar presentations
プログラミング演習II 2004年11月 30日(第6回) 理学部数学科・木村巌.
Advertisements

UNIX利用法.
UNIX利用法 情報ネットワーク特論資料.
システムプログラミング 第7回、8回 ファイルシステム関連の システムコール
応用理工学情報処理 第1回(2015年10月 5日) 月曜日担当 前島展也 Manaba
Java I 第2回 (4/18)
第3回 ファイルとフォルダ 伊藤 高廣 計算機リテラシーM 第3回 ファイルとフォルダ 伊藤 高廣
リダイレクト パイプ 標準入出力プログラム コマンド行引数 関数 system()
システムプログラミング 第5回 情報工学科 篠埜 功 ヒアドキュメント レポート課題 main関数の引数 usageメッセージ
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
プログラミング入門2 第1回 導入 情報工学科 篠埜 功.
OSとコマンド OS:コンピュータを使うための基本プログラム コマンド:OS上で使用できる命令 OS本体であるカーネルの内部コマンド
12: コマンドライン引数 C プログラミング入門 総機1 (月1) Linux にログインし、以下の講義ページ を開いておくこと
プログラミング演習I 2004年4月14日(第1回) 木村巌.
プログラミング演習II 2004年10月19日(第1回) 理学部数学科・木村巌.
12: コマンドライン引数 C プログラミング入門 基幹7 (水5) Linux にログインし、以下の講義ページ を開いておくこと
第8回 プログラミングⅡ 第8回
プログラミング演習II 2004年12月 21日(第8回) 理学部数学科・木村巌.
プログラミング演習Ⅰ 課題2 10進数と2進数 2回目.
初年次セミナー 第2回 文字の出力.
プログラミング言語Ⅰ(実習を含む。), 計算機言語Ⅰ・計算機言語演習Ⅰ, 情報処理言語Ⅰ(実習を含む。)
Linux にログインし、以下の講義ページを開いておくこと
情報工学科 3年生対象 専門科目 システムプログラミング 第5回、第6回 ヒアドキュメント レポート課題 情報工学科 篠埜 功.
Linux にログインし、以下の講義ページを開いておくこと
Linux にログインし、以下の講義ページを開いておくこと
プログラミング言語入門 手続き型言語としてのJava
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第2回 ファイル処理 情報・知能工学系 山本一公
リダイレクト パイプ 標準入出力プログラム コマンド行引数 関数 system()
プログラミング演習I 2003年6月25日(第10回) 木村巌.
プログラミング演習I 2003年5月7日(第4回) 木村巌.
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
第7回 プログラミングⅡ 第7回
地域情報学 C言語プログラミング 第1回 導入、変数、型変換、printf関数 2016年11月11日
システムプログラミング 第7回、8回 ファイルシステム関連の システムコール
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
システムプログラミング 第7回、8回 ファイルシステム関連の システムコール
B演習(言語処理系演習)第2回 田浦.
C言語 はじめに 2016年 吉田研究室.
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
15.1 文字列処理の基本 15.2 文字列処理用ライブラリ関数
UNIX演習 情報ネットワーク特論資料.
高度プログラミング演習 (01).
第1章 いよいよプログラミング!! ~文章の表示 printf~
UNIX演習 情報ネットワーク特論資料.
プログラミング演習I 2003年4月30日(第3回) 木村巌.
2013年度 プログラミングⅠ ~ はじめてのプログラミング ~.
プログラミング演習I 2003年7月2日(第11回) 木村巌.
システムプログラミング 第6回 システムコールのエラーメッセージ ファイルシステム 情報工学科 篠埜 功.
プログラミング演習I 2003年4月15日(第一回) 木村巌.
プログラミング基礎a 第3回 C言語によるプログラミング入門 データ入力
プログラミング 4 文字列.
Cp-1. Microsoft Visual Studio 2019 C++ の使い方 (C プログラミング演習,Visual Studio 2019 対応) 金子邦彦.
プログラミング言語論 第九回 理工学部 情報システム工学科 新田直也.
プログラミング演習I 2003年6月11日(第9回) 木村巌.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
プログラミング言語論 第九回 理工学部 情報システム工学科 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
情報処理Ⅱ 2005年11月25日(金).
プログラミング演習II 2004年11月 16日(第5回) 理学部数学科・木村巌.
プログラミング演習II 2003年11月19日(第6回) 木村巌.
プログラミング演習II 2003年12月10日(第7回) 木村巌.
プログラミング演習II 2004年11月 2日(第3回) 理学部数学科・木村巌.
プログラミング基礎a 第3回 C言語によるプログラミング入門 データ入力
printf・scanf・変数・四則演算
プログラミング演習II 2003年10月29日(第2,3回) 木村巌.
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
プログラミング言語Ⅰ(実習を含む。), 計算機言語Ⅰ・計算機言語演習Ⅰ, 情報処理言語Ⅰ(実習を含む。)
第1章 文字の表示と計算 printfと演算子をやります.
12: コマンドライン引数 C プログラミング入門 基幹2 (月4) Linux にログインし、以下の講義ページ を開いておくこと
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
Presentation transcript:

プログラミング演習I 2004年4月21日(第2回) 木村巌

今日やること(知識編) そもそもプログラミングって? Cygwinって? GNU Project C言語の歴史、定義、標準 ファイルシステム

今日やること(実践編) Cygwinの使い方 起動と終了 ファイルとディレクトリ Cコンパイラの起動(とりあえずやってみる)

そもそもプログラミングって? プログラム := コンピュータに、「入力されたデータをどのように処理するか」を指示するモノ プログラミング := プログラムを作成すること プログラミング言語 := プログラムを記述するための言語 様々なプログラミング言語がある:Lisp, Fortran, Cobol, C, C++, Perl, Ruby, JAVA,…

C言語についての知識(歴史) Cの作者:Brian Kernighan, Dennis Ritchie 二人の共著「プログラミング言語C」、共立出版.略称が K&R. Cの先祖:Algol(1960), CPL (1963), BCPL (1967), B (1970), そしてC (1972)に至る Unixの記述言語(UnixはCで書かれている!) Cの歴史については、P. H. Salus, Unixの1/4世紀、ASCII, 2000年、にも詳しい.

C言語についての知識 (定義、標準) C言語そのものと、C言語の処理系の違い 最初はK&Rが標準だった 例:gcc 最初はK&Rが標準だった そのうち、いろいろなC言語の処理系が現れた 人気があったので しかもちょっとづつ違う!……困る 標準的なCが策定された

C言語についての知識 (定義、標準の続き) 様々な環境で同じプログラムが等しく動くには、「厳密な」定義が必要 ANSI・IEC標準 最新はC99と呼ばれる、1999年に策定された規格 複素数型のサポートなど数値型の拡張 国際化文字列のサポート 可変長配列、構造体のメンバーとして「フレキシブル」な配列 などなど多数 C99はANSIから入手可(有償) Harbinson & Steeleが良いレファレンス Samuel P. Harbison, Guy L. Steele, C: A Reference Manual, Prentice Hall Computer Books ; ISBN: 013089592X ; 5th 版 (2002/02/01) プログラミング言語の厳密な定義……文法、意味、標準ライブラリ. 文法に関してはBNFなど.意味は表示的意味論など.

Cygwinって? Microsoft Windows上にUnix互換環境を構築 GNU Projectの成果 ⇒3Fの端末でLinuxが使える Linux: 1990年代からLinus Torvaldsが開発を進めているOS. OS: Operating System. 計算機資源を抽象化、管理を行うソフトウエア. 狭い意味のLinuxは、Linux Kernelと呼ばれる、OSの核心部のみを指す.それに、一般的なOSとして必要な付属ソフトや、一般ユーザが使うための要素を組み合わせたものをdistributionという.たとえばRedHat, Vine, Debianなど.これらは、他の商用ソフトとあわせた有料版と、それを除いた無料版とに分けて配布されていることが多い. Unixというのは、狭い意味では、AT&TのBell研究所で開発が始められたミニコン用のOSを指す.現在では、狭い意味でのUnixに倣って開発されたOS全般を指すと思ってよい.

GNU Projectって? Free Softwareという思想 Free Softwareには他の形もある 単に「ただ」という意味ではない! 自由に手に入る、自由に配れる 自由に改変できる 改変したものを自由に再配布できる この三つを柱にしたものが、GNU GPL (General Public License). Free Softwareには他の形もある FreeBSDなどが採用しているBSDライセンスなどなど Open Source Softwareという動きもある

ファイルシステム ファイル ディレクトリ(フォルダ) OSが計算機資源(この場合、HDDなどの記憶領域)を抽象化した例 読み書きできるモノ ファイル名、日付、所有者などの属性を持つ ディレクトリ(フォルダ) ファイルをまとめたモノ 実は特殊なファイル OSが計算機資源(この場合、HDDなどの記憶領域)を抽象化した例 C言語でのファイルの読み書きなども、後の回でやります.ファイルシステムはOSが提供する機能です.基本的な機能なので、C言語からファイル入出力を行う方法が標準化されています(標準Cライブラリに、ファイル入出力の為の関数が用意されている).それ以外の、OSが提供するより広範な機能をCから使うには、システムコールを使うことになります.

実践編:Cygwinの使い方 全部コマンドで入力(CUIという←→GUI) 起動と終了 各コマンドの引数は、空白で区切る 起動:アイコンをダブルクリック 終了:exit 各コマンドの引数は、空白で区切る 例;現在いるディレクトリの一覧を詳細表示 ls -l CUI: Character User Interface GUI: Graphical User Interface CUIでは、結果も文字で出力される.計算機で扱うさまざまな対象を、文字で表現する必要がある.

ファイルとディレクトリ Microsoft WindowsのExplorerとの関係 全部文字で表示・入力 同じものが違ったように見えているだけ 全部文字で表示・入力 ディレクトリの移動……cd (change directory) ディレクトリの内容一覧……ls (list) 現在いるディレクトリ……pwd ディレクトリの新規作成……mkdir (make directory) Explorerとcygwinとで、同じディレクトリを見てみよ! manを見よう!! テキストファイルの内容を確認するための、lessというコマンドもある.

ファイルとディレクトリ(続き) 階層構造の表現:/some/where のように、/で区切る 特別な記号:現在のディレクトリは. (ピリオド) 現在のディレクトリの一つ上は .. (ピリオド二つ)

Cygwin環境とWindowsでのファイルの対応 Microsoft Windowsでは、次のような表記: C:\Documents and Settings\iwao\My Documents\example.c 同じファイルが、Cygwinだと、 /cygdrive/C/Documents and Settings/iwao/My Documents/example.c のようになる.

Cコンパイラの起動 準備 cd /cygdrive/z/ ディレクトリの移動 mkdir 040421 040421というディレクトリを作製

Cコンパイラの起動(例1) プログラムファイルの準備 秀丸エディタで、次の内容を打ち込む(半角英数字で) 行頭の空白はタブキーで! #include <stdio.h> int main (void) { printf (“Hello World!\n”); return 0; } hello.cという名前で保存 #include <stdio.h> int main (void) { printf (“Hello World!”); return 0; }

Cコンパイラの起動(続き) Cygwinのウィンドウで、 ls gcc -o hello hello.c ./hello うまくいけば、Hello World!が表示される コンパイルが失敗する例をわざと作って、どのようなエラーメッセージが出るか確認しておこう!

例1を見ながら プログラムは基本的には英数字小文字で #で始まる行は、コンパイラへの指示 int main (void) は、mainという関数が引数をとらず、整数型の値を返すことを意味する {}に囲まれた部分がmain関数の本体. printf()は、引数を書式付で出力する標準ライブラリ関数 教科書2.1からを参照のこと.

例1を見ながら(続き) 関数名を書くと、その関数が実行される ただし、main()は特別で、プログラム内で最初に実行されることが保証される 関数に対して、カッコ内に引数を書く 引数がprintf()によって印字される 戻り値0を環境に返す

Coding Standard Coding Standardとは 改行や、行頭の空白の数、括弧の位置などを指定したもの 人間が見やすいように! しかし統一が必要である(特に複数人で開発するときは) この授業では、GNU Coding Standardに準拠する(教科書とは違う).この文書の「C言語の上手な書き方」参照. テキスト2.1節付近を参照

例2(環境からの引数) #include <stdio.h> #include <stdlib.h> int main (int ac, char *av[]) { if (ac < 2) exit (EXIT_FAILURE); printf ("Hello %s!\n", av[1]); return 0; } 教科書12.5参照

コンパイルして実行 hello2.c という名前で保存 gcc -o hello2 hello2.c ./hello2 Me

例2を見ながら(mainの引数) main(int ac, char *av[]) は、関数main()が、最初の引数として整数型を、二番目の引数として、charへのポインタの配列を取ることを意味する. 整数型、char、ポインタ、配列、などは後述. hello2というプログラムに、外部からデータが渡される.それがどこにあるかが、avに収められている avが何個のデータを指すポインタを格納しているかが、ac. 教科書12.5参照.今はそういうことができる、ということだけでよいです. You are not expected to understand this.

例2を見ながら #include <stdlib.h>が追加されている.関数exit()や、定数EXIT_FAILUREが使いたいから. もしacが2より小さいなら、exit()を呼ぶ.引数はEXIT_FAILURE. つまり、環境に失敗を通知して、プログラムを終了. そうでないなら、環境から渡された値av[1]を用いて、printf()で印字する.

例3(文字の変換、数学関数) #include <stdio.h> #include <stdlib.h> #include <math.h> int main (int ac, char *av[]) { if (ac < 2) exit (EXIT_FAILURE); printf (“square root of %f = %f.\n", atof (av[1]), sqrt (atof (av[1]))); return 0; }

コンパイル&実行 先のプログラムを、sqrt.c という名前で保存 gcc –o sqrt sqrt.c –lm ./sqrt 4 square root of 4.0 is 2.00000.

まとめ Cygwinとはなにか、GNU Projectとはなにか C言語の歴史、標準、Cの規格と処理系との違い ファイルシステムとは?

レポート課題 Cygwin環境でのディレクトリ /usr/local/bin が、Windowsだとどのフォルダになるか答えよ. 例1を何らかの形で改造せよ.改造したものについて、「例1を見ながら」と同様に、プログラムを解説せよ. 締め切り:2004年4月27日一杯(日本時間で) 提出先:メールで木村まで.