SlideShare a Scribd company logo
1 of 47
Download to read offline
ロボット技術研究会 C言語講習
後半戦 @2016/6/20
立命館大学理工学部ロボティクス学科2回生 迫 佑樹
1
自己紹介
名前: 迫 佑樹
所属: 理工学部ロボティクス学科 2回生
twitter: yuki_99_s
2
今日のアジェンダ
・配列について
・関数について
・今回扱わなかったC言語関係のことをさらっと
・今後プログラミングを学ぶにあたって
3
はじめに
前回同様,クラウドの環境を使います.
https://ideone.com/
前回の続きになっているので,前回のを見ていない方は以下からご確認ください.
http://www.yukisako.xyz/entry/c_programming_training1
4
前回のスライドの最後の余力問題
1〜100までカウントアップし,その数が3の倍数ならばFizz,
5の倍数ならBuzz,3の倍数かつ5の倍数ならばFizzBuzz,
どれでもなければ単純な数字を表示するプログラムを書いて
ください.
これできましたか?
5
余力問題
解答
6
前回の復習?
例えば,3人分の年齢の平均を求めたかったらどうする?
とりあえず整数でだいたいの平均を求めると...こんなプログラムになる
7
前回の復習?
じゃあ,10人分の年齢の平均だったら...?
8
こんなソースコード書きたくない
前回紹介した,汚いソースコードの例に「変数名がてきとう」とか,「同じような処理を
何個もしている」といったことがありました.
こんな変数いっぱい宣言したら,あとでなにがなんだかわからなくなります.
そこで→同じ型のデータをひとまとまりにしたを配列を導入
9
配列ってなに?
同じ型のデータを複数並べたもの.
先ほど,int a = 18, b = 44, c = 25としていたものをまとめてみる
int ages[3] = [18,44,25]
こうすることで,変数名にaとか使うよりも年齢を表していることがわか
りやすいかつ見た目も綺麗になる.
10
配列ってなに?
int ages[3] = {18,44,25} として,このデータを使いたいときは?
age[0]とすれば,18が返ってくる
age[1]とすれば,44が返ってくる
age[2]とすれば,25が返ってくる
age[ほしい番号-1]としてデータを呼び出す.
※age[n]のnの部分を添字といい,添字は0から始まることに注意.
11
例7 さっきのプログラムを配列を使って書く
12
さっきのプログラムを配列を使って書き直す
10人に増えても安心です.
13
演習7
5人の英語の成績は,72, 29, 55, 89, 12点であった.
この時,engという配列を作り,5人の平均点を求めるプログラムを作成してください.
14
プログラムをまとめてみたくならない?
15
これぞ汚いコード
1日目のスライドで紹介した汚いコードの例
・同じような処理を繰り返している
これではよくないので,処理をまとめることができる,「関数」を導入してみる
16
関数ってなんだ?
17
関数ってなんだ?
18
main関数の中がとてもスッキリし
た.
一連の処理を切り出したことによっ
て,修正も楽になった.
関数ってなんだ?
main関数の中に全部書いていくのは,大きな旅行かばんに石鹸,歯ブラシ,服など
をごっちゃごちゃに詰め込むようなもの.
普通は洗面用具,衣類,貴重品など,目的とかに応じて分けているはず.
プログラムも,main関数に全部書くのではなく,処理ごとに関数にまとめて,それを
main関数から呼び出す.
19
関数ってなんだ?
与えたデータを指示に基づいて処理をし,結果を返してくれるもの.
例えば,2つの数字を足す関数はこんなイメージ
20
a = 10 b = 20
sum = a + b;sum: 10がでてくる
例8 関数を使ってみる(詳しくはあとで)
21
a = 10 b = 20
sum = a + b;
sum: 30
例8 関数を使ってみる
22
sum: 30
a = 10 b = 20
sum = a + b;
処理をするときに関数に渡す値を
引数(ひきすう)といい,関数が処
理をして返してくれる値を返り値と
いう.
今回の引数はaとb.
返り値はsumとなる.
関数の定義の仕方
23
返り値の型 引数の型,変数名
処理内容
返り値
関数の使い方
定義した後は,以下のように関数名
と引数を書けば処理が返される
24
25
左に示したように
変数を使わずに生でデー
タを渡してもOK
関数定義で使った変数名
と違ってもOK
データ型だけは合わせる
必要あり.
例9 引数や返り値が不要なときは?
例えば,与えた数字が偶数か奇数かを判定する関数に返り値は不要
26
このようなとき,返り値の型にはなに
もないことを示す void 使用し,return
文は書かない.
型
として
void
return は省略
引数や返り値が不要なときは?
例えば,LEDを3つ順番に光らせる関数に引数も返り値も不要(今回は光らせる処
理はprintf文で代用)
27
引数や返り値が不要なときは?
例えば,LEDを3つ順番に光らせる関数に引数も返り値も不要(今回は光らせる処
理はprintf文で代用)
28
演習 8
引数としてint型で数字を渡し,その数が3の倍数ならば
Fizz,5の倍数ならBuzz,3の倍数かつ5の倍数ならば
FizzBuzz,どれでもなければ与えられた数字を表示する関
数を定義して,適当な数字を渡して結果を確認してみてくだ
さい.
返り値はなしでOK
29
前回の余力問題の処理を切り分けるだけ
30
このfizzbuzz関数を使って余力問題をやると?
31
このように,とりあえず1〜
100までカウントアップして
あげて,どのように表示す
るかはfizzbuzz関数に処
理を任せれば良くなる
つまり,関数を使えば...?
32
・処理を分割できるのが実感できた?
・fizzbuzzを判定する処理方法がわからない人でも,とりあ
えずfizzbuzz関数を使えばfizzbuzzが判定できた
プログラムを複数人で分割してかける,かつあとで修正をす
るときも楽.
今日の演習系はこれで終わり.
33
あと少し.
・今回扱わなかったけど一応知っておいてほしいこと
・今後の勉強法について
ロボットプログラミングする上で
34
コンピュータ,マイコンはメモリ上にデータを記録.
そのため,記録しておける領域には限りがある.
マイコンは,メモリ量が少ない.
極端な例です
35
■■■■■■■■■■ ←これだけのメモリがあるとします.
そして,aというデータを保存するのに■■■■■■だけメモリを
使うとします.
b = a として,bにaの値を代入すると,bも■■■■■■だけのメ
モリを使うため,メモリ領域がたりなくなりますね?
ロボットプログラミングをする上で
36
メモリの問題もあるが,処理時間の問題も.
パソコンよりも処理能力の落ちるマイコンでは,処理が遅く
なることも.
大きなデータを何度もコピーしたりしたら処理時間が大幅に
増えます.
この2つを解決するために...
37
いろいろやり方はあるが,ポインタというものを導入する.
ようは,大きいデータそのものをコピーしたりするのではな
く,「データの場所を指すもの」を導入しようという考え方.
同じデータを2個作るのではなく,1つのデータを2箇所から
参照するイメージ
ポインタの超初級の例
38
intは4バイトなことを考
慮すると,aとbは連続し
たメモリ位置に記録され
てる
ポインタが有用な例
39
画像ってどういう感じでメモリに保存されるか?
画像は点の集まり.
点は,Red,Blue,Greenの光の三原色とアルファ値aの4つ
のパラメータで色が決まる.
ポインタが有用な例
40
iPhone6のスクショだと,横750*縦1334個の点からできてい
る.つまり,750*1334*4=400万個の整数データで一枚の画
像が表現されている.(動画なんてそれが1秒に30枚...)
こんなの一個ずつコピーしてたら大変.
そこでポインタを使えば...?
ポインタが有用な例
41
(1)ポインタなし
画像1 ■■■■■■
画像2 ■■■■■■
メモリ1〜6に入ってる画像1のデータを7〜cにその
ままコピー.7〜cのデータを画像2とする
メモリ番地  1 2 3 4 5 6
メモリ番地  7 8 9 a b c
(2)ポインタ使用
画像1 ■■■■■■
画像2もメモリ1〜6を指せと命
令
メモリ1〜6に画像1のデータが入っている.そし
て,画像2も1〜6のデータを使うことにするそしたら
指すとこ変えただけなので速い.
メモリ番地  1 2 3 4 5 6
画像データ1 ■■■■■■ ←この画像をコピーしたい時
ポインタが有用な例
42
今回は,画像を例に出したが,ロボットのように,ハードの
性能を極限まで引き出したかったり,画像処理のように大
きいデータを扱うときはポインタはとても有効.
ただし,初心者向けではないため今回は「こんなのもある
のか〜」程度に.
今後プログラミングを学ぶにあたって
43
今回,2日で基礎を抑えた.
プログラミングとはなんなのか,変数,条件分岐,繰り返し
処理,関数,配列,(ポインタ)
基本となる構文は一通りやった.
プログラミング上達のために
44
まずはインプット.
今回やった分も疑問点は多く残ったはず.
ドットインストール C言語入門
http://dotinstall.com/lessons/basic_c
プログラミング上達のために
45
本とかだと...
C言語が好きになる9つの扉「Cの絵本」 (株)アンク
が読みやすかった気がする.
わざわざ本買わなくても「C言語 入門」で調べれば出てくる
プログラミング上達のために
46
次にアウトプット.
どんどんプログラムを書こう.
paizaスキルチェック
https://paiza.jp/challenges/info
C言語を選択して下の方のランクの問題を解いてみよう.
学び続ける
47
プログラミングに限ったことではないが,技術の進歩は早
い.
積極的に学び,学んだことは人に教えたりWebページで公
開してアウトプットしていこう.
おつかれさまでした!

