SlideShare a Scribd company logo
ふるたに流
プログラミング学習法
自己紹介
じこしょうかい
自己紹介
• 名前: ふるたに かずま
• プログラミング専攻
• 主にグラフィックスプログラミングを担当
• twitterID: @__neeeeema__
制作したもの
1年生
2年生
3年生
4年生
注意
ちゅうい
あくまで
自己流
アジェンダ
• プログラミングのやりかた
• 覚えるべきもの
プログラミング
のやりかた
誰かが書いた
こんなソースがありました…
void PrintMultiplicationTable()
{
for(int i = 1; i < 10; i++){
for(int j = 1; j < 10; j++){
printf(“%d ”,i * j);
}
printf(“n”);
}
}
なにしてるか
分かりますか??
void PrintMultiplicationTable()
{
for(int i = 1; i < 10; i++){
for(int j = 1; j < 10; j++){
printf(“%d ”,i * j);
}
printf(“n”);
}
}
1 2 3 4 5 6 7 8 9
void PrintMultiplicationTable()
{
for(int i = 1; i < 10; i++){
for(int j = 1; j < 10; j++){
printf(“%d ”,i * j);
}
printf(“n”);
}
}
1 2 3 4 5 6 7 8 9
void PrintMultiplicationTable()
{
for(int i = 1; i < 10; i++){
for(int j = 1; j < 10; j++){
printf(“%d ”,i * j);
}
printf(“n”);
}
}
掛ける!?
1
2
3
4
5
6
7
8
9
1 2 3 4 5 6 7 8 9
プログラムで
掛け算
数学的な例
bool Intersection(
const Vector3& origin,
const Vector3& target,
const float radius)
{
Vector3 distance = origin - target;
const float length = distance.Length();
return (radius > length);
}
なにしてるか
分かりますか??
bool Intersection(
const Vector3& origin,
const Vector3& target,
const float radius)
{
Vector3 distance = origin - target;
const float length = distance.Length();
return (radius > length);
}
bool Intersection(
const Vector3& origin,
const Vector3& target,
const float radius)
{
Vector3 distance = origin - target;
const float length = distance.Length();
return (radius > length);
}
origin
bool Intersection(
const Vector3& origin,
const Vector3& target,
const float radius)
{
Vector3 distance = origin - target;
const float length = distance.Length();
return (radius > length);
}
target
bool Intersection(
const Vector3& origin,
const Vector3& target,
const float radius)
{
Vector3 distance = origin - target;
const float length = distance.Length();
return (radius > length);
}
radius = 半径
bool Intersection(
const Vector3& origin,
const Vector3& target,
const float radius)
{
Vector3 distance = origin - target;
const float length = distance.Length();
return (radius > length);
}
distance = 距離
bool Intersection(
const Vector3& origin,
const Vector3& target,
const float radius)
{
Vector3 distance = origin - target;
const float length = distance.Length();
return (radius > length);
}
length = 長さ
bool Intersection(
const Vector3& origin,
const Vector3& target,
const float radius)
{
Vector3 distance = origin - target;
const float length = distance.Length();
return (radius > length);
}
黄色と紫
どっちが長い?
どっちが長い?
絵をイメージ
今回は、プログラムから
「何をしているか
」導き出した
プログラム
イメージ
理解
流れのイメージ
では…
「何がしたい」
が決まっていれば
プログラムは…
書ける!!!
イメージ
したいこと
流れのイメージ
プログラム
例えば…
お題:「当たり判定」
イメージ
したいこと
流れのイメージ
プログラム
必要なもの
• 自分の場所
• 相手の場所
• 相手の大きさ
• めり込んでいたらtrueを返す
イメージ
したいこと
流れのイメージ
プログラム
こんな感じ
イメージ
したいこと
流れのイメージ
プログラム
当たり判定 関数
• 引数: 自分の場所、相手の場所、相手の大きさ
• 戻り値: めり込んでいたらTRUE
• 処理のイメージは出来た
bool Intersection(
const Vector3& origin,
const Vector3& target,
const float radius)
{
Vector3 distance = origin - target;
const float length = distance.Length();
return (radius > length);
}
完成!!
まとめ
プログラマ
絵を書こう!!
絵が書けると…
「アーティスト
」と問題・実装を共有出来
る
アジェンダ
• プログラミングのやりかた
• 覚えるべきもの
覚えるべきもの
int main(void)
{
printf(“Hello Woldn”);
return 0;
}
int main(void)
{
printf(“Hello Woldn”);
return 0;
}
int main(void)
{
int i;
scanf(“%d”,&i);
return i;
}
int main(void)
{
int i;
scanf(“%d”,&i);
return i;
}
float ComputeAngle(
const Vector3& v1,const Vector3& v2)
{
float dot = Vec3Dot(v1,v2);
dot = dot / (v1.Length() * v2.Length());
float angle = acosf(dot);
return angle;
}
float ComputeAngle(
const Vector3& v1,const Vector3& v2)
{
float dot = Vec3Dot(v1,v2);
dot = dot / (v1.Length() * v2.Length());
float angle = acosf(dot);
return angle;
}
float ComputeAngle(
const Vector3& v1,const Vector3& v2)
{
float dot = Vec3Dot(v1,v2);
dot = dot / (v1.Length() * v2.Length());
float angle = acosf(dot);
return angle;
}
void ComputeNormal(
Vector3* out,
const Vector3& p1,
const Vector3& p2,
const Vector3& p3)
{
Vector3 v1 = p2 - p1;
Vector3 v2 = p3 - p1;
Vector3 normal;
Vec3Cross(&normal,v1,v2);
normal.Normalize();
out = normal;
}
void ComputeNormal(
Vector3* out,
const Vector3& p1,
const Vector3& p2,
const Vector3& p3)
{
Vector3 v1 = p2 - p1;
Vector3 v2 = p3 - p1;
Vector3 normal;
Vec3Cross(&normal,v1,v2);
normal.Normalize();
out = normal;
}
void ComputeNormal(
Vector3* out,
const Vector3& p1,
const Vector3& p2,
const Vector3& p3)
{
Vector3 v1 = p2 - p1;
Vector3 v2 = p3 - p1;
Vector3 normal;
Vec3Cross(&normal,v1,v2);
normal.Normalize();
out = normal;
}
大事な関数?
覚えた
printf
scanf
覚えた
printf
scanf
言語で
関数が変化
wikipediaより抜粋
printf
printf(プリントエフ、print formatted)は、C言語の標準入出力ヘッダー (stdio.h)で宣
言されている関数である。
引数で与えられた書式付きの文字列を、環境によって設定された標準出力 (stdout) に
出力する。JIS X 3010:2003においてその機能は「実引数にstdoutを実引数として付加
したfprintf関数と等価とする」と規定されている (7.19.6.3)。
この関数は、第1引数に与えられた文字列を出力する。C言語の他の単純な入出力関数
に比べ、比較的複雑な構造を持っており、第1引数の文字列のなかで書式を指定するこ
とで、第2引数以降の任意の数の引数を、書式に従って出力することができる。また、
整数型(int型)の戻り値を持ち、出力に成功した場合には転送したバイト数、出力に
失敗した場合には負数を返却する。
C言語の初心者の大半が最初に使う関数であり、最もオーソドックスかつ使いやすい関
数ではあるが、内部では指定された書式を考慮する高級な処理を行っているため、ハ
ードウェアの許容限界まで負荷がかかるシステムや組み込み機器のプログラミングに
おいてはあまり使用されることのない関数である。
printf
printf(プリントエフ、print formatted)は、C言語の標準入出力ヘッダー (stdio.h)で宣
言されている関数である。
引数で与えられた書式付きの文字列を、環境によって設定された標準出力 (stdout) に
出力する。JIS X 3010:2003においてその機能は「実引数にstdoutを実引数として付加
したfprintf関数と等価とする」と規定されている (7.19.6.3)。
この関数は、第1引数に与えられた文字列を出力する。C言語の他の単純な入出力関数
に比べ、比較的複雑な構造を持っており、第1引数の文字列のなかで書式を指定するこ
とで、第2引数以降の任意の数の引数を、書式に従って出力することができる。また、
整数型(int型)の戻り値を持ち、出力に成功した場合には転送したバイト数、出力に
失敗した場合には負数を返却する。
C言語の初心者の大半が最初に使う関数であり、最もオーソドックスかつ使いやすい関
数ではあるが、内部では指定された書式を考慮する高級な処理を行っているため、ハ
ードウェアの許容限界まで負荷がかかるシステムや組み込み機器のプログラミングに
おいてはあまり使用されることのない関数である。
wikipediaより抜粋
「標準出力」
「標準出力」
覚えた
内積
外積
内積v1.x * v2.x + v1.y * v2.y + v1.z * v2.z
または
|v1| * |v2| * cos(θ)
外積v1.y * v2.z - v1.z * v2.y,
v1.z * v2.x - v1.x * v2.z,
v1.x * v2.y - v1.y * v2.x
公式いらん
ググれば出る
角度だす
法線だす
姿勢制御
内積
内積
内積
内積
この長さが
内積で出る値
外積
外積
外積
外積
2つのベクトルに対して垂直なベクトル
が外積で出る値
まとめ
関数
おぼえなくてい
い
(標準入出力,内積など…)
得られる結果(内積、外積)
(なぜ、そうなる)
単語を覚えれば
ググれる
結果,理屈
を覚えれば
「応用が効く
」
理屈,結果
「イメージで覚える」
と記憶に残りやすいきがする
最後に…
プログラマ
絵を書こう!!
ご清聴ありがとう
ございました

