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