More Related Content

What's hot

C言語について
C言語についてC言語について
C言語についてKatsuro-u
 
SchracVisualizeによる波動関数の可視化
SchracVisualizeによる波動関数の可視化SchracVisualizeによる波動関数の可視化
SchracVisualizeによる波動関数の可視化dc1394
 
Arに対する古典分子動力学シミュレーション
Arに対する古典分子動力学シミュレーションArに対する古典分子動力学シミュレーション
Arに対する古典分子動力学シミュレーションdc1394
 
単振り子と二重振り子のコンピュータシミュレーション
単振り子と二重振り子のコンピュータシミュレーション単振り子と二重振り子のコンピュータシミュレーション
単振り子と二重振り子のコンピュータシミュレーションdc1394
 
About myon
About myonAbout myon
About myonmyuon
 
水素原子に対するSchrödinger方程式の数値解法
水素原子に対するSchrödinger方程式の数値解法水素原子に対するSchrödinger方程式の数値解法
水素原子に対するSchrödinger方程式の数値解法dc1394
 
M5StickVとobnizとenebularを使って死角確認ツールもどきを作ったはなし
M5StickVとobnizとenebularを使って死角確認ツールもどきを作ったはなしM5StickVとobnizとenebularを使って死角確認ツールもどきを作ったはなし
M5StickVとobnizとenebularを使って死角確認ツールもどきを作ったはなしMinoruInoue2
 
