コンピュータープログラミング (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 4回 コンピュータープログラミン グ ( C 言語)(11) 1.ファイル入出力(復習) 2.物理現象とプログラミン グ.
1 運動方程式の例2:重力. 2 x 軸、 y 軸、 z 軸方向の単位ベクトル(長さ1)。 x y z O 基本ベクトルの復習 もし軸が動かない場合は、座標で書くと、 参考:動く電車の中で基本ベクトルを考える場合は、 基本ベクトルは時間の関数になるので、 時間で微分して0にならない場合がある。
オブジェクト指向言語・ オブジェクト指向言語演習 中間試験回答例. Jan. 12, 2005 情報処理技術基礎演習 II 2 オブジェクト指向言語 中間試験解説 1  (1) 円柱の体積(円柱の体積 = 底面の円の面積 x 高さ) を求めるプログラムを作成しなさい。ただし、出力結果は、入 力した底面の円の半径.
コンピュータープログラミング(C言語)(2) 1.文字列出力と四則演算 (復習) 2.関数と分割コンパイル
・力のモーメント ・角運動量 ・力のモーメントと角運動量の関係
コンピュータープログラミング(C言語)(3) 1.関数と分割コンパイル (復習) 2.キーボード入力
コンピュータープログラミング(C言語)(2) 1.文字列出力と四則演算 (復習) 2.関数と分割コンパイル
情報基礎演習B 後半第5回 担当 岩村 TA 谷本君.
確率・統計Ⅰ 第11回 i.i.d.の和と大数の法則 ここです! 確率論とは 確率変数、確率分布 確率変数の独立性 / 確率変数の平均
ファーストイヤー・セミナーⅡ 第8回 データの入力.
演習(解答) 質量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.配列とその利用
精密工学科プログラミング基礎 第9回資料 (12/11 実施)
数楽(微分方程式を使おう!) ~第4章 他分野への応用(上級編)~
プログラミング入門2 総合演習課題 2008年 1/7, 1/21 実施 これまでの講義内容についての腕試し
第7回 条件による繰り返し.
岩村雅一 知能情報工学演習I 第11回(後半第5回) 岩村雅一
第10回関数 Ⅱ (ローカル変数とスコープ).
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第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回) 岩村雅一
メンバー 梶川知宏 加藤直人 ロッケンバッハ怜 指導教員 藤田俊明
知能情報工学演習I 第8回( C言語第2回) 課題の回答
地域情報学 C言語プログラミング 第5回 ポインタ、関数、ファイル入出力 2017年11月17日
コンピュータープログラミング (C言語)(5) 1.条件分岐1(if文、復習) 2.条件分岐2(switch,case文)
四則演算,変数 入力文,出力文,代入文, ライブラリ関数
プログラミング基礎a 第7回 C言語によるプログラミング入門 ファイル入出力
コンピュータープログラミング(C言語)(2) 1.文字列出力と四則演算 (復習) 2.関数と分割コンパイル
関数への道.
プログラミング基礎B 文字列の扱い.
岩村雅一 知能情報工学演習I 第11回(後半第5回) 岩村雅一
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
精密工学科プログラミング基礎Ⅱ 第4回資料 今回の授業で習得してほしいこと: 文字列の扱い ファイル入出力の方法 コマンドライン引数の使い方
第14章 ファイル操作 14.1 ファイルへの書き込み 14.2 ファイルからの読み込み 14.3 ファイルへの追加書き込み
情報理論2 第3回 小林 学 湘南工科大学 2011年10月25日 〒 神奈川県藤沢市辻堂西海岸1-1-25
整数データと浮動小数データ.
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
第4回 ファイル入出力方法.
プログラミング入門2 総合演習課題 2008年 12/22(月), 2009年 1/14(水) 実施 これまでの講義内容についての腕試し
第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言語によるプログラミング入門 ファイル入出力
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
精密工学科プログラミング基礎Ⅱ 第2回資料 今回の授業で習得してほしいこと: 配列の使い方 (今回は1次元,次回は2次元をやります.)
四則演算,変数 入力文,出力文,代入文, ライブラリ関数
コンピュータープログラミング (C言語)(10) 1.ファイル入出力
プログラミング入門2 第3回 条件分岐(2) 繰り返し文 篠埜 功.
第14章 ファイル操作 14.1 ファイルへの書き込み 14.2 ファイルからの読み込み 14.3 ファイルへの追加書き込み
第2章 数値の入力と変数 scanfと変数をやります.
知能情報工学演習I 第11回(後半第5回) 課題の回答
計算技術研究会 第5回 C言語勉強会 関数(function)を使う
知能情報工学演習I 第10回( C言語第4回) 課題の回答
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
Presentation transcript:

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

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

