Presentation is loading. Please wait.

Presentation is loading. Please wait.

基礎プログラミングおよび演習 第4回 担当:花岡 5階522/520.

Similar presentations


Presentation on theme: "基礎プログラミングおよび演習 第4回 担当:花岡 5階522/520."— Presentation transcript:

1 基礎プログラミングおよび演習 第4回 担当:花岡 5階522/520

2 復習 式と変数 2 2 2*2 4 3 C言語の変数は、メモリに作られます。 x x a x a x a x a
#include <stdio.h> int main(){ int x; int a: a = 2; x = a*a; printf (”%d”, x); a = 3; } メモリ x a メモリ 2 x a メモリ 2 2*2 x a メモリ 4 3 x a メモリ

3 復習 数学の=と違うところ1 代入(let)と 数学の=(equal)はぜんぜん違う 数学 C言語 を代入 よく考えると、
復習 数学の=と違うところ1 代入(let)と 数学の=(equal)はぜんぜん違う C言語 数学 #include <stdio.h> int main(){ int x; int a: a = 2; x = a*a; printf (”%d”, x); a = 3; } を代入 整数 x を宣言 整数 a を宣言 aに2を代入 xに a*aを代入 aに3を代入 (xは4) (xは4のまま) よく考えると、 数学の = は 意味がいろいろ

4 復習 数学の=と違うところ2 Cの=はいつも代入の意味 = は、 右辺を左辺に代入する演算です。 なので、右辺は変数でないとだめです。 。
= は、 右辺を左辺に代入する演算です。 なので、右辺は変数でないとだめです。 int x; x = 3; 3 = x; これはOK これはエラー invalid lvalue in assignment 代入で左辺値が無効です int x; 3*x = 30; これもエラー。 x=10とはならない。 =は、方程式を解いてはくれない。

5 復習:式と文 C言語では、「式; 」を文と言います。 文の例 他にも文がいくつかあります。 式の文→式を計算する 3 * 10 ;
int i; double d; int x = 3*10; 式の終わりを表すセミコロン 式の文 宣言文→整数の変数iを宣言する 宣言文→実数の変数dを宣言する 宣言文→整数の変数xを宣言し、 3*10を代入(で初期化)する 型名 変数名 初期化の式 セミコロン 宣言文

6 復習: if文 式の値によって分岐する特殊な文 if (条件式) 式が0以外の時に実行する文かブロック else
  式が0以外の時に実行する文かブロック else   式が0の時に実行する文かブロック 無くてもOK #include <stdio.h> int main(){ if (10/3) printf(”0以外のとき\n”); else printf(”0の時\n”); } #include <stdio.h> int main(){ if (10/3) printf(”0以外のとき\n”); } 0以外のとき 0以外の時

7 復習: while 文 何度も繰り返す特殊な文が while 文です。 式の値が0になるまで、文かブロックを
#include <stdio.h> int main(){ int i=5; while(i){ printf(”i = %d\n”, i); i = i–1; } while(式)   文かブロック iが0になるまで 式の値が0になるまで、文かブロックを 繰り返し実行します。具体的には、 まず、式を計算します。 式の値が0以外なら、 文かブロックを実行します。 式の値が0なら、4に進みます。 1に戻ります。 while文を終わり次に進みます。 繰り返す i = 5 i = 4 i = 3 i = 2 i = 1

8 課題6の if 文 if のあとに空の文とelse 本当は、 if (r==0)か、 if (r<1) と書きたい
int i=100000; int in = 0; while(i){ double x = rand() / ; double y = rand() / ; int r = x*x + y*y; if ( r ) ; else in = in +1; i = i–1; } if のあとに空の文とelse 本当は、 if (r==0)か、 if (r<1) と書きたい

9 条件を書くために便利な演算子 演算子とは、* / + - = … のこと。
式の計算は、演算子によって行われている。 a+b は、add(a, b)という関数にも見える 四則演算以外にCにはいろいろな演算子がある。 比較演算子 = =, !=, <, >, <=, >=, a = = b aとbが等しければ1 異なれば0 a ! = b aとbが等しければ0 異なれば1 a < b a<b ならば 1 そうでなければ 0 a > b a>b ならば 1 そうでなければ 0 a <= b a≦bならば 1 そうでなければ 0 a >= b a≧bならば 1 そうでなければ 0 計算順の優先度(優先順位)は、四則より低い a < b + c は、 a < (b+c) の意味 0 < 1+2 の値は1 (0 < 1) + 2 の値は3

