![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?08b1c8b)
下記のsample.cを修正して以下の内容のプログラムにしたいと思っています。
貸出のあったボートに対してそれぞれのボートの貸出時間の総計を算出し、貸出時間の長
い順に並べるとともに,全ボートの貸出時間の総計を算出し,それらの結果を標準出力に
出力する
ボート屋はボートを10隻所有しているとし,各ボート名は大文字アルファベット1文字で
「A」,「B」,「C」,「D」,「E」,「F」,「G」,「H」,「I」,「J」であるとする.
ボートの数以外の仕様(基本仕様,機能仕様,詳細仕様)は以下の通りとする.
➀基本仕様
[ボート名,貸出/返却,時刻]の列→貸出時間の総計
列:貸出→返却の組が並ぶ(各ボート名に対して)
貸出時間:返却時刻–貸出時刻
➁機能仕様
ボート名:10種類(アルファベット1文字)
時刻:同一日内の時刻(原則09:00〜18:00)
列の長さ:最大10(台)×9(時間)×6(10分単位)×2(貸出/返却)
➂詳細仕様
入力形式行(貸出・返却の情報)の列
各行に次のものが並ぶ(区切り:空白1文字)
・ボート名:英大文字1文字(A, B, C, D, E, F, G, H, I, J)
・貸出/返却:英大文字1文字(「O」:貸出,「I」:返却)
・時刻:数字2文字:数字2文字(例:12:34)
出力形式 時間:分(例:3:45)
【入力】
コマンドライン入力にデータファイル名(data.txt)を半角文字で入力する.
data.txtの内容
F O 09:00
G O 09:20
B O 09:30
I O 09:30
C O 09:40
F I 09:50
A O 10:00
I I 10:00
E O 10:10
F O 10:10
G I 10:10
B I 10:20
C I 10:20
A I 10:40
E I 11:00
B O 11:10
F I 11:10
J O 11:20
D O 11:30
I O 11:30
B I 11:40
E O 11:40
E I 12:10
I I 12:10
J I 12:10
D I 12:30
G O 13:10
A O 13:30
I O 13:50
A I 14:00
G I 14:00
H O 14:00
C O 14:30
I I 14:30
E O 14:40
H I 14:50
B O 15:00
E I 15:20
J O 15:30
C I 15:40
B I 15:50
J I 16:00
F O 16:40
I O 16:50
F I 17:30
I I 17:30
【出力】
F 2:40
I 2:30
B 2:10
E 2:00
C 1:50
G 1:40
J 1:20
A 1:10
D 1:00
H 0:50
17:10
*/
以下のプログラムは
コマンドライン入力 data.txt
標準出力
A 1:10↵
B 2:10↵
C 1:50↵
D 1:00↵
E 2:00↵
F 2:40↵
G 1:40↵
H 0:50↵
I 2:30↵
J 1:20↵
17:10↵
となります。
貸出時間の長い順に並べるとともに,全ボートの貸出時間の総計を算出し,それらの結果を標準出力に出力するためには、どのように修正すべきかお教えください。
sample.c
#include <stdio.h>
#define LINESIZE 256
int main(int argc, char* argv[]){
FILE *fp;
char line[LINESIZE];
char b, io;
int h, m, tm;
//エラー処理
if ((fp= fopen(argv[1], "r")) == NULL) {
printf("Can't open the file.\n");
return 1;
}
//全貸出時間の総計を0で初期化
tm = 0;
//ボートA~J 10隻のそれぞれの貸出時間を0で初期化
int tms[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
for(; fgets(line, LINESIZE, fp)!=NULL;){
// ボートの貸出/返却時間の処理
sscanf(line, "%c %c %d:%d", &b, &io, &h, &m);
switch(io){
//貸出・返却について
//返却の場合、その時刻を、総計及び各ボートそれぞれについて分単位に
//変換し加算する
case 'I':
tm += 60*h+m;
tms[b - 'A'] += 60*h+m;
break;
//貸出の場合、その時刻を、総計及び各ボートそれぞれについて分単位に
//変換し加算後、符号をマイナスにする
case 'O':
tm -= 60*h+m;
tms[b - 'A'] -= 60*h+m;
break;
}
}
for (int i = 0; i < 10; i++) {
if (tms[i] != 0) {
//各ボートの貸出時間
printf("%c %d:%02d\n", 'A' + i, tms[i]/60, tms[i]%60);
}
}
//全貸出時間の総計
printf("%d:%02d\n", tm/60, tm%60);
fclose(fp);
return 0;
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- その他(データベース) c言語の問題です。これを踏まえてコーディングしたいのでおしえていただきたいです。 3 2023/08/03 09:27
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- Visual Basic(VBA) 【再々投稿】VBAのプログラムで動作しなくて困っています 8 2022/10/14 09:06
このQ&Aを見た人はこんなQ&Aも見ています
-
見学に行くとしたら【天国】と【地獄】どっち?
みなさんは、一度だけ見学に行けるとしたら【天国】と【地獄】どちらに行きたいですか? 理由も聞きたいです。
-
おすすめの美術館・博物館、教えてください!
美術館・博物館が大好きです。みなさんのおすすめをぜひお聞きしたいです。
-
コンビニでおにぎりを買うときのスタメンはどの具?
コンビニでおにぎりを買うとき、何の具材を選ぶことが多いですか?
-
この人頭いいなと思ったエピソード
一緒にいたときに「この人頭いいな」と思ったエピソードを教えてください
-
思い出すきっかけは 音楽?におい?景色?
記憶をふと思い出すきっかけは 音楽、におい、景色 どれですか?
-
C言語の課題です
C言語・C++・C#
-
C言語の長桁の引き算のプログラムを作りたいのですが、お教えください
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
fgetsで拾われる改行文字を削除...
-
CStringのFindで文字列検索を行...
-
C言語での文字列削除操作の件で...
-
C言語の課題です
-
信頼区間の1.96や1.65ってどこ...
-
「Aに対するBの割合」と「Aに対...
-
Aの値からBの値を除するとは??
-
2÷3などの余りについて
-
マイナスからプラスへ転じた時...
-
エクセルで可視セルにのみ値貼...
-
C言語での引数の省略方法
-
ある商品のロス率を5%見込み、...
-
「指定されたキャストは有効で...
-
複数桁10進数の*桁目だけを抽出...
-
C言語の型による処理速度の違い
-
#define _CRT_SECURE_NO_WARNIN...
-
教えてください。数学Bの二項分...
-
read関数をノンブロッキングで...
-
系列推理
-
多重定義が起きている?--lnk20...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
sscanfとscanfの違いがよくわか...
-
CStringのFindで文字列検索を行...
-
fgetsで拾われる改行文字を削除...
-
fgets関数を使用したときの文字...
-
反転した数値を表示させるやり方
-
C言語のステップ数をカウントす...
-
itoaわかりません
-
文字列中に含まれる文字の個数...
-
C言語 空白の行(改行のみ)が...
-
ある文字列で2回目3回目に出現...
-
C言語でパスワード作成ツール
-
単語数のカウントについて
-
C言語の課題です
-
Cで「大文字、小文字の判定」は...
-
メニューバーでクリックした個...
-
CStringについて
-
C言語、単語ごとに改行したい
-
1行の文字列を時間差で表示する...
-
strstrを利用しない文字列検索...
-
C言語で可変長から固定長に変換...
おすすめ情報