コンピュータ基礎実験 第1 4回 コンピュータープログラミン グ ( C 言語)(11) 1.ファイル入出力(復習) 2.物理現象とプログラミン グ.

Slides:



Advertisements
Similar presentations
情報基礎実習 I (第6回) 木曜4・5限 担当:北川 晃. Stream クラスを用いたファイルの接続 … Dim インスタンス名 As New IO.StreamReader( _ “ ファイルの絶対パス ”, _ System.Text.Encoding.Default) … s = インスタンス名.
Advertisements

コンピュータ基礎実験 第1 0回 コンピュータープログラミン グ ( C 言語)(8) 1.乱数(復習) 2.配列とその利用.
1 運動方程式の例2:重力. 2 x 軸、 y 軸、 z 軸方向の単位ベクトル(長さ1)。 x y z O 基本ベクトルの復習 もし軸が動かない場合は、座標で書くと、 参考:動く電車の中で基本ベクトルを考える場合は、 基本ベクトルは時間の関数になるので、 時間で微分して0にならない場合がある。
プログラミング演習( 2 組) 第 9 回
オブジェクト指向言語・ オブジェクト指向言語演習 中間試験回答例. Jan. 12, 2005 情報処理技術基礎演習 II 2 オブジェクト指向言語 中間試験解説 1  (1) 円柱の体積(円柱の体積 = 底面の円の面積 x 高さ) を求めるプログラムを作成しなさい。ただし、出力結果は、入 力した底面の円の半径.
コンピュータープログラミング(C言語)(2) 1.文字列出力と四則演算 (復習) 2.関数と分割コンパイル
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第3回 配列(1) 情報・知能工学系 山本一公
・力のモーメント ・角運動量 ・力のモーメントと角運動量の関係
伝達事項 皆さんに数学と物理の全国統一テストを受けても らいましたが、この時の試験をまた受けていただ きます。
コンピュータープログラミング(C言語)(3) 1.関数と分割コンパイル (復習) 2.キーボード入力
コンピュータープログラミング(C言語)(2) 1.文字列出力と四則演算 (復習) 2.関数と分割コンパイル
情報基礎演習B 後半第5回 担当 岩村 TA 谷本君.
ファーストイヤー・セミナーⅡ 第8回 データの入力.
6/19 前回復習 for文による繰り返し計算 演習1:1から10まで足して画面に結果を表示する 提出者: 1人
演習(解答) 質量100 gの物体をバネに吊るした時、バネが 19.6 cm のびた。
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
数楽(微分方程式を使おう!) ~第5章 ラプラス変換と総仕上げ~
常微分方程式と偏微分方程式 1.常微分方程式 独立変数が一個のもの 振動の運動方程式 2.偏微分方程式 独立変数が二個以上のもの
基礎プログラミング (第五回) 担当者: 伊藤誠 (量子多体物理研究室) 内容: 1. 先週のおさらいと続き (実習)
コンピュータープログラミング (C言語)(6) 1.条件分岐2(switch文、復習) 2.繰り返し処理(for文、while文)
コンピュータープログラミング (C言語)(9) 1.これまでの復習
次に 円筒座標系で、 速度ベクトルと加速度ベクトルを 求める.
コンピュータープログラミング (C言語)(8) 1.乱数(復習) 2.配列とその利用
問題 1 キーボードから入力した数の合計を計算するプログラムを 作成せよ。最初に、何個の数を入力するかその数を入力 するようにする。
精密工学科プログラミング基礎 第9回資料 (12/11 実施)
コンピュータープログラミング (C言語)(11) 1.ファイル入出力(復習) 2.物理現象とプログラミング
数楽(微分方程式を使おう!) ~第4章 他分野への応用(上級編)~
プログラミング入門2 総合演習課題 2008年 1/7, 1/21 実施 これまでの講義内容についての腕試し
第7回 条件による繰り返し.
岩村雅一 知能情報工学演習I 第11回(後半第5回) 岩村雅一
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第2回 ファイル処理 情報・知能工学系 山本一公
基本骨格 #include #include : int main(void) { 変数の宣言 実行すること return 0; } #include int main(void) { int i; printf(”Hello world!\n”);
傾きがわかった関数の軌跡を求める. 変数は二つ以上
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
高度プログラミング演習 (03).
第7回 条件による繰り返し.
岩村雅一 知能情報工学演習I 第10回(後半第4回) 岩村雅一
メンバー 梶川知宏 加藤直人 ロッケンバッハ怜 指導教員 藤田俊明
地域情報学 C言語プログラミング 第5回 ポインタ、関数、ファイル入出力 2017年11月17日
四則演算,変数 入力文,出力文,代入文, ライブラリ関数
プログラミング基礎a 第7回 C言語によるプログラミング入門 ファイル入出力
コンピュータープログラミング(C言語)(2) 1.文字列出力と四則演算 (復習) 2.関数と分割コンパイル
関数への道.
プログラミング基礎B 文字列の扱い.
岩村雅一 知能情報工学演習I 第11回(後半第5回) 岩村雅一
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
精密工学科プログラミング基礎Ⅱ 第4回資料 今回の授業で習得してほしいこと: 文字列の扱い ファイル入出力の方法 コマンドライン引数の使い方
第14章 ファイル操作 14.1 ファイルへの書き込み 14.2 ファイルからの読み込み 14.3 ファイルへの追加書き込み
整数データと浮動小数データ.
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
第4回 ファイル入出力方法.
プログラミング入門2 総合演習課題 2008年 12/22(月), 2009年 1/14(水) 実施 これまでの講義内容についての腕試し
Cプログラミング演習資料.
第14章 ファイル操作 14.1 ファイルへの書き込み 14.2 ファイルからの読み込み 14.3 ファイルへの追加書き込み
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
精密工学科プログラミング基礎 第7回資料 (11/27実施)
cp-3. 計算 (C プログラミング演習,Visual Studio 2019 対応)
Cプログラミング演習 ニュートン法による方程式の求解.
プログラミング基礎a 第7回 C言語によるプログラミング入門 ファイル入出力
プログラミング演習I 数値計算における計算精度と誤差
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
精密工学科プログラミング基礎Ⅱ 第2回資料 今回の授業で習得してほしいこと: 配列の使い方 (今回は1次元,次回は2次元をやります.)
四則演算,変数 入力文,出力文,代入文, ライブラリ関数
プログラミング序論演習.
コンピュータープログラミング (C言語)(10) 1.ファイル入出力
プログラミング入門2 第3回 条件分岐(2) 繰り返し文 篠埜 功.
第14章 ファイル操作 14.1 ファイルへの書き込み 14.2 ファイルからの読み込み 14.3 ファイルへの追加書き込み
知能情報工学演習I 第10回( C言語第4回) 課題の回答
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
Presentation transcript:

