C言語のプログラム

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
amu

C言語のプログラム

#1

投稿記事 by amu » 14年前

入力された数値がオリンピック(夏、冬)開催されるか否かを判定するプログラムです。作る際の条件はオリンピック開催を計算する部分は別関数で作りなさい、この予定は永遠に狂わないが作る条件です。
自分で考えたんですが、入力された数値をオリンピック開催年、2000,2002,2004…と照らし合わせ合えば開催すると表示されればいいと思い以下をなんとか書いてみました。添削お願いします。

コード:


#include <stdio.h>

int kaisai (void);  //プロトタイプ宣言

int main (void)
 {
	int seireki;
	scanf("%d",&seireki);  //西暦入力
	
	do
  {
		printf("%d年は開催しないよ",seireki);  //条件(開催年)に合わなかったらこの表示
  }
	while(seireki==b)  //条件(開催年を求めた答えをここにもってきたい)
  {
		printf("%d年は開催します",seireki);     //入力が条件に合えばここへ
		return 0;
 }
	int kaisai (void)
   {
		for(;;)  //開催年を求める式、開催は2年毎に続いてるので無限に繰り返して求める式
			int b = 2000 += 2;
			return b;
   }
 }

初めてつかうサイトなので書き方がおかしかったり見にくいプログラムですいませんがお願いします。

non
記事: 1097
登録日時: 14年前

Re: C言語のプログラム

#2

投稿記事 by non » 14年前

添削してくれっていわれても、添削できるレベルになっていません。
課題となっている関数の仕様を決めてください。
もし、私がこの関数をつくるなら
プロトタイプ
int kaisai(int seireki);
引数
int seireki  西暦年
戻り値
オリンピックが開催されるなら1を返し、開催されない場合は0を返す

のように決めます。仕様の決め方は人それぞれでしょうし、課題であれば先生から指示があっているかもしれません。

>この予定は永遠に狂わないが作る条件です。
この意味がわからないのですが、どういう意味なのでしょうか?永遠とは?
オリンピックの開催される年のルールってどうなっているのでしたっけ?
4年おきってのはわかるけど、冬のオリンピックが年の明けた2月とかでなく12月にあるってことはないのですか?
または、南半球の開催の時は?
non

amu

Re: C言語のプログラム

#3

投稿記事 by amu » 14年前

2000,2002,2004…という年で夏冬オリンピックが開かれてる仕様は変わらないという意味です。もしこの設計でプログラムを組むとしたらどうすればいいのでしょうか?問題サイトの回答はswitchを使ってたんですが、このやり方でプログラムしてみたいと思ったんですが積みました。。。

たかぎ
記事: 328
登録日時: 14年前
住所: 大阪
連絡を取る:

Re: C言語のプログラム

#4

投稿記事 by たかぎ » 14年前

確かに仕様がよくわかりませんね。
念のため確認しますが、近代オリンピックの話ですよね?
だとしても、2000年以降でよいのでしょうか?
そうではない場合、最初のころは例外が多いですし、戦争で中断された時期もあります。
そのあたりはどうするのでしょうか?

amu

Re: C言語のプログラム

#5

投稿記事 by amu » 14年前

コード:


#include <stdio.h>

int olympic(int year);

int main(void)
{
	int year,hold;
	
	do{printf("2000開催された西暦から表示します。開催以降の西暦を入力してください\n");
		scanf("%d",&year);
	}
	
	while(year<1999);
	
	hold = olympic(year);
	
	do{printf("開催されない");}
	
	while (!(hold==0));
	
	printf("開催される");
		
	return 0;
}

int olympic(int year)
{
	if (;;){ 2000 += 2}
		
		return 0;
		
		}

最後のifの部分がうまくいきません。。ここで2000,2002,2004,2006…と無限に開催年を出して、それが入力された西暦と一致したら開催するとしたいんですが。。。

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

Re: C言語のプログラム

#6

投稿記事 by h2so5 » 14年前

その仕様であれば、
もっと単純に入力した年が偶数なら開催するという判断で良いのではないでしょうか?

amu

Re: C言語のプログラム

#7

投稿記事 by amu » 14年前

単純に書かれたのが解答にあったので、別のやり方(無限ループされた数値と一致したら)でやって見たいと思って積んでしまってる訳です。。。

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

Re: C言語のプログラム

#8

投稿記事 by h2so5 » 14年前

amu さんが書きました:別のやり方(無限ループされた数値と一致したら)でやって見たいと思って積んでしまってる訳です。。。
わざわざそんな非効率的な方法を使っても何の意味もないと思いますよ。
複雑な方法を使ってより良い結果が出せるならともかく、この場合は無限ループを使う利点は全くありません。

box
記事: 2002
登録日時: 14年前

Re: C言語のプログラム

#9

投稿記事 by box » 14年前

amu さんが書きました:自分で考えたんですが、入力された数値をオリンピック開催年、2000,2002,2004…と照らし合わせ
さてさて、ここまでのやりとりでもって、そういう照らしあわせは必要ないことがわかりましたか?
単純に、入力した1個の数値が、オリンピック開催年にあたるかどうかを
if文で判定するだけ、ってことです。

