• 締切済み

教えてください3

初心者なのでわかりやすくお願いします。 生年月日と今日の日付を読み込み、生年月日から今日までの日数を計算して出力するプログラムを制御文を用いて作成せよ。 配列、ポインタは使用禁止とする。関数は用いてもよい。 うるう年とは4で割り切れかつ100で割り切れない年、及び400で割り切れる年はうるう年である。 ただし、 1.年月日は西暦とし、入力できる年月日は西暦1800年1月1日以降とする 2.年月日が正しい範囲内にないときは、入力データ誤りとみなしメッセージを出力して終了 3.生年月日が今日の日付より後のときも、誤りとみなし メッセージを出力して終了とすること。 <実行結果> ** 生年月日を入力してください ** 1985 2 4 ** 今日の日付を入力してください ** 2010 6 12 1985年2月4日から今日までの日数は 9259日です ちなみに西暦1年1月1日から今日までの日数は 733935日です さらに西暦1年1月1日から生年月日までの日数は 724676日です <実行結果> ** 生年月日を入力してください ** 12 3 4 ** 今日の日付を入力してください ** 123 4 5 ** 入力した年月日が正しい範囲内にありません  <実行結果> ** 生年月日を入力してください ** 1987 1 2 ** 今日の日付を入力してください ** 1800 1 1 ** 生年月日が今日の日付より後になっています  **

みんなの回答

  • trapezium
  • ベストアンサー率62% (276/442)
回答No.4

確かにポインタ使用禁止では無理。とはいえ関数はOKというので、でっち上げてみた。 ---- int mdays(int y, int m) { int d = 31; switch (m) { case 2: if (0 == (y & 3)) { if (y % 100) d++; else if (!(y % 400)) d++; } return d - 3; case 4: case 6: case 9: case 11: --d; break; } return d; } int ddays(int y, int m, int d) { while (--m > 0) d += mdays(y, m); --y; d += 365 * y; d += y >> 2; d -= y / 100 - y / 400; return d; }

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

「西暦 1年 1月 1日からの日数」をどのように計算するのか教えてください.

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.2

> 配列、ポインタは使用禁止とする。関数は用いてもよい。 難しいですね。 関数は用いてもよいけれどもポインタは使用禁止ということは、関数を呼び出すすべがないということです。文字列を扱うことは当然不可能です。 どう読み込んで、どう出力するかにもよりますが、この条件ではまず実現できないと思います。

参考URL:
http://www.kijineko.co.jp/node/480
  • zwi
  • ベストアンサー率56% (730/1282)
回答No.1

自分で書いたコードは見せてもらえないですか?

