プログラミング

プログラミングとアルゴリズムのはなし

投稿日:2019年5月1日 更新日:

みんなー!小学校でプログラミングの授業がはじまるよー!!

プログラミングってなんだろう?
プログラミングって、コンピューターに「○○をしなさい」って命令して、なにかの問題を解いたり、ゲームをつくったり、いろいろなことができるんだ!

たとえば、
「1から10までの数字を全部足したらいくつ?」
っていう問題をプログラミングで解いてみよう!

var kotae = 0;
for (var i = 1; i <= 10; i++){
  kotae += i;
}
alert(kotae);

ほらできた!1から10までの数を全部足すよ!!
実際にうごかしてみよう!

んー!うごくね!!
これでプログラミングはバッチリだ!!

でもちょっとまって。
もし、キミがほんとうに小学生ならこれでバッチリかもしれない。
でも、キミが実は中学生だったり高校生だったり、それ以上だったりしたら、「1から10まで全部足して」って言われて、そのまんまのやり方で解いちゃあいけないよね。

上手いやり方を使わなきゃあ。
この問題は、「(1+10)*10/2」で解くべきだよ。

つまり、プログラムで言うと、

var kotae = (1 + 10) * 10 / 2;
alert(kotae);

こう書くのが、中学生以上のやり方ってモンだよ。

ここで大事なのは、「どういう風にやれば、問題が早く解けるのか」ってこと。
そういうことを考えたときの手順のことを「アルゴリズム」って言うんだ。

たとえばプログラミング初心者によく出される、FizzBuzz問題っていうのがある。
これは、1から順に数字を数えていって、3の倍数のときは数字のかわりに「Fizz」を、5の倍数のときは「Buzz」を、さらに両方の倍数のとき(つまり15の倍数のとき)は「FizzBuzz」を出力する、っていう問題。

これを素直に実装すると、たとえば30まで数えるとして、

for (var i = 1; i <= 30; i++){
  if (i % 15 == 0) alert("FizzBuzz")
  else if (i % 5 == 0) alert("Buzz")
  else if (i % 3 == 0) alert("Fizz")
  else alert(i)
}

ってなるんだ。うごかしてみようか。

教科書とかにはだいたいこんな感じのものが載ってるよね。もしくは、中で文字列を組み立てて、15の倍数の判定を無くしているものもある。

でもさ、FizzBuzz問題っていうのは3と5の倍数にコダワってるわけだから、ぜったいに15個ごとに同じ周期でFizzとかBuzzとか出力するわけ。だから、たとえば下みたいな感じで書いたっていい。

for (var i = 1; i <= 30; i+=15){
  alert(i+0)
  alert(i+1)
  alert("Fizz")
  alert(i+3)
  alert("Buzz")
  alert("Fizz")
  alert(i+6)
  alert(i+7)
  alert("Fizz")
  alert("Buzz")
  alert(i+10)
  alert("Fizz")
  alert(i+12)
  alert(i+13)
  alert("FizzBuzz")
}

プログラミングっていうのは、同じ目的に対して、いくつものやり方が思いつくものなの。
一つのやり方が正解で、他のやり方が間違ってる、ってわけじゃあないんだ。
でも、「こっちの方がより読みやすい」とか「より高速に動く」っていう考え方があるの。

プログラミングを学ぶうえで、一つのやり方でプログラムが動いたとき、それが完成じゃなくて、「同じプログラムを、より高速に書くにはどうしたらいいかな」っていう視点を持ってほしいな、と思う。
それがアルゴリズムってやつなんだよ。

-プログラミング

執筆者:


comment

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

関連記事

GeoJSONで市町村境界をマージして都道府県境界にしたい(実践編)

前々回と前回で問題を整理して、ようやく実践編です。 まず実物のリンク貼りましょう。GitHubに上げました。 今回はGo言語で書いてますが、ポイントがいくつかあります。 ちなみに言語としてGoを選択し …

GeoJSONで市町村境界をマージして都道府県境界にしたい(その1)

前回の続きで、国土地理院の「国土数値情報」っていうオープンデータで遊んでいます。独立した記事なので前回のは読まなくても良いです。 やりたいこと 国土数値情報で提供されている「行政区域データ」は、市町村 …

no image

Unityでメッシュをさわるノウハウ

ヒマなので覚書。ウラを取っていない経験則なので話半分で読んでください。 あと、3Dの基本概念とUnity固有の話の区別が付いていないのでごめんなさい。 もくじ1 Meshクラスの基本2 ポリゴンの読み …

どうして私はC言語で仕事をしているのか

みなさんプログラミング言語は学んでますか?今から始めますか? 最初に学ぶべきプログラミング言語ってなんだと思いますか?そうです。C言語です。 C#でもC++でもObjective-Cでもなく、Pure …

【Unity】GPUを使ってパンツを隠すスクリプトができた

かわいいスカートを履きたい!でもパンチラしたくない! それは誰もが抱く夢です。もちろん、3Dモデルだってパンチラしたくないと思っているハズです。 というわけで偉大なる先人がいます。 Unityでパンツ …