●コンピュータはなぜ動くのか覚書
●コンピュータはなぜ動くのか     矢沢久雄 著 発行 日経BP社 \2,400

コンピュータはなぜ動くのか
※日経BP出版 著者矢沢 久雄 \2,400
この本をお薦めします。
==============================================================
1、絶対的な基礎
2、知識の範囲
3、ゴール
4、ハードウェアとソフトウェア
5、データベース
6、ネットワーク
===============================================================
本の内容を自分なりに覚書したものです。
コンピュータの絶対3大原則
1、コンピュータは入力、演算、出力を行なう装置である。
2、プログラムは命令とデータの集合体である。
3、コンピュータの都合は、人間の感覚とことなる場合がある。

ハードウェアの基本は入力・演算・出力の3つである。
すべての情報を数値で表し、演算するのがコンピュータ
プログラムは命令とデータの集合体

y=f(x)の意味はxという変数をfという関数に代入すると演算が行なわれ、その結果がyに代入されるという意味。
ソフトはプログラム言語で記述されたソースコード(アルファベットで記述されている)をマシン語(ネイティブ・コード、数値1,0)に変換してコンピュータを動かす。この変換をコンパイルという。
コンピュータは数値で何でも処理するので人間の感覚とは違う。

CPUとは演算をおこない、メモリーとI/Oを制御する。
I/Oはパソコン本体と周辺機器を接続してデータの受渡しを可能にするもの。
I/Oはパソコンの背面にあるコネクターの数だけある。

CPU・メモリー・I/Oを電線で接続して、電源を入れ、CPUにクロック信号を供給するとコンピュータができる。

CPUは中央演算処理装置です(Center Processing Unit)の略である。

CPUを動作させるクロック信号の周波数をHz(ヘルツ)で表す。
1秒間に1回のクロック信号を発生さすと1Hzです。100MHzとは100×100万=1億回/秒クロック信号を発生さすことです。
M(メガ)は100万という意味です。


CPUの内部にある演算用のレジスタのサイズがCPUの機能を表すビット数となる。
Pentiumと呼ばれるCPUは32ビットCPUです。

1、CPUはコンピュータの頭脳であり、プログラムを解釈・実行命令を出す。
2、メモリーはプログラムやデータを記憶する。
3、I/OはInput/Out-putの略です。

クロック信号とは電圧の高低を繰り返す電気信号が必要です。
クロック信号を出力する部品が「クロック・ジェネレータ」です。
クロック・ジェネレータの中の水晶(クリスタル)に応じてクロック信号を発生さす。
クロック信号の周波数がCPUの動作速度になります。

マシン語とは直接CPUが実行できる数値の並びとなったプログラムのことで「ネイティブ・コード」と呼ばれることもある。
マシン語とは1000111のように"1"と"0"で成り立っている。

メモリの中には複数のデータ格納領域があり、個々の格納領域は、0番地から始まる。この番号のことをアドレス番地と呼ぶ。

CPUの持つフラグ・レジスタの役割は、演算の結果の値でなく、ゼロ・マイナス・オーバーフローしたことを記録します。

メモリーのアドレス空間とは、メモリーの中にあるデータの格納場所を指定するアドレスの範囲のこと。
0から255番地のメモリー空間があり、1つの番地に8ビット(=1バイト)の命令やデータを記録できる。

マシン語は2進数ですが、アセンブリ言語では数値データを記述するときに10進数・16進数を使う。
123のように単に数値だけの場合は10進数とみなされ、123Hのように末尾にHが付くと16進数とみなされる。

ウィンドウズの電卓をメニューの表示から関数電卓に切り替えると10進数を2進数に簡単に変換できます。


CPUは解釈・実行できる命令の数が基本的に1つづつしか処理できない。

フローチャートとは「流れ図」のこと。
プログラムの実行は「順次進行」「条件分岐」「繰り返し」の3つの動作の流れになる。
「順次進行」とはメモリに記憶された下位アドレス(小さい番地)から上位アドレス(大きい番地)
に向かって流れていく。
「条件分岐」とは条件に応じてプログラムの流れが枝分かれするプログラムの流れ。
「繰り返し」とは特定の範囲を何度か繰り返すプログラムの流れ。

CPUのPCレジスタが10番地を指定しているとすると、メモリの10番地に3バイト分の命令を出力する。
メモリの10番地から12番地の3バイト分が使われる。メモリはI/Oレジスタに3バイト分の命令を出力する。
メモリが出力した後、PCレジスタはメモリの13番地に次の命令を出力する。

