下記の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も見ています
-
好きなおでんの具材ドラフト会議しましょう
肌寒くなってきて、温かい食べ物がおいしい季節になってきましたね。 みなさんはおでんの具材でひとつ選ぶなら何にしますか? 1番好きなおでんの具材を教えてください。
-
あなたにとってのゴールデンタイムはいつですか?
一週間の中でもっともテンションが上がる「ゴールデンタイム」はいつですか? その逆で、一週間でもっとも落ち込むタイミングでも構いません。 よかったら教えて下さい!
-
「これはヤバかったな」という遅刻エピソード
寝坊だったり、不測の事態だったり、いずれにしても遅刻の思い出はいつ思い出しても冷や汗をかいてしまいますよね。
-
この人頭いいなと思ったエピソード
一緒にいたときに「この人頭いいな」と思ったエピソードを教えてください
-
好きな和訳タイトルを教えてください
洋書・洋画の素敵な和訳タイトルをたくさん知りたいです!【例】 『Wuthering Heights』→『嵐が丘』
-
C言語の課題です
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
itoaわかりません
-
charと%c , %s の関係について
-
C言語 空白の行(改行のみ)が...
-
CStringのFindで文字列検索を行...
-
文字列中に含まれる文字の個数...
-
C言語 文字列の操作
-
fgetsで拾われる改行文字を削除...
-
sscanfとscanfの違いがよくわか...
-
データ数値を16進文字列でprint...
-
ブランクのチェック
-
CStringについて
-
ある文字列で2回目3回目に出現...
-
プログラミング シーザー暗号 ...
-
C言語の課題です
-
C言語の勉強しています。すみま...
-
gccで入力した文字列をトークン...
-
C言語でパスワード作成ツール
-
反転した数値を表示させるやり方
-
「指定されたキャストは有効で...
-
信頼区間の1.96や1.65ってどこ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CStringのFindで文字列検索を行...
-
sscanfとscanfの違いがよくわか...
-
charと%c , %s の関係について
-
strstrを利用しない文字列検索...
-
反転した数値を表示させるやり方
-
C言語のステップ数をカウントす...
-
itoaわかりません
-
fgets関数を使用したときの文字...
-
C言語 空白の行(改行のみ)が...
-
fgetsで拾われる改行文字を削除...
-
小文字のみを数える方法
-
ある文字列で2回目3回目に出現...
-
CStringについて
-
単語数のカウントについて
-
Cで「大文字、小文字の判定」は...
-
ブランクのチェック
-
C言語で16進数文字列から16進数...
-
文の意味
-
1行の文字列を時間差で表示する...
-
文字の入れ替えについて
おすすめ情報