第4章 ソフトウェアとプログラミング

第4章 ソフトウェアとプログラミング
§1 プログラム内蔵方式
§2 アルゴリズムとプログラムカウンタ
§3 基本ソフトと応用ソフト
§1 プログラム内蔵方式
• プログラム内蔵方式では、
プログラム(情報処理の手順書)をコン
ピュータ内部(記憶装置)に記憶する
• それでは、どのようにプログラムを利用し
てコンピュータは自動処理を行っているの
だろうか?
コンピュータの装置図(1/3)
• 電卓の仕組み
入力装置
(テンキー)
CPU
(演算装置
+制御装置)
出力装置
(液晶)
コンピュータの装置図(2/3)
• 電卓の使い方
入力装置
(テンキー)
CPU
(演算装置
+制御装置)
人間
出力装置
(液晶)
コンピュータの概念図(3/3)
• コンピュータの仕組み
入力装置
(キーボード)
CPU
(演算装置
+制御装置)
主記憶装置
主記憶に憶えきれ
ない情報を蓄える
(当面計算に必要
ない内容なら問題
にならないはず)
補助記憶装置
(ハードディスク)
出力装置
(液晶)
人間が不在でも計算が
できるように予め
• 計算の手順
• 計算データ
を憶えさせておく
PCの主要構造(1/4)
• PCの内部(筐(きょう)体)
http://www.sugilab.net/より転載
PCの主要構造(2/4)
• PCの内部
外部記憶
装置
主記憶装置
http://www.sugilab.net/より転載
PCの主要構造(3/4)
• PCの内部(マザーボード(1))
http://www.sugilab.net/より転載
PCの主要構造(4/4)
ハードディスク
CPU
DVD
ドライブ
FD
ドライブ
バス(BUS)
I/Oポート
主記憶装
置(メイン・
メモリ)
プログラム内蔵方式(1/2)
CPU内部構造
論
理
回
路
=
演
算
装
置
http://www.sugilab.net/より転載
プログラム内蔵方式(2/2)
CPU
制御装置
メイン・メモリ
命令語
記憶装置内の命
令の取り出し
命令
演算装置
データ語
演算装置で
命令の実行
繰
り
返
し
プログラム内蔵方式の基本動作
記憶装置
命令語
①
命
令
の
ア
ド
レ
ス
選
択
②
命
令
読
み
出
し
データ語
④
デ
ー
タ
読
出
し
⑤
デ
ー
タ
書
込
み
命令レジスタ
③命令
の解釈・
実行
制御装置
演算装置
論理回路により
作られている
プログラム内蔵方式の詳細
•
主記憶装置(メイン・メモリ)
1. 記憶格納場所ごとにアドレス(住所)が数字で割り振
られている
2. 記憶装置にデータを読み・書きするには、このアドレ
スを指定する
•
プログラムカウンター
1. 主記憶装置内のどの命令を今実行すべきかを、そ
の命令が書かれているアドレスで覚えている一時的
メモリ
2. プログラムカウンターは命令を実行するごとに普通
は1づつ増える
制御装置
プログラム
カウンタ
01
命令
レジスタ
命令a
② 転送
03
演算装置
03番地の
データに1を
加えろ
主記憶装置
アドレス
③データアドレ
ス転送
アドレス
レジスタ
①今実行すべき
アドレスを記憶
④計算に必
要なアドレ
スを記憶
記憶内容
01
命令a
02
命令b
03
12
04
05
05
命令c
06
07
45
08
命令d
…
…
制御装置
03番地の
データに1を
加えろ
プログラム
カウンタ
01
命令
レジスタ
命令a
⑥ 演算の具体的指示
アドレス
レジスタ
主記憶装置
④計算に必
要なアドレ
スを記憶
03
演算装置
レジスタ
⑤ 転送
12
⑦ 演算開始
演算回路
アドレス
記憶内容
01
命令a
02
命令b
03
12
04
05
05
命令c
06
07
45
08
命令d
…
…
制御装置
⑨次の計算の
ため1増やす
プログラム
カウンタ
02
命令
レジスタ
命令b
⑪データアドレ
ス転送
アドレス
⑩ 転送
アドレス
レジスタ
主記憶装置
06
演算装置
記憶内容
01
命令a
02
命令b
03
12
04
05
05
命令c
06
レジスタ
13
⑧ 演算結果
演算回路
07
45
08
命令d
…
…
レジスタの
結果を06番
地に書き込
め
制御装置
プログラム
カウンタ
02
命令
レジスタ
命令b
⑬演算の具体的指示
アドレス
レジスタ
主記憶装置
⑫計算に必
要なアドレ
スを記憶
06
演算装置
アドレス
記憶内容
01
命令a
02
命令b
03
12
04
05
05
命令c
06
レジスタ
13
⑭ 転送
演算回路
07
45
08
命令d
…
…
レジスタの
結果を06番
地に書き込
め
§2.アルゴリズム
•
•
与えられた問題を解くための機械的操作
からなる有限手続きのこと
アルゴリズムには3つの制御構造がある
1. 連続構造
2. 選択構造
3. 繰り返し構造
Perlプログラミングの例
ダブルクォーテション
print命令
文法: print "
";
機能: " "で挟まれた文字列を表示する
例: print "Hello World \n";
(注1)文字列の中の\nは改行記号
(注2)一つの命令の終わりはセミコロン(;)
Perlプログラムの実行
1. メモ帳でプログラムを書く
2. マイドキュメントにファイルとして保存
3. コマンドプロンプトを開く
メモ帳と同じサブメニュー「アクセサリ」にある
4. コマンドプロンプトに命令をタイピングする
>perl (ファイル名)
(注)プログラムのファイル名の指定がうまくいかないとき
は、『perl』の後にスペースを入れた後、ファイルのア
イコンをドラック&ドロップする
5. エンターキーを押す
エンターキーはここでは命令実行の意味
(1)逐次的構造のプログラム例
1.
2.
3.
4.
5.
6.
print " 『パペット・マペットのショートコント』\n";
print "カエル:ウシくん、ウシくん、もう12月だね。\n";
print "ウシ:そう、気がつけばもう今年も終わりか。\n";
print "カエル:クリスマスが今から楽しみだね。\n";
print "ウシ:ところで、カエルくんって、冬眠しなくっていいの?\n";
print "カエル:そういえば僕、カエルだったったんだ…";
上から順番に逐次的に(一つづつ)
処理される
プログラミングにおける変数(1/2)
変数
– データを利用する際メモリ内のアドレスを指定するのは大変
– アドレスの代わりにプログラムの中で使われるのが変数名
– 代入「変数名=xxxx」でメモリにxxxxが格納される
主記憶装置
プログラム
アドレス
1. $data1=125;
2. $data2=321;
3. $data3=237;
内容
01
02($data2)
321
03($data3)
237
04
変数への代入
05($data1)
125
プログラミングにおける変数(2/2)
• 変数を使った計算例
– データをプログラムに書くことさえすれば、電
卓の計算より速くなる
1.
2.
3.
4.
5.
6.
7.
$data1=125;
$data2=321;
$data3=237;
$data4=532;
$data5=291;
$result=$data1+$data2+$data3+$data4+$data5;
print "$result\n";
(2)選択構造のプログラム例(1/3)
if命令
文法:if(条件1){ 命令1}
elsif(条件2){ 命令2}
elsif(条件3){命令3}
else{命令4};
機能:
1.
2.
3.
4.
条件1が成立するとき、命令1を実行
条件1が成立せず条件2が成立するとき、命令2を実行
条件1・条件2が成立せず条件3が成立するとき、命令3を
実行
条件1~3が成立しないとき、命令4を実行
(2)選択構造のプログラム例(2/3)
条件1を
満たすか
Yes
命令1を
実行
No
条件2を
満たすか
Yes
命令2を
実行
No
条件3を
満たすか
Yes
命令3を
実行
No
命令4を
実行
(2)選択構造のプログラム例(3/3)
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
print "『血液占い』\n";
print "あなたの血液型を入力してください。";
$input=<>;
chop $input;
if($input eq 'A')
{print "A型のあなたは生真面目で仲間内でも信頼されてます。";}
elsif($input eq 'O')
{print "O型のあなたは何でもマイペース。急がばまわれを地でいくタイプ。";}
elsif($input eq 'AB')
{print "AB型のあなたは、A型の気持ちもわかるし、B型の気持ちもわかるよ
き相談相手。";}
elsif($input eq 'B')
{print "陽気なB型のあなたはみんなの人気者。";}
else
{print "あなたの血液型って$input なの? もしかして、宇宙人?それとも
…?";};
(3)繰り返し構造のプログラム例
1.
2.
3.
4.
5.
6.
7.
8.
$S=0;
$i=1;
while($i<=10)
{
$S=$S+$i;
print "$i,$S \n";
$i=$i+1;
};
繰り返される
命令
上のプログラムで5・7の命令が繰り
返されると変数がどのように変化し
ていくか考察せよ
(3)繰り返し構造のプログラム例
繰り返される命令
$S+$i ⇒ $S
$i+1 ⇒ $i
$S
0
$S
1
$S
3
$S
6
$S 10
$S 15
$i
1
$i
2
$i
3
$i
4
$i
$i
5
$S 21
$S 28
$S 36
$S 45
$S 55
$i
$i
$i
$i 10
$i 11
7
8
9
繰り返しによって、$Sに
0+1+2+3+4+5+6+7+8+9+10
の計算結果が記憶されている
6
(3)繰り返し構造のプログラム例2
繰り返したい計算
辺の数
$N ⇒$N= 2*$N(新しい辺の数)
辺の長さ
$a ⇒ $b=$a/sqrt(2.0+sqrt(4.0-$a*$a))
$b ⇒ $a(新しい辺の長さ)
(3)繰り返し構造のプログラム例2
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
$a=1.0;
$N=6;
$i=0;
while($i<=20)
{
$N=2*$N;
$a=$a/sqrt(2.0+sqrt(4.0-$a*$a));
$pi=$a*$N*0.5;
$i=$i+1;
print "$i,$pi \n";
};
繰り返される
命令
π = 3.14159 26535 89793 23846 26433 83279 50288 …
プログラムカウンタによる
アルゴリズム構造の実現
• プログラムを処理する仕方とアルゴリズム
構造とは密接に関連している
• 従って、コンピュータの処理できるアルゴリ
ズムは、3種類しかないことが分かる
(1)連続構造
制御装置
アドレス
プログラム
カウンタ
01
+1
命令
レジスタ
アドレス
レジスタ
主記憶装置
命令a
記憶内容
01
命令a
02
命令b
03
12
04
05
05
命令c
06
07
45
08
命令d
…
…
(2)選択構造
条件が満
たされない
とき
制御装置
プログラム
カウンタ
01
+1又は05へジャンプ
命令
レジスタ
アドレス
レジスタ
分岐命令
05
条件が満た
された時
条件が満
たされれば
05番地に
飛べ
主記憶装置
アドレス
記憶内容
01
分岐命令
02
命令b
03
12
04
05
05
命令c
06
07
45
08
命令d
…
…
(3)繰り返し構造
制御装置
プログラム
カウンタ
アドレス
05
+1又は01へジャンプ
命令
レジスタ
アドレス
レジスタ
主記憶装置
分岐命令
01
記憶内容
01
命令a
02
命令b
03
命令c
04
命令d
05
分岐命令
06
命令e
07
命令f
08
命令g
…
…
条件が満
たされれば
01番地に
飛べ
§3基本ソフトと応用ソフト
ハードウェアとソフトウェア(1/3)
• コンピュータは、主記憶装置に予め情報処理の
手順・データを記憶させて使う道具(ハードウェ
ア)
• ソフトウェア従って、コンピュータという装置を自
動処理装置として使うには、物理的装置の他に
憶えさえる内容が必要となる(ソフトウェア)
情報処理システ
ムとしてのコン =
ピュータ
ハードウェア
(記憶装置を
持った計算機)
ソフトウェア
+ (記憶させる内容)
ハードウェアとソフトウェア(2/3)
• 異なったハードウェアであっても、その相違をソフ
トウェアが吸収し、同じ操作手順の道具として扱
えることが可能であれば、コンピュータは道具と
して同じに見える
– 例:どのメーカのPCであってもWindowsがインストー
ルしてあれば、同じ使い方でよい
利用者
利用者
ソフトウェア
ソフトウェア
ハードウェア
ハードウェア
ハードウェアとソフトウェア(3/3)
• 同じハードウェアであってもソフトウェアが異なれ
ば操作する人間にとってコンピュータは違った道
具に見える
– 例:同一のPCであっても、Windowsをインストールして
使うこともあれば、Linuxをインストールして使うことも
ある(ハードディスクを切り替えて使うことも)
利用者
利用者
ソフトウェア
ソフトウェア
ハードウェア
ハードウェア
ソフトウェアの役割分担
応用ソフト
• ソフトウェアの分類
– 基本ソフト
– 応用ソフト
基本ソフト
ハードウェア
• 基本ソフト
– 応用ソフトが共通に必要とするハードウェアの管理機
能を提供する
– 例:インタフェース、ファイルをハードウェアに書き込む
• 応用ソフト
– さまざまな個別の用途のために作られたソフトウェア
– 例:文書処理(ワープロ)・表計算・電子メール・Web
ページ閲覧