プログラミング演習 i
DESCRIPTION
プログラミング演習 I. 2002年度. 目標. コンピュータに慣れる UNIX の基礎的な操作 メール、 Web C 言語によるプログラミングの基礎. 蟹は甲羅にあわせて穴をほる. 演習の流れ. ログイン・ログアウト ファイル・ディレクトリ Unix メール・ HTML C 言語入門. UNIX. 1969年 米国 AT & T ベル研 マルチタスク・マルチユーザ OS ほとんど C 言語により記述 UNIX の開発を目的として C 言語を開発. パスワード. 忘れないこと 大文字・小文字・数字を混ぜる 破られないこと - PowerPoint PPT PresentationTRANSCRIPT
プログラミング演習 I
2002年度
目標
• コンピュータに慣れる• UNIX の基礎的な操作• メール、 Web
• C 言語によるプログラミングの基礎
蟹は甲羅にあわせて穴をほる
演習の流れ
1. ログイン・ログアウト2. ファイル・ディレクトリ3. Unix
4. メール・ HTML
5. C 言語入門
UNIX
• 1969年 米国 AT & T ベル研• マルチタスク・マルチユーザ OS
• ほとんど C 言語により記述 UNIX の開発を目的として C 言語を
開発
パスワード
• 忘れないこと• 大文字・小文字・数字を混ぜる• 破られないこと 悪意ある者は英単語・名前などの辞書
を活用する
ファイル
システムのファイル
他ユーザのファイル
自分のファイル
テキストファイ
ル プログラムファイ
ルデー
タファイ
ル情報のまとまり
•講義ノート•メモ•取扱説明書•写真
ディレクトリ
• ファイルの整理整頓 (木)
• ファイルは葉、ディレクトリは節
電磁気ノート 憲法ノート洗濯機取説
テレ
ビ取説
ROOT
文書
講義ノート 取扱説明書 画像
ディレクトリの木構造
/
usrhome
a00500 a00501 bin
システム
ホームディレクトリ
cd /usr/bin
bin
cd ..
home
UNIX のコマンド• 英単語を省略したもの• 省略の仕方に規則なし• /bin, /usr/bin, /usr/local/bin などに保存 cd: Change Directory /Current Directory ls: LiSt pwd: Print Working Directory mkdir: MaKe DIRectory rmdir: ReMove DIRectory cp: CoPy
ファイル・ディレクトリの操作
• cd dir0 : ディレクトリ dir0 への移動
• cp file0 file1 : file0 を file1 としてコピー
• mkdir dir0 :dir0 を新しく作成• ls : ファイル・ディレクト
リ一覧
特別なディレクトリ
• 現在地(カレントディレクトリ): .
• 親: ..
• ホームディレクトリ:
オンラインマニュアル
• man 各種マニュアル (MANual )• man cd コマンド cd のマニュアルの表
示• man man man のマニュアル• SPC で次ページ、 q で終了
UNIX とデバイス
• デバイス:機器• UNIX では全ての機器の操作をファイ
ル経由で行う• /dev/
デバイスファイル
/
usr
fd0a00500 a00501
dev
stdout
home
デバイスファイル
• stdin キーボードからの入力• stdout ディスプレイへの出力 (何文字かたまってから出力)• stderr ディスプレイへのエラー出力 (一文字ずつすぐに出力)
テキストファイルの表示
• テキストファイルの内容を stdout に書き込む• cat (conCATinate) • cat file0 :file0 の stdout への書き込み• cat file0 file1 : file0 file1 をつなげて書き込み• cat > file1 : stdin の内容を file1 に書き込み• cat file0 > file1 : file0 を file1 に書き込み
テキストファイルの編集
• emacs, mule の利用• テキストファイルの編集• 統合環境(メール、コンパイル、シェ
ル。。)• マウスを使わない(でも済む)
バッファ
a000% cda000% emacs
モード
ミニバッファ
バッファ#include
main(){}
ハードディスク
メモリ
キーボード
ABC
ABC
ABC
ハードディスク
メモリ
キーボード
ABC
ABC
filename.txt
filename.txt
ABC
C-x C-s
保存
インターネット
• TCP/IP を使った、唯一最大の国際的「ネットワークのネットワーク」
• 米国高等研究計画局 ARPA (Advanced Research Project Agency) (1971)
• TCP/IP (Transmission Control Protocol/ Internet Protocol)
• OS やメディアやネットワークモデルに依存しない
WWW
• World Wide Web
• 欧州核物理学研究所• ドキュメントの埋め込み
HTML とブラウザ• Hyper Text Markup Language• タグによる修飾• ブラウザ: HTML 文書の閲覧• mosaic 米イリノイ大学 (1993)• →大学当局の有料化反対・独立• → Netscape Communication 社• イリノイ大でも研究継続• →Microsoft へ→ Internet Explorer
URL (文書の位置)
• http://www.yamagata-u.ac.jp/
プロトコル(ファイルへのアクセス方法)他に ftp: https: gopher: mailto: など
コンピュータ名
HTTP( WWWサービス用プロトコ
ル)• 「ファイルの要求」と「転送」だけの
単純なプロトコル
公開
• 公の場である• 公開内容に対する責任• 閲覧内容の「管理者による管理」• 閲覧内容の自己管理
タグ(どのように見せるか)
<HTML><HEAD><TITLE> ページの名前など </TITLE></HEAD><BODY>公表したいことをここに書く。</BODY></HTML>
電 子メール
• ネットワーク経由の郵便• 好きな時間に読み書き• 同時に複数の相手へ• 第三者から閲覧の可能性
チェーンメール
• 人からのメールを大勢に転送• 厳禁• 多人数への情報伝達は WWW で
ウィルス
• アプリケーションを利用したシステムの破壊
• 要注意
マナー
• 半角かなは使わない• 極端に長いメールは出さない• subject に日本語は使わない• ウィンドウズアプリケーションを前提と
しない
メール
メールサーバ
ホームディレクトリ
差出人
ホームディレクトリ
メールの送受信
メールサーバ
ホームディレクトリ
相手
ホームディレクトリ
emacsの利用
メールの送信
メールサーバ
ホームディレクトリ
受取人
ホームディレクトリ
C-x mTo:Subject:Reply-to: [email protected] follows this line---
---Mule: *mail*
メールの本文C-c C-w
---本谷秀堅tel. 0238-26-3332
C-c C-c
Sending … done
emacs
メールの受信
メールサーバ
ホームディレクトリ
差出人
ホームディレクトリ
Esc-x rmail
M-x rmail
Date: Thu, 10 May 2001From: a00500To: hontaniReply-to: [email protected]: textContent-Length: 151
メールの本文
---本谷秀堅tel. 0238-26-3332
n: 次のメールp: 前のメールSPC: スクロールh: メール一覧r: メールに返信f: メールの転送q: 終了
シェル• ユーザと OS との仲介役
a00500@eiew00% lsabc abe kbe zze
a00500@eiew00% ls a*abc abe
a00500@eiew00% la *beabe kbe
a00500@eiew00% ls *eabe kbe zze
a00500@eiew00% lsabc abe kb kyz
a00500@eiew00% ls k*kb kyz
a00500@eiew00% la k?kb
a00500@eiew00% ls k??kyz
アクセス権モード
• ファイル・ディレクトリの公開の仕方• 読み・書き・実行• 自分・同一グループ・他人
アクセス権モード
自分 同一グループ 他人
読み
書き
実行
○
○
×
○
×
×
×
×
×
グループ
a00500a00501a00502a00503…
b00500b00501b00502…
a01500a01501a01502…
hiranakatamurakohdakobayashi…
a00 b00a01
staff
アクセス権モード
r: 読みw: 書きx: 実行
a00500@eie00% ls -l-rw-r----- 1 a00500 a00 316 5月10日
rwx rwx rwx
自分 自グループ 他人
アクセス権モードの変更
chmod o+r filename
u g o
+ -
r w x
誰に なにを
テキストファイルに 実行権
シェルが内容を OS に渡す
file.txt
mkdir newdir
file.txt
file.txt
a00500@eiew% ls -l-rw-r--r-- file.txt
読み書きのみ可実行は不可
a00500@eiew% ls -l -rw-r--r-- file.txta00500@eiew% chmod u+x file.txt-rwxr--r-- file.txta00500@eiew% ./file.txt
実行を許可
file.txt に書かれてることを実行(mkdir newdir)
コマンド
• コンピュータに動作を命令• 機 械語• 希望する動作をさせる命令を作成
プログラミング言語
• 希望する動作のリスト:プログラム• プログラミング言語( C 、 FORTRA
N 、、、)• 人間が読める
C 言語
• 1972年 米ベル研• Dennis M. Ritchie
• 関数型• UNIX 記述用• 文字数自由• 書式自由
コンパイル
• 翻訳 : プログラミング言語 → 機 械語
• C コンパイラ : C 言語を機 械語へ
cc (C Compiler)
gcc (GNU C Compiler)
処理の流れ
1. 作業ディレクトリの作成2. プログラムソースの作成3. コンパイル4. 実行5. デバッグ
プログラムソース
• コンピュータに実行させたい命令の記載
• emacs などのエディタを利用• ファイル名は ***.c
• 関数の寄せ集め• 関数の末尾に必ず ; をつける
関数
• 入力と出力• y=f(x)
#include <stdio.h>
main(){
printf( “Hello, world\n” );
}
ヘッダファイルの組み込み
main関数最初に実行される関数
printf関数画面に表示するための関数あらかじめ用意されている
セミコロン文章の末尾
#include <stdio.h>main(){ printf( “Hello, world\n” );}
コンパイル
• 人が読める言語から機 械語への翻訳• コンパイラ• C コンパイラには多数ある cc: C Compiler
gcc: Gnu C Compiler
翻訳家によって翻訳結果も異なる得手不得手
% lshello.c% gcc hello.c% lsa.out hello.c% ./a.outHello, world%
デバッグ
• 誤りの修正• プログラミング=デバッグ• パニックにならないこと• エラーメッセージを読むこと
変数の宣言
#include <stdio.h>
main(){ int i;
i = 3 * 2; printf( “i=%d\n”, i );}
上から実行
変数の宣言
• 使う変数をあらかじめ宣言• 整数用、実数用など使い分け
#include <stdio.h>
main(){ int i;
i = 3 * 2; printf( “i=%d\n”, i );}
変数の宣言
• 結果を格納するための「メモリ上の領域」
• 整数用、実数用などでサイズが異なる
int : 整数 double : 実数
変数の宣言
ハードディスク
メモリ
calc.c
a.out
キーボードa.out
プロセッサa.out
ii=6
表示i=6
i=6
#include <stdio.h>
main(){ int i;
i = 3 * 2; printf( “i=%d\n”, i );}
変数の型
• 同じ値が違う意味• メモリ: 記録できる場所が1 byte ず
つ1列に並んでいる• アドレス: 先頭から何番目か
0000 0001 10000 0010 2
0001 0100 3
0000 0011 4
0001 0001 5
0000 0000 60000 0000 7
0000 0000 8
1110 0111 9
0000 0111 10
unsigned char a=1;unsigned char b=2;unsigned char c=20;
unsigned short int d=785;
unsigned long int e=999;
11
12
13
14
アドレ
ス
変数の型
• char 1byte 文字など• short 4byte 整数• int 4byte 整数• long 4byte 整数• double 8byte 実数• unsigned 0以上の数のみ
signed と unsigned
• char -128 から 127 まで• unsigned char 0 から 255 まで0000 0000 0 00000 0001 1 10000 0010 2 20000 0011 3 3…0111 1111 127 1271000 0000 -128 1281000 0001 -127 1291000 0010 -126 130…1111 1111 -1 255
char unsigned char
表示
• printf( )関数に変数の型を教える• C++ では解決• % 記号で表示の仕方を指定
i=12;
printf( “%d”, i ); 12printf( “%02d”, i ); 12printf( “%03d”, i ); 012printf( “%04d”, i ); 0012printf( “%x”, i ); c
i = 12 / 5;printf( “%d”, i ); 2
i = 12 / 13;printf( “%d”, i ); 0
i = 12 / 13 * 13;printf( “%d”, i ); 0
桁数を指定0で埋める
16進表記
小数点以下切捨て
printf( “値は %d です。次の値は %02d です。” , i, j );
i=3;j=4;
書式 %d の箇所に値。 変数
値は3です。次の値は04です。
double x;
x = 12.0;
printf( “%f”, x ); 12.000000printf( “%e”, x ); 1.200000e+1printf( “%5.2f”, x); 12.00printf( “%05.2f”, x ); 012.00
見慣れた表示指数表示桁数の指定
関数
• よく使う機 能をまとめる• f(x): 引数 x と 出力 f
関数
メイン関数
宣言#include <stdio.h>
double MyFunc( double r );
main(){ double S;
S = MyFunc( r );
printf( “%f\n”, S );
}
double MyFunc( double r ){ double S;
S = 3.14 * r * r; return( S )}
関数
メイン関数
宣言
#include <stdio.h>
double MyFunc( double r );
main(){ double S;
S = MyFunc( r );
printf( “%f\n”, S );}
double MyFunc( double r ){ double S;
S = 3.14 * r * r; return( S )}
戻り値の型引数の型
値を戻す
#include <stdio.h>
double MyFunc( double r );
main(){ double S, r; r = 1; S = MyFunc( r );
printf( “%f\n”, S );
}
double MyFunc( double r ){ double S;
S = 3.14 * r * r; return( S )}
Sr 1.0
ハードディスク
メモリ
area.c
a.out
キーボードa.out
プロセッサa.out
表示
1.0r コピーS 3.14
3.14
3.14
#include <stdio.h>
double MyFunc( double r );
main(){ double S, r;
r = 1.0; S = MyFunc( r );
printf( “%f\n”, S );
}
double MyFunc( double r ){ double S;
S = 3.14 * r * r; return( S )}
くり返し文
• 変数の値を更新しつつくり返し
for( i = 0 ; i < 10 ; i++ ){
printf( “%d”, i );
}
初期値繰り返す条件
更新ルール
i = 0
i = 0
i = 0
i = 1
i = 1
i = 1
i = 10
i = 10次の処理へ。。
#include <stdio.h>
main(){ int i;
for( i = 0 ; i < 10 ; i++ ){
printf( “%d”, i );
}
}
i=0;while( i<10 ){
printf( “%d”, i ); i++;}
i<10 の間ずっと繰り返す
for( i = 0 ; i < 10 ; i++ ){
printf( “%d”, i );
}
i=0;while( i<10 ){
printf( “%d”, i ); i++;}
初期値条件
更新
i=0;while( i<10 ){
printf( “%d”, i ); i++;}
繰り返す条件
条件文
• 条件に合致したか否かの判断• if (式 )
文1 ;
else
文2 ;
01x > yx >= yx < yx <= yx == yx != y
式1 && 式2式1 || 式2
if( ){ printf(“…”); 文2; 文3;}else { 文4; 文5;}
成立すると1になる
i が1ずつ増える
main(){ int i;
i=0; while(1){ printf(“%d\n”, i*i ); if( i*i >= 300 ) break; i++; } printf( “%d\n”, i );
プロセス
• 実行中のプログラム• UNIX はマルチプロセス• 複数のプロセスを同時に実行• バックグラウンドとフォアグラウンド• &をつけて実行するとバックグラウンド• C-z で一時停止、 C-c で中断• bg, fg で停止中のプロセス再開
usrid@eiew0% emacs
emacs にかかりきり
usrid@eiew0% emacs &usrid@eiew0%
emacs は動いたまま他の仕事もできる。
=
既知の対象の内部にある未知の対象の面積を求める