以下じゃんけんゲーム
--------------------------------------------------

'手を表す変数を初期化する。janken.vbs
Dim te(2)
te(0) = "グー"
te(1) = "チョキ"
te(2) = "パー"

'ユーザーの勝ち数をカウントする変数を初期化する。
kachi = 0

'乱数のネタを初期化する。
Randomize

'起動メッセージを表示する。
MsgBox"じゃんけんゲーム Ver.1.00 by H.Yazawa"

'5回勝負する。
For i = 1 To 5

'ユーザーの手を入力する。
user = CInt(InputBox("0:グー、1:チョキ、2:パー"))

'コンピュータの手を乱数で決める。
computer = CInt(Rnd * 2)

'出した手を表す文字列を作成する。
s = "ユーザー:" & te(user) & ":、コンピュータ: " & te(computer)

'勝敗を判定し、結果を表示する。
If user = computer Then
MsgBox s & "・・・あいこです!"
ElseIf computer = (user + 1) Mod 3 Then
MsgBox s & "・・・ユーザーの勝ちです!"
kachi = kachi + 1
Else
MsgBox s & "・・・コンピュータの勝ち!"
End If
Next

'ユーザーの勝ち数を表示する。
MsgBox"ユーザーの勝ち数:" & kachi

------------------------------------------------------------------
プロのプログラマはプログラムを書く前に、フローチャートを書いてプログラムの
流れを考えます。

フローチャート図記号

楕円、長方形、ひし形、直線、矢印で構成できる。

アルゴリズムとは、与えられた問題を解く手順のことです。
アルゴリズムとは日本語に訳すと「演算法」となる。
コンピュータで目的を達成するために「数値の入力」「数値の加算」「結果の表示」という3つの処理の手順のことをいう。
プログラムの流れを図示したフローチャートはアルゴリズムを表す。
アルゴリズムを考えるポイントは全体の大きな流れと、部分部分の細かな流れの2つに分けて考える。
アルゴリズムとは問題を解く手順を、もれなく、文書や図で表したもの。
JIS(日本工業規格)では「明確に定義された有限個の規則の集まりであって、有限回適用することにより問題を解くもの。
たとえば、sin x を決められた精度で求める算術的な手順をもれなく記述した文」と表現されています。

大きな流れは=初期化処理→繰り返し処理→終了処理

割り込み処理とは突然にプログラムの特定部分にジャンプさせること。
割り込み処理とはハードウェアから要求信号が来た場合にプログラムの流れが分岐する特殊な条件分岐。

コンピュータはハードウェア的に割り込み処理機能を持っている。
割り込みのことを英語で「インタラプト(interrupt)」と言う。

イベントドリブンとはウィンドウズから通知が来たという条件と、通知の内容に応じてプログラムの流れが決定する特殊な分岐。
状態遷移図とは、複数の状態があり、さまざまな要因によって別の状態に変わっていく流れのこと。

プログラムの流れの基本はCPUのPCレジスタの値が自動的に増えていくようになっているから順次進行である。

条件分岐と繰り返しは、
高水準言語では→ブロックで表され
マシン語・アセンブリ言語では→ジャンプ命令で表され
ハードウェア的にはPCレジスタにジャンプ先のメモリーアドレスが設定されることで実現する。


コンピュータに与えるプログラムのアルゴリズムはなんら頭を使うことなく手順とおりにやれば必ずできる機械的な手順でなければならない。

ユークリッドの互除法とは
2つの数で大きい方から小さい方を引くことを、2つの数の値が同じになるまで繰り返す。
最終的に2つの数が同じ値になったら、それが最大公約数です。

12 42
--------------
↓ ↓
12 30
--------------
↓ ↓
12 18
--------------
↓ ↓
12 6
--------------
↓ ↓
6 6


12と42の最大公約数を求めるコードは koyaku.vbs
a = 12
b = 42
While a <> b
If a > b Then
a = a - b
Else
b = b - a
End If
Wend
MsgBox"最大公約数は、" & CStr(b) & "です。"


主な定番アルゴリズム

名称             用途
ユークリッドの互除法     最大公約数を求める
エラトッステネスのふるまい  素数を求める
線形探索 データを探索する
2分探索           データを探索する
ハッシュ法          データを探索する
バブル・ソート        データを整列させる
クイック・ソート       データを整列させる