あ、ついでに書いておくと、どなたかが書かれていた南半球云々の話は
わきへどけておいてかまいませんからね。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

amu

Re: C言語のプログラム

#10

投稿記事 by amu » 14年前

効率云々ではなく、こういう条件でもプログラムで出来るのか否か。出来るのであれば試したいただそれなんですけどね、、、。んでその書き方をわかる方が居れば聞きたいという事です。

アバター
a5ua
記事: 199
登録日時: 14年前

Re: C言語のプログラム

#11

投稿記事 by a5ua » 14年前

入力例として、
2011と入力した場合、2012と入力した場合とで、
それぞれ、どのような表示をしたいのか示してくれませんか?

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

Re: C言語のプログラム

#12

投稿記事 by h2so5 » 14年前

amu さんが書きました:効率云々ではなく、こういう条件でもプログラムで出来るのか否か。出来るのであれば試したいただそれなんですけどね、、、。んでその書き方をわかる方が居れば聞きたいという事です。
もちろん、amuさんがその方法を試したいのであればそれは自由です。
ただしそれは、自力でやっている場合の話です。

amuさんのコードはただでさえ変な設計になっているため、
非効率で複雑な方法でやろうとするとさらに添削が面倒になってしまいます。

より良い方法を教えてくれる方はこの掲示板にはたくさんいると思いますが、
わざわざ悪い方法を指導したいという人はあまりいないと思います。

amu

Re: C言語のプログラム

#13

投稿記事 by amu » 14年前

2011,2012と入力…。テキスト、コードに何度もかいてある通りです。入力された数がオリンピックの開催年に当たれば開催されると文字表示、否なら開催されないと表示したいです。
要は2000から2002,2004…と2づつ増え続ける数を無限ループで表して、その結果を条件にして、入力値と条件を照らし合わせて、一致するか否かの文字表示するコードが分かればと思うしだいです。

アバター
a5ua
記事: 199
登録日時: 14年前

Re: C言語のプログラム

#14

投稿記事 by a5ua » 14年前

無限ループではないですけど、例えばこんな感じですかね。

コード:

// オリンピック開催年かどうか(year >= 2000を仮定)
int olympic(int year)
{
	int y = 2000;
	while (y <= year) {
		y += 2;
	}
	return y == year;
}

box
記事: 2002
登録日時: 14年前

Re: C言語のプログラム

#15

投稿記事 by box » 14年前

どうしてそこまで無限ループ(終了しないプログラム!)にこだわるのか、全然わかりません。
入力する数値は1個なんですよね?であれば、その数値が
4の倍数なのか4で割って2余るのか(おっと、すごいヒントだ!)によって
夏季オリンピックの開催年か冬季オリンピックの開催年か、あるいはオリンピックを開催しない年なのかを
出力するだけってことに気づかないですかねぇ。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

しひ

Re: C言語のプログラム

#16

投稿記事 by しひ » 14年前

もしかして、「無限ループされた数値」というのは、Haskellでの無限リストのことを指していたりして。

amu

Re: C言語のプログラム

#17

投稿記事 by amu » 14年前

(不適切な発言があったため、管理人が削除しました)

amu

Re: C言語のプログラム

#18

投稿記事 by amu » 14年前

a5uaさんありがとうございます!それをヒントにできそうです。

ISLe
記事: 2650
登録日時: 14年前
連絡を取る:

Re: C言語のプログラム

#19

投稿記事 by ISLe » 14年前

amu さんが書きました:効率云々ではなく、こういう条件でもプログラムで出来るのか否か。出来るのであれば試したいただそれなんですけどね、、、。んでその書き方をわかる方が居れば聞きたいという事です。
amu さんが書きました:2011,2012と入力…。テキスト、コードに何度もかいてある通りです。入力された数がオリンピックの開催年に当たれば開催されると文字表示、否なら開催されないと表示したいです。
要は2000から2002,2004…と2づつ増え続ける数を無限ループで表して、その結果を条件にして、入力値と条件を照らし合わせて、一致するか否かの文字表示するコードが分かればと思うしだいです。
無限に開催年を出して一致したら開催すると(出力)する→一致しないときは無限に続く
できるかできないかという問いにはできないという回答になるかと。

おや、他人に暴言を吐いておきながらあっさり前提条件を覆すのですか。

アバター
Dixq (管理人)
管理人
記事: 1662
登録日時: 14年前
住所: 北海道札幌市
連絡を取る:

Re: C言語のプログラム

#20

投稿記事 by Dixq (管理人) » 14年前

> amuさん

規約を守った投稿をお願いします。
特定の人を不快にさせる暴言は吐いた自分にとって良い結果を生みません。
暴言を吐かれて次の機会にまた親身になって答えてあげようと思ってくれる人は少ないことでしょう。
大人の対応をして頂けると有難いです。

閉鎖

“C言語何でも質問掲示板” へ戻る