Microsoft PowerPoint P演習 第10回 関数.ppt [互換モード]

Similar documents
情報システム設計論II ユーザインタフェース(1)

情報システム設計論II ユーザインタフェース(1)

スライド 1

情報システム設計論II ユーザインタフェース(1)

pp2018-pp4base

問 1 図 1 の図形を作るプログラムを作成せよ 但し ウィンドウの大きさは と し 座標の関係は図 2 に示すものとする 図 1 作成する図形 原点 (0,0) (280,0) (80,0) (180,0) (260,0) (380,0) (0,160) 図 2 座標関係 問 2

pp2018-pp9base

Processingをはじめよう

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

Microsoft PowerPoint - [150421] CMP実習Ⅰ(2015) 橋本 CG編 第1回 幾何変換.pptx

情報システム設計論II ユーザインタフェース(1)

Processing入門マニュアル17

<4D F736F F D B B83578B6594BB2D834A836F815B82D082C88C60202E646F63>

課題

今回のプログラミングの課題 ( 前回の課題で取り上げた )data.txt の要素をソートして sorted.txt というファイルに書出す ソート (sort) とは : 数の場合 小さいものから大きなもの ( 昇順 ) もしくは 大きなものから小さなもの ( 降順 ) になるよう 並び替えること

Processingをはじめよう

Microsoft PowerPoint P演習 第5回 当たり判定(2)【課題】.pptx

プログラミングA

プログラミングA

大容量情報検索論

Rerank-By-Example: Rerank Search Results by Operation

Taro-テキスト.jtd

情報システム設計論II ユーザインタフェース(1)

プログラミング入門1

課題

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

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

設問 println はそこで指定されている内容を出力して改行するものである. 一方,print は内容を出力して改行しないものである. 下記のプログラムそれぞれについて出力結果がどうなるか回答せよ. 下記のプログラム - を実行すると, fms という文字列が 回表示される. プログラム - vo

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

アクション講座 第1回目

デジタル表現論・第4回

Microsoft Word - no11.docx

プログラミング基礎I(再)

CG

プログラミング実習I

ToDo: 今回のタイトル

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

Microsoft PowerPoint - kougi7.ppt

<4D F736F F D20438CBE8CEA8D758DC F0939A82C282AB2E646F63>

<4D F736F F D2091E63589F182628CBE8CEA8D758DC08E9197BF2E646F6378>

memo

Microsoft Word - no12.doc

CG

プログラミング入門1

PowerPoint プレゼンテーション


メソッドのまとめ

Microsoft Word - no15.docx

Microsoft PowerPoint - å®�æ−•è©¦é¨fi3ㆮ対ç�Œ.pptx

Microsoft PowerPoint - [150428] CMP実習Ⅰ(2015) 橋本 CG編 第2回 ベジエ曲線とフラクタル.pptx