More Related Content

Viewers also liked

プログラミング勉強会 その0
プログラミング勉強会 その0プログラミング勉強会 その0
プログラミング勉強会 その0
Hirokazu Fukami
 
Currículum Vitae
Currículum VitaeCurrículum Vitae
Currículum Vitae
loltool
 
Usabilidad Convertibilidad 1
Usabilidad Convertibilidad 1Usabilidad Convertibilidad 1
Usabilidad Convertibilidad 1
Iñaki Lakarra
 
ISPRA AUDIOVISUEL
ISPRA AUDIOVISUELISPRA AUDIOVISUEL
ISPRA AUDIOVISUEL
ispra31
 
プログラミング学習のための学習
プログラミング学習のための学習プログラミング学習のための学習
プログラミング学習のための学習
siranon *
 
Hotels in uae
Hotels in uaeHotels in uae
Hotels in uae
Eric simons
 

Viewers also liked (20)

01学習の高速道路とは
01学習の高速道路とは01学習の高速道路とは
01学習の高速道路とは
 
いかにして経験学習サイクルを高速化するか?
いかにして経験学習サイクルを高速化するか?いかにして経験学習サイクルを高速化するか?
いかにして経験学習サイクルを高速化するか?
 
プログラミング勉強会 その0
プログラミング勉強会 その0プログラミング勉強会 その0
プログラミング勉強会 その0
 
