プログラミング演習 i

91
プププププププププ I ププ 2002

Upload: nerita

Post on 25-Jan-2016

44 views

Category:

Documents


4 download

DESCRIPTION

プログラミング演習 I. 2002年度. 目標. コンピュータに慣れる UNIX の基礎的な操作 メール、 Web C 言語によるプログラミングの基礎. 蟹は甲羅にあわせて穴をほる. 演習の流れ. ログイン・ログアウト ファイル・ディレクトリ Unix メール・ HTML C 言語入門. UNIX. 1969年 米国 AT & T ベル研 マルチタスク・マルチユーザ OS ほとんど C 言語により記述 UNIX の開発を目的として C 言語を開発. パスワード. 忘れないこと 大文字・小文字・数字を混ぜる 破られないこと - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: プログラミング演習 I

プログラミング演習 I

2002年度

Page 2: プログラミング演習 I

目標

• コンピュータに慣れる• UNIX の基礎的な操作• メール、 Web

• C 言語によるプログラミングの基礎

蟹は甲羅にあわせて穴をほる

Page 3: プログラミング演習 I

演習の流れ

1. ログイン・ログアウト2. ファイル・ディレクトリ3. Unix

4. メール・ HTML

5. C 言語入門

Page 4: プログラミング演習 I

UNIX

• 1969年 米国 AT & T ベル研• マルチタスク・マルチユーザ OS

• ほとんど C 言語により記述   UNIX の開発を目的として C 言語を

開発

Page 5: プログラミング演習 I

パスワード

• 忘れないこと• 大文字・小文字・数字を混ぜる• 破られないこと 悪意ある者は英単語・名前などの辞書

を活用する

Page 6: プログラミング演習 I

ファイル

システムのファイル

他ユーザのファイル

自分のファイル

テキストファイ

ル プログラムファイ

ルデー

タファイ

ル情報のまとまり

•講義ノート•メモ•取扱説明書•写真

Page 7: プログラミング演習 I

ディレクトリ

• ファイルの整理整頓  (木)

• ファイルは葉、ディレクトリは節

電磁気ノート 憲法ノート洗濯機取説

テレ

ビ取説

ROOT

文書

講義ノート 取扱説明書 画像

Page 8: プログラミング演習 I

ディレクトリの木構造

/

usrhome

a00500 a00501 bin

システム

ホームディレクトリ

cd /usr/bin

bin

cd ..

home

Page 9: プログラミング演習 I

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

Page 10: プログラミング演習 I

ファイル・ディレクトリの操作

• cd dir0 : ディレクトリ dir0 への移動

• cp file0 file1 : file0 を file1 としてコピー

• mkdir dir0    :dir0 を新しく作成• ls : ファイル・ディレクト

リ一覧

Page 11: プログラミング演習 I

特別なディレクトリ

• 現在地(カレントディレクトリ):    .

• 親:        ..

• ホームディレクトリ:         

Page 12: プログラミング演習 I

オンラインマニュアル

• man 各種マニュアル (MANual )• man cd コマンド cd のマニュアルの表

示• man man   man のマニュアル• SPC で次ページ、 q で終了

Page 13: プログラミング演習 I

UNIX とデバイス

• デバイス:機器• UNIX では全ての機器の操作をファイ

ル経由で行う• /dev/

Page 14: プログラミング演習 I

デバイスファイル

/

usr

fd0a00500 a00501

dev

stdout

home

Page 15: プログラミング演習 I

デバイスファイル

• stdin キーボードからの入力• stdout  ディスプレイへの出力   (何文字かたまってから出力)• stderr  ディスプレイへのエラー出力   (一文字ずつすぐに出力)

Page 16: プログラミング演習 I

テキストファイルの表示

• テキストファイルの内容を stdout に書き込む• cat (conCATinate) • cat file0 :file0 の stdout への書き込み• cat file0 file1 : file0 file1 をつなげて書き込み• cat > file1 : stdin の内容を file1 に書き込み• cat file0 > file1 : file0 を file1 に書き込み