A Chainer MeetUp Talk
A Chainer MeetUp TalkA Chainer MeetUp Talk
A Chainer MeetUp TalkYusuke Oda
 

What's hot (9)

C言語について
C言語についてC言語について
C言語について
 
SchracVisualizeによる波動関数の可視化
SchracVisualizeによる波動関数の可視化SchracVisualizeによる波動関数の可視化
SchracVisualizeによる波動関数の可視化
 
Arに対する古典分子動力学シミュレーション
Arに対する古典分子動力学シミュレーションArに対する古典分子動力学シミュレーション
Arに対する古典分子動力学シミュレーション
 
14対話bot発表資料
14対話bot発表資料14対話bot発表資料
14対話bot発表資料
 
単振り子と二重振り子のコンピュータシミュレーション
単振り子と二重振り子のコンピュータシミュレーション単振り子と二重振り子のコンピュータシミュレーション
単振り子と二重振り子のコンピュータシミュレーション
 
About myon
About myonAbout myon
About myon
 
水素原子に対するSchrödinger方程式の数値解法
水素原子に対するSchrödinger方程式の数値解法水素原子に対するSchrödinger方程式の数値解法
水素原子に対するSchrödinger方程式の数値解法
 
M5StickVとobnizとenebularを使って死角確認ツールもどきを作ったはなし
M5StickVとobnizとenebularを使って死角確認ツールもどきを作ったはなしM5StickVとobnizとenebularを使って死角確認ツールもどきを作ったはなし
M5StickVとobnizとenebularを使って死角確認ツールもどきを作ったはなし
 
A Chainer MeetUp Talk
A Chainer MeetUp TalkA Chainer MeetUp Talk
A Chainer MeetUp Talk
 

Similar to C言語講習会資料(後半)

ソフト屋が挑戦した電子工作 〜力ずくの10か月〜
ソフト屋が挑戦した電子工作 〜力ずくの10か月〜ソフト屋が挑戦した電子工作 〜力ずくの10か月〜
ソフト屋が挑戦した電子工作 〜力ずくの10か月〜Shinichi Hirauchi
 
ロボコンの為のFusion360講座 #CAD編
ロボコンの為のFusion360講座 #CAD編ロボコンの為のFusion360講座 #CAD編
ロボコンの為のFusion360講座 #CAD編電大 ヒュー研
 
Llでゆるふわプログラミングのすすめ
LlでゆるふわプログラミングのすすめLlでゆるふわプログラミングのすすめ
Llでゆるふわプログラミングのすすめmizcki
 
mruby×ETロボコン = ?
mruby×ETロボコン = ?mruby×ETロボコン = ?
mruby×ETロボコン = ?ssuserc1bb39
 
ML system design_pattern
ML system design_patternML system design_pattern
ML system design_patternyusuke shibui
 
セッション「新版 HSP基礎講座」+「Arakawa Templateで作るこだわりウェブサイト」
セッション「新版 HSP基礎講座」+「Arakawa Templateで作るこだわりウェブサイト」セッション「新版 HSP基礎講座」+「Arakawa Templateで作るこだわりウェブサイト」
セッション「新版 HSP基礎講座」+「Arakawa Templateで作るこだわりウェブサイト」Sora Arakawa
 