ファイルに出力 #include <stdio.h> #include <stdlib.h> int main(void) { ファイル用変数(ファイルポインタ)の 宣言 ファイルをオープン ファイルへの書き込み ファイルをクローズ return 0; } #include <stdio.h> #include <stdlib.h> 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 <stdio.h> #include <stdlib.h> int main(void) { ファイル用変数(ファイルポインタ)の 宣言 ファイルをオープン ファイルから読み込み ファイルをクローズ return 0; } #include <stdio.h> #include <stdlib.h> 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;

(注) n個のデータの平均値,標準偏差はそれぞれ [前回課題 EX12-6] WEBからファイルdata10.txtをダウンロード(http://www.tuat.ac.jp/~muroo/computer-ex/data10.txt)し、data10.txtからN個のデータを読み込み,それらの平均値と標準偏差を計算せよ.その際,取り込むデータの数Nが 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…)] を計算し比較せよ.→EX12-6.c (注) n個のデータの平均値,標準偏差はそれぞれ と定義される.

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

数列の和とループ計算 数列の和⇒繰り返し(for文)で計算 項を数える変数「i」の宣言 最終項の変数宣言と設定 「和」用変数の宣言と初期値設定 変数iを実数として扱うための変数宣言 ループ計算 整数変数を実数変数(float)に変換 項の加算 #include <stdio.h> 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;

[前回課題 EX12-6] WEBからファイルdata10. txtをダウンロード(http://www. tuat. ac #include <stdio.h> #include <stdlib.h> #include <math.h> 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) 宇宙探査機の軌道計算(はやぶさ2)

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

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

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

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

位置をy, 速度をv, 時刻をt, 時刻の刻みをdtとする(float)。変数の宣言と初期値代入し、「for文」で繰り返し差分計算を行う。 [例題 EX13-1] 10 mの高さから、1 kgの物体を落とした時の運動を計算せよ。落とした時の速度は0 m/s、重力加速度はg=9.8 m/s2とし、0.01 s刻みで2秒後まで計算すること。 →「EX13-1.c」 #include <stdio.h> 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; 位置をy, 速度をv, 時刻をt, 時刻の刻みをdtとする(float)。変数の宣言と初期値代入し、「for文」で繰り返し差分計算を行う。

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

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

自由落下における力と質量の比「F/m=-mg/m=-g」の部分を、バネの場合の比:「F/m=-ky/m」に変更すればよい。 [例題 EX13-3] 質量1 kgの物体がバネ定数0.5 N/mのバネに繋がれている場合の運動を計算せよ。物体を引っ張り、バネを0.1 m伸ばした状態からそっと手を離すとする。0.01 s刻みで20秒後まで計算すること。 →「EX13-3.c」 #include <stdio.h> 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; 自由落下における力と質量の比「F/m=-mg/m=-g」の部分を、バネの場合の比:「F/m=-ky/m」に変更すればよい。

物体の落下運動:抵抗のある場合 [例題EX13-4] 100 mの高さから鉛直方向に落下する物体に,速度の2乗に比例する抵抗が速度の向きとは逆方向に働くものとする.このとき,物体の位置と速度に対する空気摩擦の影響を調べよ.(質量mを1 kg, 抵抗の係数kとが0(自由落下と同じ)、0.01、0.1の3つの場合について10秒後まで計算せよ→EX13-4.c #include <stdio.h> 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.1 位置 k=0.01 k=0 速度 注)速度ベクトルの向きは常に下向きなので、抵抗による力は常に正(+kv2)

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

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

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

[ ヒント ]

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