10 条件を書くために便利な演算子 論理演算子 and と or a && b aとbが両方0以外のとき 1 そうでなければ 0
「条件 1かつ 条件2のとき」をあらわすのに便利 a || b aとbのどちらかが0以外のとき 1 そうでなければ 0 四則演算子との比較 0<1 && 5 の値は 1 (0<1) * 5 の値は 5 0>1 || 5 の値は 1 (0>1) + 5 の値は 5 if (a<b && c<d){ // a<bかつc<dのときここを実行 } if (x || y){ // x か yのどちらかが // 0でなければ実行 } if (a<b || c<d){ // a<bcまたは<dのときここを実行 }

11 条件を書くために便利な演算子 論理演算子(つづき) !a aが0のとき1 そうでなければ 0
+-*/ == != > < && || などは、左右に値が必要 例:a+b a-b a/b a*b a==bなど ! は、右だけに値をとる 例: !a !(a<b && b<c) !0 + !1 値は1 計算順の優先度(優先順位)がとても高い !a*b は、 (!a)*bの意味 !0*3 は 3 !(0*3)は1

12 %演算子 割り算の余りを求める演算子です。 優先順位は、*/と同じ 10 + 10%3 は 11, (10+10)%3は 2
%3 は 11, (10+10)%3は 2 printf(”%d\n”, 0%3); printf(”%d\n”, 1%3); printf(”%d\n”, 2%3); printf(”%d\n”, 3%3); printf(”%d\n”, 4%3); printf(”%d\n”, 5%3); printf(”%d\n”, 6%3); 1 2

13 演算子の優先順位 ! 0なら1、0以外は1 * / % 積商 mod(余り) + - 和差 < > <= >= 比較
! 0なら1、0以外は1 * / % 積商 mod(余り) 和差 < > <= >= 比較 == != 比較 && 両方0以外なら1(論理積) || 片方以外なら1 = 代入 10 || !1*10<1 == 2>1 && 0 != 0 は、 10 || ( ((!1*10)<1) == (2>1) && (0 != 0) )

14 簡単なシミュレーションの話 速度と位置の関係 速度と加速度の関係も同様

15 簡単なシミュレーションの話 数式なら C言語だと double x=0; g double v=0; double dt=0.01;
double g=9.8; x = x+v*dt; v = v+g*dt; g y

16 投げ上げ運動のシミュレーション x g =9.8 * y カーソルを動かす ための関数 move() を使うために必要 です.
#include “curses_subset.h“ int main(){ double vx = 5; double vy = -20; // 質点の速度 double px = 5; double py = 24; // 質点の位置 double dt = 0.05; //シミュレーションの時間刻み(秒) double g = 9.8; // 重力加速度(m/s^2) while(!kbhit()){ // 何かキーが押されたら終了 // 位置の更新: 位置=位置+速度 px =px+vx*dt; py =py+vy*dt; vy = vy+g*dt; clear(); // 画面クリア move(py, px); // カーソルを移動 printf("*\n"); // 表示 sleep_ms(50); // 0.05秒待つ } カーソルを動かす ための関数 move() を使うために必要 です. x g =9.8 * y

17 課題7:床で跳ね返るシミュレーション ボールの投げ上げ運動のシミュレーションのプログラムを課題のページに置いておきます.
床でボールが跳ね返るように改造してください. できたら次のことにもチャレンジしてください. 跳ね返り係数. 画面の左右端でも跳ね返る. そのほか思いつくこと.

18 ターミナルで動くプログラムのデバッグ ターミナルで動くプログラムも一工夫すると デバッガを使ってデバッグすることができます。 手順の概要
先にターミナルでプログラムを動かす プログラムにデバッガを接続する

19 デバッガ接続の手順 ターミナルでデバッグ対象のプログラム (ここではex7sample)を起動 もうひとつターミナルを起動

20 デバッガ接続の手順 新しいターミナルで ps コマンドを実行 プロセスID(PID)を調べる

21 デバッガ接続の手順 Xcodeを起動してプロジェクトを開く ファインダで ex7sample.xcodeproj を開くのでもOK
[デバッグ]-[接続]-[プロセスID]を選択

22 デバッガ接続の手順 先ほど調べたプロセスIDを入力 OKを押すとデバッガがプログラムに接続され、 プログラムは一時停止状態になる。

23 デバッガ接続の手順 ソースコード(main.c)を開き、ブレークポイントを追加する。

24 デバッガ接続の手順 デバッガの続けるボタンを押してプログラムを実行状態にする。
ターミナルをクリックし、シミュレーションを開始する(何かキーを押す)

25 デバッガ接続の手順 ブレークポイントでプログラムが一時停止する 後は、普通のデバッガの使い方で続けられます。

26 プログラムを最初からデバッグするには? プログラムの最初に getchar() をいれて、とめておいてください。 ここで止 まります。
#include “curses_subset.h“ int main(){ double vx = 5; double vy = -20; // 質点の速度 double px = 5; double py = 24; // 質点の位置 double dt = 0.05; //シミュレーションの時間刻み(秒) double g = 9.8; // 重力加速度(m/s^2) getchar(); while(!kbhit()){ // 何かキーが押されたら終了 // 位置の更新: 位置=位置+速度 px =px+vx*dt; py =py+vy*dt; vy = vy+g*dt; clear(); // 画面クリア move(py, px); // カーソルを移動 printf("*\n"); // 表示 sleep_ms(50); // 0.05秒待つ } ここで止 まります。


Download ppt "基礎プログラミングおよび演習 第4回 担当:花岡 5階522/520."

Similar presentations


Ads by Google