Page 17: プログラミング演習 I

テキストファイルの編集

• emacs, mule の利用• テキストファイルの編集• 統合環境(メール、コンパイル、シェ

ル。。)• マウスを使わない(でも済む)

Page 18: プログラミング演習 I

バッファ

a000% cda000% emacs

モード

ミニバッファ

バッファ#include

main(){}

Page 19: プログラミング演習 I

ハードディスク

メモリ

キーボード

ABC

ABC

ABC

Page 20: プログラミング演習 I

ハードディスク

メモリ

キーボード

ABC

ABC

filename.txt

filename.txt

ABC

C-x C-s

保存

Page 21: プログラミング演習 I

インターネット

• TCP/IP を使った、唯一最大の国際的「ネットワークのネットワーク」

• 米国高等研究計画局 ARPA (Advanced Research Project Agency) (1971)

• TCP/IP (Transmission Control Protocol/  Internet Protocol)

• OS やメディアやネットワークモデルに依存しない

Page 22: プログラミング演習 I

WWW

• World Wide Web

• 欧州核物理学研究所• ドキュメントの埋め込み

Page 23: プログラミング演習 I

HTML とブラウザ• Hyper Text Markup Language• タグによる修飾• ブラウザ: HTML 文書の閲覧• mosaic 米イリノイ大学 (1993)• →大学当局の有料化反対・独立• →  Netscape Communication 社• イリノイ大でも研究継続• →Microsoft へ→ Internet Explorer

Page 24: プログラミング演習 I

URL (文書の位置)

• http://www.yamagata-u.ac.jp/

プロトコル(ファイルへのアクセス方法)他に ftp: https: gopher: mailto: など

コンピュータ名

Page 25: プログラミング演習 I

HTTP( WWWサービス用プロトコ

ル)• 「ファイルの要求」と「転送」だけの

単純なプロトコル

Page 26: プログラミング演習 I

公開

• 公の場である• 公開内容に対する責任• 閲覧内容の「管理者による管理」• 閲覧内容の自己管理

Page 27: プログラミング演習 I

タグ(どのように見せるか)

<HTML><HEAD><TITLE>  ページの名前など </TITLE></HEAD><BODY>公表したいことをここに書く。</BODY></HTML>

Page 28: プログラミング演習 I

電 子メール

• ネットワーク経由の郵便• 好きな時間に読み書き• 同時に複数の相手へ• 第三者から閲覧の可能性

Page 29: プログラミング演習 I

チェーンメール

• 人からのメールを大勢に転送• 厳禁• 多人数への情報伝達は WWW で

Page 30: プログラミング演習 I

ウィルス

• アプリケーションを利用したシステムの破壊

• 要注意

Page 31: プログラミング演習 I

マナー

• 半角かなは使わない• 極端に長いメールは出さない• subject に日本語は使わない• ウィンドウズアプリケーションを前提と

しない

Page 32: プログラミング演習 I

メール

メールサーバ

ホームディレクトリ

差出人

ホームディレクトリ

Page 33: プログラミング演習 I

メールアドレス

[email protected]

ユーザ IDメールサーバ名

Page 34: プログラミング演習 I

メールアドレス

[email protected]

学科 . 米沢キャンパス . 山形大学 . 学術 . 日本

Page 35: プログラミング演習 I

メールの構造

To:Subject:   my first email!Reply-to:---

こんにちは。

さようなら。

ヘッダ

本文

[email protected]

あて先

タイトル

Page 36: プログラミング演習 I

メールの送受信

メールサーバ

ホームディレクトリ

相手

ホームディレクトリ

emacsの利用

Page 37: プログラミング演習 I

メールの送信

メールサーバ

ホームディレクトリ

受取人

ホームディレクトリ

Page 38: プログラミング演習 I

C-x mTo:Subject:Reply-to: [email protected] follows this line---

---Mule: *mail*

[email protected]

メールの本文C-c C-w

