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

Slides:



Advertisements
Similar presentations
University of Electro-Communications Human Interface section 基礎プログラミングおよび演 習 第7回.
Advertisements

第 2 章 数値の入力と変数 scanf と変数をやります 第 2 章 数値の入力と変数 1. 以下のプログラムを実行してみよう  C 言語では文の最後に「 ; 」(セミコロン)が付きます 第 2 章 数値の入力と変数 2 #include int main() { int x; x = 3; printf("x.
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第3回 配列(1) 情報・知能工学系 山本一公
情報処理 第12回.
第6回条件による分岐.
第3回:ボールを上下に動かそう! (オブジェクトの移動、一次元)
ループで実行する文が一つならこれでもOK
計算技術研究会 C言語講座 第3回 Loops (for文 while文).
配列(2) 第10回[平成15年6月26日(木)]:PN03-10.ppt 今日の内容 1 素数を求める(教科書の例):復習
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
基礎プログラミングおよび演習 第9回
基礎プログラミングおよび演習 第8回.
C言語講座 第4回 ポインタ.
第6章 2重ループ&配列 2重ループと配列をやります.
第3回:ボールを上下に動かそう! (オブジェクトの移動、一次元)
第10回 プログラミングⅡ 第10回
第7回 条件による繰り返し.
第2回 Microsoft Visual Studio C++ を使ってみよう
プログラムの制御構造 選択・繰り返し.
岩村雅一 知能情報工学演習I 第11回(後半第5回) 岩村雅一
繰り返し計算 while文, for文.
C言語講習 第0章 Hello, world!.
第10回関数 Ⅱ (ローカル変数とスコープ).
プログラミング入門 電卓を作ろう・パートIV!!.
アルゴリズムとプログラミング (Algorithms and Programming)
プログラミング序論 2. n人のインディアン.
プログラミング入門2 第2回 型と演算 条件分岐 篠埜 功.
基礎プログラミングおよび演習 第3回
第7回 条件による繰り返し.
第6回:ラケットを動かそう! (キーボードによる物体の操作)
Cの実行モデル.
四則演算,変数 入力文,出力文,代入文, ライブラリ関数
コンピュータープログラミング(C言語)(2) 1.文字列出力と四則演算 (復習) 2.関数と分割コンパイル
プログラミング入門第6回 ~レゴロボットのプログラミング6~
岩村雅一 知能情報工学演習I 第11回(後半第5回) 岩村雅一
整数データと浮動小数データ.
復習 一定回数を繰り返す反復処理の考え方 「ループ」と呼ぶ false i < 3 true i をループ変数あるいはカウンタと呼ぶ
C言語 はじめに 2016年 吉田研究室.
基礎プログラミング演習 第6回.
IF文 START もしも宝くじが当たったら 就職活動する 就職活動しない YES END NO.
復習 breakとcontinueの違い int i; for (i = 1; i <= 100; i++) { ・・・処理1・・・・
復習 Cにおけるループからの脱出と制御 break ループを強制終了する.if文と組み合わせて利用するのが一般的. continue
ウェブデザイン演習 第6回.
復習 if ~ 選択制御文(条件分岐) カッコが必要 true 条件 false 真(true)なら この中が aを2倍する 実行される
復習 breakとcontinueの違い int i; for (i = 1; i <= 100; i++) { ・・・処理1・・・・
第5章 まだまだ続く反復処理!! ~繰り返しその2 for~
プログラミング入門2 第2回 型と演算 条件分岐 篠埜 功.
プログラミング基礎演習 第4回.
標準入出力、変数、演算子、エスケープシーケンス
cp-3. 計算 (C プログラミング演習,Visual Studio 2019 対応)
プログラミング演習I 数値計算における計算精度と誤差
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
2005年度 データ構造とアルゴリズム 第2回 「C言語の復習:配列」
四則演算,変数 入力文,出力文,代入文, ライブラリ関数
情報処理Ⅱ 2005年11月25日(金).
プログラミング1 プログラミング演習I 第2回.
プログラミング序論演習.
プログラミング入門2 第5回 配列 変数宣言、初期化について
プログラミング入門2 第3回 条件分岐(2) 繰り返し文 篠埜 功.
printf・scanf・変数・四則演算
第2章 数値の入力と変数 scanfと変数をやります.
復習 いろいろな変数型(2) char 1バイト → 英数字1文字を入れるのにぴったり アスキーコード → 付録 int
C言語講座第5回 2017 構造体.
C言語講座 四則演算  if ,  switch 制御文.
岩村雅一 知能情報工学演習I 第13回(後半第7回) 岩村雅一
分岐(If-Else, Else if, Switch) ループ(While, For, Do-while)
プログラミング演習I 補講用課題
第1章 文字の表示と計算 printfと演算子をやります 第1章 文字の表示と計算.
第1章 文字の表示と計算 printfと演算子をやります.
ファーストイヤー・セミナーⅡ 第10回 if文による選択処理(2).
Presentation transcript:

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

復習 式と変数 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 メモリ

復習 数学の=と違うところ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のまま) よく考えると、 数学の = は 意味がいろいろ

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

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

復習: 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以外の時

復習: 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

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

条件を書くために便利な演算子 演算子とは、* / + - = … のこと。 式の計算は、演算子によって行われている。 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

条件を書くために便利な演算子 論理演算子 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のときここを実行 }

条件を書くために便利な演算子 論理演算子(つづき) !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

%演算子 割り算の余りを求める演算子です。 優先順位は、*/と同じ 10 + 10%3 は 11, (10+10)%3は 2 10 + 10%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

演算子の優先順位 ! 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) )

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

簡単なシミュレーションの話 数式なら 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

投げ上げ運動のシミュレーション 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

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

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

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

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

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

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

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

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

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

プログラムを最初からデバッグするには? プログラムの最初に 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秒待つ } ここで止 まります。