====== 変数と定数 ====== ===== 例題 ===== 円柱の半径($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("出力書式", 変数名, 変数名)