ファイル

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

ファイル

#1

投稿記事 by KC » 11年前

学校の課題で ある24時間営業のコンビニエンスストアでの1日分の売り上げデータを利用して、時間帯別および売り上げ金額別の客数を出力するものである。空欄を埋めて、プログラムを完成させなさい。というプログラム作成がだされました

プログラムの8行目のtableの後と15行目の%11dの後のところだけ分かりません 教えてください

#include <stdio.h>
int main(void)
{
int table[24][6] = 0 ,hour,min,prank,price;
printf("時刻と金額を入力してください!¥n");
while((scanf("%2d%2d%6d",&hour,&min,&price;)) != EOF{
prank = (price / 1000) > 5 ? 5 : price / 1000;
table ++
}
printf("%21s"-999 1000-1900 2000-2999 "," ");
printf("3000-3999 4000-4999 5000-¥n");
for(hour = 0; hour <= 23; hour++){
printf("%2d:00-%2d:59", hour, hour);
for(prank = 0; prank <= 5; prank++)
printf("%11d", );
printf("¥n");
}
return 0;
}

初級者
記事: 200
登録日時: 14年前

Re: ファイル

#2

投稿記事 by 初級者 » 11年前

配列 table[24][6]
は、何を格納するために
存在していると思いますか?

KC

Re: ファイル

#3

投稿記事 by KC » 11年前

時刻と金額を格納するためでしょうか? 

アバター
へにっくす
記事: 634
登録日時: 13年前
住所: 東京都

Re: ファイル

#4

投稿記事 by へにっくす » 11年前

KC さんが書きました:時刻と金額を格納するためでしょうか? 
ではなぜminが要るのでしょう?
要りませんよね?

まあそれより、どの部分が穴埋めなのか分かりませんね。
コードをみる限り、コンパイルできないですけど。
なので、
KC さんが書きました:プログラムの8行目のtableの後と15行目の%11dの後のところだけ分かりません
上記はひとまず後回しでとりあえず指摘。

コード:

int table[24][6] = 0,…
配列を初期化する際には{0}のように{}で囲ってください。

コード:

	while((scanf("%2d%2d%6d",&hour,&min,&price;)) != EOF{
whileの括弧がおかしいよ。またscanfの戻り値は値を代入した数ですよ。EOFはおかしいよ。

コード:

	printf("%21s"-999 1000-1900 2000-2999 "," ");
文字列の"のくくりがおかしいよ。

修正したら、修正したコードを掲示してください。
またコードは、[code][/code]で囲ってくださいね。
written by へにっくす

KC

Re: ファイル

#5

投稿記事 by KC » 11年前

ヘニックスさん 訂正しました 空欄の部分は,tableと++の間と printf("%11d" の後の部分です。 minの方は例文のほうで初めからあるので外せないみたいです

#include <stdio.h>
int main(void)
{
int table[24][6] = {0} ,hour,min,prank,price;
printf("時刻と金額を入力してください!¥n");
while((scanf("%2d%2d%6d",&hour,&min,&price;)) != EOF){
prank = (price / 1000) > 5 ? 5 : price / 1000;
table ++
}
printf("%21s-999 1000-1900 2000-2999 "," ");
printf("3000-3999 4000-4999 5000-¥n");
for(hour = 0; hour <= 23; hour++){
printf("%2d:00-%2d:59", hour, hour);
for(prank = 0; prank <= 5; prank++)
printf("%11d", );
printf("¥n");
}
return 0;
}

KC

Re: ファイル

#6

投稿記事 by KC » 11年前

code 付け忘れました
quote="KC"]ヘニックスさん 訂正しました 空欄の部分は,tableと++の間と printf("%11d" の後の部分です。 minの方は例文のほうで初めからあるので外せないみたいです

コード:

#include <stdio.h>
int main(void)
{
int table[24][6] = {0} ,hour,min,prank,price;
printf("時刻と金額を入力してください!¥n");
while((scanf("%2d%2d%6d",&hour,&min,&price;)) != EOF){
prank = (price / 1000) > 5 ? 5 : price / 1000;
table ++
}
printf("%21s-999 1000-1900 2000-2999 "," ");
printf("3000-3999 4000-4999 5000-¥n");
for(hour = 0; hour <= 23; hour++){
printf("%2d:00-%2d:59", hour, hour);
for(prank = 0; prank <= 5; prank++)
printf("%11d", );
printf("¥n");
}
return 0;
}
/quote]

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: ファイル

#7

投稿記事 by みけCAT » 11年前

へにっくす さんが書きました:EOFはおかしいよ。
おかしいとは限りません。scanfの返り値はEOFになることがあります。
最初の変換が成功する前に入力の最後に達して、一致の失敗が起こった場合には、 EOF が返される。また、 読み込みエラーが発生した場合にも EOF が返される。
http://linuxjm.sourceforge.jp/html/LDP_ ... anf.3.html

ただ、whileのかっこが足りないのと、余計なセミコロンが入っているのはおかしいですね。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: ファイル

#8

投稿記事 by みけCAT » 11年前

へにっくす さんが書きました:
KC さんが書きました:時刻と金額を格納するためでしょうか? 
ではなぜminが要るのでしょう?
要りませんよね?
KC さんが書きました:minの方は例文のほうで初めからあるので外せないみたいです
おそらくここでのminはminuteの略だと思うので、minを入力するのは自然だと思います。
確かに結果的には使用せず、%*dで読み飛ばしても良さそうですが、外せないならそのままでもいいと思います。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

K C

Re: ファイル

#9

投稿記事 by K C » 11年前

ログインしたので続きはそちらで大丈夫ですか?

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: ファイル

#10

投稿記事 by みけCAT » 11年前

K C さんが書きました:ログインしたので続きはそちらで大丈夫ですか?
このスレッドで続けてもらって構いません。
「そちら」ってどちらですか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
へにっくす
記事: 634
登録日時: 13年前
住所: 東京都

Re: ファイル

#11

投稿記事 by へにっくす » 11年前

みけCAT さんが書きました:
へにっくす さんが書きました:EOFはおかしいよ。
おかしいとは限りません。scanfの返り値はEOFになることがあります。
そうですか?そのあとにpriceを使ってるのに。
priceの値は、3つ数値を入力されないと入らないですよね(hour、min、priceの順で入るのだから)?
だからここはEOFでなく3で比較するのがいいのではないかと思うのですけど・・・
まあ課題でEOFになってるのなら別にそのままでいいと思います。
written by へにっくす

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: ファイル

#12

投稿記事 by みけCAT » 11年前

へにっくす さんが書きました:
みけCAT さんが書きました:
へにっくす さんが書きました:EOFはおかしいよ。
おかしいとは限りません。scanfの返り値はEOFになることがあります。
そうですか?そのあとにpriceを使ってるのに。
priceの値は、3つ数値を入力されないと入らないですよね(hour、min、priceの順で入るのだから)?
だからここはEOFでなく3で比較するのがいいのではないかと思うのですけど・・・
まあ課題でEOFになってるのなら別にそのままでいいと思います。
そうですね。確かにこの場合は3と比較して判定する方がより良いと思います。

ただし、
へにっくす さんが書きました:scanfの戻り値は値を代入した数ですよ。
これが常に正しいわけではない、ということですね。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

k c

Re: ファイル

#13

投稿記事 by k c » 11年前

EOFの方は置いといて 空欄の所どうしたらいいですか?

K C

Re: ファイル

#14

投稿記事 by K C » 11年前

コード:

#include <stdio.h>
int main(void)
{
int table[24][6] = {0} ,hour,min,prank,price;
printf("時刻と金額を入力してください!¥n");
while((scanf("%2d%2d%6d",&hour,&min,&price;)) != EOF){
prank = (price / 1000) > 5 ? 5 : price / 1000;
table 空欄 ++
}
printf("%21s-999 1000-1900 2000-2999 "," ");
printf("3000-3999 4000-4999 5000-¥n");
for(hour = 0; hour <= 23; hour++){
printf("%2d:00-%2d:59", hour, hour);
for(prank = 0; prank <= 5; prank++)
printf("%11d", 空欄);
printf("¥n");
}
return 0;
}
場所は空欄と書いてある所です

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: ファイル

#15

投稿記事 by みけCAT » 11年前

最初の空欄は、hourとprankによって決められるtableの適切な要素に1を加算し、
コンパイルエラーを防ぐために後についている余分な++をコメントアウトするといいと思います。

2番目の空欄は、これまたhourとprankによって決められるtableの適切な要素にアクセスすればいいと思います。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: ファイル

#16

投稿記事 by みけCAT » 11年前

ヒントとして、二次元配列を使用して九九の表を出力するコードです。

コード:

#include <stdio.h>

int main(void) {
	int table[9][9];
	int i,j;
	/* テーブルに値を格納 */
	for(i=1;i<=9;i++) {
		for(j=1;j<=9;j++) {
			table[i-1][j-1]=i*j;
		}
	}
	/* テーブルの値を表示 */
	for(i=0;i<9;i++) {
		for(j=0;j<9;j++)printf("%d%c",table[i][j],j+1<9?' ':'\n');
	}
	return 0;
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

K C

Re: ファイル

#17

投稿記事 by K C » 11年前

[coad]
#include <stdio.h>
int main(void)
{
int table[24][6] = {0} ,hour,min,prank,price;
printf("時刻と金額を入力してください!¥n");
while((scanf("%2d%2d%6d",&hour,&min,&price;)) != EOF){
prank = (price / 1000) > 5 ? 5 : price / 1000;
table [hour+1][prank+1] 
}
printf("%21s-999 1000-1900 2000-2999 "," ");
printf("3000-3999 4000-4999 5000-¥n");
for(hour = 0; hour <= 23; hour++){
printf("%2d:00-%2d:59", hour, hour);
for(prank = 0; prank <= 5; prank++)
printf("%11d", 空欄);
printf("¥n");
}
return 0;
}
[/coad]
こんな感じですか? 二番目はよく分からないです

K C

Re: ファイル

#18

投稿記事 by K C » 11年前

コード:

#include <stdio.h>
int main(void)
{
int table[24][6] = {0} ,hour,min,prank,price;
printf("時刻と金額を入力してください!¥n");
while((scanf("%2d%2d%6d",&hour,&min,&price;)) != EOF){
prank = (price / 1000) > 5 ? 5 : price / 1000;
table [hour+1][prank+1] 
}
printf("%21s-999 1000-1900 2000-2999 "," ");
printf("3000-3999 4000-4999 5000-¥n");
for(hour = 0; hour <= 23; hour++){
printf("%2d:00-%2d:59", hour, hour);
for(prank = 0; prank <= 5; prank++)
printf("%11d", 空欄);
printf("¥n");
}
return 0;
}
こんな感じですか? 二番目はよく分からないです

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: ファイル

#19

投稿記事 by みけCAT » 11年前

両方とも+1する必要はないと思います。あとはtable [hour][prank]に1を足す処理ですね。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

K C

Re: ファイル

#20

投稿記事 by K C » 11年前

[quote="K C"]

コード:

#include <stdio.h>
int main(void)
{
int table[24][6] = {0} ,hour,min,prank,price;
printf("時刻と金額を入力してください!¥n");
while((scanf("%2d%2d%6d",&hour,&min,&price;)) != EOF){
prank = (price / 1000) > 5 ? 5 : price / 1000;
table [hour+1][prank] 
}
printf("%21s-999 1000-1900 2000-2999 "," ");
printf("3000-3999 4000-4999 5000-¥n");
for(hour = 0; hour <= 23; hour++){
printf("%2d:00-%2d:59", hour, hour);
for(prank = 0; prank <= 5; prank++)
printf("%11d", 空欄);
printf("¥n");
}
return 0;
}
こんな感じですか? 頭の中がごちゃごちゃしてきました 空欄が二個
なので新たに付け足すの出来ないです

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: ファイル

#21

投稿記事 by みけCAT » 11年前

違います。両方とも(+1する必要はない)と思います。すなわち、hourに+1する必要も、prankに+1する必要も、ないと思います。
K C さんが書きました:空欄が二個
なので新たに付け足すの出来ないです
どういうことですか?問題がtable [<A>][<B>] ++のAおよびBを埋めよ、というようになっているということですか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

K C 

Re: ファイル

#22

投稿記事 by K C  » 11年前

table と ++の間に空欄があってその空欄を埋めろという物です

K C

Re: ファイル

#23

投稿記事 by K C » 11年前

長方形型の空欄です

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: ファイル

#24

投稿記事 by みけCAT » 11年前

じゃあNo: 15の方針で大丈夫そうですね。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: ファイル

#25

投稿記事 by みけCAT » 11年前

今、この図のような表(のようなもの)が用意されています。
table_image.png
二次元配列のイメージ
table_image.png (29.15 KiB) 閲覧数: 9989 回
この表を用いて、入力の(hour,prank)の組それぞれをカウントしたいのですよね?
だとしたら、どうすればいいでしょうか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

K C

Re: ファイル

#26

投稿記事 by K C » 11年前

table[hour][prank]++ ということですか?

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: ファイル

#27

投稿記事 by みけCAT » 11年前

最初の空欄はそんな感じでいいと思います。

二番目の空欄も、for文で指定されているhourとprankに対応する表の値を表示したいのですよね?
ということは…
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

K C

Re: ファイル

#28

投稿記事 by K C » 11年前

コード:

printf("%11d",prank);
ですか?

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: ファイル

#29

投稿記事 by みけCAT » 11年前

違います。tableを使いましょう。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

K C

Re: ファイル

#30

投稿記事 by K C » 11年前

コード:

printf("%11d",table);
ですか?

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: ファイル

#31

投稿記事 by みけCAT » 11年前

違います。最初の空欄の解答を応用してください。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

初級者
記事: 200
登録日時: 14年前

Re: ファイル

#32

投稿記事 by 初級者 » 11年前

手で求める場合、[24][6]
という144個の箱があるとして、
時間帯と価格に応じて
どの箱に入れますか?

閉鎖

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