プログラミング言語

Similar documents
5. アルゴリズムと計算量

PowerPoint プレゼンテーション

Microsoft PowerPoint - CproNt02.ppt [互換モード]

char int float double の変数型はそれぞれ 文字あるいは小さな整数 整数 実数 より精度の高い ( 数値のより大きい より小さい ) 実数 を扱う時に用いる 備考 : 基本型の説明に示した 浮動小数点 とは数値を指数表現で表す方法である 例えば は指数表現で 3 書く

講習No.1

プログラミング基礎

Microsoft PowerPoint - 計算機言語 第7回.ppt

PowerPoint プレゼンテーション

Microsoft Word - 3new.doc

PowerPoint プレゼンテーション

C 言語の式と文 C 言語の文 ( 関数の呼び出し ) printf("hello, n"); 式 a a+4 a++ a = 7 関数名関数の引数セミコロン 3 < a "hello" printf("hello") 関数の引数は () で囲み, 中に式を書く. 文 ( 式文 ) は

ポインタ変数

プログラミング実習I

Microsoft PowerPoint - prog03.ppt

PowerPoint Presentation

数値計算

RX ファミリ用 C/C++ コンパイラ V.1.00 Release 02 ご使用上のお願い RX ファミリ用 C/C++ コンパイラの使用上の注意事項 4 件を連絡します #pragma option 使用時の 1 または 2 バイトの整数型の関数戻り値に関する注意事項 (RXC#012) 共用

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

講習No.12

ポインタ変数

プログラミング実習I

Microsoft Word - no11.docx

物質工学科 田中晋

情報科学 (12) いろいろなプログラミング言語 1

program7app.ppt

Microsoft PowerPoint - prog03.ppt

講習No.10

メディプロ1 Javaプログラミング補足資料.ppt

Javaの作成の前に

Microsoft Word - Training10_プリプロセッサ.docx

コマンドラインから受け取った文字列の大文字と小文字を変換するプログラムを作成せよ 入力は 1 バイトの表示文字とし アルファベット文字以外は変換しない 1. #include <stdio.h> 2. #include <ctype.h> /*troupper,islower,isupper,tol

第1回 プログラミング演習3 センサーアプリケーション

PowerPoint Presentation

Microsoft Word - 商業-3

Microsoft PowerPoint ppt

Microsoft PowerPoint - 11.pptx

スライド 1

kiso2-09.key

8 / 0 1 i++ i 1 i-- i C !!! C 2

Java プログラミング Ⅰ 3 回目変数 変数 変 数 一時的に値を記憶させておく機能型 ( データ型 ) と識別子をもつ 2 型 ( データ型 ) 変数の種類型に応じて記憶できる値の種類や範囲が決まる 型 値の種類 値の範囲 boolean 真偽値 true / false char 2バイト文

Microsoft PowerPoint - 第3回目.ppt [互換モード]

プログラミング及び演習 第1回 講義概容・実行制御

Microsoft Word - 03