素数かどうかを判定するプログラム sosu.vbs
a = 91
s = "は、素数です。"
For i = 2 to (a - 1)
If a Mod i = 0 Then
s = "は、素数ではありません。"
Exit For
End If
Next
MsgBox CStr(a) & s

鶴と亀があわせて10匹います。足の数の合計は32本です。鶴と亀はそれぞれ何匹いますか?
X + Y = 10
2 x X + 4 x y = 32

turukame.vbs

For x = 0 To 10
For y = 0 To 10
a = x + y
b = 2 * x + 4 * y
If (a = 10) And (b = 32) Then
MsgBox"鶴 = " & Cstr(x) & ",亀 = " & CStr(y)
End If
Next
Next

1つの問題を解くアルゴリズムが複数ある場合には、プログラムとして実行した場合に処理時間の短い
方がよいアルゴリズムであるといえる。

線形探索とは複数のデータの先頭から末尾まで一つずつ順番に調べて目的のデータを見つけること。
アルゴリズムの工夫の例に”番兵”があります。

例題
100個の箱があり、その中に色々な数値を書いた紙が入っている。
箱には1から100の番号が付いている。
この100個の箱の中に、目的の数値が含まれているかを判定する。

番兵を使わないと変数Nが100を超えているどうかを何度も判定するフローチャートになる。
番兵を使うと変数Nが100を超えているかどうかを1回だけ判定するフローチャートになる。


アルゴリズムを考えるときには紙の上に文書や図で手順を書いてみること。

===============================================================================================
以下データ構造について

変数とはデータの入れ物。
複数のデータが直線的に並べられたデータ構造を配列と呼ぶ。
スタックとキューの違いは、
スタックはLIFO形式(Last In First Out)後入れ先出し
キューはFIFO形式(First In First Out)先入れ先出し

プログラムを作成する人は、アルゴリズム(処理手順)とデータ構造(処理の対象となるデータの並べ方)の
2つを一緒に考えなければならない。

第1段階
char a; /*変数を宣言する*/
a = 123;/*変数にデータを格納する*/

charはC言語のデータ型で、1バイトの整数を格納するということを意味します。
1行目のコードでメモリー領域を確保して、1バイトの整数を格納して、そこに a とう名前を付ける。


第2段階
3つのデータをa,b,cという3つの変数に格納し、それらの値を降順で並べ替えるプログラム。

/*変数を宣言する*/
char a, b, c, tmp;

/*変数にデータを格納する*/
a = 123;
b = 124;
c = 125;

/*降順に並べ替える*/
if(b > a){
tmp = b;
b = a;
a = tmp;
}

if(c > a){
tmp = c;
c = a;
a = tmp;
}

if(c > b){
tmp = c;
c = a;
a = tmp;
}

if(c > b){
tmp = c;
c = b;
b = tmp;
}


第3段階
1000人の給与計算を合計するプログラムの場合に1000個の変数を宣言するのではなく、配列を使う。
配列を使うと、複数の変数を同時に宣言するのと同じプログラムが効率的に作成できる。

配列は複数のデータを格納するためのメモリー領域をまとめて確保し、全体に1つの名前を付けたもの。
配列内の個々のメモリー領域は [ ] の中に指定された番号で個別に扱える。

char x[3]

個々のメモリー領域を
x[0]
x[1]
x[2]

要素3個の配列を使うプログラム
char x[3]; /*配列を宣言する*/
x[0] = 123; /*配列の0番目のデータを格納する*/
x[1] = 124; /*配列の1番目のデータを格納する*/
x[2] = 125; /*配列の2番目のデータを格納する*/

単独の変数を使用するより並べ替えのアルゴリズムを実現するプログラムが効率的に記述できる。

配列が便利なのはループカウンタ(繰返し回数をカウントする変数)の値と配列のインデックスを対応できるから。

配列は、物理的なメモリー構造をそのまま利用した最も基本的なデータ構造です。

定番データ構造について
名称         データ構造の特徴
スタック   データを山のように積み上げる
キュー    データを行列のように並ばせる
リスト    データの並びを任意に変更できる
2分木    データの並びを二股に分ける


スタック(stack)とは「干草を積んだ山」という意味。
牧場で家畜に食べさす干草は、地面に積み上げられ山となるが、干草を下から上に積み上げていく。そして、上から順に与えられる。
すなわち、積み上げた順序とは逆の順序で使われる。これを「LIFO(最後に格納されたデータが最初に処理される)後入れ先出し」

