掲示板ランキング  インターネット・Web開発(ネット社会)  e-ビジネス(ビジネスとIT)


掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板1

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧

No.6672

関数
投稿者---(2006/10/24 20:23:26)


月,日を読みこみ,その年の初め(1月1日)から数えて何日目であるかを表示するプログラムを作成せよ. ただし,うるう年は無視し,2月は28日間,4,6,9,11月は30日間,それ以外の月は31日間あるものとして考えること.
ヒント:int countday(int month)という,月を引数として渡すとその月が何日まであるかを返値として返す関数を作成すると良い.

ってゆー問題なんですけど・・・・C言語です。関数を使わなきゃいけないんです。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:関数 6673 shu 2006/10/24 20:42:33
<子記事> Re:関数 6681 shu 2006/10/25 14:06:27
<子記事> Re:関数 6685 たかぎ 2006/10/25 15:42:17
<子記事> Re:関数 6689 かずま 2006/10/25 23:13:20


No.6673

Re:関数
投稿者---shu(2006/10/24 20:42:33)


int countday(int month)という、関数を作成すると良いなんてことはありません。
関数作成という作業が増え、余計に難しくなるはずです。

ヒント
int month_days[] = {31,28,31,30,31,30,31,31,30,31,30,31};



この投稿にコメントする

削除パスワード

No.6674

Re:関数
投稿者---(2006/10/24 20:55:57)


そーやって、問題に書いてあるんですょねぇ。。。。
アタシ、それがなんなのかも分からないんですけど。。(笑)


この投稿にコメントする

削除パスワード

No.6675

Re:関数
投稿者---shu(2006/10/24 21:10:26)


>そーやって、問題に書いてあるんですょねぇ。。。。

そーやってがどーやってか書かないとわかりません。

>アタシ、それがなんなのかも分からないんですけど。。(笑)

それがどれかっっていうのもかかないことには、さらにわかりません。

はじめに書いた書きこみから全部汲み取ってもらえるなんて思わんといてね。

……4月26は何日目でしょう?
(プログラム使わなくてよし)


この投稿にコメントする

削除パスワード

No.6676

Re:関数
投稿者---dead man walking(2006/10/25 09:03:16)


ここに到ってまだ、何が分からないのかを書いてないのも珍しい。
単に愚痴なら書かなくてもいいですよw

月の日数まで指定してあるなら、もう何も考えることも無いと思います。
4月26日なら、4月までの日数を足して、26足せばいいんだから。
関数にしても、内部で配列でもいいから定義して、引数に対応した数を返せばいいでしょう。


この投稿にコメントする

削除パスワード

No.6679

Re:関数
投稿者---円零(2006/10/25 10:45:58)


>月の日数まで指定してあるなら、もう何も考えることも無いと思います。

いやいや、まだありますよ。如何にしてこのヒントを茶化すか?
#include <stdio.h>

int monthdays[] = {31,28,31,30,31,30,31,31,30,31,30,31};
int tilltheendofthemonth[] = {31,59,90,120,151,181,212,243,273,304,334,365};

int countday(int month){
    return monthdays[month - 1];
}

int main(void){
    int month, day;
    printf("month?");
    scanf("%d", &month);
    if(month < 1 || month > 12) return 1;
    printf("day?");
    scanf("%d", &day);
    printf("%d days from Dec. 31 of last year",
           tilltheendofthemonth[month - 1] - countday(month) + day);
    return 0;
}
是非こんな感じで提出して欲しい。


この投稿にコメントする

削除パスワード

No.6680

Re:関数
投稿者---dead man walking(2006/10/25 12:56:11)


>いやいや、まだありますよ。如何にしてこのヒントを茶化すか?
実にトリッキーw

