サイタプログラミングスクールC言語プログラミング入門講座神奈川 楽しめるC言語セミナー スクールブログ プログラミング...

プログラミングの醍醐味(続き)

前回のつづきです。

例題は「九九のアルゴリズムを考えてください」でした。

まずは最初の縛り、かけ算の演算子(*)を使わない場合の書き方です。

これは、かけ算=足し算の繰り返しであることを利用します。例えば以下のようになります。

int kuku(int a, int b){
 int i,answer=0;

 for(i=1;i<=b;i++){
  answer=answer+a;
 }

 return answer;
}

途中に出てくるforの部分の詳細は改めて説明しますが、この部分では「aをb回足す」ということをやっています。

例えばaが5でbが6の場合、答えが30になることを確認してみてください。

では、演算自体を使わないやり方はどうでしょう? この場合は、あらかじめ九九の答えをデータとして用意しておいて、その答えを参照するやり方が考えられます。

int kuku(int a, int b){
 int answer[9][9]=
 {{1,2,3,4,5,6,7,8,9},
  {2,4,6,8,10,12,14,16,18},
  {3,6,9,12,15,18,21,24,27},
  {4,8,12,16,20,24,28,32,36},
  {5,10,15,20,25,30,35,40,45},
  {6,12,18,24,30,36,42,48,54},
  {7,14,21,28,35,42,49,56,63},
  {8,16,24,32,40,48,56,64,72},
  {9,18,27,36,45,54,63,72,81}};

 return answer[a-1][b-1];
}

最後のreturnでaとbをマイナス1しているのには、理由があります。それは、最初に定義したデータが「配列」と呼ばれるものだからです。配列の詳細はそのうち説明しますが、この配列の要素と呼ばれるものが「0番目」から始まるものであるため、マイナス1しているのです。

2番目のアルゴリズムはかなり強引ですが、演算の手間を省けるため実行時間を速くできる可能性があるというメリットがあります。一方で、データの容量を取る大きなデメリットがあるので、あまりおすすめはできませんが。

以上、前回の補足編でした。

 

(2014年1月24日(金) 12:37)

前の記事

次の記事

新着記事

コーチの源田です。 かなり久々のブログ更新になります。 今回は、これまでのプログラミングレッスンを通して再認識したことを記します。 タイトルにも記しましたが、それは  ・ アルゴリズムを作る練習の重要さ です。 アルゴリズムとは、 ・コンピュータに何ら...

源田です。 こちらの投稿は、かなりひさびさになってしまいました。 さて、最近Android用アプリ開発ツールである「Android Studio」(Android公式のもの)に注目しています。 というのも、最新のバージョン(2.2)でCやC++まわりの連係が強化されたから、な...

しばらく、更新が滞ってしまいました。すみません。 今回は整数の範囲に関する余談のその2、未来起こりうる話について書きます。 本題に入る前に、かつて「2000年問題」という騒動が起こったのを覚えていますでしょうか? これは、年に関する処理を誤ることでコンピュータが誤動作する可能...

今回から2回にわたり、整数の範囲にまつわるお話を書きたいと思います。 その1は、過去(現在でもあるかも)のお話です。 1986年5月に、後に日本を代表するロールプレイングゲーム(RPG)シリーズの初代となるゲームが発売されました。 そのゲームとは。。。ファミコン版のドラゴンク...

前回は、整数の範囲について書きました。 その最後で、「負の整数の2進数数値表現は、どのようになるのか」という点に触れました。今回は、この点について書きます。 まず、結論から書きます。 負の整数の2進数数値表現は、「正の整数の2進数数値表現の全ビットの0/1を入れ換えて、最後に...

レッスン無料相談窓口のご案内

サイタでは、C言語レッスンに関する疑問に
専門カウンセラーがお電話にてご案内しております。
お気軽にご利用ください。

お電話相談窓口はコチラ

ブログ記事 ページ先頭へ