FizzBuzz問題(2)

うちの猫はものすごく食い意地が張っている。
おからの猫砂なるものを買ってきたときには猫砂まで食べてしまっていた。
びっくりして即処分した。
最近は妻が緑豆(?)を窓際で育てていたのだがむしゃむしゃ食べられてしまった。
猫はご飯を皿に多めに出しておけば自分で適切な量を食べるものだと思っていたのだが、うちの猫は出せば出しただけモリモリ食べるのであっという間に太ってしまった。
今は量を調節して適性体重を何とか保ってます。

***********************************
さて、FizzBuzz問題。
前回の解答はあまりにもひどいのでもう少しまじめにやってみた。
ただ、普通に書くと簡単すぎるのでif文を使わないという条件で書いてみた。

#include <stdio.h>

int main()
{
    char str[3][8];
    sprintf(str[1],"Fizz");
    sprintf(str[2],"Buzz");
    str[0][0] = '¥0';

    for(int i=1;i<=100;i++)
    {
        printf("%s%s%c%c%c¥n",str[i%3==0],str[(i%5==0)*2],(i%3!=0)*(i%5!=0)*((i/100)%10+'0'*((i/100)%10!=0)),(i%3!=0)*(i%5!=0)*((i/10)%10+'0'*((i/10)%10!=0)),(i%3!=0)*(i%5!=0)*((i/1)%10+'0'*((i/1)%10!=0)));
    }
    return 0;
}

C言語の条件式は真のとき1、偽のとき0を返すことを利用している。
例えばi%3==0はiが3の倍数のとき1となる。
printfの後半はもう少しややこしい。
(i/100)%10は100の桁を抜き出している。10の桁なら(i/10)%10とする。
asciiコードでは'0'〜'9'が連続した値で定義されていることを利用する。
桁を抽出した結果に'0'を足すことで数を文字に変換している。
わざわざ文字に変換しているのは、最上位の桁が0のときはnull文字を出力して画面にごみが現れないようにするためだ。
こうしないと1が001などと表示されてしまう。

まあ、これくらいのコードきっと誰かが既に書いているだろうけど。中々面白かった。

ちなみに、前回はC言語のコードを生成するプログラムを作ったが、実は結構そういう使い方をすることは多い。
C言語のコードを生成することはあまりないが、windowsのバッチファイルの生成によく使う。
例えば0.txt、1.txt・・・10.txtに処理を加えるバッチ処理をしたいとする。
バッチファイルの構文にはfor文もあるのだが、構文を記憶していないため調べるのも面倒だ。
そういうときはC言語でちょちょいとバッチファイルを生成するプログラムを書く。
ファイルの中身は汚いが動作は同じだ。
あとは色々なソフトのマクロファイルの作成などにも使う。
プログラミング言語をひとつ覚えておくと何かと便利だ。
 
ジャジャガッチ | C/C++ | 19:30 | comments(0) | trackbacks(0) |

FizzBuzz問題解いてみた

FizzBuzz問題を解いてみた。
FizzBuzz問題はプログラマの試金石として有名だ。
その問題は、1から100までカウントし、3の倍数のとき"Fizz"、5の倍数のとき"Buzz"、3の倍数かつ5の倍数のとき"FizzBuzz"と表示するプログラムを書け、というものだ。
とても簡単なのだが、意外なことにプログラマ志望の学生の中にはこれが出来ないものがいるという。

試しにやってみた。とても簡単だった。コードはこちら↓

#include <stdio.h>