書式に示すように表示したい文字列をダブルクォーテーション (") の間に書けば良い ダブルクォーテーションで囲まれた文字列は 文字列リテラル と呼ばれる プログラム中では以下のように用いる プログラム例 1 printf(" 情報処理基礎 "); printf("c 言語の練習 "); printf

プログラミング基礎

gengo1-11

関数の動作 / printhw(); 7 printf(" n"); printhw(); printf("############ n"); 4 printhw(); 5 関数の作り方 ( 関数名 ) 戻り値 ( 後述 ) void である. 関数名 (

第2回講義:まとめ

Microsoft PowerPoint ppt

情報処理演習 B8クラス

PowerPoint Presentation

バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科

情報技術 Java の特徴 Java は現在 事務処理計算用プログラミング言語として開発された COBOL に取って代わり C 言語や C++ と並んで 現在最も使われているプログラミング言語の一つである Java は Write Once, Run Anywhere( プログラムを一度作成したらど

memo

Microsoft PowerPoint pptx

memo

(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド

Prog1_10th

メソッドのまとめ

プログラミング入門1

Microsoft PowerPoint - C言語の復習(配布用).ppt [互換モード]

memo

ポインタ変数

関数の呼び出し ( 選択ソート ) 選択ソートのプログラム (findminvalue, findandreplace ができているとする ) #include <stdiu.h> #define InFile "data.txt" #define OutFile "surted.txt" #def

Microsoft Word - no01.doc

PowerPoint プレゼンテーション

計算機プログラミング

<4D F736F F D20438CBE8CEA8D758DC F0939A82C282AB2E646F63>

SuperH RISC engine C/C++ コンパイラ Ver.7 不具合内容 - 過去のお知らせ SuperH RISC engine C/C++ コンパイラ Ver.7 台における不具合内容を以下に示します のチェックツールをルネサスエレクトロニクス株式会社のホームページ

Java プログラミング Ⅰ 7 回目 switch 文と論理演算子 今日の講義講義で学ぶ内容 switch 文 論理演算子 条件演算子 条件判断文 3 switch 文 switch 文 式が case のラベルと一致する場所から直後の break; まで処理しますどれにも一致致しない場合 def

* ライブラリ関数 islower(),toupper() を使ったプログラム 1 /* 2 Program : trupper.c 3 Student-ID : K 4 Author : TOUME, Kouta 5 Comments : Used Library function i

Cプログラミング1(再) 第2回

PowerPoint プレゼンテーション

Microsoft PowerPoint - 13th.ppt [互換モード]

gengo1-2

Microsoft PowerPoint - ruby_instruction.ppt

Microsoft Word - Cプログラミング演習(3)

SuperH RISC engineファミリ用 C/C++コンパイラパッケージ V.7~V.9 ご使用上のお願い

Java講座

情報工学実験 C コンパイラ第 2 回説明資料 (2017 年度 ) 担当 : 笹倉 佐藤

Microsoft PowerPoint - 3.pptx

Microsoft Word - no02.doc

Microsoft PowerPoint - 第1回目復習_pdf用.ppt [互換モード]

ex05_2012.pptx

kiso2-03.key

/*Source.cpp*/ #include<stdio.h> //printf はここでインクルードして初めて使えるようになる // ここで関数 average を定義 3 つの整数の平均値を返す double 型の関数です double average(int a,int b,int c){

gengo1-8

18/12/06 情報工学実験 C コンパイラ (2018 年度 ) 担当 : 笹倉 佐藤 その 3 yacc の構造 定義部 %% 定義部の終了 規則部 %% 規則部の終了 ユーザ定義サブルーチン部 :C のプログラムを書く 形は lex と同じ 1

演習課題No12

関数 C 言語は関数の言語 関数とは 関数の定義 : f(x) = x * x ; 使うときは : y = f(x) 戻り値 引数

Microsoft PowerPoint - kougi7.ppt

プログラミング及び演習 第1回 講義概容・実行制御

PowerPoint プレゼンテーション

論理と計算(2)

Microsoft PowerPoint - 11th.ppt [互換モード]

講習No.9

Microsoft Word - no202.docx

Microsoft PowerPoint - 説明3_if文switch文(C_guide3)【2015新教材対応確認済み】.pptx

Microsoft Word - Cプログラミング演習(11)

Microsoft PowerPoint - 09.pptx

Transcription:

プログラミング言語 コンピュータリテラシ 2016 年 5 月 17 日 建部修見

機械語とアセンブリ言語 機械語 ( マシン語 ) CPU の命令セット i386, x86_64, arm64, mips, powerpc,... アセンブリ言語 機械語とほぼ 1 対 1 に対応 add R1, R2, R3 # R1 <- R2 + R3 分岐先にラベルが使える アセンブラで機械語に変換する 機械語に依存 異なる CPU 間で互換性の問題 アセンブリ言語 機械語 アセンブラ

高級プログラミング言語 (1) 1950 年代 FORTRAN 科学技術計算 COBOL 事務処理 LISP 記号処理 1960~70 年代 Simula, Smalltalk オブジェクト指向 BASIC, Pascal 初学者向け C OS などシステムプログラム向け Prolog 論理型 ML 関数型

高級プログラミング言語 (2) 1980~ C++ - C にオブジェクト指向の考え方を取り入れ Perl, Ruby, Python スクリプト言語 Java, C# - 複数のハードウェアで安全に動作させる目的で設計されたオブジェクト指向言語 JavaScript Web クライアント用スクリプト言語

コンパイル実行とインタプリタ実行 コンパイル実行方式 高級言語をコンパイラで機械語に変換 異機種では再コンパイルが必要 FORTRAN, C, C++ など インタプリタ実行方式 高級言語 機械語 コンパイラ インタプリタは高級言語プログラムを読込 処理を実行する コンパイルは不要だが処理が一般に遅い Perl, Python, Ruby など

仮想機械による実行方式 仮想機械 (VM) を定義 仮想機械の機械語プログラムにコンパイル CPUは仮想機械の機械語プログラムを実行 ポータビリティとある程度の実行速度 Java, C# など

プログラミング言語 C 関数と変数からなる 関数は文で構成される 文はセミコロン ; で終わる { } で複文 ( ブロック ) を単一の文と同等に 変数名 ( 関数名 ) 先頭は英字 アンダースコア _ 大文字小文字区別あり 先頭以外は数字も OK 31 文字まで データ型 変数 ( 関数 ) にはデータ型がある char, int, float, double long, short, signed, unsigned 変数 ( 関数 ) を利用する前にデータ型の宣言が必要 int a, b, c;

式 全ての式 ( 算術演算 代入 ) は値を返す a++ # aの値を返し aをインクリメント (a = a + 1) a * b, a / b, a % b a + b, a - b a > b, a >= b, a < b, a <= b a == b, a!= b # 真なら1 偽なら0を返す a b # aまたはbが真なら1を返す a = b # 右辺のbの値を返す a = b = c

if 文 if ( 式 ) 文 1 else 文 2 式が真なら文 1を実行し 偽なら文 2を実行する if (s > 0) a = 1; else if (s < 0) a = -1; else a = 0;

while 文 while ( 式 ) 文 式を満たしている間は文を繰り返す s = i = 0; while (i < n) { s = s + i; i++; }

for 文 for ( 式 1; 式 2; 式 3) 文 以下と同じ 式 1; while ( 式 2) { } 文 式 3; s = 0; for (i = 0; i < n; i++) s = s + i;

フィボナッチ数 1 fib k = fib k 1 + fib k 2 (k = 0 or k = 1) (k 2) fib 関数の定義 k という引数をとり k が 0 か 1 のとき 1 を返し それ以外のとき fib(k - 1) + fib(k - 2) を返す 自分自身の関数を再び呼ぶので再帰呼び出しという int fib(int k) { if (k == 0 k == 1) return (1); else return (fib(k - 1) + fib(k - 2)); }

テスト C では main 関数を実行する #include <stdio.h> int main() { int i; main 関数の定義 整数型の変数 i の宣言 i を 0 から 45 まで 1 ずつ増やしながら繰り返す printf は で囲まれた文字列を表示する関数 この関数は stdio.h で宣言されている 文字列中 %d はその後の引数 ( 整数型 ) の値を表示する } for (i = 0; i < 46; i++) printf("fib(%d) = %d n", i, fib(i)); return (0);

#include <stdio.h> プログラム 1 int fib(int k) { if (k == 0 k == 1) return (1); else return (fib(k - 1) + fib(k - 2)); } int main() { } int i; for (i = 0; i < 46; i++) printf("fib(%d) = %d n", i, fib(i)); return (0);

演習 プログラム 1 を fib.c で保存し 以下のようにコンパイル 実行してみよう $ cc -O -o fib fib.c # -O は最適化オプション $./fib # -o fib でコンパイル後の実行ファイル名を指定する

プログラム 1 の計算時間 fib(k) は fib(k - 2) と fib(k - 1) を呼び出す fib(0) = fib(1) = 1 なので fib(k) は fib(k) 回関数 fib を呼んでいる 黄金比 φ = 1+ 5 φk+1 とおくとfib k と近似できることが知 2 5 られている k が増えると指数関数で増える fib(6) fib(5) fib(4) fib(4) fib(3) fib(3) fib(2) fib(3) fib(2) fib(2) fib(1) fib(2) fib(1) fib(1) fib(0) fib(2) fib(1) fib(1) fib(0) fib(1) fib(0) fib(1) fib(0) fib(1) fib(0)

フィボナッチ数 f(k) を覚えておくことで順番に求められる f(0) = 1 f(1) = 1 f(2) = f(1) + f(0) f(3) = f(2) + f(1) f(4) = f(3) + f(2) f(5) = f(4) + f(3)

配列 変数の列 int a[10]; 整数型変数 a[0], a[1],, a[9] の宣言

配列を用いたフィボナッチ数 int fiba(int n) { int f[46] = { 1, 1 }; int i; f[0] から f[45] までの整数型の配列を宣言 f[0] と f[1] を 1 に初期化 他は未定義 } if (n > 45) return (-1); if (n == 0 n == 1) return f[n]; for (i = 2; i <= n; ++i) f[i] = f[i - 2] + f[i - 1]; return f[n]; 配列は 45 までしか準備していないので n が 45 より大きいと配列外を参照するため -1 を返す

演習 (2) 配列を用いた関数 fiba を呼ぶようにプログラム 1 を修正したプログラム 2 を作成し fiba.c と保存し コンパイルし 実行ファイル fiba を作成しよう time コマンドを用いると時間を計測することができる 以下を実行して時間を比べてみよう $ time./fib $ time./fiba

オプション演習 (1) 以下のように f(3) を計算するときには f(0) は必要ないため上書き可能である f(0) = 1 f(1) = 1 f(2) = f(1) + f(0) f(0) = f(2) + f(1) # f(3) = f(2) + f(1) f(1) = f(0) + f(2) # f(4) = f(3) + f(2) f(2) = f(1) + f(0) # f(5) = f(4) + f(3) このとき 配列の要素数は 3 で足りる fiba.c を修正して上記のようにフィボナッチ数を求めるプログラム fiba2.c を作成してみよう fiba2.c をコンパイルし 実行ファイル fiba2 を作成し 動作を確かめよう また時間を計測してみよう

行列を用いたフィボナッチ数 よって fib k + 2 fib k + 1 fib k + 1 fib k = 1 1 1 0 = 1 1 1 0 fib k + 1 fib k k fib 1 fib 0

行列のべき乗の計算 このとき Q = 1 1 1 0 とおくと E (k = 0) Q k = Q k/2 2 (kは2 以上の偶数 ) (kは奇数) QQ k 1 たかだか 2 log k 回の行列積計算で求まる

void matvec(int r[2], int a[2][2], int v[2]) { r[0] = a[0][0] * v[0] + a[0][1] * v[1]; r[1] = a[1][0] * v[0] + a[1][1] * v[1]; } // r = a v // a1 = a2 a3 void matmul(int a1[2][2], int a2[2][2], int a3[2][2]) { int i, j, k, l; } for (i = 0; i < 2; ++i) for (j = 0; j < 2; ++j) { l = 0; for (k = 0; k < 2; ++k) l += a2[i][k] * a3[k][j]; a1[i][j] = l; }

void fibmat(int n, int a[2][2]) { int a2[2][2], a3[2][2]; // a = Q^n } if (n == 0 n == 1) { a[0][0] = 1; a[0][1] = 1; a[1][0] = 1; a[1][1] = 0; return; } if (n / 2 * 2 == n) { fibmat(n / 2, a2); matmul(a, a2, a2); } else { fibmat(n - 1, a2); fibmat(1, a3); matmul(a, a2, a3); }

int fibm(int n) { int ini[2] = { 1, 1 }; int ret[2], a[2][2]; } if (n == 0 n == 1) return (1); fibmat(n - 1, a); matvec(ret, a, ini); return (ret[0]);

課題 (3) 行列を用いた関数 fibmを呼ぶようにプログラム1を修正したプログラム3を作成し fibm.cと保存し コンパイルし 実行ファイルfibmを作成しよう fibmを実行して時間を計測してみよう

オプション演習 (2) fib(46) を計算するとマイナスになってしまう 理由を考えてみよう 正しく fib(46) を計算できるようにプログラムを改良してみよう ヒント :8 バイト整数のデータ型は long long long long 型の変数を表示する printf のフォーマットは %lld