キュー(queue)は「待ち行列」という意味で、FIFO形式(First In First Out)先入れ先出し
先に並んだデータを先に処理する。

リストは、何人かの人が手をつないで並んだ状態。手のつなぎを変えれば並び順を変更できる。

2分木は、枝が二股に分かれ、枝の分岐点に葉(データ)が1枚ある。

スタックとキューはすぐに処理できないデータをとりあえず格納しておくという点で似ている。

スタックを実現するにはスタックのサイズを要素数とした配列と、スタックの最上部に格納されたデータのインデックスを表す変数を宣言する。
この変数を「スタック・ポイント」と呼ぶ。
スタックのサイズは最大でも100個までデータが積めれば十分と判断したら要素数100個の配列を宣言したらよい。
次に、スタックにデータを格納する関数(プッシュ関数)と、データからスタックを取り出す関数(スタック関数)を作成します。
配列、スタック・ポイント、プッシュ関数、ポップ関数4つセットでスタックが実現される。

char Stack[100];      /*スタックの実体となる配列*/
char StackPointer = 0;   /*スタック・ポインタ*/

/*プッシュ関数*/
void Push(char Data){
/*スタック・ポインタが指すインデックスにデータを格納する*/
Stack[StackPointer] = Data;
/*スタック・ポインタの値を更新する*/
StackPointer++;
}

/*ポップ関数*/
char Pop(){
/*スタック・ポインタの値を更新する*/
StackPointer--;
/*スタック・ポインタが指すインデックスからデータを取り出す*/
return Stack[StackPointer];
}

------------------------
キューを実現するには

1、配列
2、先頭のデータのインデックスを表す変数1
3、末尾をデータのインデックスを表す変数2
4、キューにデータを格納する関数1
5、キューからデータを取り出す関数2

配列の末尾までデータを格納したら、次の格納位置が配列の先頭に戻るようにすると直線の配列がつながり輪の状態になる。

char Queue[100];   /*キューの実体となる配列*/
char SetIndex = 0; /*書き込み位置のインデックス*/
char GetIndex = 0; /*読み出し位置のインデックス*/

/*データを格納する関数*/
void Set(char Data){
/*データを格納する*/
Queue[SetIndex] = Data;
/*書き込み位置のインデックスを更新する*/
SetIndex++;
/*配列の末尾に達したら先頭に戻す*/
if(SetIndex >= 100){
SetIndex = 0;
}
}
/*データを読み出す関数*/
char Get(){
char Data;
/*データを読み出す*/
Data = Queue[GetIndex];
/*読み出し位置のインデックスを更新する*/
GetIndex++;
/*配列の末尾に達したら先頭に戻す*/
if(GetIndex >= 100){
GetIndex = 0;
}
/*読み出したデータを返す*/
return Data;
}

-----------------------------------
C言語のプログラムでリストと2分木を実現する方法を理解するには構造体の知識が必要。

構造体とは複数のデータを一つにまとめて名前を付けたもの。

C言語の構造体は struct というキーワードに続けて 名前 を付けその後を {  } でブロックにして、
ブロックの中に複数のデータを並べたもの。

struct Testkekka{
char Kokugo;
char Sugaku;
char Eigo;
};
---------------------
struct Testkeka sato;
sato.Kokugo = 80;
sato.Sugaku = 90;
sato.Eigo = 100;
---------------------------
値を構造体に格納したり、読み出すには . (ドット)を使い sato.Kokugo のような構文を使う。
100人のデータを扱うプログラムだとTestKekaをデータ型とした要素数100個の配列を宣言する。
================================================================================================
リストは配列の個々の要素が他の要素と手をつないだようなもの。
手をつなぐためのメンバーの追加方法

struct Testkeka* Ptr;

------------------------------
struct TestKeka{
char Kokugo;
char Sugaku;
char Eigo;
struct Testkeka* Ptr;
};
-----------------------------------
配列のつながり情報を持ったPrtの値を入れ替えると、メモリ上の物理的な並び順とは異なる順序で
要素を並べ替えることができる。つまり、要素の並べ替えはPrtの値を変更するだけでできる。
もし、リストを使わないで要素のメモリ上の物理的な順序を並び替えるとすると時間がかかり処理時間が長くなる。

==========================================================
2分木は「2分検索」というアルゴリズムで使われる。
リストより2分木を使った方が早くデータを見つけることができる。
配列のような直線ではなく、2分木のような二股に分かれた経路を追うと、目的のデータに早くたどり着く。