int main(){
for(int i=0;i<=100;i++)
{
if(i==1) printf("1¥n");
if(i==2) printf("2¥n");
if(i==3) printf("Fizz¥n");
if(i==4) printf("4¥n");
if(i==5) printf("Buzz¥n");
if(i==6) printf("Fizz¥n");
if(i==7) printf("7¥n");
if(i==8) printf("8¥n");
if(i==9) printf("Fizz¥n");
if(i==10) printf("Buzz¥n");
if(i==11) printf("11¥n");
if(i==12) printf("Fizz¥n");
if(i==13) printf("13¥n");
if(i==14) printf("14¥n");
if(i==15) printf("FizzBuzz¥n");
if(i==16) printf("16¥n");
if(i==17) printf("17¥n");
if(i==18) printf("Fizz¥n");
if(i==19) printf("19¥n");
if(i==20) printf("Buzz¥n");
if(i==21) printf("Fizz¥n");
if(i==22) printf("22¥n");
if(i==23) printf("23¥n");
if(i==24) printf("Fizz¥n");
if(i==25) printf("Buzz¥n");
if(i==26) printf("26¥n");
if(i==27) printf("Fizz¥n");
if(i==28) printf("28¥n");
if(i==29) printf("29¥n");
if(i==30) printf("FizzBuzz¥n");
if(i==31) printf("31¥n");
if(i==32) printf("32¥n");
if(i==33) printf("Fizz¥n");
if(i==34) printf("34¥n");
if(i==35) printf("Buzz¥n");
if(i==36) printf("Fizz¥n");
if(i==37) printf("37¥n");
if(i==38) printf("38¥n");
if(i==39) printf("Fizz¥n");
if(i==40) printf("Buzz¥n");
if(i==41) printf("41¥n");
if(i==42) printf("Fizz¥n");
if(i==43) printf("43¥n");
if(i==44) printf("44¥n");
if(i==45) printf("FizzBuzz¥n");
if(i==46) printf("46¥n");
if(i==47) printf("47¥n");
if(i==48) printf("Fizz¥n");
if(i==49) printf("49¥n");
if(i==50) printf("Buzz¥n");
if(i==51) printf("Fizz¥n");
if(i==52) printf("52¥n");
if(i==53) printf("53¥n");
if(i==54) printf("Fizz¥n");
if(i==55) printf("Buzz¥n");
if(i==56) printf("56¥n");
if(i==57) printf("Fizz¥n");
if(i==58) printf("58¥n");
if(i==59) printf("59¥n");
if(i==60) printf("FizzBuzz¥n");
if(i==61) printf("61¥n");
if(i==62) printf("62¥n");
if(i==63) printf("Fizz¥n");
if(i==64) printf("64¥n");
if(i==65) printf("Buzz¥n");
if(i==66) printf("Fizz¥n");
if(i==67) printf("67¥n");
if(i==68) printf("68¥n");
if(i==69) printf("Fizz¥n");
if(i==70) printf("Buzz¥n");
if(i==71) printf("71¥n");
if(i==72) printf("Fizz¥n");
if(i==73) printf("73¥n");
if(i==74) printf("74¥n");
if(i==75) printf("FizzBuzz¥n");
if(i==76) printf("76¥n");
if(i==77) printf("77¥n");
if(i==78) printf("Fizz¥n");
if(i==79) printf("79¥n");
if(i==80) printf("Buzz¥n");
if(i==81) printf("Fizz¥n");
if(i==82) printf("82¥n");
if(i==83) printf("83¥n");
if(i==84) printf("Fizz¥n");
if(i==85) printf("Buzz¥n");
if(i==86) printf("86¥n");
if(i==87) printf("Fizz¥n");
if(i==88) printf("88¥n");
if(i==89) printf("89¥n");
if(i==90) printf("FizzBuzz¥n");
if(i==91) printf("91¥n");
if(i==92) printf("92¥n");
if(i==93) printf("Fizz¥n");
if(i==94) printf("94¥n");
if(i==95) printf("Buzz¥n");
if(i==96) printf("Fizz¥n");
if(i==97) printf("97¥n");
if(i==98) printf("98¥n");
if(i==99) printf("Fizz¥n");
if(i==100) printf("Buzz¥n");
}
return 0;
}
続きを読む >>
ジャジャガッチ | C/C++ | 19:45 | comments(0) | trackbacks(0) |

赤外線防犯センサ完成

赤外線防犯センサが完成した。
動作させているところの動画↓
 