---本谷秀堅tel. 0238-26-3332

C-c C-c

Sending … done

emacs

Page 39: プログラミング演習 I

メールの受信

メールサーバ

ホームディレクトリ

差出人

ホームディレクトリ

Page 40: プログラミング演習 I

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: 終了

Page 41: プログラミング演習 I

シェル• ユーザと 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

Page 42: プログラミング演習 I

アクセス権モード

• ファイル・ディレクトリの公開の仕方• 読み・書き・実行• 自分・同一グループ・他人

Page 43: プログラミング演習 I

アクセス権モード

自分 同一グループ 他人

読み

書き

実行

×

×

×

×

×

×

Page 44: プログラミング演習 I

グループ

a00500a00501a00502a00503…

b00500b00501b00502…

a01500a01501a01502…

hiranakatamurakohdakobayashi…

a00 b00a01

staff

Page 45: プログラミング演習 I

アクセス権モード

r: 読みw: 書きx: 実行

a00500@eie00% ls -l-rw-r----- 1 a00500 a00 316 5月10日

rwx rwx rwx

自分    自グループ  他人

Page 46: プログラミング演習 I

アクセス権モードの変更

chmod o+r filename

u g o

+ -

r w x

誰に なにを

Page 47: プログラミング演習 I

テキストファイルに 実行権

シェルが内容を OS に渡す

Page 48: プログラミング演習 I

file.txt

mkdir newdir

file.txt

Page 49: プログラミング演習 I

file.txt

a00500@eiew% ls -l-rw-r--r-- file.txt

読み書きのみ可実行は不可

Page 50: プログラミング演習 I

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)

Page 51: プログラミング演習 I

コマンド

• コンピュータに動作を命令• 機 械語• 希望する動作をさせる命令を作成

Page 52: プログラミング演習 I

プログラミング言語

• 希望する動作のリスト:プログラム• プログラミング言語( C 、 FORTRA

N 、、、)• 人間が読める

Page 53: プログラミング演習 I

C 言語

• 1972年 米ベル研• Dennis M. Ritchie

• 関数型• UNIX 記述用• 文字数自由• 書式自由

Page 54: プログラミング演習 I

コンパイル

• 翻訳 : プログラミング言語 → 機 械語

• C コンパイラ :   C 言語を機 械語へ

   cc (C Compiler)

gcc (GNU C Compiler)

Page 55: プログラミング演習 I

処理の流れ

1. 作業ディレクトリの作成2. プログラムソースの作成3. コンパイル4. 実行5. デバッグ

Page 56: プログラミング演習 I

プログラムソース

• コンピュータに実行させたい命令の記載

• emacs などのエディタを利用• ファイル名は ***.c

• 関数の寄せ集め• 関数の末尾に必ず ; をつける

Page 57: プログラミング演習 I

関数

• 入力と出力• y=f(x)

Page 58: プログラミング演習 I

#include <stdio.h>

main(){

printf( “Hello, world\n” );

}

ヘッダファイルの組み込み

main関数最初に実行される関数

printf関数画面に表示するための関数あらかじめ用意されている

セミコロン文章の末尾

#include <stdio.h>main(){ printf( “Hello, world\n” );}

Page 59: プログラミング演習 I

コンパイル

• 人が読める言語から機 械語への翻訳• コンパイラ• C コンパイラには多数ある   cc: C Compiler

gcc: Gnu C Compiler

翻訳家によって翻訳結果も異なる得手不得手

Page 60: プログラミング演習 I

% lshello.c% gcc hello.c% lsa.out hello.c% ./a.outHello, world%

Page 61: プログラミング演習 I

デバッグ

• 誤りの修正• プログラミング=デバッグ• パニックにならないこと• エラーメッセージを読むこと

Page 62: プログラミング演習 I

変数の宣言

#include <stdio.h>

main(){ int i;

i = 3 * 2; printf( “i=%d\n”, i );}

上から実行

Page 63: プログラミング演習 I

変数の宣言