C# でブラウザ操作
C# でブラウザ操作C# でブラウザ操作
C# でブラウザ操作
 
プログラミングスキルの獲得について考えてみた
プログラミングスキルの獲得について考えてみたプログラミングスキルの獲得について考えてみた
プログラミングスキルの獲得について考えてみた
 
エクセル兄さんMOS試験スペシャ150分速習講座
エクセル兄さんMOS試験スペシャ150分速習講座エクセル兄さんMOS試験スペシャ150分速習講座
エクセル兄さんMOS試験スペシャ150分速習講座
 
Teachcast Platformの使い方(Part1)
Teachcast Platformの使い方(Part1)Teachcast Platformの使い方(Part1)
Teachcast Platformの使い方(Part1)
 
Xarxes Socials i Networking
Xarxes Socials i NetworkingXarxes Socials i Networking
Xarxes Socials i Networking
 
sculpturecatalog
sculpturecatalogsculpturecatalog
sculpturecatalog
 
Currículum Vitae
Currículum VitaeCurrículum Vitae
Currículum Vitae
 
Usabilidad Convertibilidad 1
Usabilidad Convertibilidad 1Usabilidad Convertibilidad 1
Usabilidad Convertibilidad 1
 
ISPRA AUDIOVISUEL
ISPRA AUDIOVISUELISPRA AUDIOVISUEL
ISPRA AUDIOVISUEL
 
123 (1) (1) (1)
123 (1) (1) (1)123 (1) (1) (1)
123 (1) (1) (1)
 
Scientific Revolution
Scientific RevolutionScientific Revolution
Scientific Revolution
 
プログラミング学習のための学習
プログラミング学習のための学習プログラミング学習のための学習
プログラミング学習のための学習
 
ウイルス検知プログラミング
ウイルス検知プログラミングウイルス検知プログラミング
ウイルス検知プログラミング
 