struck TestKeka{
char kokugo;
char Sugku;
char Eigo;
struck TestKeka* Ptr1;
struck TestKeka* Ptr2;
};

--------------------------

=====================================================================================================
オブジェクト指向プログラミング

今後のプログラム開発の主流は Java か .NET になるでしょう。

オブジェクト指向プログラミングとは
「対象(オブジェクト)そのものに重点をおき、対象の振る舞いや操作が、対象の属性として備わるという考え
方に基づいてプログラミングすること。
プログラムの再利用が容易になり、ソフトウェアの生産性を高められる。
主なプログラミング・テクニックには、承継、カプセル化、多様性の3つがある。


プログラムの内容は最終的には数値の羅列になり、個々の数値は「命令」か「データ」のいずれかを表す。

従来のC言語やBASICなどは命令を関数で表し、データを変数で表す。
オブジェクト指向プログラミングは関係のある関数と変数をまとめたグループ(クラス)を複数組み合わせて1つのプルグラムを作成する。

クラスにまとめられた関数と変数を「メンバー」と総称する。

すべてのクラスを手作りしなければならないわけではない。事前にクラスライブラリと呼ばれる数多くのクラスが開発言語に
添付されている。それらのクラスライブラリを利用することができるのでプログラミングを効率化できる。
------------------
モデリングとはどのような物で構成されているかを分析する作業。
モデリング作業では「部品化」と「省略化」を行なう。
部品化とは現実世界を複数のオブジェクトの集合体として分割すること。


UML(Unified Modeling Language 統一モデリング言語)
9種類ある。

1 ユースケース図(use case diagram) プログラムの使われ方を示す。
2 クラス図(class diagram)          クラスおよび複数クラスの関連を示す。
3 オブジェクト図(object diagram) オブジェクトを示す。
4 シーケンス図(sequence diagram) 複数オブジェクトの関連を時間に注目して示す。
5 コラボレーション図(collaboration diagram) 複数オブジェクトの関連を協調関係に注目して示す。
6 ステートチャート図(statechart diagram) オブジェクトの状態変化を示す。
7 アクティビティ図(activity diagram) 処理の流れなどを示す。
8 コンポーネント図(component diagram) ファイルおよび複数のファイルの関連を示す。
9 デプロイメント図(deployment diagram) コンピュータやプログラムの配置方法を示す。


オブジェクト指向プログラミングの設計では、最初に必要な数だけクラスを決め、後から個々のクラスが持つべき
関数と変数を決める。後からグループ化してクラスを作成するのではない。


オブジェクト指向プログラミングでプログラムを作成するとオブジェクトが他のオブジェクトの持つ関数を呼び出す
ことでプログラムが動作します。これをオブジェクト間の「メッセージ・パッシング」と呼ぶ。

従来の言語ではフローチャートで考えるが、オブジェクト指向プログラミングではシーケンス図で考えることも必要。

オブジェクト指向プログラミングの3本柱は「承継」「カプセル化」「多態性」
承継は既存のクラスの持つメンバーを引き継いで新たなクラスを作成する。
カプセル化はクラスの持つメンバーの中で、クラスの利用者に見せる必要のないものを隠すこと。
多態性とは、同じメッセージに対してオブジェクトが複数の操作を行なうこと。

今後のプログラム開発は、下記のような構造になる。

アプリケーション
フレームワーク     
(実行エンジン・クラスライブラリ)
OS(Windows . Linuxなど)
ハ ー ド ウ ェ ア
---------------------------------

オブジェクト指向プログラミングは「部品を組み合わせるプログラミング技法」

==========================================================================================================
データベースについて

データベースにはカード型データベースとリレーショナル・データベースがあります。
カード型データベースは小規模
リレーショナル・データベースは大規模
現在データベースといえば、リレーショナル・データベースを指すことがおおい。

DBMSとはデータベースマネジメントシステムです。

1台のパソコンに全ての資源(データファイル、データベースシステム、アプリケーションなど)がある形態をスタンドアロン型システム
クライアント/サーバ型システムは1台のパソコンにデータファイル、データベースシステムを配置、利用者はアプリケーションが入ったパソコンから利用する。
サーバーとクライアントのパソコンがインターネットで繋がっていれば「Webシステム」

===========================================================================================================
TCP/IPとは「Transmission Control Protocol/Internet Protocol」
TCPプロトコルとIPプロトコルを一緒に使うという意味。

MACアドレスとはネットワーク・カードの識別番号。