• 使う変数をあらかじめ宣言• 整数用、実数用など使い分け

#include <stdio.h>

main(){ int i;

i = 3 * 2; printf( “i=%d\n”, i );}

Page 64: プログラミング演習 I

変数の宣言

• 結果を格納するための「メモリ上の領域」

• 整数用、実数用などでサイズが異なる

  int : 整数  double : 実数

Page 65: プログラミング演習 I

変数の宣言

ハードディスク

メモリ

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 );}

Page 66: プログラミング演習 I

変数の型

• 同じ値が違う意味• メモリ: 記録できる場所が1 byte ず

つ1列に並んでいる• アドレス: 先頭から何番目か

Page 67: プログラミング演習 I

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

アドレ

Page 68: プログラミング演習 I

変数の型

• char 1byte 文字など• short 4byte  整数• int 4byte  整数• long 4byte  整数• double 8byte  実数• unsigned 0以上の数のみ

Page 69: プログラミング演習 I

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

Page 70: プログラミング演習 I

表示

• printf( )関数に変数の型を教える• C++ では解決• % 記号で表示の仕方を指定

Page 71: プログラミング演習 I

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進表記

小数点以下切捨て

Page 72: プログラミング演習 I

printf( “値は %d です。次の値は %02d です。” , i, j );

i=3;j=4;

書式 %d の箇所に値。 変数

値は3です。次の値は04です。

Page 73: プログラミング演習 I

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

見慣れた表示指数表示桁数の指定

Page 74: プログラミング演習 I

関数

• よく使う機 能をまとめる• f(x): 引数 x    と  出力 f

Page 75: プログラミング演習 I

関数

メイン関数

宣言#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 )}

Page 76: プログラミング演習 I

関数

メイン関数

宣言

#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 )}

戻り値の型引数の型

値を戻す

Page 77: プログラミング演習 I

#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 )}

Page 78: プログラミング演習 I

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 )}

Page 79: プログラミング演習 I

くり返し文

• 変数の値を更新しつつくり返し

Page 80: プログラミング演習 I

for( i = 0 ; i < 10 ; i++ ){

printf( “%d”, i );

}

初期値繰り返す条件

更新ルール

Page 81: プログラミング演習 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 );

}

}

Page 82: プログラミング演習 I

i=0;while( i<10 ){

printf( “%d”, i ); i++;}

i<10   の間ずっと繰り返す

Page 83: プログラミング演習 I

for( i = 0 ; i < 10 ; i++ ){

printf( “%d”, i );

}

i=0;while( i<10 ){

printf( “%d”, i ); i++;}

初期値条件

更新

Page 84: プログラミング演習 I

i=0;while( i<10 ){

printf( “%d”, i ); i++;}

繰り返す条件

Page 85: プログラミング演習 I

条件文

• 条件に合致したか否かの判断• if (式 )

文1 ;

else

文2 ;

Page 86: プログラミング演習 I

01x > yx >= yx < yx <= yx == yx != y

式1 && 式2式1  || 式2

if( ){ printf(“…”); 文2;  文3;}else { 文4;  文5;}

成立すると1になる

Page 87: プログラミング演習 I

i が1ずつ増える

main(){ int i;

i=0; while(1){ printf(“%d\n”, i*i ); if( i*i >= 300 ) break; i++; } printf( “%d\n”, i );

Page 88: プログラミング演習 I

プロセス

• 実行中のプログラム• UNIX はマルチプロセス• 複数のプロセスを同時に実行• バックグラウンドとフォアグラウンド• &をつけて実行するとバックグラウンド• C-z で一時停止、 C-c で中断• bg, fg で停止中のプロセス再開

Page 89: プログラミング演習 I

usrid@eiew0% emacs

emacs にかかりきり

Page 90: プログラミング演習 I

usrid@eiew0% emacs  &usrid@eiew0%

emacs は動いたまま他の仕事もできる。

Page 91: プログラミング演習 I

=

既知の対象の内部にある未知の対象の面積を求める