UX Crash Course
UX Crash CourseUX Crash Course
UX Crash Course
 
第4回 学習
第4回 学習第4回 学習
第4回 学習
 
Hotels in uae
Hotels in uaeHotels in uae
Hotels in uae
 
Trend Micro CTF Asia Pacific & Japan -defensive100-
Trend Micro CTF Asia Pacific & Japan -defensive100-Trend Micro CTF Asia Pacific & Japan -defensive100-
Trend Micro CTF Asia Pacific & Japan -defensive100-
 

Similar to ふるたに流プログラミング学習法

ドッターのためのプログラミングなにそれおいしいの
ドッターのためのプログラミングなにそれおいしいのドッターのためのプログラミングなにそれおいしいの
ドッターのためのプログラミングなにそれおいしいの
manaten
 
2011.12.10 関数型都市忘年会 発表資料「最近書いた、関数型言語と関連する?C++プログラムの紹介」
2011.12.10 関数型都市忘年会 発表資料「最近書いた、関数型言語と関連する?C++プログラムの紹介」2011.12.10 関数型都市忘年会 発表資料「最近書いた、関数型言語と関連する?C++プログラムの紹介」
2011.12.10 関数型都市忘年会 発表資料「最近書いた、関数型言語と関連する?C++プログラムの紹介」
Hiro H.
 
cs-4. プログラミング入門
cs-4. プログラミング入門cs-4. プログラミング入門
cs-4. プログラミング入門
kunihikokaneko1
 

Similar to ふるたに流プログラミング学習法 (20)

はじめての「R」
はじめての「R」はじめての「R」
はじめての「R」
 
DS Exercise Course 2
DS Exercise Course 2DS Exercise Course 2
DS Exercise Course 2
 
ドッターのためのプログラミングなにそれおいしいの
ドッターのためのプログラミングなにそれおいしいのドッターのためのプログラミングなにそれおいしいの
ドッターのためのプログラミングなにそれおいしいの
 
ドッターのためのプログラミングなにそれおいしいの
ドッターのためのプログラミングなにそれおいしいのドッターのためのプログラミングなにそれおいしいの
ドッターのためのプログラミングなにそれおいしいの
 
2011.12.10 関数型都市忘年会 発表資料「最近書いた、関数型言語と関連する?C++プログラムの紹介」
2011.12.10 関数型都市忘年会 発表資料「最近書いた、関数型言語と関連する?C++プログラムの紹介」2011.12.10 関数型都市忘年会 発表資料「最近書いた、関数型言語と関連する?C++プログラムの紹介」
2011.12.10 関数型都市忘年会 発表資料「最近書いた、関数型言語と関連する?C++プログラムの紹介」
 
Python と型ヒント (Type Hints)
Python と型ヒント (Type Hints)Python と型ヒント (Type Hints)
Python と型ヒント (Type Hints)
 
講座C入門
講座C入門講座C入門
講座C入門
 
わんくま同盟大阪勉強会#61
わんくま同盟大阪勉強会#61わんくま同盟大阪勉強会#61
わんくま同盟大阪勉強会#61
 
これからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツールこれからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツール
 
C++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISるC++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISる
 
マルチコアを用いた画像処理
マルチコアを用いた画像処理マルチコアを用いた画像処理
マルチコアを用いた画像処理
 
ji-5. 繰り返し計算
ji-5. 繰り返し計算ji-5. 繰り返し計算
ji-5. 繰り返し計算
 
cs-4. プログラミング入門
cs-4. プログラミング入門cs-4. プログラミング入門
cs-4. プログラミング入門
 
DATUM STUDIO PyCon2016 Turorial
DATUM STUDIO PyCon2016 TurorialDATUM STUDIO PyCon2016 Turorial
DATUM STUDIO PyCon2016 Turorial
 
ぼくのかんがえたさいきょうのついったーくらいあんと
ぼくのかんがえたさいきょうのついったーくらいあんとぼくのかんがえたさいきょうのついったーくらいあんと
ぼくのかんがえたさいきょうのついったーくらいあんと
 
Python基礎その1
Python基礎その1Python基礎その1
Python基礎その1
 
JOI春季ステップアップセミナー 2021 講義スライド
JOI春季ステップアップセミナー 2021 講義スライドJOI春季ステップアップセミナー 2021 講義スライド
JOI春季ステップアップセミナー 2021 講義スライド
 