コンピュータ基礎実験 第1 4回 コンピュータープログラミン グ ( C 言語)(11) 1.ファイル入出力(復習) 2.物理現象とプログラミン グ

ファイル入出力  C 言語では、ファイルにデータを出力したり、 ファイルからデータを入力する機能がありま す。  この機能を使うと、画面への出力( printf 関 数)やキーボードからの入力( scanf 関数) とよく似たやり方でファイル入出力が可能で す。

ファイルに出力 #include int main(void) { ファイル用変数 ( ファイルポイン タ ) の 宣言 ファイルをオープン ファイルへの書き込み ファイルをクローズ return 0; } #include int main(void) { FILE *f; if((f = fopen(”test.txt”,”w”))==NULL){ printf(” オープン失敗 \n”); exit(1); } fprintf(f, ”Hello world!\n”); fclose(f); return 0; }

ファイルから入力 #include int main(void) { ファイル用変数(ファイルポイン タ)の 宣言 ファイルをオープン ファイルから読み込み ファイルをクローズ return 0; } #include int main(void) { FILE *f; int i; if((f = fopen(”test.txt”,”r”))==NULL){ printf(” オープン失敗 \n”); exit(1); } fscanf(f, ”%d”,&i); fclose(f); return 0; }

5 [ 前回課題 ex13-6] WEB からファイル data10.txt をダウンロード ( し、 data10.txt から N 個のデータを読み込み,それらの平均値と標準偏差を計算せよ.その際, 取り込むデータの数 N が (1)N=10, (2) N=100, (3) N=200, (4) N=400 (5) N=800, (6) N=1200 (7)N=2400 のそれぞれについて計算し,比較せよ.また, N=2400 の場合について, data10.txt を Excel で読み込み平均 [=AVERAGE(A1:A…)] と標準偏差 [=STDEV(A1:A…)] を計算し比較せよ . →ex13-6.c ( 注 ) n 個のデータの平均値,標準偏差はそれぞれ と定義される.

6 n 個のデータの平均値,標準偏差 が計算できればよい

数列の和とループ計算 数列の和⇒繰り返し( for 文)で計算 項を数える変数「 i 」の宣言 最終項の変数宣言と設定 「和」用変数の宣言と初期値設定 変数 i を実数として扱うための変数宣 言 ループ計算 整数変数を実数変数( float )に変換 項の加算 #include int main(void) { int i; int n=10; float s=0; float a; for(i=1; i<=n; i++){ a=(float)i; s=s+a; } return 0; }

8 [ 前回課題 ex13-6] WEB からファイル data10.txt をダウンロード ( し、 data10.txt から N 個のデータを読み込み,それらの平均値と標準偏差を計算せよ。‥‥ #include int main(void) { FILE *f; int i,j,n; float a,s; int x=0,y=0; if((f=fopen("data10.txt","r"))== NULL){ printf(" オープン失敗 \n"); exit(1); } printf("Input number of data: "); scanf("%d",&n); for(i=1; i<=n; i++){ fscanf(f,"%d",&j); x+=j; y+=j*j; } a=(float)x/n; s=sqrt((y-n*a*a)/(n-1)); printf("avr=%f std=%f\n",a,s); fclose(f); return 0; }

物理現象とプログラミング  運動方程式や、電磁気に関する方程式など物 理学の法則を表す方程式は、現実の物理現象 にあてはめた場合、厳密な解を求めることが できるのは極めてまれなことです。  物理法則を基にして、コンピューターを用い て現実の現象を計算すること(コンピュー ターシミュレーション)は近年よく行われて います。  気象予測(スーパーコンピューター)  ジェット機設計( MRJ 、ボーイング 777 )  宇宙探査機の軌道計算(はやぶさ)

放物運動(自由落下運動)  コンピューターシミュレーションの例として、 放物運動をプログラミングしてみよう 高校流 ⇔ 大学 流 差分方程式 微分方程 式

微分と差分 微分方程式 ■ 関数 y(x) のある点で微分係数は で定義され,変数 x のある範囲全体で微分係数を考える時には これを 導関数 (derivative) と呼ぶ. ■ の極限をとる前の微小変化量 のことを差分 (difference) と呼ぶ.なお, を微分 (differential) と呼ぶ. 11

コンピュータでは無限小の値を扱うことができないので, 微小ではあるが有限な区間 に分割し と近似する. 差分化 ■ 一般に,下のような微分方程式が与えられたら 式 (*) の分母を払い,まとめ直すと を得る. 式 (**) の右辺は点 (x,y) で値が知れているので,これから x+Δx での y の値 y(x+Δx) が求められる.これを繰り返し使い,順に x,y を決めていく. 12 高校の方法 と同じ!

差分化 これを,初期条件 の下で解く! Δt の選び方: 右辺の第1項に比 べて第2項が十分 小さいとみなせる 程度 Δt の選び方: 右辺の第1項に比 べて第2項が十分 小さいとみなせる 程度 物体の落下運動:抵抗のない場合(自由落下) [Δt=0.01 としてみよ ] 13

14 [ 例題 ex14-1] 10 m の高さから、 1 kg の物体を落とした時の運動を 計算せよ。落とした時の速度は 0 m/s 、重力加速度は g=9.8 m/s 2 と し、 0.01 s 刻みで 2 秒後まで計算 すること。 → 「 ex14-1.c 」 位置を y, 速度を v, 時刻を t, 時刻の 刻みを dt とする( float )。変数の 宣言と初期値代入し、「 for 文」 で繰り返し差分計算を行う。 #include int main(void) { float t=0,dt=0.01; float y=10,v=0; float g=9.8; int i; for(i=0; i<=200; i++){ v+=-g*dt; y+=v*dt; printf("%f %f %f\n", t+i*dt, v, y); } return 0; }

計算結果をエクセルで表示してみよ 最高点の高さを、計算結果と理論値 v 2 /(2g) とで比較せよ 投げた高さ( 0 m )に戻ってくる時刻 を計算結果と理論値 2v/g とで比較せよ [ 課題 ex14-2] 物体を高さ 0 m の位置から初速度 20 m/s で鉛直方向に投げ上げた のちの,物体の位置と速度を時刻の刻みを 0.01 秒として計算して求めよ.結 果は「 kekka1.txt 」として時刻、速度、位置の順にファイルに出力せよ.( → ex14-2.c ) プログラムにあたっては, (1) 変数 t,v,y や定数 g=-9.8, dt=… などの型を宣言  (2) データファイル名を決め,ファイルを開き,  (3) 課題に関わる計算をして データをファイルに送り,  (4) 終わったらファイルを閉じる 計算例をエクセルで表示 15

ばね振り子の運動  ばね振り子の運動(調和振動)をプログラミ ングしてみよう  運動は三角関数になるだろうか  周期は高校の公式通りになるだろうか

17 [ 例題 ex14-3] 質量 1 kg の物体が バネ定数 0.5 N/m のバネに繋がれ ている場合の運動を計算せよ。 物体を引っ張り、バネを 0.1 m 伸 ばした状態からそっと手を離す とする。 0.01 s 刻みで 20 秒後まで 計算すること。 → 「 ex14-3.c 」 自由落下における力と質量の比 「 F/m=-mg/m=-g 」の部分を、バ ネの場合の比:「 F/m=-ky/m 」に 変更すればよい。 #include int main(void) { float t=0,dt=0.01; float y=0.1,v=0; float m=1,k=0.5; int i; for(i=0; i<=2000; i++){ v+=(-k*y/m)*dt; y+=v*dt; printf("%f %f %f\n", t+i*dt, v, y); } return 0; }

物体の落下運動:抵抗のある場合 [ 例題 ex14-4] 100 m の高さから鉛直方向に 落下する物体に,速度の2乗に比例する 抵抗が速度の向きとは逆方向に働くもの とする.このとき,物体の位置と速度に 対する空気摩擦の影響を調べよ. ( 質量 m を 1 kg, 抵抗の係数 k とが 0( 自由落下と同じ ) 、 0.01 、 0.1 の3つの場合について10秒後 まで計算せよ →ex14-4.c 18 注)速度ベクトルの向きは常に下向き なので、抵抗による力は常に正 ( +kv 2 ) #include int main(void) { float t=0,dt=0.01; float y=100,v=0; float g=9.8,m=1,k=0.01; int i; for(i=0; i<=1000; i++){ v+=(-g+k*v*v/m)*dt; y+=v*dt; printf("%f %f %f\n", t+i*dt, v, y); } return 0; } 位置 速度 k=0 k=0.01 k=0.1

バネ振り子の運動:抵抗のある場合 19 [ 課題 ex14-5] 質量 1 kg の物体がバネ定数 0.5 N/m の バネに繋がれている場合の運動を計算せよ。このと きバネの力の他に、速度に比例する抵抗の力が、速 度の逆向きに働く。この時の比例定数を p=0.1 とす る。物体を引っ張り、バネを 0.1 m 伸ばした状態か らそっと手を離すとし、その後の運動を 0.01 s 刻み で 100 秒後まで計算すること。 → 「 ex14-5.c 」

2 次元の放物運動:抵抗のない場合 [ 課題 ex14-6] 一定の速度 v 0 =10 m/s の大きさで物体を投げ上げると き,投げ上げ角度 θ の依存性を調べよ.出力は「 x,y 」の順に出力 せよ. (→ex14-6.c) 初期条件、 t=0 で x=0, v x =v 0 cosθ, y=0, v y =v 0 sinθ の下で解く プログラ ム 変更点 x 方向追加 : vx: 一定なのでいじ ら ない x: 「 x+=vx*dt; 」 をループに加え る printf(”%f %f\n”,x,y); 20

物体の放物運動:抵抗のある場合 [ 発展課題 ex14-7] 速度の大きさの2乗に比例する抵抗を受けて運動する 物体がある.物体を一定の速さで投げ上げるとき,投げ上げ角度の依存 性を調べよ. ( 質量 m を 1 kg, 抵抗の係数を k=0.1, g=9.8 とする. )→14-7.c 21 注)解析的には解けないので、コンピューターシミュレー ションで求めるしか方法がない

[ ヒント ] 22

実習結果のレポート 3つのソースファイル「 ex14-2.c 」、 「 ex14-5.c 」、「 ex14-6.c 」を添付ファイル にしてメールを送ってください。 宛先: 件名:コンピューター基礎実験14 本文:感想および一言 23