プロが教えるわが家の防犯対策術!

古代の年代を入れたときに何の時代か分かるようなプログラムを作っていますが、いまいちできません。アウトプットで、調べたい年を入れると自動的に何時代か出るようにしたいです。年代としては、
Quaternary 2.5
Teriary 65
Cretaceous 136
Jurassic 192
Triassic 225
Permian 280
Carboniferous 345
Deveonian 395
Silurian 435
Ordovician 500
Cambrian 570
Precambrian 4500 or ealier
ちなみに単位は全て100万としています。できればループをかけて何回もできるようにしたいです。よく分からないのでご存知の方よろしくお願いします。

A 回答 (3件)

こんばんは。

yasuyuki007と申します。

#1さんの回答に対する補足、#2のアドバイスを元にプログラムを作成してみました。

> ループをかけて何回もできるようにしたいです。
ループの終了条件をどうするかが不明なため、勝手に「検索する年として2.5未満の値が入力されたら終了」とさせていただきました。
(インデントが上手くなくて申し訳ないです。)

#include <stdio.h>

void Search_Jidai(double year)
{
struct Nendai {
const char *namae;
double start;
};

struct Nendai Jidai[] =
{
{"Quaternary", 2.5},
{"Teriary", 65},
{"Cretaceous", 136},
{"Jurassic", 192},
{"Triassic", 225},
{"Permian", 280},
{"Carboniferous", 345},
{"Deveonian", 395},
{"Silurian", 435},
{"Ordovician", 500},
{"Cambrian", 570},
{"Precambrian", 4500}
};

int i, s;

if (year >= 2.5) {
/* ループ回数の上限を求める */
s = sizeof(Jidai) / sizeof(struct Nendai);
for(i = 0; i < s-1; i++) {
if (year >= Jidai[i].start && year < Jidai[i+1].start) {
break;
}
}

if (i == s) {
i--;
}
printf("%s時代です。\n", Jidai[i].namae);
}
}

int main(void)
{
double yy = 5.0;

printf("古代の年代を調べます\n");

while(yy >= 2.5) {
printf("知りたい年を入力して下さい(2.5未満の値を入力すると終了します):");
scanf("%lf", &yy);
Search_Jidai(yy);
}
printf("\n終了します。\n");

return 0;
}

なお、年を入力する際に、数字と符号以外の文字(例えば、ABCとか)を入力した際のエラーチェックはあえて、入れてありません。必要であれば、自分で考えて下さい。ちなみに、数字と符号以外の文字を入力すると、無限ループとなってしまいます。
(プログラムが止まらなくなりますので、Ctrl+Cで強制終了させて下さい)

お役に立てれば、幸いです。
    • good
    • 0

ふつうは


struct それ {
const char *名称;
double 始まり;
};
という構造体の配列を
struct それ 時代[] = { { "Quaternary", 2.5 }, ... };
という形で準備しておき, この構造体へのポインタを使って調べる... かな.

ど~でもいいんですが Teriary じゃなくて Tertiary ですね.
    • good
    • 0

年代の仕様が曖昧なので、補足説明をお願いします。



例えば、10百万年前 は Quaternary ですか、それともTeriaryですか?
全ての年代の開始年、終了年を決めてください。

> できればループをかけて何回もできるようにしたいです。
> よく分からないのでご存知の方よろしくお願いします。

質問者さんの技量に応じてご説明します。プログラミングに関してどこまでなら分かるのか書いてくださいね。

この回答への補足

説明不足ですみません。これらの数字は全て始まりの年代で表しています。例えばQuaternaryの始まりが 2.5ならTeriaryのおわりは 64.9。Cretaceousなら135.9、Jurassicの終わりは 191.9と結構あいまいですが、そのようにしたいと思っています。プログラミングに関しては初心者です。全体像がうまくつかめなくて困っています。よろしくお願いします。

補足日時:2005/06/08 01:29
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!