- ベストアンサー
古代の年代のプログラム
古代の年代を入れたときに何の時代か分かるようなプログラムを作っていますが、いまいちできません。アウトプットで、調べたい年を入れると自動的に何時代か出るようにしたいです。年代としては、 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万としています。できればループをかけて何回もできるようにしたいです。よく分からないのでご存知の方よろしくお願いします。
- みんなの回答 (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で強制終了させて下さい) お役に立てれば、幸いです。
その他の回答 (2)
- Tacosan
- ベストアンサー率23% (3656/15482)
ふつうは struct それ { const char *名称; double 始まり; }; という構造体の配列を struct それ 時代[] = { { "Quaternary", 2.5 }, ... }; という形で準備しておき, この構造体へのポインタを使って調べる... かな. ど~でもいいんですが Teriary じゃなくて Tertiary ですね.
- Interest
- ベストアンサー率31% (207/659)
年代の仕様が曖昧なので、補足説明をお願いします。 例えば、10百万年前 は Quaternary ですか、それともTeriaryですか? 全ての年代の開始年、終了年を決めてください。 > できればループをかけて何回もできるようにしたいです。 > よく分からないのでご存知の方よろしくお願いします。 質問者さんの技量に応じてご説明します。プログラミングに関してどこまでなら分かるのか書いてくださいね。
補足
説明不足ですみません。これらの数字は全て始まりの年代で表しています。例えばQuaternaryの始まりが 2.5ならTeriaryのおわりは 64.9。Cretaceousなら135.9、Jurassicの終わりは 191.9と結構あいまいですが、そのようにしたいと思っています。プログラミングに関しては初心者です。全体像がうまくつかめなくて困っています。よろしくお願いします。