関連するQ&A

  • 閏年のプログラム

    C言語(閏年)の質問です。 任意の範囲の年から閏年の表示とその数をカウントして次の実行結果のように表示するプログラムの作成で途中まではわかって修正・追加する箇所があったら一緒に教えてください。(ここでは2つの年をmain関数内で入力し、その範囲の西暦を引数とする関数checkYearを使用するものとする。int型の関数checkYearは、引数に西暦をとり、その西暦が閏年であれば、1を返し、閏年でない場合は0を返す。) なお、閏年の判定方法は以下のとおりである。 条件1 西暦年が4で割り切れる年は閏年である 条件2 条件1を満たしていても、西暦年が100で割り切れるときは閏年でない 条件3 条件2を満たしていても、西暦年が400で割り切れるならば閏年である 実行例1 西暦を入力:2000 西暦を入力:2009 2000年 2004年 2008年 閏年は3回あります。 実行例2 西暦を入力:2100 西暦を入力:2000 2000年 2004年 2008年 2012年 2016年 2020年 (省略) 2096年 閏年は25回あります。 実行例3 西暦を入力:2090 西暦を入力:2110 2092年 2096年 2104年 2108年 閏年は4回あります。 #include <iostream> bool checkYear(int year); int main() { int year; int year2; printf("西暦を入力:"); scanf("%d",year); printf("西暦を入力:"); scanf("%d",year2); int count = 0; for (int i = year; i < year2; i++) { if (checkYear(i)) { printf("%d年\n"); count++; } } printf("閏年は%d回です。\n"); return 0; } bool checkYear(int year) { return (((year % 4) == 0) && ((year % 100) != 0)) || ((year % 400) == 0); }

  • C言語の問題です

    うるう年も含めて、西暦年における各月の日数を表示せよ。 キーボードからの入力は、年と月、の2つの値。 例 2007 6   2007 2   2000 2   2100 2 画面にはその月の日数を表示する。 例 入力が 2007 6 に対して、画面に 「2007年6月の日数は30である」 と表示する。 間違って入力に対しては、再入力を促すようにすること。 プログラムに配列を必ず使うこと。 ソースプログラムと実行画面のコピーをWordファイルに貼り付けて提出すること。 うるう年の表示と年を選ばせることができません。 助けてください!

  • java(All-In-One-Eclipse)で、今日の日付と生年月

    java(All-In-One-Eclipse)で、今日の日付と生年月日を西暦で入力して、誕生日から何日が経過したかを計算するプログラムを作成中なんですが、分からないところがあって困ってます;; うるう年と平年を計算するとこは分かったんですが、日数の計算が分かりません↓ int[] month={31,28,31,30....}で配列するのは分かったんですが、その後どうすればいいんでしょうか? 他に宣言することありますか? お願いします!

  • C言語についていくつか至急教えてください。

    3つほどお聞きしたいことがあります。 1つ目は閏年についてです。 2つの年をmain関数内で入力し、その西暦を引数とする関数CheckYearを使い、結果を出すのですが、条件としては1.西暦年が4で割り切れる閏年。 2.1つ目を満たしていても西暦年が100で割り切れるときは閏年ではない。 3.2つ目を満たしていても西暦年が400で割り切れるならば閏年である。 実行結果として、西暦を入力:2000 西暦を入力:2009  2000年 2004年 2008年 閏年は3回あります。 とあるようにならなければなりません。 2個目は、10進数の値(dec)を読み込み4ケタの2進数に変換するものです。 なお、結果表示にはprintf("(10進数)%d%d%d%d\n",dec,d3,d2,d1,d0);を使います。 実行結果としては、7と入力する場合→(10進数)7=(2進数)0111 となります。 3個目は、棒グラフを表示するものです。 要素5個持っている配列dataに10以下の値を入力する。 関数はputbox(void型)を使用しputboxは1行当たり10個の□や■を表示。 引数の値だけ、□を表示し残りは、■を表示する。 配列の要素の値も表示のこと。 実行結果としては、10,9,8,4,0を入力する場合 1:10 2:9 3:8 4:4 5:0 10 □□□□□□□□□□  9□□□□□□□□□■  8□□□□□□□□■■  4□□□□■■■■■■  0■■■■■■■■■■ となるようにします。 身勝手で尚且つ分かりにくい文章で申し訳ありません。 どうかよろしくお願いいたします。

  • 日付から判別できる表を作りたいと思っているのですが…

    年月日を入力すると、その年月日に応じて、データを出力できるソフトを探しています。 まず、年月日を入力すると、1月ならば1の欄にはA、2の欄にはB、3の欄にはC、4の欄にはD、5の欄にはA…と、2月ならば1の欄にはB、2の欄にはC、3の 欄にはD、4の欄にはA、5の欄にはB…と、入力した月に応じてデータを出力したいのです。 そして、年月日を入力すると、任意の日からの経過日数をある数で割ったあまりからもデータを出力したいです。たとえば、「2006年4月11日」と入力 した場合、2006年4月1日からの経過日数は11日ですので、たとえば11を5で割ると1余るので今日はB、11を6で割ると5余るから今日はE、などというふ うにしたいのです。 こんなことができるソフトって、あるのでしょうか?

  • エクセルで6月30日と入力したときの西暦が前の年になるのは?

     今日の日付は西暦2005年1月13日ですが、エクセルのセルに単に「6月30日」と入力した際、表示形式を西暦にしてみると「2004年」で表示されます。  2005年の1月1日を堺に、日付を入力した際の西暦は全て2005年になるとばかり思っていたので、最初は私のパソコン時計が狂っているのかと思いましたが、そうではないようです。  ということは、年指定せず明日以降の日付を入力した場合は、昨年の西暦になると思っていいのでしょうか?

  • Visual C++で・・・・。

    以下の問題の答えを教えてくれませんか? 授業でVisual C++を習っていて、コレは課題ではありませんが、テスト対策用の問題で、答えがありません。 どなたか、どうかよろしくお願いします。 西暦(うるう年の判定) main関数:西暦の入力(入力された年=n) main関数:void uruu(int m)とする。    この関数の中で判定して、西暦とその結果を出力    この場合は戻り値を考える必要はない=>void    判定の内容は4で割り切れるか、100で割り切れるか、      さらに400で割り切れるかの条件 応用 5種類の西暦を入力して、入力した西暦を出力させて判定するように変更    main関数の中で西暦の入力と関数の実行を5回繰り返す。

  • 日付チェックの考え方

    連続投稿失礼します。 私が今悩んでいるのは、初心者ならば誰でも最初はひっかかるであろう日付チェックです。 入社年月日と生年月日をチェックしたいのですが、実装方法がわからないのは別として(調べればわかるかなぁ、なんて)、それ以前のチェックの範囲がよくわかりません。 入社年月日ならば、会社の創立日から、今日の日付までの値が有効範囲、でよいと思うのですが、生年月日となるとかなり疑問です。 有効範囲が下が西暦1年から上は西暦2003年というわけにもいきませんよね? 実際そういう値を入力しても正常に動くことは動きますけど、それによって算出した年齢が常識の範囲外になってしまいます。 そこで、今現在で妥当と思える年月を指定しても、時はどんどん流れていくので、そのたびにプログラムを修正しなくちゃいけないのか、って話になります。 なにかアドバイスをいただけると助かります。 宜しくお願い致します<(_ _)>

    • ベストアンサー
    • Java
  • C言語のプログラミングについて

    私は大学2年なのですが、現在留年するかしないかというぎりぎりのところに立っています。好意で単位をなんとかしてくれる教授を探し出し、C言語の宿題を出されました。ですが私は根っからの文型で、プログラミングなどしたこともありません。教科書を図書館で借りて読んでみるものの、すぐ理解できるような難易度ではないことだけがわかりました。 そこでもしよろしければ、プログラムを教えてもらいたいです。 1.キーボードから整数の入力を繰り返す。0以下の値が入力されたら終了し、入力した値の中の最小値を表示する。また、それが何番目に入力された値かもあわせて表示する。(6つの整数を入力、最後の整数は0を入力することとする。) 実行結果例 整数を入力: 6 整数を入力: 5 整数を入力: 4 整数を入力: 3 整数を入力: 2 整数を入力: 1 整数を入力: 0 最小値は6番目の1 2.キーボードから整数の入力を4回繰り返し、それらの値を2次元配列Aの各要素に順に代入し、その行列のそれぞれの要素と行列式を表示するプログラムを作成せよ。 実行結果例 1行1列の要素? 6 1行2列の要素? 5 2行1列の要素? 4 2行2列の要素? 3 行列A = 6 5 4 3 行列式 = 2 3.キーボードから西暦年を入力し,その年が閏年のときは「○○年はうるう年です」と表示し,そうでないならば「○○年はうるう年ではありません」と表示するプログラムを作成しなさい. なお,閏年の定義は以下の通りである. ・西暦年が4で割り切れる年は閏年 ・ただし,西暦年が100で割り切れる年は平年 ・ただし,西暦年が400で割り切れる年は閏年 実行結果例 西暦年を入力してください. 1987 1987 年はXXXXXXXX 一時的ではありますが、皆様のお力をお借りしたいです。 もちろん、ここでお答えをもらってもわからないままにせずに、無事進級することができたら独学で勉強しようとは思ってます。 なお、理系の人たちはVisualBasicというソフトを使っているようです。よろしくお願い致します。

  • エクセルでの月日、曜日の入力に関して

    こんにちは いつもお世話になっています。 エクセルで日付、曜日の入力に関して教えてください。  セルA1に西暦年月日を数字で入力してあります。表示形式は標準です。  例えば、2010年1月1日は20100101です。  これに対応させてセルB1に月日、例えば1月1日。セルC1には曜日を入力させたいです。  歴史年表を作っています。よろしくお願いします。

専門家に質問してみよう