Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
Uploaded by
University of Tsukuba Linux User Group
566 views
C言語の課題を(エクストリームに)解こう #1
筑波大学 Linux User Group (つくらぐ) http://www.tsukuba-linux.org/
Education
◦
Technology
◦
Read more
1
Save
Share
Embed
Embed presentation
Download
Download to read offline
1
/ 25
2
/ 25
3
/ 25
4
/ 25
5
/ 25
6
/ 25
7
/ 25
8
/ 25
9
/ 25
10
/ 25
11
/ 25
12
/ 25
13
/ 25
14
/ 25
15
/ 25
16
/ 25
17
/ 25
18
/ 25
19
/ 25
20
/ 25
21
/ 25
22
/ 25
23
/ 25
24
/ 25
25
/ 25
More Related Content
PDF
C++の黒魔術
by
Daichi OBINATA
PDF
闇魔術を触ってみた
by
Satoshi Sato
PDF
C言語講習会1
by
odenhadengaku
PDF
IBMModel2
by
Hidekazu Oiwa
PDF
C言語講習会2
by
odenhadengaku
PPTX
復習と型 Jyoken
by
reew2n
PDF
Goto
by
oupc
PDF
C言語講習会4
by
odenhadengaku
C++の黒魔術
by
Daichi OBINATA
闇魔術を触ってみた
by
Satoshi Sato
C言語講習会1
by
odenhadengaku
IBMModel2
by
Hidekazu Oiwa
C言語講習会2
by
odenhadengaku
復習と型 Jyoken
by
reew2n
Goto
by
oupc
C言語講習会4
by
odenhadengaku
Viewers also liked
PDF
Sap Solution Manager - Administrative
by
umarfakih
PDF
Hello,World Crazy!!
by
University of Tsukuba Linux User Group
PPT
VoIPcare qMetrix for Transportation
by
RobinMangold
PDF
Solucoes sustentaveis
by
Mônica Sales
ODP
カーネルをmakeしよう! - 第4回つくらぐ勉強会
by
University of Tsukuba Linux User Group
PPT
ばっしゅ! (LT) - 第4回つくらぐ勉強会
by
University of Tsukuba Linux User Group
DOCX
Latest Resume
by
ahaftab
PPT
VoIPcare qMetrix for Healthcare
by
RobinMangold
ODP
Debug Hacks - 第4回つくらぐ勉強会
by
University of Tsukuba Linux User Group
Sap Solution Manager - Administrative
by
umarfakih
Hello,World Crazy!!
by
University of Tsukuba Linux User Group
VoIPcare qMetrix for Transportation
by
RobinMangold
Solucoes sustentaveis
by
Mônica Sales
カーネルをmakeしよう! - 第4回つくらぐ勉強会
by
University of Tsukuba Linux User Group
ばっしゅ! (LT) - 第4回つくらぐ勉強会
by
University of Tsukuba Linux User Group
Latest Resume
by
ahaftab
VoIPcare qMetrix for Healthcare
by
RobinMangold
Debug Hacks - 第4回つくらぐ勉強会
by
University of Tsukuba Linux User Group
Similar to C言語の課題を(エクストリームに)解こう #1
PPTX
AtCoder Beginner Contest 012 解説
by
AtCoder Inc.
ODP
Lt会01_uetch
by
Tomoaki Ueda
PPTX
Misrac20150523
by
Kiyoshi Ogawa
PDF
AtCoder Beginner Contest 006 解説
by
AtCoder Inc.
PDF
AtCoder Beginner Contest 020 解説
by
AtCoder Inc.
PPTX
AtCoder Beginner Contest 034 解説
by
AtCoder Inc.
PDF
Misrac20150523
by
Kiyoshi Ogawa
PDF
AtCoder Beginner Contest 010 解説
by
AtCoder Inc.
PDF
U-16プログラミングコンテスト CHaser を利用したプログラミング指導
by
NISHIHARA Shota
PDF
超絶技巧プログラミングの世界(FTD2015)
by
mametter
PDF
[xDNCL] 配布資料
by
Ryota Nakamura
PDF
新しくプログラミング言語・・・Rubyでやってみた
by
Tomoaki Ueda
PDF
関数型都市忘年会『はじめての函数型プログラミング』
by
Kenta USAMI
PDF
C言語よくある誤り
by
長岡技術科学大学 自然言語処理研究室
PPTX
Ruby講座一回目
by
Masayuki Matsumoto
PDF
kagami_comput2016_04
by
swkagami
PDF
プログラミング作法
by
Kota Uchida
PPTX
Ruby講座一回目
by
Masayuki Matsumoto
PPTX
MISRA-C2012とISO/IEC 9899:2011 at OSCNagoya2013
by
Kiyoshi Ogawa
PDF
kagamicomput201704
by
swkagami
AtCoder Beginner Contest 012 解説
by
AtCoder Inc.
Lt会01_uetch
by
Tomoaki Ueda
Misrac20150523
by
Kiyoshi Ogawa
AtCoder Beginner Contest 006 解説
by
AtCoder Inc.
AtCoder Beginner Contest 020 解説
by
AtCoder Inc.
AtCoder Beginner Contest 034 解説
by
AtCoder Inc.
Misrac20150523
by
Kiyoshi Ogawa
AtCoder Beginner Contest 010 解説
by
AtCoder Inc.
U-16プログラミングコンテスト CHaser を利用したプログラミング指導
by
NISHIHARA Shota
超絶技巧プログラミングの世界(FTD2015)
by
mametter
[xDNCL] 配布資料
by
Ryota Nakamura
新しくプログラミング言語・・・Rubyでやってみた
by
Tomoaki Ueda
関数型都市忘年会『はじめての函数型プログラミング』
by
Kenta USAMI
C言語よくある誤り
by
長岡技術科学大学 自然言語処理研究室
Ruby講座一回目
by
Masayuki Matsumoto
kagami_comput2016_04
by
swkagami
プログラミング作法
by
Kota Uchida
Ruby講座一回目
by
Masayuki Matsumoto
MISRA-C2012とISO/IEC 9899:2011 at OSCNagoya2013
by
Kiyoshi Ogawa
kagamicomput201704
by
swkagami
More from University of Tsukuba Linux User Group
ODP
Gentoo Linuxの紹介
by
University of Tsukuba Linux User Group
PDF
monoqloの麻雀講座
by
University of Tsukuba Linux User Group
ODP
カーネルモジュールプログラミング超入門 #1(仮)
by
University of Tsukuba Linux User Group
PDF
linuxで動画キャプチャ。 - 第4回つくらぐ勉強会
by
University of Tsukuba Linux User Group
PDF
USBからLinuxを起動してみよう! - 第4回つくらぐ勉強会
by
University of Tsukuba Linux User Group
PDF
うぶんちゅ! - 第4回つくらぐ勉強会
by
University of Tsukuba Linux User Group
PDF
シンガポールのインターネット検閲事情 (LT) - 第4回つくらぐ勉強会
by
University of Tsukuba Linux User Group
ODP
楽しい怪しいシェルスクリプト - 第4回つくらぐ勉強会
by
University of Tsukuba Linux User Group
Gentoo Linuxの紹介
by
University of Tsukuba Linux User Group
monoqloの麻雀講座
by
University of Tsukuba Linux User Group
カーネルモジュールプログラミング超入門 #1(仮)
by
University of Tsukuba Linux User Group
linuxで動画キャプチャ。 - 第4回つくらぐ勉強会
by
University of Tsukuba Linux User Group
USBからLinuxを起動してみよう! - 第4回つくらぐ勉強会
by
University of Tsukuba Linux User Group
うぶんちゅ! - 第4回つくらぐ勉強会
by
University of Tsukuba Linux User Group
シンガポールのインターネット検閲事情 (LT) - 第4回つくらぐ勉強会
by
University of Tsukuba Linux User Group
楽しい怪しいシェルスクリプト - 第4回つくらぐ勉強会
by
University of Tsukuba Linux User Group
C言語の課題を(エクストリームに)解こう #1
1.
C言語の課題を (エクストリームに)解こう
techno@Hirotaka Kawata 筑波大学 情報学群 情報科学類 1年
2.
プログラミング入門1の課題 ここからみれます。 今回は、課題2 をやります。
http://www.ialab.is.tsukuba.ac.jp/~maeda/class/prog1/ 多分、みなさんなら、きっと簡単な課題でしょう! 僕には、むずかしすぎて...(笑 ちょっと、情報科学類1年生の内輪向けですが...
3.
ここでやること。 プログラミング入門 1 の課題を、究極の形で、皆さんと一緒に解いて きましょう。 条件:
課題の本来の趣旨を守る 無理しすぎない なるべく効率の良いコードを(?)
4.
やってみよう。 そうしよう。
5.
課題1 整数を入力し,入力された値が偶数か奇数かを判定して出力するプ ログラムを作成しなさい. よくありそうな、課題ですねー。 きっと頭にうかんだ演算子は...
6.
%
ですよね....
7.
念のため、聞いておきます。 多分いちばん代表的なやり方は if(i % 2)
{ 奇数 } else { 偶数 } % (あまりを求める演算子) 以外を使おうとした人。 いてほしい...
8.
もし % が使えなかったら... どうするおつもりですか? 偶数であるか奇数であるかを見分ける方法... 思いつきますか? 決して、ずっと
/ (割り算) していくなんてことはしませんよ。
9.
例えばこんな例も... 0000 0001 ->
1 1111 1111 -> -1 (2の補数表現) 0000 0010 -> 2 1111 1110 -> -2 (2の補数表現) 0000 0011 -> 3 1111 1101 -> -3 なんだか気付きませんか?
10.
デジタル人間なら、 2進数で考えよう。 偶数だと、必ず最下位ビットが 0 になる。 奇数だと、必ず最下位ビットが
1 になる。 という法則がある。 これを利用しよう。
11.
マスクしましょう。 たとえば、5 が偶数か奇数か調べたいとき。 0000 0101
== 5 00000101 & 00000001 = 00000001 if(i & 0x01) {} じゃだめですか?
12.
実際どっちがいいのよ... んー。 % を、CPU がどんな計算してるんだかわからん。(知識不足) たぶん、そんな命令もなかったはずだし。 マスクしたほうが、オールマイティーに早い。 とおもう。(どんなCPUでもってこと) だけど、コード読みづらくなるかも... コメント重要。
13.
課題 2 100点満点の点数を入力し、 50点以上であれば、A、50点未満であ れば、B、0から100の数字でなければ、errorと出力するプログラムを 作成しなさい. おー。 これもなかなかおもしろそう。
14.
一般的なやり方 if(a < 0
&& a > 100) { if(a >= 50) { puts("A"); } else { puts("B"); } } else { puts("error"); } こんな感じだと思うのですが いかがでしょう? やり方は、いっぱいありますが。
15.
だけど... 先程の例は、問題の文章通りに設計書を書いただけ。 ここから、人力最適化のお時間です。 コンパイラの最適化なんかあてにしちゃーいけません。 そもそも、コンパイラの最適化は、設計書に書いてあることに忠実 に、ちまちまやってるだけだし。
16.
人力最適化。 if(a >= 0
&& a <= 100) { if(a >= 50) { puts("A"); } else { puts("B"); } } else { puts("error"); } error は最大 2 回の比較。 A, B は 3 回の比較。 という感じになります。
17.
人力最適化。 たとえば、違う実装。 if(i >= 50
&& i <= 100) { puts("A"); } else if(i < 50 && i >= 0) { puts("B"); } else { puts("error"); } error は 3 回の比較。 A, B は最大 3 回の比較。 コードを短くすればいいというものではない。
18.
人力最適化 if(i >= 50)
{ if(i <= 100) { puts("A"); } else { puts("error"); } } else { error は 2 回の比較 if(i >= 0) { puts("B"); } A, B も 2 回の比較 else { puts("error"); } } 完璧じゃない? ご想像にお任せします。
19.
ただ、よくみると.... なんだか、行数が多い? そう、コード量が若干多くなりました。 error を 2
回出力させているんです。 ということは、バイナリのサイズもでかくなる。 (goto でジャンプさせるってのもありだけど、たぶん else で JMP したあとに、 goto でもう一度 JMP するような気もするので、実行時間的には JMP 命令だからといえど、 最適なコードとは言えない...) (そうだ、アセンブラだ!!!)
20.
人力最適化はほどほどに。 もうちょっと、語ると... なんだか、あとのコードになるほど、理解しづらくなったとは思いませ んか? 変に最適化しすぎると、コードが読みづらくなって、コードも長くなっ て... という状況になることが。 まあ、ほどほどに。
21.
課題 3 二つの整数値A、Bを読み込んで,BがAの約数かどうかを判定する プログラムを作りなさい.表示は以下のようにしなさい. つまんねーな。 これが一番単純じゃん?
22.
いきなりだけど、解答例。 if(a % b)
{ puts("n"); } else { puts("y"); } これ以上、どうしろっていうの... ちょっと思いつきませんでした。
23.
課題3について議論? なんかありますかね?
24.
最後に... 普通に解いて終わりでは、つまらない! とおもった、techno のお遊びでした。 これからも、また不定期にやるかもしれません。(LT とかで) プログラミングの面白さが少しでも分かってくれたら... 1年生いっぱいよんできてください。 以上。
25.
ご清聴ありがとうございました。
Download