Method(C 言語では関数と呼ぶ ) メソッドを使うと 処理を纏めて管理することができる 処理 ( メソッド ) の再実行 ( 再利用 ) が簡単にできる y 元々はC 言語の関数であり 入力値に対する値を 定義するもの 数学では F(x) = 2x + 1 など F(x)=2x+1 入力値 (

スライド 1

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

スモール Small ベーシック Basic チュートリアル ヒントとコツ きわなま極めつきのヒント : 怠けよう! タイプをはじめたら Tab か Enter キーを押してコードを完成 矢印キーを使ってメソッドをスクロール 右側にあるメソッドの説明を見る Small Basic を入手する Win

Graphical User Interface 描画する

プログラミング入門1

課題

<4D F736F F D2089A E838D815B838B B838082C582C D834F F08A7782D42E646F6378>

cp-7. 配列

PowerPoint プレゼンテーション

関数の定義域を制限する 関数のコマンドを入力バーに打つことにより 関数の定義域を制限することが出来ます Function[ < 関数 >, <x の開始値 >, <x の終了値 > ] 例えば f(x) = x 2 2x + 1 ( 1 < x < 4) のグラフを描くには Function[ x^

プログラミング入門1

ポインタ変数

PowerPoint プレゼンテーション

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

PowerPoint プレゼンテーション

メンバ変数とインスタンス

マウス操作だけで本格プログラミングを - 世界のナベアツをコンピュータで - プログラムというと普通は英語みたいな言葉で作ることになりますが 今回はマウスの操作だけで作ってみます Baltie, SGP System 操作説明ビデオなどは 高校 情

プログラミング演習 Ⅰ 第 14 回 2017/6/5( 月 ) ゲームを作る クイズ 担当 : 紅林林

4 月 東京都立蔵前工業高等学校平成 30 年度教科 ( 工業 ) 科目 ( プログラミング技術 ) 年間授業計画 教科 :( 工業 ) 科目 :( プログラミング技術 ) 単位数 : 2 単位 対象学年組 :( 第 3 学年電気科 ) 教科担当者 :( 高橋寛 三枝明夫 ) 使用教科書 :( プロ

ポインタ変数

デジタル表現論・第6回

年組番号名前点数 設問 設問 設問 設問 設問 設問

プログラミング入門1

課題

講習No.10

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

スライド 1


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

Microsoft PowerPoint - 3.pptx

memo

ポインタ変数

メソッドのまとめ

PowerPoint プレゼンテーション

コンピュータ工学講義プリント (7 月 17 日 ) 今回の講義では フローチャートについて学ぶ フローチャートとはフローチャートは コンピュータプログラムの処理の流れを視覚的に表し 処理の全体像を把握しやすくするために書く図である 日本語では流れ図という 図 1 は ユーザーに 0 以上の整数 n

Microsoft PowerPoint - prog03.ppt

ゲームエンジンの構成要素

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

線を描く 線ツールをクリックする 原点 ( 青 緑 赤の 3 つの軸が交わるところ ) をクリックする 水平方向 ( 赤い軸と緑の軸がある面 ) にカーソルを動かしクリックする 原点とクリックした点の間に黒い線が描画される 垂直方向にカーソルを動かす 青い線が表示され 青い軸上 と表示される 青い線

PowerPoint プレゼンテーション

Microsoft PowerPoint - C4(反復for).ppt

Microsoft PowerPoint - 説柔5_間勊+C_guide5ï¼›2015ã•’2015æŒ°æŁŽæš’å¯¾å¿œç¢ºèª“æ¸‹ã†¿ã•‚.pptx

始めに, 最下位共通先祖を求めるための関数 LcaDFS( int v ) の処理を記述する. この関数は値を返さない再帰的な void 関数で, 点 v を根とする木 T の部分木を深さ優先探索する. 整数の引数 v は, 木 T の点を示す点番号で, 配列 NodeSpace[ ] へのカーソル

PowerPoint プレゼンテーション

Java 基礎問題ドリル ~ メソッドを理解する ~ 次のプログラムコードに 各設問の条件にあうメソッドを追加しなさい その後 そのメソッドが正しく動作することを検証するためのプログラムコードを main メソッドの中に追加しなさい public class Practice { // ここに各設問

情報システム設計論II ユーザインタフェース(1)

PowerPoint プレゼンテーション

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

Microsoft PowerPoint - prog08.ppt

Transcription:

プログラミング演習 (10) 関数 中村, 橋本, 小松, 渡辺 1

目標 Processing で関数に挑戦! 機能をどんどん作ってみよう! 円とか四角形だけじゃなくて, 色々な図形描画を関数にしてしまおう! 判定も関数で!

関数 背景を塗りつぶす : background( 色 ); 円を描く : ellipse(x 座標, y 座標, 縦直径, 横直径 ); 線を描く : line( x1, y1, x2, y2 ); 四角形を描く : rect( x 座標, y 座標, 横幅, 縦幅 ); 距離を計算する : dist( x1, y1, x2, y2 ); などなど, これまでに色々な機能をもつ関数を利用してきた. こういった関数を作ることが今回の目的

関数の定義 関数の返り値の型関数名 ( 引数リスト ) { 返り値がない場合は void 関数内のいろいろな処理 ( 返り値がある場合は )return 返り値 ; x, y に半径 r の円を描く関数 void circle( int x, int y, int r ) { ellipse( x, y, r*2, r*2 ); 半径 r の円の面積を求める関数 float menseki( float r ) { return r*r*3.14;

関数について 最初に登場した void setup(){... や, void draw(){... は,setup や draw には返り値が無いという事を意味している ただ準備, ただ描画をするだけなので!

関数のポイント 関数の引数リスト ( どういう値を受け取るか ) に入力とする変数を用意し, その変数のみを利用して結果を返すのがポイント 描画であれば入力されたx, yからの相対座標 計算であれば入力された変数同士の計算 関数の利用用途 色々な描画機能 色々な計算機能 色々な判定機能 自分専用の便利関数をたくさん作ろう!

棒人間を描く (Q) x, y 座標を指定すると棒人間を描いてくれる関数を作成せよ!

棒人間を描く 考え方 棒人間は, 顔の中心の座標 (x, y) を与えると, 勝手に体と手と足を描くものにする 棒人間の中心の座標を (x, y) としたときのそれぞれの座標を決める顔の半径は10 (x, y) 返り値はなし (void) 描画するだけ (x+20, y+10) (x-20, y+10) (x, y+10) (x, y+40) (x-20, y+60) (x+20, y+60)

棒人間を描く マウスカーソルの場所に棒人間を描く void setup(){ size( 400, 400 ); void drawhuman( int x, int y ){ ellipse( x, y, 20, 20 ); line( x, y+10, x, y+40 ); line( x 20, y+10, x+20, y+10 ); line( x, y+40, x 20, y+60 ); line( x, y+40, x+20, y+60 ); void draw(){ background( 255 ); drawhuman( mousex, mousey );

予習問題 マウスクリックされた場所に棒人間を描くプログラムを書いてみましょう mousepressed で drawhuman 配列と繰り返しを使ってマウスカーソルに追尾する棒人間を 100 人描いてみましょう 前回の資料を参考に! マウスカーソルに追尾する棒人間 100 人を, どんどん薄くしましょう ( 同上 ) 棒人間じゃない何かを描画する関数を作りましょう ( ロボットでも OK!)

関数でアニメーション (Q) マウスの位置に応じて黒目を動かすプログラムを作ってみよう!( 目玉を 1 つの関数とする )

関数でアニメーション 考え方 目玉の場所 (x, y) と, 黒目が向く方向を決めるための座標 (mx, my) を引数にする mx, my はマウス座標を入力 白目を (x, y) を中心とし適当な楕円で描く x と mx の位置関係で黒目の座標を決め黒目を描く mx < x 10 なら黒目を左へ (10は適当な値) mx > x + 10 なら黒目を右へ そうでなければ黒目を真ん中へ draweye を2つdraw() の中に書く! drarwhuman は前に作ったのを使う

関数でアニメーション void setup(){ size( 400, 400 ); 描画だけなので返り値はなし void draweye( int x, int y, int mx, int my ){ strokeweight( 3 ); fill( 255, 255, 255 ); ellipse( x, y, 60, 70 ); fill( 0, 0, 0 ); if( x > mx+10 ){ ellipse( x 10, y, 10, 10 ); else if( x < mx 10 ){ ellipse( x+10, y, 10, 10 ); else { ellipse( x, y, 10, 10 ); void draw(){ background( 255 ); drawhuman( mousex, mousey ); draweye( 160, 200, mousex, mousey ); draweye( 240, 200, mousex, mousey ); 引数は 4 つ x と mx の位置で条件分岐

予習問題 マウスの X 座標だけを考慮して目を動かしているが, マウスが下にある時, 上にある時で目を上下に動かしてみましょう ( 合計 8 方向 ) ( ヒント ) y と my の関係を利用 棒人間を左から右にアニメーション ( 移動 ) し, その移動に応じて黒目の動きを変えましょう ( ヒント ) 棒人間の座標を引数にする! ( 挑戦 ) もう少し目の動きをスムーズにしてみましょう!

予習問題 繰り返しを利用して妖怪百眼を作ってみよう x, y の 2 つのループを用意する!

アナログ時計を描く (Q) 400x400 の画面上に現在の時間に合わせてアナログ時計を表示するプログラムを作るには?

アナログ時計を描く 考え方 現在の時間は hour() で, 現在の分は minute() で, 現在の秒は second() で取得可能 長針, 短針, 秒針は, 角度 a, 半径を r としたとき, 画面の中央 (x, y) から (x+r*cos(a), y+r*sin(a)) までの線分を描くことで表現可能 (aは0~2πのラジアン) 角度 a をどうやって求めるかが問題 時計の角度 0 はここ Processing の角度 0 はここ

アナログ時計を描く 考え方 ( 続き ) 12 時間で 1 周 (360 度 ), 同じく 60 分,60 秒で 1 周 hour 時は, 角度として hour*30 minute 分は, 角度として minute*6 second 秒は, 角度として second*6 90 度 Processing の角度は進んでいるので,90 度だけ角度をマイナスする kh = hour*30 90; km = minute*6 90; ks = second*6 90; 長針, 短針, 秒針は適当に半径を決定

アナログ時計を描く [1] void drawclock( int x, int y, int r ){ ellipse( x, y, r*2, r*2 ); float kh = hour()*60 90; float km = minute()*6 90; float ks = second()*6 90; float len_h = r*0.5; float len_m = r*0.7; float len_s = r*0.9; line( x, y, x+len_h*cos(radians(kh)), y+len_h*sin(radians(kh)) ); line( x, y, x+len_m*cos(radians(km)), y+len_m*sin(radians(km)) ); line( x, y, x+len_s*cos(radians(ks)), y+len_s*sin(radians(ks)) ); void draw(){ background( 255 ); drawclock( 200, 200, 190 );

予習問題 マウスカーソルの場所に応じてアナログ時計を動かしてみましょう LondonとTokyoとNew Yorkの時計を表示するアナログ時計を横に並べてみましょう ( 時差考慮 ) サマータイムで日本とロンドン間の時差が +8 時間, 日本と NY の間の時差が 13 時間

予習問題 現在のアナログ時計は短針が 1 時間に 1 回, 分針が 1 分に 1 回しか動かないが, 本当はもっと細かく動くはず. それをプログラムしよう! アナログ時計を改良し, もっとわかりやすく, 豪華にしてみましょう 色を変えたり, 太さを変えたり 面白い時計を作ってみましょう 自分専用の時計を作ろう!

実行ファイルを作る! どの OS 用のアプリを作る? Export Application Export! 出力された! Win なら exe を実行! アプリが出来た!

約数の数を求める関数 (Q) ある入力された数字の約数の数を求める関数をどう作るか? また, その関数を使って数字と約数の数のペアを出力しよう

約数の数を求める関数 考え方 引数は整数型の num にする 約数を数える整数型の変数 count を用意 整数型の変数 i (1からnumまで1ずつ増やす) を用意し,num が i で割り切れたら count を1 追加する 最後に count の値を返す return count; println で数と, 返って来た値を表示する

約数の数を求める関数 int getnumberofdivisor( int num ){ int i=1; int count=0; while( i<=num ){ if( num%i == 0 ){ count++; i++; return count; void setup(){ for( int i=1; i<100000; i++ ){ println( i+": "+ getnumberofdivisor(i) ); 返り値 ( この値が, 呼び出し元に返る ) ここに戻る

素数かどうかを判定 (Q) 関数の引数として入力した素数かどうかを判定する関数を作ろう. 素数なら 1 を, 素数じゃなければ 0 を返すようにしよう 引数は整数型の num にする 約数の数が2だったら素数! count == 2 だったら 1 を, それ以外だったら 0 を返すようにしよう! 関数の返り値が 1 だったら素数! と表示する

素数かどうかを判定 int isprimenumber( int num ){ int i=1; int count=0; while( i<=num ){ if( num%i == 0 ){ count++; i++; if( count == 2 ){ return 1; else { return 0; void setup(){ for( int i=1; i<100000; i++ ){ if( isprimenumber( i) == 1 ){ println( i+" は素数です!" ); ちなみに, 約数の数を数えるプログラムをそのまま使うだけでも OK

予習問題 入力された数字が完全数かどうかを判定する関数を作ってみましょう 四角形と円の当たり判定を行う関数を作ってみましょう 四角形同士の当たり判定を行う関数を作ってみましょう

予習問題 過去に作ったロボットを関数化しましょう! ロボットの部位ごとに関数化し, マウスなどによってアニメーションできるようにしてみましょう また,draw() 内をどんどんシンプルにしましょう 過去に作ったゲームを関数化しましょう! ゲームの機能を関数に分離しましょう スコアを表示する関数を作っても良いかも!