オープンソースで作るスマホ文字認識アプリ
オープンソースで作るスマホ文字認識アプリオープンソースで作るスマホ文字認識アプリ
オープンソースで作るスマホ文字認識アプリ
 
プログラミングとは
プログラミングとはプログラミングとは
プログラミングとは
 
ユニットテスト 1日目
ユニットテスト 1日目ユニットテスト 1日目
ユニットテスト 1日目
 

Recently uploaded

ビジュアルプログラミングIotLT17-オープンソース化されたビジュアルプログラミング環境Noodlの紹介
ビジュアルプログラミングIotLT17-オープンソース化されたビジュアルプログラミング環境Noodlの紹介ビジュアルプログラミングIotLT17-オープンソース化されたビジュアルプログラミング環境Noodlの紹介
ビジュアルプログラミングIotLT17-オープンソース化されたビジュアルプログラミング環境Noodlの紹介
miyp
 

Recently uploaded (8)

【登壇資料】スタートアップCTO経験からキャリアについて再考する CTO・VPoEに聞く by DIGGLE CTO 水上
【登壇資料】スタートアップCTO経験からキャリアについて再考する  CTO・VPoEに聞く by DIGGLE CTO 水上【登壇資料】スタートアップCTO経験からキャリアについて再考する  CTO・VPoEに聞く by DIGGLE CTO 水上
【登壇資料】スタートアップCTO経験からキャリアについて再考する CTO・VPoEに聞く by DIGGLE CTO 水上
 
Compute Units/Budget最適化 - Solana Developer Hub Online 6 #SolDevHub
Compute Units/Budget最適化 - Solana Developer Hub Online 6 #SolDevHubCompute Units/Budget最適化 - Solana Developer Hub Online 6 #SolDevHub
Compute Units/Budget最適化 - Solana Developer Hub Online 6 #SolDevHub
 
今さら聞けない人のためのDevOps超入門 OSC2024名古屋 セミナー資料
今さら聞けない人のためのDevOps超入門 OSC2024名古屋  セミナー資料今さら聞けない人のためのDevOps超入門 OSC2024名古屋  セミナー資料
今さら聞けない人のためのDevOps超入門 OSC2024名古屋 セミナー資料
 
人的資本経営のための地理情報インテリジェンス 作業パターン分析と心身状態把握に関する実証事例
人的資本経営のための地理情報インテリジェンス 作業パターン分析と心身状態把握に関する実証事例人的資本経営のための地理情報インテリジェンス 作業パターン分析と心身状態把握に関する実証事例
人的資本経営のための地理情報インテリジェンス 作業パターン分析と心身状態把握に関する実証事例
 
エンジニアのセルフブランディングと技術情報発信の重要性 テクニカルライターになろう 講演資料
エンジニアのセルフブランディングと技術情報発信の重要性 テクニカルライターになろう 講演資料エンジニアのセルフブランディングと技術情報発信の重要性 テクニカルライターになろう 講演資料
エンジニアのセルフブランディングと技術情報発信の重要性 テクニカルライターになろう 講演資料
 
Linuxサーバー構築 学習のポイントと環境構築 OSC2024名古屋 セミナー資料
Linuxサーバー構築 学習のポイントと環境構築 OSC2024名古屋 セミナー資料Linuxサーバー構築 学習のポイントと環境構築 OSC2024名古屋 セミナー資料
Linuxサーバー構築 学習のポイントと環境構築 OSC2024名古屋 セミナー資料
 
本の感想共有会「データモデリングでドメインを駆動する」本が突きつける我々の課題について
本の感想共有会「データモデリングでドメインを駆動する」本が突きつける我々の課題について本の感想共有会「データモデリングでドメインを駆動する」本が突きつける我々の課題について
本の感想共有会「データモデリングでドメインを駆動する」本が突きつける我々の課題について
 
ビジュアルプログラミングIotLT17-オープンソース化されたビジュアルプログラミング環境Noodlの紹介
ビジュアルプログラミングIotLT17-オープンソース化されたビジュアルプログラミング環境Noodlの紹介ビジュアルプログラミングIotLT17-オープンソース化されたビジュアルプログラミング環境Noodlの紹介
ビジュアルプログラミングIotLT17-オープンソース化されたビジュアルプログラミング環境Noodlの紹介
 

ふるたに流プログラミング学習法