Pi4Jで簡単! ラズパイでトイレ空室管理システムを つくってみたよ
Pi4Jで簡単!   ラズパイでトイレ空室管理システムを つくってみたよPi4Jで簡単!   ラズパイでトイレ空室管理システムを つくってみたよ
Pi4Jで簡単! ラズパイでトイレ空室管理システムを つくってみたよYoshio Kajikuri
 
大規模言語モデル開発を支える分散学習技術 - 東京工業大学横田理央研究室の藤井一喜さん
大規模言語モデル開発を支える分散学習技術 - 東京工業大学横田理央研究室の藤井一喜さん大規模言語モデル開発を支える分散学習技術 - 東京工業大学横田理央研究室の藤井一喜さん
大規模言語モデル開発を支える分散学習技術 - 東京工業大学横田理央研究室の藤井一喜さんAkira Shibata
 
XMPPクライアント・プログラミング
XMPPクライアント・プログラミングXMPPクライアント・プログラミング
XMPPクライアント・プログラミング隆行 神戸
 
私の失敗道(仮)
私の失敗道(仮)私の失敗道(仮)
私の失敗道(仮)Yuuki Tan-nai
 
Web applicationpenetrationtest その3
Web applicationpenetrationtest その3Web applicationpenetrationtest その3
Web applicationpenetrationtest その3Tetsuya Hasegawa
 
今からでも遅くないC#開発
今からでも遅くないC#開発今からでも遅くないC#開発
今からでも遅くないC#開発Kazunori Hamamoto
 

Similar to C言語講習会資料(後半) (15)

ソフト屋が挑戦した電子工作 〜力ずくの10か月〜
ソフト屋が挑戦した電子工作 〜力ずくの10か月〜ソフト屋が挑戦した電子工作 〜力ずくの10か月〜
ソフト屋が挑戦した電子工作 〜力ずくの10か月〜
 
ロボコンの為のFusion360講座 #CAD編
ロボコンの為のFusion360講座 #CAD編ロボコンの為のFusion360講座 #CAD編
ロボコンの為のFusion360講座 #CAD編
 
Llでゆるふわプログラミングのすすめ
LlでゆるふわプログラミングのすすめLlでゆるふわプログラミングのすすめ
Llでゆるふわプログラミングのすすめ
 
mruby×ETロボコン = ?
mruby×ETロボコン = ?mruby×ETロボコン = ?
mruby×ETロボコン = ?
 
ML system design_pattern
ML system design_patternML system design_pattern
ML system design_pattern
 
セッション「新版 HSP基礎講座」+「Arakawa Templateで作るこだわりウェブサイト」
セッション「新版 HSP基礎講座」+「Arakawa Templateで作るこだわりウェブサイト」セッション「新版 HSP基礎講座」+「Arakawa Templateで作るこだわりウェブサイト」
セッション「新版 HSP基礎講座」+「Arakawa Templateで作るこだわりウェブサイト」
 
Pi4Jで簡単! ラズパイでトイレ空室管理システムを つくってみたよ
Pi4Jで簡単!   ラズパイでトイレ空室管理システムを つくってみたよPi4Jで簡単!   ラズパイでトイレ空室管理システムを つくってみたよ
Pi4Jで簡単! ラズパイでトイレ空室管理システムを つくってみたよ
 
C言語の課題を(エクストリームに)解こう #1
C言語の課題を(エクストリームに)解こう #1C言語の課題を(エクストリームに)解こう #1
C言語の課題を(エクストリームに)解こう #1
 
大規模言語モデル開発を支える分散学習技術 - 東京工業大学横田理央研究室の藤井一喜さん
大規模言語モデル開発を支える分散学習技術 - 東京工業大学横田理央研究室の藤井一喜さん大規模言語モデル開発を支える分散学習技術 - 東京工業大学横田理央研究室の藤井一喜さん
大規模言語モデル開発を支える分散学習技術 - 東京工業大学横田理央研究室の藤井一喜さん
 
高専カンファIn京都
高専カンファIn京都高専カンファIn京都
高専カンファIn京都
 
XMPPクライアント・プログラミング
XMPPクライアント・プログラミングXMPPクライアント・プログラミング
XMPPクライアント・プログラミング
 
私の失敗道(仮)
私の失敗道(仮)私の失敗道(仮)
私の失敗道(仮)
 
boost - std - C#
boost - std - C#boost - std - C#
boost - std - C#
 
Web applicationpenetrationtest その3
Web applicationpenetrationtest その3Web applicationpenetrationtest その3
Web applicationpenetrationtest その3
 
今からでも遅くないC#開発
今からでも遅くないC#開発今からでも遅くないC#開発
今からでも遅くないC#開発
 

C言語講習会資料(後半)