1〜2mくらい離しても余裕で動作する。
実はこれ、防犯に使うのではなく産まれてくる赤ん坊のために作ったのだ。
妻から、眠っている間に赤ん坊がよちよちどこかに行くと困るのでそれを感知出来るようなものを作って欲しい、という要望があり、作ることになったのだ。
まあ必要に迫られて、というよりは作ってみたくて、という方が大きかったりするのだが。それはいつものこと。
完成したあとに少し調べてみたが、意外と同じような製品は売っていない?探し方が悪いのかもしれないが。

ジャジャガッチの勉強ノート
 
ジャジャガッチ | - | 13:08 | comments(0) | trackbacks(0) |

子供に「足し算よりも掛け算の方を先にやるのはなぜ?」と聞かれたらどう答えますか?

子供に「足し算よりも掛け算の方を先にやるのはなぜ?」と聞かれたらどう答えますか?
今日ふらふらとネットを巡回していたら、足し算を掛け算よりも先に行うのは何故か、について議論しているサイトを見つけた。
もうすぐ子供が産まれることだし、この機会に少し考えてみよう。
あなただったらどう答えますか?

普通は
1 + 2 × 3 = 7
だが、
1 + 2 × 3 = 9
とならないのは何故?ということだ。

結論から言えば別に足し算が先でも別にいいのだ。特に矛盾は生じない。が、それが便利かどうかは別問題だ。

「足し算が先」記法でも「掛け算が先」記法でも矛盾はないが、どちらかを採用しなければならない。
別にどっちの記法を採用してもよいのだが、世間では「掛け算が先」記法が採用されているため、自分もそれに合わせたほうが便利というだけだ。
子供に「足し算が先」記法を使わせてみても面白いかもしれない。ただし、教科書は「掛け算が先」記法で書かれているという前提で。しかも、計算の答えを見る僕も「掛け算が先」記法を選択しているという設定で。すると子供は教科書に書かれている「掛け算が先」記法を「足し算が先」記法に変換して計算する必要がある。僕が計算過程を教えてくれと要求したら、僕に合わせて「足し算が先」記法を「掛け算が先」記法に変換して説明しなければならない。
面白そうだが、混乱して数学嫌いになったりして。

ちなみにネットでこの疑問を検索すると誤った回答も多く出てくる。
本当は引用したいくらい面白いものが沢山あるのだが、良心の呵責もあるので引用はしない。
最初に「掛け算が先」記法を無意識に採用してしまっている誤回答が多い。

小学校の先生はどう答えるのか知りたい。
ジャジャガッチ | 数学 | 00:07 | comments(0) | trackbacks(0) |

Chumoy amp作りたい

NHKの0655/2355面白いな。
毎日録画して観ている。
我が家はNHK率が高い。

********************************
しばらくヘッドホンアンプから離れていたが、そのうちChumoy ampを作りたいと思っている。
Chumoy ampとはオペアンプを使用したシンプルなヘッドホンアンプで、Chumoyさんが発表したことからこの名前で呼ばれる。
定評のあるオペアンプを使って定評のある回路をそのまま作ってみたい。

ただ、そのまま作るだけでは面白くないので動作原理についてもきちんと理解しておきたい。
シンプルな非反転増幅回路なのでおおまかな動作は理解できるのだが、僕が知りたいのはもっと細かい部分だ。
特に位相補償については一度きちんと勉強しておく必要があると思っている。
トランジスタはいろいろいじってみたりして少しずつ身についてきているがオペアンプをいじったことはあまりないのでこの機会にいじってみたい。

まずは位相補償から勉強しようと思っている。
どうやら制御工学という分野と関連が深いようなので制御工学の教科書を流し読み中。
そのうち勉強したことをホームページにまとめるかも。
ジャジャガッチ | 電子工作 | 19:40 | comments(0) | trackbacks(0) |

「永遠の0」を観てきた

映画「永遠の0」を観てきた。
映画自体観るのが20年ぶりくらい?
子供のころに親に連れて行ってもらったような気もするがよく憶えていない。
なので映画館のシステム自体がよくわからなくて妻に引っ付いてチケットやら手配してもらった。

二時間半くらいある映画らしいので事前にトイレもばっちし済ませて席へ。
自由席だと思っていたら指定席なのか。