じゃあこんなのは。
int countDay(int month){
    int DaySum = 0;
    switch (month - 1) {
        case 12:
            DaySum += 31;
        case 11:
            DaySum += 30;
        case 10:
            DaySum += 31;
        case 9:
            DaySum += 30;
        case 8:
            DaySum += 31;
        case 7:
            DaySum += 31;
        case 6:
            DaySum += 30;
        case 5:
            DaySum += 31;
        case 4:
            DaySum += 30;
        case 3:
            DaySum += 31;
        case 2:
            DaySum += 28;
        case 1:
            DaySum += 31;
        default:
            break;

    return DaySum;
}




この投稿にコメントする

削除パスワード

No.6682

Re:関数
投稿者---επιστημη(2006/10/25 14:47:26)
http://blogs.wankuma.com/episteme/


>いやいや、まだありますよ。如何にしてこのヒントを茶化すか?

C++屋はこう茶化す^^;

#include <numeric>

int countday(int month, int day) {
 int monthdays[] = {31,28,31,30,31,30,31,31,30,31,30,31};
 return std::accumulate(monthdays, monthdays+month-1, day);
}



この投稿にコメントする

削除パスワード

No.6684

Re:関数
投稿者---かずま(2006/10/25 15:14:26)


> int countday(int month, int day) {

問題のヒントに与えられた countday() は引数がひとつで、
その月の日数を返すだけでよいのでは?
int countday(int month)
{
    return month - 2 ? month & 1 ^ month > 7 | 30 : 28;
}
または
int countday(int month)
{
    return 0x3bbeecc >> month * 2 & 3 | 28;
}



この投稿にコメントする

削除パスワード

No.6686

Re:関数
投稿者---(2006/10/25 16:31:09)


みなさん!!!どーもありがとーございました。

確かに、最初の方は私が言葉を曖昧にしてたトコロがありました。
それについて、申し訳ありませんでした。
いい勉強になったので、今後気をつけたいです。


そして、本題のプログラムについて教えてくださった方々、
本当にありがとうございましたmm。
本当に助かりました。
これからも頑張って、プログラミング、勉強していきたいとおもいます。


この投稿にコメントする

削除パスワード

No.6677

Re:関数
投稿者---zepto(2006/10/25 09:27:18)


1月1日〜m月d日までの通算日数の求め方
・1月から(m-1)月までの各月の日数を合計する。
 各月の日数を管理する配列の先頭にゼロというダミー要素を
 持っておくと、1月を特別扱いしなくてすむので吉かも…。
・前項で求めた日数にdを加える。
・終わり。


この投稿にコメントする

削除パスワード

No.6681

Re:関数
投稿者---shu(2006/10/25 14:06:27)


> うるう年は無視し,2月は28日間,4,6,9,11月は30日間,
> それ以外の月は31日間あるものとして考えること.

うるう年を無視するなら、2月は28日までです。
4月、6月、9月、11月は30日なんていうのは決まっています。
それ以外の、1月、3月、5月、7月、8月、10月、12月が31日っていうのも決まっています。

決まりきったことを書いている、問題のある問題文です。
そう思ったので、問題文を書きなおしてみた。



月、日を入力し、入力した?月?日が、
1月1日から数えて、何日目であるのかを求めるプログラムを作成せよ。
(閏年は考えないでよい)



この投稿にコメントする

削除パスワード

No.6685

Re:関数
投稿者---たかぎ(2006/10/25 15:42:17)
http://takagi.in/


>2月は28日間,4,6,9,11月は30日間,それ以外の月は31日間あるものとして考えること.

こんなことを指定しているのは、旧暦版やイスラム暦版を作ってくる人対策でしょうか?

>ヒント:int countday(int month)という,月を引数として渡すとその月が何日まであるかを返値として返す関数を作成すると良い.

ヒントはあくまでヒントであって要件ではありません。したがって、公然と無視するのがよいでしょう。

>関数を使わなきゃいけないんです。

関数を使うというのがどのレベルの話か分かりませんね。main関数やprintf関数とかは嫌でも使うのではないでしょうか?

というわけで、手抜きプログラムを書いてみました(エラーチェック全くなし)。
#include <stdio.h>
#include <time.h>

int main(void)
{
  struct tm t = {0};

  scanf("%d%d", &t.tm_mon, &t.tm_mday);
  --t.tm_mon;
  t.tm_year = -1900+2001; /* 閏年ではない年を適当に設定 */
  mktime(&t);
  printf("%d\n", t.tm_yday + 1); /* 1月1日を1日目とする */
  return 0;
}

これをそのまま提出しても、許してはもらえないと思いますが...



この投稿にコメントする

削除パスワード

No.6689

Re:関数
投稿者---かずま(2006/10/25 23:13:20)


> 関数を使わなきゃいけないんです。

main 以外に自分で定義した関数を使っていないので、提出できないプログラム。
#include <stdio.h>

int main(void)
{
    int m, d;

    if (scanf("%d%d", &m, &d) == 2)
        printf("%d\n", --m ? --m ? (m * 153 + 144) / 5 + d : 31 + d : d);
    return 0;
}



この投稿にコメントする

削除パスワード

No.6690

Re:関数
投稿者---たかぎ(2006/10/26 01:17:32)
http://takagi.in/


>> 関数を使わなきゃいけないんです。
>
>main 以外に自分で定義した関数を使っていないので、提出できないプログラム。
>

だったらこれでどうでしょう。

#include <stdio.h>

void sub(void)
{
    int m, d;

    if (scanf("%d%d", &m, &d) == 2)
        printf("%d\n", --m ? --m ? (m * 153 + 144) / 5 + d : 31 + d : d);
}

int main(void)
{
    sub();
    return 0;
}




この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧





掲示板提供:(有)リアル・インテグリティ