さて、初回でいきなり説明も無く一つプログラムを作ってみます。
初めての人は何がなんやら…
ご安心を、次回からちゃんとした説明が始まりますので、まずはC言語がどんなものなのか触れてみてください。
ちなみに、ここのプログラムはまだC++の機能は使っていません。
エラトステネスの篩(ふるい)というものがあります。
これはなんなのかというと、素数を求める手法の中で一番単純なものです。
(その分遅いですが)
手法としては、
というまぁ手間のかかる手法です。
今回これを使って素数を、そうですね、100個まで求めるプログラムを作ってみましょう。
いきなりソース載せてみます。
#include <stdio.h>
int main () { int i, j, prime[100]; for (i = 0; i < 100; i++) prime[i] = 0; prime[0] = 2; for (j = 3; j; j++){ for (i = 0; i < 100; i++){ if (prime[i] == 0){ prime[i] = j; break; } if (j / prime[i] == 0) break; } if (prime[99]) break; } printf (" 1st prime : %3d\n", prime[0]); printf (" 2nd prime : %3d\n", prime[1]); printf (" 3rd prime : %3d\n", prime[2]); for (i = 3; i < 100; i++) printf ("%3dth prime : %3d\n", i+1, prime[i]); return 0; }
上のソースをコンパイルして実行してみます。
1st prime : 2 2nd prime : 3 3rd prime : 4 4th prime : 5 5th prime : 6 6th prime : 7 7th prime : 8 8th prime : 9 9th prime : 10 10th prime : 11 11th prime : 12 ・・・
なんか変ですね。実は上のソースは間違ってます。
さて、どこでしょう。ヒントはC言語の四則演算は日常の四則演算と違って、
気をつけないといけないことがあると言うことです。
気づきました? そう、19行目の割り算が実はいけないのです。
C言語に限らず、ほとんどのプログラミング言語には中に入れられるデータの方によって、
変数に「型」と言うものがあります。
今回はint型、つまり整数を扱える変数だけを使ったプログラムですが、
実はint型同士の割り算では答えがint型になります。
つまり、i = 1, j = 2の時、i / j は0.5ではなく0になります。(切り捨て)
なので正しいソースはこうなります。
prime.c
・・・ for (j = 3; j; j++){ for (i = 0; i < 100; i++){ if (prime[i] == 0){ prime[i] = j; break; } if (j % prime[i] == 0) break; } if (prime[99]) break; } ・・・
今回はここまでです。プログラミングって何?と言う方にはまるで呪文でも書いているかのようだったかもしれません。
次回からC言語の具体的な書き方の説明に入ります。あと、まんさく先輩やタト先輩のテキストも大変参考になります。
というかはっきり言って私が新しく書く必要があるか疑問です(笑)。
ではまた次回。