事前にトイレに行ったにもかかわらず映画のクライマックスでは僕の膀胱もクライマックスであまり集中できなかった。
まあ、最後の方はわりとどうでもいい内容だったけど。
映画自体は結構面白かった。
登場人物の行動に解せないところもあったが、空戦シーンは大迫力でこういうものこそ映画館で観るべきかなと思った。
色々文句を言いつつも、実は結構単純な脳みそをしているので泣かせるようなシーンではしっかり泣きました。
感動シーンになると周りも鼻をぐすぐすいわせているのが面白かった。

岡田君がかっこよかったので家に帰ってから録画しておいた大河ドラマ「軍師官兵衛」の第1話を観た。
こっちも面白そうだ。

たまには映画も悪くないな、と思った今日この頃でした。
ジャジャガッチ | その他 | 18:27 | comments(0) | trackbacks(0) |

妻がブログを始めた

妻がブログを始めた。→にゃ☆にゃ☆にゃッチ

僕の妻は看護師で、自分の看護学の知識をまとめておきたいという思いがあったようだ。
素人でもわかるような書き方をしているので僕のブログよりも親切です。
僕のブログはわからない人は置いてけぼりの書き方なので。

ブログを読んで、ああいろんなこと勉強してんだなあ、と思った。
カリウムと心電図の話なんて結構興味深くて、こんな面白いこと知ってんなら教えてくれたっていいのに、と思った。
僕なら嬉々として話すだろうなあ。
最近は妻にフーリエ変換と帯域などについて話しました。
友達にはよくそんな話聞いてくれるね、と言われます。

さあ、朝飯食うか。
ジャジャガッチ | その他 | 09:25 | comments(0) | trackbacks(0) |

年末時代劇スペシャル「剣客商売〜剣の誓約」観た

昨年末にやってた剣客商売スペシャルを観た。
やっぱり剣客商売は面白い。

僕は時代劇はあまり観ないのだが、剣客商売は藤田まこと版の第一シリーズから観ている。小兵衛役は北大路欣也。Wikipediaを見ると2012年に一度放送しているのか。知らなかった
藤田まこと版から観始めたので第一シリーズのキャストのイメージが強かったのだが、結構イメージに合った配役だった。
また毎週放送してくれないかな。
原作もちょっと読んでみたいなあ。
ジャジャガッチ | その他 | 09:03 | comments(0) | trackbacks(0) |

疲れたよ・・・。

万歩計をつけて出勤してみた。
帰って確認すると1700歩だった。
す、すくない・・・。
いや、もしかすると僕は万歩計を揺らさずに歩く能力があるのかもしれない。

*********************************
回路は出来ていた赤外線防犯センサの受光側、実は不注意で壊してしまった。
ブザーをコネクタで取り外せるようにしていたのが仇となり、
極性を間違えて繋いで壊れてしまった。
そこであせってしまってどこかがショートしたりしたのかもしれない。
ブザーだけの故障では済まなかった。
仕方がないのでもう一度作った。疲れたよ・・・。
ジャジャガッチ | 電子工作 | 00:31 | comments(0) | trackbacks(0) |

赤外線防犯センサ、受光側がほぼ完成

うちの猫はケーブルをかじる。
全てのケーブルをかじるわけではなくてお気に入りのものがあるらしい。
お気に入りらしいものは保護チューブを巻くなどしている。
最近久しぶりにオシロスコープを使おうとしたらプローブがぼろぼろだった。勘弁してくれ。
何が彼女を駆り立てるのだろう。

***********************************************
赤外線防犯センサの受光側がほぼ完成した。
ケースは100円均一(Seria)で買ってきた小物入れとおぼしき木箱。
基板がすっぽり収まっていい感じ。ふたの穴から電子ブザーを出して音がこもらないようにした。詳しくは→「ジャジャガッチの勉強ノート
ジャジャガッチ | 電子工作 | 17:08 | comments(0) | trackbacks(0) |
1/2PAGES | >> |

01
--
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
--
>>
<<
--
PR
RECOMMEND
RECENT COMMENT
MOBILE
qrcode
OTHERS
Since 2013/09/17
LATEST ENTRY
CATEGORY
ARCHIVE
LINKS
PROFILE
SEARCH