アプリ版:「スタンプのみでお礼する」機能のリリースについて

構造体Timeを定義し、この構造体型を持つ変数time1,time2,time3を用意します。この変数time1,time2に時間、分、秒のデータを入力し,
合計値をtime3の各メンバに代入し、time3に含まれる、時間、分、秒を表示したいのですが、どうすればよいのでしょうか。
(分、秒の表示は0から59の数値で行う)
(時間はint hour
分は int minute
秒は int second)

(これは学校の課題なのですが、最近授業についていけなくてかなり悪戦苦闘しています。授業に追いつくためがんばっているのですが、かなりきついです。)

このプログラムを組むのに必要な知識とか、わかる方はついでに教えていただけるとうれしいです。

A 回答 (2件)

構造体Timeを定義しってことは、標準の構造体ではなくて自分で作るって事ですよね。



まず構造体を定義します。

typedef struct _Time{
int hour;
int minute;
int second;
}Time;

で変数time1,time2,time3を用意しますので

Time time1, time2, time3;

とします。
下のように分けても良いです。

Time time1;
Time time2;
Time time3;

代入は、そのままメンバにアクセスして代入します。

time1.hour = 6;
time1.minute = 24;
time1.second = 7;

のようにします。
2も一緒です。

計算方法は、

time3.second = time1.second + time2.second;
とします。
ただし、60秒を超えるかもしれないので、
60をこえたら分に1を加えて、time3.second は、60を引いた値を入れます。
同じように、分も60を超えたら、時間に1を加えて、分に、60を引いた値を挿入します。

式にすると
time3.second = time1.second + time2.second;
if( time3.second >= 60 ){
time3.second=-60;
/* time3.second = time3.second - 60; */
time3.minute=1;
}else{
time3.minute=0;
}
time3.minute = time3.minute + time1.minute + time2.minute;
if( time3.minute >= 60 ){
time3.minute=-60;
/* time3.minute = time3.minute - 60; */
time3.hour=1;
}else{
time3.hour=0;
}
time3.hour= time3.hour+ time1.hour+ time2.hour;

という感じです。

素数tを使用して以下のような方法もあります。
以下の方法の場合、time1とtime2の和が180秒以上でも計算可能ですね
int t;
time3.second = time1.second + time2.second;
t = time3.second % 60;
time3.minute = time1.minute
+ time2.minute
+ ((time3.second - t)/60);
time3.second = t;
t = time3.minute % 60;
time3.hour= time1.hour
+ time2.hour
+ ((time3.minute - t)/60);
time3.minute = t;
    • good
    • 0
この回答へのお礼

投稿ありがとうございます。

おおかた理解できたのですが、
メイン関数の宣言のところがいまいちまだわかりません。

時間、分、秒を入力するには
int main(void){
Time time1,time2,time3;
Time time[3];
int i;
for(i=0;i<3;i++){
printf("time%dの時間を入力\n",i+1);
scanf("%d",time[i].hour);
以下、分・秒同様といった感じで
 よいのでしょうか。

お礼日時:2007/12/15 02:41

#include <stdio.h>



typedef struct teime{
int h, m, s;
} Time;

int main(void)
{
Time time1 = {1, 30, 23}, time2 = {2, 23, 45}, time3;
int r;

printf("%d %d %d\n", time1.h, time1.m, time1.s);
printf("%d %d %d\n", time2.h, time2.m, time2.s);
time3.s = (r = (time1.s + time2.s)) % 60;
r /= 60;
time3.m = (r = (time1.m + time2.m + r)) % 60;
r /= 60;
time3.h = time1.h + time2.h + r;
printf("%d %d %d\n", time3.h, time3.m, time3.s);
return 0;
}
    • good
    • 0
この回答へのお礼

お返事遅れてすみません。
なんとなく構造体のコツがつかめてきました。
ありがとうございました!

お礼日時:2007/12/18 04:50

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!