====== 変数と定数 ======
===== 例題 =====
円柱の半径($r$)と高さ($h$)を読み込んで、その体積($V$)と表面積($S$)を表示するプログラムを作成せよ
$$
V = \pi r^2 h
$$
$$
S = 2\pi r^2 + 2\pi rh = 2\pi r(r + h)
$$
==== Pascal ====
program cylind(input, output);
const pi = 3.141592;
var r, h, s, v: real;
begin
read(r, h);
writeln(r, h);
v := pi*r*r*h;
s := 2*pi*r*(r + h);
writeln(v, s);
end.
==== FORTRAN ====
PROGRAM CYLIND
PARAMETER (PI = 3.141592)
DOUBLE PRECISION R, H, S, V
READ (5, *) R, H
WRITE (6, *) R, H
V = PI*R*R*H
S = 2.0*PI*R*(R + H)
WRITE (6, *) V, S
STOP
END
==== c ====
#include
#define PI 3.141592
int main(void) {
double r, h, s, v;
scanf("%lf %lf", &r, &h);
printf("%lf %lf\n", r, h);
v = PI*r*r*h;
s = 2.0*PI*r*(r + h);
printf("%lf %lf\n", v, s);
return 0;
}
; 定数
: プログラム実行中に変化することのない「値」を保持するユーザ定義名前付オブジェクト
; 変数
: プログラム実行中に変化する「値」を示すユーザ定義名前付オブジェクト
(* program文の後、変数宣言文の前 *)
const 定数名 = 定数値;
const 定数名 = 定数値; 定数名 = 定数値; 定数名 = 定数値; {複数の定数を定義する場合}
C program文の後、変数宣言文の前簡単な演算も可能
PARAMETER(定数名 = 定数値)
C 複数の定数を定義する場合
PARAMETER(N = 10, M = 11)
PARAMETER(N = 10, M = N + 1)
PARAMETER(N = 10)
PARAMETER(M = N + 1)
/* 定数定義はマクロにより行う */
#define 定数名 定数値
#ifdef __小学生__
#define PI 3.14
#else
#define PI 3.141592
#endif
Pascal
const PI=3.141592;
FORTRAN
PARAMETER (PI=3.141592)
#define PI 3.141592
円周率πを参照する定数
箱(変数)の在りか(アドレス)を入れる箱がポインタ変数
整数型
符号付き、符号なし(c)
実数型
倍精度(c, FORTRAN), 4倍精度(FORTRAN)
複素数型
二つの実数の組(FORTRAN)
文字型
文字符号化方法に依存する
整数型変数(定数)の表現 2進数のビット列(例8ビット)
通常16ビットか32ビット
全てのビットを使用
0. 2n . 1 (符号なし整数)
1の補数
0の定義が一意的でない(1111=0000)
2の補数
-1 + 1 = 0
減算を補数と加算で処理できる
整数型変数(定数)の表現 nビット符号なし整数 0. 2n . 1
nビット符号付整数(2の補数表現) .2n.1. 2n.1 . 1
固定小数点実数
24.5
浮動小数点実数
2.45× 101, 2450× 10.2
正規化された浮動小数点実数仮数部 0.245× 102指数部
b3b2b1b0 . c1c2c3 = b3× 23 + b2× 22 + b1× 21 + b0
+ c1× 2.1 + c2× 2.2 + c3 × 2.3
例
101.0112 = (4+1+1/4 +1/8 )10 = 5.37510
先頭ビットで符号を表す指数部は2進整数仮数部は正規化された固定小数点
32.128ビット
符指数仮数号
仮想的8ビット実数指数は10のべきを2の補数表現の整数仮数は正規化された2進小数
64.256ビット
実部虚部
var 変数名: 変数の型;定数定義の後、begin endの前
複数の変数を宣言する場合
var 変数名, 変数名, 変数名: 変数の型;変数名: 変数の型;変数名, 変数名: 変数の型;
integer
符号付き整数
多くの処理系が16ビットか32ビット real
単精度実数多くの処理系は32ビット例 var height, radius: real; number: integer;
変数の型変数名定数定義の後、最初の実行文の前暗黙の宣言も可能
A-H, O-Z から始まる変数名は実数型 I, J, K, L, M, Nから始まる変数名は整数型
複数の変数を宣言する場合変数の型変数名 , 変数名, 変数名
符号付き整数、多くの処理系がか32ビット
REAL
単精度実数、多くの処理系は32ビット
DOUBLE PRECISION (REAL*8)
倍精度実数、多くの処理系で64ビット
COMPLEX*16
多くの処理系で128ビット複素数
変数の型変数名 ;どこでも宣言と同時に初期化も可能変数の型変数名 = 変数の初期値; double radius = 0.25;
複数の変数を宣言する場合変数の型変数名 , 変数名, 変数名;
int
符号付き整数、多くの処理系がか32ビット
float
単精度実数、多くの処理系は32ビット
double
倍精度実数、多くの処理系で64ビット
Pascal
var r, h: real;
FORTRAN
REAL*8 HS, V
double v, s;
和・差・積変数名 := 変数(定数)名 + 変数(定数)名変数名 := 変数(定数)名 . 変数(定数)名変数名 := 変数(定数)名 * 変数(定数)名
商変数名 := 変数(定数)名 / 変数(定数)名変数名 := 変数(定数)名 div 変数(定数)名和・差・積・商変数名 = 変数(定数)名 + 変数(定数)名変数名 = 変数(定数)名 . 変数(定数)名変数名 = 変数(定数)名 * 変数(定数)名変数名 = 変数(定数)名 / 変数(定数)名
整数と実数の演算には型の変換を明示的に行うべし
programプログラム名 (入出力); const定数名=定数; var変数名:変数の型; begin
実行すべき処理
end.
PROGRAMプログラム名 PARAMETER(定数名=定数定義)変数の型変数名実行すべき処理
STOP END
#プリプロセッサ命令 #定数マクロ定義 int main(引き数) {
変数の型変数名;実行すべき処理; return 0;
}
Pascal
read(変数名, 変数名)
FORTRAN
READ (5, *) 変数名, 変数名
c言語
scanf("入力書式", &変数名, &変数名)
Pascal
writeln(変数名, 変数名)
FORTRAN
WRITE(6, 書式文番号) 変数名, 変数名
c言語
printf("出力書式", 変数名, 変数名)