Programming

2008/07/21

こういう動画をもっと投稿してほしい

【ニコニコ動画】プログラミングをしてみない? 第一回

最近は著作権がらみの動画がどんどん姿を消しているらしいけど、こういう動画が増えてくれれば、それはそれで意義があるサイトになるのではないだろうか?

この動画はVBScriptを使ってプログラミングを紹介しているので、Windowsとメモ帳さえあればできるのがいい。

| | コメント (0) | トラックバック (0)

2008/03/29

2038年問題を少し実感してみた

C言語では次のようにすると、現在時刻を表示することができます。(time.hをインクルードしておく)

time_t t;

time(&t);
printf("現在時刻:%s", ctime(&t));

これを実行すると

現在時刻:Sat Mar 29 23:34:41 2008

と表示されます。このtime_t型の実体はlong型なので、long型の最大値までしか時刻を表示することができないということになります。そこで次のようなプログラムを作ってみます。

#include <stdio.h>
#include <time.h>
#include <limits.h>

int main(void)
{
  time_t t;

  
  t = 0;
  printf("%s", ctime(&t));
  t = LONG_MAX;
  printf("%s", ctime(&t));

  return 0;
}

これを実行すると

Thu Jan  1 09:00:00 1970
Tue Jan 19 12:14:07 2038

となり、2038年までしか時刻を表示できません。これが2038年問題というやつですね。

| | コメント (1) | トラックバック (0)

2008/02/14

FizzBuzz問題

1年くらい前に話題になったFizzBuzz問題を取り上げてみたいと思います。FizzBuzzは英語圏の遊びで、ルールは次のようになっています。

最初のプレイヤーは「1」と数字を発言する。次のプレイヤーは直前のプレイヤーの次の数字を発言していく。ただし、3で割り切れる場合は 「Fizz」、5で割り切れる場合は 「Buzz」、両者で割り切れる場合は 「Fizz Buzz」 を数の代わりに発言しなければならない。発言を間違えた者やためらった者は脱落となる。[Wikipedia]

そして、FizzBuzz問題とは

このゲームをコンピュータ画面に表示させるプログラムとして作成させることで、コードがかけないプログラマ志願者を見分ける手法を Jeff Atwood が FizzBuzz問題 (FizzBuzz Question)として提唱した。その提唱はインターネットの様々な場所で議論の対象になっている[Wikipediaより抜粋]

つまり、「数分でFizzBuzzのプログラムが作れないならプログラマを志願するな」ということです。これはプログラマを志願する私としては放っておけなかったので挑戦してみました。

特にカッコいいことをしようとしなければすぐにできます。

#include <stdio.h>

int main(void)
{
  int i;
  for(i=1 ; i<=100 ; i++){
    if(i%15 == 0)
      printf("FizzBuzz\n");
    else if(i%3 == 0)
      printf("Fizz\n");
    else if(i%5 == 0)
      printf("Buzz\n");
    else
      printf("%d\n", i);
  }
  return 0;
}

elseを使わずに書くとこんなのかな。

int main(void)
{
  int i;
  for(i=1 ; i<=100 ; i++){
    if(i%3 == 0)
      printf("Fizz");
    if(i%5 == 0)
      printf("Buzz");
    if(i%3 != 0 && i%5 != 0)
      printf("%d", i);
    printf("\n");
  }
  return 0;
}

| | コメント (0) | トラックバック (0)