古代の年代を入れたときに何の時代か分かるようなプログラムを作っていますが、いまいちできません。アウトプットで、調べたい年を入れると自動的に何時代か出るようにしたいです。年代としては、
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万としています。できればループをかけて何回もできるようにしたいです。よく分からないのでご存知の方よろしくお願いします。
No.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で強制終了させて下さい)
お役に立てれば、幸いです。
No.2
- 回答日時:
ふつうは
struct それ {
const char *名称;
double 始まり;
};
という構造体の配列を
struct それ 時代[] = { { "Quaternary", 2.5 }, ... };
という形で準備しておき, この構造体へのポインタを使って調べる... かな.
ど~でもいいんですが Teriary じゃなくて Tertiary ですね.
No.1
- 回答日時:
年代の仕様が曖昧なので、補足説明をお願いします。
例えば、10百万年前 は Quaternary ですか、それともTeriaryですか?
全ての年代の開始年、終了年を決めてください。
> できればループをかけて何回もできるようにしたいです。
> よく分からないのでご存知の方よろしくお願いします。
質問者さんの技量に応じてご説明します。プログラミングに関してどこまでなら分かるのか書いてくださいね。
この回答への補足
説明不足ですみません。これらの数字は全て始まりの年代で表しています。例えばQuaternaryの始まりが 2.5ならTeriaryのおわりは 64.9。Cretaceousなら135.9、Jurassicの終わりは 191.9と結構あいまいですが、そのようにしたいと思っています。プログラミングに関しては初心者です。全体像がうまくつかめなくて困っています。よろしくお願いします。
補足日時:2005/06/08 01:29お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 中古車 210クラウンについて 2 2023/04/30 00:23
- 国産車 自動車購入に関して 12 2023/08/28 14:58
- その他(プログラミング・Web制作) プログラムの勉強のおすすめは 7 2022/12/09 20:09
- その他(悩み相談・人生相談) 私の歩み 5 2022/08/12 08:28
- 査定・売却・下取り(車) 車の維持費等について 初めまして。質問させてください。 まずは私の情報から。 28歳、自家用車フェア 4 2022/10/18 20:32
- 歴史学 文章読むのが苦手で(-_-;)理解できないところがあるので教えてほしいです 3 2022/09/28 07:11
- カラオケ 田舎のカラオケ喫茶やカラオケ居酒屋(スナック?)って30代の男1人でいっても楽しめますか? 4 2023/01/29 05:47
- 高齢者・シニア 小学5年生です。総理大臣志望です。40〜50代の人はネットを利用できないようにするべきでは? ↓根拠 7 2022/03/23 01:13
- アプリ パソコンやスマホで、「ソフト」と「アプリ」ってどんな違いがあるの? 9 2022/11/02 07:44
- アクセサリ・腕時計 チュードルのヴィンテージ時計に詳しい方、教えてください。 家族がチュードルサブマリーナ9411を中古 1 2022/05/08 01:39
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
*をユーザーが入力した数字の数...
-
正負を反転させて出力するプロ...
-
Linuxで入力待ちなしkeyread関...
-
数字以外が入力されたらエラー...
-
scanfが2回使えない・・・?;
-
至急お願いします。プログラミ...
-
C言語 for文をつかって記号を表...
-
C言語scanf_sで何故か2回入力に...
-
プログラミング初心者です。 Py...
-
C言語 逆ピラミッドの作り方
-
Eclipseコンソール表示を、リセ...
-
scanf が無視されます
-
cout関数を使っているのですが...
-
C言語について
-
java初心者です。入力されたの...
-
Eclipseでコマンドラインを入力...
-
double型が正常に認識されてい...
-
enterでループ終了
-
if文の条件にscanf関数を使うと…?
-
プログラミングの問題です 「金...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
double型が正常に認識されてい...
-
プログラミング初心者です。 Py...
-
正負を反転させて出力するプロ...
-
Excel VBAで、Application.Inpu...
-
C言語について。
-
batプログラム上で文字列を入力...
-
*をユーザーが入力した数字の数...
-
cout関数を使っているのですが...
-
漢字のソートについて
-
数字以外が入力されたらエラー...
-
Userformの入力順序をタブオー...
-
ワードで文字を入力する時の変...
-
Linuxで入力待ちなしkeyread関...
-
java初心者です。入力されたの...
-
EDITコントロールで入力できる...
-
Eclipseコンソール表示を、リセ...
-
小数か整数かを判定する方法
-
C言語scanf_sで何故か2回入力に...
-
VB.NETで16進数+16進数や16進...
-
Linuxプログラミングで、キーボ...
おすすめ情報