IPアドレスとはTCP/IPネットワークで使用されるソフトウェア的な番号。
IPアドレスは32ビットの数値で、8ビットづつ .で区切った4つの数値です。
前から3つまでのグループ上位28ビットが企業を表すネットワーク・アドレスです。最後の1つ下位4ビット
が個々のコンピュータを表すホスト・アドレスです。
8ビットで表される数値は10進数の0〜255なのでIPアドレスとして使える値は0.0.0.0から255.255.255.255の4,294,967,296通りです。


TCP/IPネットワークで送受信されるデータには、MACアドレスとIPアドレスの両方が付加されている。

DHCPとはDynamic Host Configuration Protocol(動的にホストを設定する)

マイネットワークのアイコンを右クリック>プロパティ>インターネットプロトコルを選択>プロパティボタンをクリック>IPアドレス設定

デフォルトゲートウェイとはルーターのIPアドレスのこと。

ルーターとは経路を決めるもの。

インターネットは世界中のLANが持つルーターが相互に情報を交換しあうことで成り立っている。

ルーティングテーブルを見るには、コマンド・プロンプトから route prit で見れます。

ルーティングテーブルは5つの列からなる表。

1,Network
2,Destination
3,Netmask
4,Gateway
5,Interface

Metricは送信の際に通過するルーターの数を表す。

ルーターを経由したデータ転送を ルーティング(routing)と呼びます。

コマンド・プロンプトから tracert www.xxxxxxx.com と打つと自分のパソコンから目的のサーバーまでの経路がわかる。
結果の1番目はルーターを表し、最終が目的のサーバーのルーターです。

ホスト名とドメイン名を組み合わせた名前を完全修飾ドメイン名と呼ぶ
=================================================================================================
暗号

WebショップのURLは通信に暗号化を使うことを示す https:// で始まる。

暗号化されていな状態の文書データを「平文(ひらぶん)」
暗号文を平文に戻すことを「復号化」と呼ぶ。

文字コードを3文字ずらして暗号化するプログラム

hirabun = InputBox("平文を入力してください。")
angobun = ""
For i = 1 To Len(hirabun)
moji = Mid(hirabun, i, 1)
angobun = angobun & Chr(Asc(moji) + 3)
Next
MsgBox angobun

--------------------------------------------------------
復号化するプログラム

angobun = InputBox("暗号文を入力してください。")
hirabun = ""
For i = 1 To Len(angobun)
moji = Mid(angobun, i, 1)
hirabun = hirabun & Chr(Asc(moji) - 3)
Next
MsgBox hirabun
--------------------------------------------------------
XOR演算で暗号化と復号化するプログラム

k = InputBox("鍵を入力してください。")
kagi = CInt(k)
bun1 = InputBox("平文または暗号文を入力してください。")
bun2 = ""
For i = 1 To Len(bun1)
moji = Mid(bun1, i, 1)
bun2 = bun2 & Chr(Asc(moji) Xor kagi)
Next
MsgBox bun2

-------------------------------------------
公開鍵暗号方式

送信者は公開鍵3を使って暗号化する
受信者者は秘密鍵5を使って復号化する。

公開鍵
1、2つの素数a,bを決める。
a=17,b=19
2、c=a*bを求める。
c=17*19=323
3、d=(a-1)*(b-1)を求める
d=(17-1)*(19-1)=288
4、dと公約数を持たないeを決める
e=11
5、cとeのペアを公開鍵にする
c=323 e=11
----------------------------
秘密鍵
1、(f*e)/dの余りが1になるfを求める
例)f=131
2、cとfのペアを秘密鍵にする
c=323 , f=131

-----------------------------
fの秘密鍵を求めるには、cの値を2つの素数a,bに分解しなければならない
cの値が1024桁あるとどんなコンピュータでも復号化をするのに膨大な時間がかかる。
============================================================================================
XMLとはExtensible Markup Language の略で「拡張可能なマークアップ言語」

Webページを記述するのに使用可能なタグを定めたものがHTMLです。
XMLの拡張子は  .xml  です。

コンピュータシステムの開発手順の規範は「ウォータフォール・モデル」と呼ばれる7つの工程がある。
1、基本計画
2、外部設計
3、内部設計
4、プログラム設計
5、プログラミング
6、テスト
7、運用・保守

ユーザーの視点から見たものを外部、開発者の視点から見たものを内部とよぶ。

テスト結果を定量的に示す方法
1、塗り潰しチェック
2、カバレージ