2018-03-26 09:21:53 (6 years ago)
ノイマン型コンピュータ
メインメモリにプログラムを記憶させ(プログラム内蔵方式)、そのプログラムの命令を一つずつ取り出して実行し、その処理が終了したら次の命令に取りかかる(逐次制御方式)タイプのコンピュータ。アイディアのたたき台を作ったフォン・ノイマンに由来する。
現在のほとんどのコンピュータがこれに当たる。コンピュータといえばノイマン。ノイマンといえばコンピュータ。
逐次処理
プログラムは原則として先頭から順番に一文ずつ処理をされる。
手続き型コンピュータ言語は上の文から下の文へ逐次処理される。
コメント
プログラムの人間向けの解説。長いプログラムの場合はコメントがないと作者も忘れて意味不明になるので重要スキル。
//ではじめるか、/*と*/で挟む。こうするとコンピュータはそのあいだの文章は無視して飛ばす。
コマンドプロンプトのコマンド
昔はマウスがなかったため、ファイルの移動や操作も全てコマンドで行なっていた。
dir フォルダ表示
del フォルダ削除
mkdir メイク・ディレクトリでフォルダ作成
rmdir リムーヴ・ディレクトリでフォルダ移動
type フォルダの中身を表示
main関数
コマンドプロンプトを実行するための決まり文句。
int main(void)
{
なんらかの命令文
return 0;
}
このとき中かっこの中身をブロックと呼ぶ。
return 0; はここまで来たらコマンド終了という意味。
※ブロック内の各行末の;を忘れない!!
C言語
1972年にAT&Tベル研究所のデニス・リッチーが作ったプログラミング言語。
初心者がコンピュータを理解するのにいい言語。
分類上は機械語に近い低級言語(人間の言語に近いと高級言語。人類の意地を感じる)。
歴史が長く、多くのプログラミング言語に影響を与え、現在ブームのJava言語、JavaスクリプトなどはC言語の文法を参考に生まれた。
※スペースを表示させるようにするとバグがみつかりやすい。
プリプロセッサ命令
ソースコードをコンパイルする際の下処理の命令文。
コマンドプロンプトなどはなくても許してくれるが、C言語では最初の行に入ってないとコンパイルしてくれない。
最初に習うやつが、かの有名な
#include <ファイル名.h>
で、<>カッコの中の名前のファイル(※ヘッダファイル。拡張子は.h)を、コンパイルの際に読み込むことができる。
インクルードは含めるという意味。
ちなみによくあるstdio.hってなんやねんってかんじなんだけど、このファイルはC言語に標準装備されているファイルで、別に自分でスタジオを作る必要はない。
もっというと、スタジオという意味ではないらしい。
読み方は、スタンダードアイオードットエイチで、スタンダード・インプット/アウトプットの略らしい。
そして、このファイルがないと、C言語では文字表示のコード「printf」が機能しない。
文字列の改行
いくらエンターキーを押してもコンパイルしてくれない。
表示したい文字列の中に¥nを入れると、それ以降の文字列を次の行にしてくれる。
変換仕様
画面に文字列を出力したい際に用いるコードのこと。このコードのあとにカンマを打つと、カンマ以降の文字列がコンパイルの際に画面上に出力される。
%cは文字の表示。変換したい文字は''で挟む。
%dは整数の表示。変換したい数字はそのままでOK。
%fは小数の表示。変換したい小数はそのままでOK。
%sは文字列(2文字以上)の表示。変換したい文字列は""で挟む。
※使用例
printf("すきなこんだては「%s」です.¥n","ハンバーグ");
エスケープシーケンス
10進法の数字を8進法や16進法に直すのは非常に面倒くさいが、決まったコードを使うとコンパイルの際に10進数を自動的に8進数などに直してくれる。
10進数→8進数:数字の前に0をつける。014は16となる。
10進数→16進数:数字の前に0xをつける。0xFは15となる。
型
変数にはそれぞれタイプがあり、このタイプを決めてから好きな名前をつけることができる。
変数なので、ここに様々な入力値を代入することができる。
char・・・文字の表示。数値になおすと-128~127(1バイト)。
int・・・整数の表示。対応できる値は-2147483648~2147483647。
float・・・小数の表示。対応できる値は7桁まで(4バイト)。
double・・・小数の表示。対応できる値は15桁まで(8バイト)。
※ちなみに、整数×小数といった異なる型同士の演算の場合、コンピュータは精度の高い方に合わせて値を返す。
例えば、2×3.14は6ではなく、6.28を返す。
0.1(1÷10)を二進法で表した場合
1÷10は10進法では割り切れるが、2進法では無限小数になってしまうため、バイトが大きい型の方が正確な値を返すことができる。
#include
int main(void)
{
float F =0.1;
double D =0.1;
printf("float型は1÷10= %.18f\n",F); //「%.18f」の部分は18桁まで少数を出せという意味。
printf("double型は1÷10= %.18f",D);
return 0;
}
コンパイル結果
float型は1÷10=0.100000001490116119
double型は1÷10=0.100000000000000006
※つまりdouble型の方が精度が高い(0.1ジャストに近い)。
キーボードからの入力
具体例を見ちゃったほうが早いと思う。
#include
int main(void)
{
char ch1,ch2,ch3,ch4; //変数の宣言※変数の名前は別にchじゃなくてもなんでもいい。
scanf("%c",&ch1); //1文字目の入力
scanf("%c",&ch2); //2文字目の入力
scanf("%c",&ch3); //3文字目の入力
scanf("%c",&ch4); //4文字目の入力
printf("%c%c%c%c が入力されました。\n",ch1,ch2,ch3,ch4); //1~4文字の出力先。
return 0;
}
このように、「scanf」というコードを入れると、コンピュータは待機状態になり、キーボードからの入力ができるようになる。
ここでユーザーが好きな文字や数値を入力し、最後にエンターキーを押すと、その文字や数値が任意の場所に読み込まれ、printfによって出力される。
ちなみにscanfのコードでは、各対応変数の前に&を入れなければならないのだが、これはよく忘れる。
2018-03-24 14:49:21 (6 years ago)
参考文献:電子学園出版局『情報処理基礎講座コンピュータシステムの基礎』
コンピュータの概要
ハードウェアの五大装置はこれだ!
①入力装置
プログラムやデータをコンピュータにあった形に変換して、記憶装置に送り込む。
②記憶装置
プログラムやデータを記憶する。メインメモリともいう。
③演算装置
メインメモリからデータを取り出して、計算、判断を行う。
④制御装置
ハードウェアの各装置が統合的に働くようにコントロールをする。
⑤出力装置
メインメモリに記憶されているプログラムやデータを文字や数字にして印刷する。
⑥補助記憶装置
メインメモリに記憶しきれないデータを記憶する。USBメモリとか。
ビット
コンピュータの情報表現の最小単位である0と1の組み合わせのこと。
バイト
1ビットだとどうにもならないので、8ビット(ファミコン1個分)を1バイトとしてまとめる。
1バイトは2の8乗=256通りの表現ができる。
KB(キロバイト):バイトの千倍。2進法の関係で1KB=1024B
MB(メガバイト):バイトの百万倍。1MB=1024KB
GB(ギガバイト):バイトの十億倍。1GB=1024MB
TB(テラバイト):バイトの一兆倍。1TB=1024GB
PB(ペタバイト):バイトの千兆倍。1PB=1024TB
EB(エクサバイト):バイトの百京倍。1EB=1024PB数と基数変換
コンピュータの動作速度
ms(ミリ秒):1秒の1000分の1の速さ。
μs(マイクロ秒):1ミリ秒の1000分の1の速さ。
ns(ナノ秒):1マイクロ秒の1000分の1の速さ。
ps(ピコ秒):1ナノ秒の1000分の1の速さ。
基数
10進法の10、2進法の2といった数字のこと。
2進法を10進法になおしたりすることを基数変換という。
10進数
10でケタが増える。
2進数
2でケタが増える。つまり2の時点で2ケタになる(2=10)。
16進数
16でケタが増える。9の次は10ではなく、AになりBCDFと6つのアルファベットを使って0~15まで16回頑張る。Fの次から10(=16)になり、19、1A 、1B、1C・・・とまた6回頑張る。
A=10
B=11
C=12
D=13
E=14
F=15
10=16
11=17
12=18
13=19
14=20
15=21
16=22
17=23
18=24
19=25
1A=26
1B=27
1C=28
1D=29
1E=30
1F=31
20=32
例えば0.FE×2の計算は・・・
各ケタをばらして
0.0E:0.0⑭×2=0.0㉘ ※㉘=16+12 よって0.1⑫=0.1C
0.F:0.⑮×2=0.㉚ ※㉚=16+14 よって1.⑭=1.E
0.1C+1.E=1.FC
2進数→10進数のやり方
①整数の場合
11101(2進数)
各ケタに2xをかける。指数は1ケタめから0乗、1乗、2乗・・・とする。そしてすべての数を足す。
1×20=1×1=1
0×21=0×2=0
1×22=1×4=4
1×23=1×8=8
1×24=1×16=16
よって1+0+4+8+16=29(10進数)
②小数の場合
0.11(2進数)
各ケタに2xをかけるが、小数のケタにかける指数は小数第一位から-1乗、-2乗・・・とする。そしてすべての数を足す。
0×20=0×1=0
1×2-1=1×(1÷2)=0.5
1×2-2=1×(1÷4)=0.25
よって0.5+0.25=0.75(10進数)
10進数→2進数のやり方
①整数だったり、ケタが小さい場合
29(10進数)
その数字を筆算を使って商が0か1になるまでどんどん2で割っていき、商とそれぞれのあまりを下から上に並べていく。
29÷2=14 あまり1
14÷2=7 あまり0
7÷2=3 あまり1
3÷2=1 あまり1
よって11101(2進数)
②ケタがでかい場合
1500(10進数)
2xで最も1500に近い数(ただしオーバーしない)を調べる。
それは210の1024なので1500から1024を引き210のケタの数を1とする。
先ほどの計算で出た差476を今度は29=512と比較して、引けなかったら0、引けたら1とする(476-512はできないので0)。
次に476を28=256で引いて・・・を20=1のケタまで繰り返す(つまり引き算を11回戦やる)。
210=1024・・・1500-1024=476○→1
29=512・・・476-512=×→0
28=256・・・476-256=220○→1
27=128・・・220-128=92○→1
26=64・・・92-64=28○→1
25=32・・・28-32×→0
24=16・・・28-16=12○→1
23=8・・・12-8=4○→1
22=4・・・4-4=0○→1
21=2・・・0-2=×→0
20=1・・・0-1=×→0
よって10111011100(2進数)
16進数→10進数のやり方
①整数の場合
E3(16進数)
今度は2xではなく16xをかけていく。
Eは14番目の数なので・・・
3×160=3×1=3
14×161=14×16=224
224+3=227(10進数)
②小数の場合
0.FE(16進数)
各ケタに16xをかけるが、小数のケタにかける指数は小数第一位から-1乗、-2乗・・・とする。そしてすべての数を足す。
0×160=0×1=0
15×16-1=15×(1÷16)=15×0.0625=0.9375
14×16-2=14×(1÷256)=14×0.00390625=0.0546875
よって0.9375+0.0546875=0.9921875(10進数)
10進数→16進数のやり方
①整数の場合
572(10進数)
16で割っていく(16で割れなくなるまで)。そして最後の商とあまりを並べる。
572÷16=35 あまり12(※12は16進数でC)
35÷16=2 あまり3
よって23C(16進数)
②小数の場合
0.6(10進数)
小数部分のケタを16倍する。
そこで出た答え(積)の小数部分を再び16倍していき、小数部分が0になるまでこれを繰り返す。
最後に0になるまで出した積の整数部分を、16進法の小数部分として並べる。
0.6×16=9.6
9.6の小数部分0.6に再び16をかける
0.6×16=9.6
・・・エンドレスなので
0.999(16進数)
※ちなみに10進数の小数のほとんどは16進数に変換すると循環小数になる。
2進数→16進数のやり方
1011011.101(2進数)
小数点を基準に4ケタずつ区切り、各4ケタを1ケタの16進数に変える。
4ケタに達しない場合は0でごまかす。
0101→5
1011→11→B
.
1010→10→A
よって
5B.A(16進数)
16進数→2進数のやり方
FC8(16進数)
16進数のそれぞれのケタを2進数に変える。
F→15→1111
C→12→1100
8→1000
111111001000(2進数)
2進数→8進数のやり方
11001.11(2進数)
小数点を基準に3ケタずつ区切り、各3ケタを8進数に変える。
011→3
001→1
.
110→6
31.6(8進数)
8進数→2進数のやり方
52.3(8進数)
8進数のそれぞれのケタを2進数に変える。
5→101
2→010
.
3→011
101010.011(2進数)
とどのつまり、コンピュータは基本0と1の2通りしか分からないので、10のように2の階乗の数で作れない数で繰り上がる基数を変換するのはなかなか面倒くさいことが分かる。
逆に2の階乗で繰り上がる2進数、8進数、16進数での変換は割と簡単。
2018-03-23 21:35:02 (6 years ago)
ケミカルの勉強はこれで一回おしまい。次回以降はコンピュータおばあちゃんになります。目指せゴールデンウィークまでに全クリア!(基数変換に手こずり中)
ヘンリーの法則
P=KH×χ
温度が一定の時、一定の量の水に溶ける気体の物質量(χ)は、その気体の圧力(P)に比例する(KHは比例定数)。
つまり、圧力が2倍になれば、水に溶ける気体の質量(mol)も2倍になるが、溶ける気体の体積については、圧力が2倍かかっている(=2倍潰されている)ので、本来(標準状態)なら2倍になるところが相殺されてそのままになることに注意する。
ファントホッフの法則
Π=nRT÷V
浸透圧(Π)は溶質の分子量(n)と温度に比例し、水溶液の体積に反比例する(Rは定数)。
濃度の異なる水溶液をセロハン膜で仕切ると、溶媒(デンプンなど)はセロハン膜を通過できないが、溶媒の水は通過できるため、濃度差を解消しようと濃度が濃い方に濃度が薄い方の水が移動し、濃度が濃い方の水かさが上がる(薄い方の水かさは下がる)。
この水かさの差をそろえようとしてかける圧力を浸透圧という。個人的に非常に回りくどくてややこしい定義の用語。
反応速度
以下の3つの影響を受ける。
①濃度(質量作用の法則)
反応物どうしが接触する回数が増えるので、反応速度は濃度に比例する。
②温度(アレニウスの法則)
反応物を構成する分子やイオンの運動が激しくなるため、反応物どうしの接触回数が増える。よって反応速度は温度に比例する。
③触媒(ミカエリス=メンテンの法則)
反応するために必要なエネルギーの値を変化させるので、触媒を使うと反応速度は増加、もしくは減少する。
もう少し正確に言うと、同じ量の触媒(酵素)を使う場合、ある程度の基質濃度の時は反応速度はその基質濃度に比例するが、それを超えると触媒の反応速度は頭打ちになる。
その他、光や撹拌速度、固体のフレーク度合いによっても変わる。
化学平衡
食塩水など化学反応が何も起きていない状態というのは、実は反応物→生成物という反応(正反応)と、それを相殺する生成物→反応物という反応(逆反応)が同時に、かつ、同程度起きている状態であると考えられる。この状態を化学平衡状態という。
この状態は、生成物/反応物=平衡定数Kという式(質量作用の法則)で表され、平衡状態は一定の条件において一つに定まることがわかる。
また、この式は分数であるため、平衡定数の値が1より大きいと、生成物>反応物、1より小さいと、生成物>反応物と、偏った平衡状態になる。
ちなみに、温度が上がると温度を下げるような反応に、温度が下がると温度を上げるような反応に化学平衡状態は偏るが、触媒は平衡定数に影響は与えない。
ルシャトリエの原理
化学反応が平衡状態にあるとき、濃度、圧力、温度といった条件を変化させると、その変化を打ち消すような方向に反応が進むという原理。
2018-03-20 19:45:12 (6 years ago)
化学結合
種類が多すぎてすごいややこしい上、高校の授業では一度に全種類を教えずなぜか小出しにするため、初期に教わったものが忘れ去られ、さらに整理ができなくなってくる。
結合エネルギー
分子の結合を切り離すときに必要なエネルギーのこと。
例えば水素分子をつくる結合(H-Hの単結合)の結合エネルギーは432kJなので、水素分子を水素原子二個に分解する場合は432kJのエネルギーが要る。
電子式
最外殻電子の数が8個だと原子は安定するため、その安定度を示すために、元素記号のまわりに電子の数を表す点々をつけた式。上下左右に2つずつ点が打て、最大8つの点を打つことができる。※K殻しかない水素とヘリウムは元素記号に最大2つしか点が打てない。
この電子式によって共有結合の様子が分かりやすく図示できる。
価標
共有電子対を直線になおしたもの。
単結合:M-M
二重結合:M=M
三重結合:M≡M
価標を用いて分子の構造を表したものを構造式という。
共有結合
原子と原子が自分たちが持っている電子をシェアし合うことでくっつくこと。
単結合なら双方1個ずつで合計2個。
二重結合なら双方2個ずつで合計4個。
三重結合なら双方3個ずつで合計6個。
高校で習う化学結合で最強のくっつきを誇る結合。
イオン結合
陽イオンと陰イオンが静電気の力(クーロン力)でくっつくこと。
結合力はかなり強いが共有結合には敵わない。
金属結合
複数の金属原子の原子核が自由電子をシェアし合うことでくっつくこと。強さは共有結合の10分の1。
自由電子がそこらじゅうにあるため、電気をよく通し、メタリックに光り、よく延びる(原子核の位置が多少変化しても自由電子があるためにちぎれない)。
金属の結晶の最小単位は単位格子と呼ばれ、配位数(1個の原子が接する原子の数)と、充填率(結晶の体積の何%を原子の体積が占めているかの密集度合い)によって3種類に分類されている。
①体心立方格子
配位数は8。原子の数は2。充填率68%の単位格子。
最もシンプルで分かりやすい。
鉄、クロム、カリウム、ナトリウムなど。
②面心立方格子
配位数は12。原子の数は4。充填率は74%の単位格子。
かなりつまっている。
金銀銅、アルミニウム、カルシウム、塩化ナトリウムなど。
③六方細密充填
1個の原子を6個の原子で取り囲む。
配位数は12。原子の数は2個。充填率は74%の単位格子。
パッと見鉛筆みたいだが、複雑すぎてなにがなにやら(名前はかっこいい)。
厳密には、完全にこの構造になる金属は存在しないらしいが、一般的にはマグネシウム、亜鉛など。
分子結合
分子の間に働く引力(ファンデルワールス力)によって分子同士がくっつくこと。
結合力は弱いため、沸点や融点は低く、やわらかくてもろい。
分子量(分子の質量)に比例して大きくなるが、結合力は共有結合の100分の1以下で、高校で習う化学結合では最弱を誇る。
配位結合
結合に使われなかった非共有電子対を他の原子に無償提供することによってくっつく。
最外殻電子数が8個で、その内6個を3つの水素原子との結合に使い、ちょうど2個余っている(=非共有電子対が1つある)アンモニアが代表格。
これによりアンモニアはもう1個水素原子がくっつきアンモニアイオンNH4になる。
配位子
アンモニアのように電子に余裕がありチャリティーが好きな分子やイオンを配位子という。
以下のような種類がある。
①アンミン:アンモニア
②ヒドロキシド(ヒドロキソ):水酸化物イオン
③アクア:水
④シアニド:シアン化物イオン (CN-)
⑤クロロ:塩化物イオン
⑥チオスルファト:チオ硫酸イオン(S2O32-)
また、配位結合において、いくつの配位子がチャリティーしているかは、ギリシャ語の数詞で表す。
1つ:monoモノ
2つ:diジ
3つ:triトリ
4つ:tetraテトラ
5つ:pentaペンタ
6つ:hexaヘキサ
7つ:heptaヘプタ
8つ:octaオクタ
9つ:nonaノナ
10:decaデカ
錯イオン
配位子とは逆に、金属イオンは電子をほしがるため、配位子をひきつけ、種類によって様々な構造のイオンを作る。この時のイオンを錯イオンと呼ぶ。
名前の付け方は、①配位数をギリシャ語の数詞で書く→②配位子の名前を書く→③金属イオンの名前を書く→④金属イオンの価数をギリシャ数字で書く→⑤陰イオンの場合は酸を最後につける。
銀イオン
ひきつける配位子は2つ。直線構造のイオン(ジアンミン銀(Ⅰ)イオンなど)を作る。
亜鉛イオン
ひきつける配位子はアンモニアや水酸化物イオンなどで4つ。正四面体構造のイオン(テトラアンミン亜鉛(Ⅱ)イオンなど)を作る。
銅イオン
ひきつける配位子はアンモニアなどで4つ。正方形構造のイオン(テトラアンミン銅(Ⅱ)イオンなど)を作る。
鉄イオン
ひきつける配位子はシアン化物イオンなどで、しかも6つ。正八面体構造のイオン(ヘキサシアニド鉄(Ⅱ)酸イオンなど)を作る。
水素結合
ファンデルワールス力などと同じ分子間力の一種で、水素よりも電気陰性度の大きい原子同士を、相対的に正に帯電した水素原子がつないでいく電気的な結合のこと。
金属結合ほどの強さがあり、水や氷の結晶のほか、あのDNAの塩基配列を繋げている。
電気陰性度
原子が電子を引き寄せる力の度合い。
水の場合は水素の電気陰性度が2.1なのに対し、酸素は3.5あるため、酸素が水素とシェアしているはずの共有電子対を自分の方に引き寄せて、酸素側に電荷が偏る(だから折れ線型の分子の形になる)。これを極性分子という。
ちなみに互いの原子の電子を引っ張る力がぴったり同じだったり、分子全体で電子を引っ張る力が相殺される場合は電荷の偏りはできないので無極性分子と呼ばれる。
ちなみに分子における各原子の極性は±δ(デルタ)で表される。
また、極性分子は分子間に静電気が働くため、無極性分子よりも結合が強い。
2018-03-20 19:32:52 (6 years ago)
熱化学方程式
左辺は反応物、右辺は生成物を表す。
なぜか、エネルギーが低い物質名=エネルギーが高い物質名-エネルギー(kJ)というややこしい方程式になっている(エネルギーのあるやつからはエネルギーを奪わないとどうにもならない、みたいな式)。
あまりにややこしい場合は、エネルギーの値を移項して、エネルギーの低い物質+エネルギー=エネルギーが高い物質に式を変形すると、どちらの物質のエネルギーが高いかすっきりする。
発熱反応
反応するのに熱が余分
反応物=生成物+熱エネルギー
吸熱反応
反応するのに熱が必要
反応物=生成物-熱エネルギー
反応熱
反応によって発生したり、吸収されたりする熱エネルギーのこと。
以下の4つが取り沙汰される。
①燃焼熱
物質が酸素と反応する際に、二酸化炭素と水と一緒に発生する熱のこと。
燃焼物質1molを基準にする。
②生成熱
ある化合物が各単体から生成される際に、やりとりされる熱のこと。
生成化合物1molを基準にする。
③溶解熱
ある物質が多量の溶媒(水だったらアクアのaqと表示)に溶ける際に、やりとりされる熱のこと。溶質1molを基準にする。
④中和熱
中和反応の際に、水と一緒に発生する熱のこと。
水1molを基準にする。
ヘスの法則
一言で言うと、化学版熱力学第一法則(エネルギー保存の法則)。
反応によって最終的に生じる熱は、反応の途中経路にかかわらず常に一定というもの。
これを踏まえると、それぞれの熱化学方程式は連立方程式のようにまとめて計算することができる。
例えば
①H₂ + 1/2O₂ = H₂O + 286kJ
②C + O₂ = CO₂ + 394kJ
③C₂H₂ + 5/2O₂ = 2CO₂ + H₂O + 1309kJ
という3つの熱化学方程式から、アセチレン(C₂H₂)の生成熱を求める場合・・・
④2C + H₂ = C₂H₂ + ?kJ
なので、①~③の方程式を上手く変形させて、上の④式の物質をエネルギー以外すべて消す。
①の両辺を入れ替え
②の式を×2してから、両辺を入れ替え
③はそのままで
④の式にすべて足すと・・・
2C + H₂ = C₂H₂ + ?kJ
+(H₂O + 286kJ = H₂ + 1/2O₂)
+(2CO₂ + 788kJ = 2C + 2O₂)
+(C₂H₂ + 5/2O₂ = 2CO₂ + H₂O + 1309kJ)
このとき両辺に等しくある物質はすべて相殺されるため・・・
286kJ + 788kJ = ?kJ + 1309kJ
と、熱だけの多項式になるので、この一次方程式を解いて・・・
?kJ=-235kJとなる。
つまりアセチレンの生成は吸熱反応であり、235kJの熱が必要である。