初めてここで質問させていただきます。
今高一でC言語の基礎をやっています。課題が早く終わったので先生から問題を出されたのですが、
まったくわかりません。ヒントをください。(先生からは1時間=60×60=3600というヒントをもらった
整数型の変数timeに時間データ(秒)を
入力し、それが何時間 何分 何秒になるか
表示せよ。 ↑ ↑ ↑
| | |
jkan fun byou
整数型の変数timeに…
Re:整数型の変数timeに…
>>sasap さん
> 「整数型の変数timeに時間データ(秒)を入力し」
とあるので、まずは 整数型の time に scanf でも使って入力したデータを保持しておきます。
time とは別で jkan, fun, byou の三つを整数型で用意します。
次に、入力された time から、時分秒を計算します。
1日 = 24時間で、1時間 = 60分 * 60秒 から、
jkan = (time/60*60)%24 で入力した秒から何時間かが求められます。
同様に、1時間 = 60分で、1分 = 60秒 から
fun = (time/60)%60 で入力した秒から何分かが求められ、
byou = time%60 で入力した秒から何秒が求められます。
後は、求めたものを表示すれば完成です。
> 「整数型の変数timeに時間データ(秒)を入力し」
とあるので、まずは 整数型の time に scanf でも使って入力したデータを保持しておきます。
time とは別で jkan, fun, byou の三つを整数型で用意します。
次に、入力された time から、時分秒を計算します。
1日 = 24時間で、1時間 = 60分 * 60秒 から、
jkan = (time/60*60)%24 で入力した秒から何時間かが求められます。
同様に、1時間 = 60分で、1分 = 60秒 から
fun = (time/60)%60 で入力した秒から何分かが求められ、
byou = time%60 で入力した秒から何秒が求められます。
後は、求めたものを表示すれば完成です。
Re:整数型の変数timeに…
一応言われた通りにやりましたが…無理です。
なんか変なのになってしまいました。
間違っているところをおしえてください。
#include <stdio.h>
void main(void)
{
int time,jkan,fun,byou;
scanf("%d",&time);
jkan=(time/60*60)%24;
fun=(time/60)%60;
byou=time%60;
printf("%d\n%d\n%d\n",&jkan,&fun,&byou);
}
なんか変なのになってしまいました。
間違っているところをおしえてください。
#include <stdio.h>
void main(void)
{
int time,jkan,fun,byou;
scanf("%d",&time);
jkan=(time/60*60)%24;
fun=(time/60)%60;
byou=time%60;
printf("%d\n%d\n%d\n",&jkan,&fun,&byou);
}
Re:整数型の変数timeに…
>>sasapさん
> printf("%d\n%d\n%d\n",&jkan,&fun,&byou);
prtinf に使われている & を消してみて下さい。
printf("%d\n%d\n%d\n", jkan, fun, byou);
こちらのミスで、そのままでは時間(jkan)の計算が上手くいかないと思います。
括弧の位置がおかしいので併せて修正お願い致します;
jkan=time/(60*60)%24;
または、jkan=(time/3600)%24; で多分表示されるはずです。
%24 はあってもなくてもどちらでもいいです。
> printf("%d\n%d\n%d\n",&jkan,&fun,&byou);
prtinf に使われている & を消してみて下さい。
printf("%d\n%d\n%d\n", jkan, fun, byou);
こちらのミスで、そのままでは時間(jkan)の計算が上手くいかないと思います。
括弧の位置がおかしいので併せて修正お願い致します;
jkan=time/(60*60)%24;
または、jkan=(time/3600)%24; で多分表示されるはずです。
%24 はあってもなくてもどちらでもいいです。
Re:整数型の変数timeに…
全然違うアプローチも書いておきます。
struct tm t = {0};
t.tm_year = -1900 + 2010;
t.tm_sec = time;
mktime(&t);
jkan = t.tm_hour;
fun = t.tm_min;
byou = t.tm_sec;
こうすればOKです。
tm_yearを今年に設定しているのは、扱える範囲を超えてエラーになるのを防ぐためです。
struct tm t = {0};
t.tm_year = -1900 + 2010;
t.tm_sec = time;
mktime(&t);
jkan = t.tm_hour;
fun = t.tm_min;
byou = t.tm_sec;
こうすればOKです。
tm_yearを今年に設定しているのは、扱える範囲を超えてエラーになるのを防ぐためです。
Re:整数型の変数timeに…
今、学校なので出来ませんがこれであってるんですよね?
#include <stdio,h>
main()
{
int time,jkan,fun,byou;
scanf("%d",&time);
jkan=time/(60*60);
fun=(time/60)%;
byou=time%60;
printf("%d%d%d\n",jkan, fun,byou)
}
携帯からなので変なところがあるかも知れませんが…
fun=(time/60)%; これの%って何の意味があるんですか?
#include <stdio,h>
main()
{
int time,jkan,fun,byou;
scanf("%d",&time);
jkan=time/(60*60);
fun=(time/60)%;
byou=time%60;
printf("%d%d%d\n",jkan, fun,byou)
}
携帯からなので変なところがあるかも知れませんが…
fun=(time/60)%; これの%って何の意味があるんですか?
Re:整数型の変数timeに…
>>sasapさん
> fun=(time/60)%; これの%って何の意味があるんですか?
fun=(time/60)%60; です。
x%y で、x を y で割った余りを求める事が出来ます。
なので、(time/60) を 60 で割った余りが fun に代入されます。
> fun=(time/60)%; これの%って何の意味があるんですか?
fun=(time/60)%60; です。
x%y で、x を y で割った余りを求める事が出来ます。
なので、(time/60) を 60 で割った余りが fun に代入されます。
Re:整数型の変数timeに…
これで出来たんでしょうか?
#include <stdio.h>
void main(void)
{
int time,jkan,fun,byou;
scanf("%d",&time);
jkan=time/(60*60);
fun=(time/60)%60;
byou=time%60;
printf("%d %d %d\n",jkan,fun,byou);
}
3600と打つと1 0 0
60…0 1 0 6…0 0 6
いいんですよね?
#include <stdio.h>
void main(void)
{
int time,jkan,fun,byou;
scanf("%d",&time);
jkan=time/(60*60);
fun=(time/60)%60;
byou=time%60;
printf("%d %d %d\n",jkan,fun,byou);
}
3600と打つと1 0 0
60…0 1 0 6…0 0 6
いいんですよね?
Re:整数型の変数timeに…
大丈夫です。
せっかくですから
printf("%d秒 = %d時間%d分%秒",time,jkan,fun,byou);にした方が色気があると思いますw
ところでそれぞれの数式の意味は理解できましたか?
一応解説させてもらうと。
余剰演算子「%」については皆さんの説明する通りです。
ここで大切なのはtimeが秒数を入れているというところです。
byouでは60で割ることによって必要のないhh時間mm分の情報を削り落しています。
例えば150秒は2分30秒ですよね。60で割れば2と余り30です。そこで余り以外の情報を削り落せば残った30が秒数になります。そこでbyouには60で割った余りを入れています。
funではtimeを秒数で割ったものに対して、更に必要のないhh時間とss秒の情報を削り落しています。
例えば60(秒)×60(分)=3600秒が1時間ですよね。ということで3666秒は1時間1分6秒です。
3666をまず60で割れば61です。これは1分が61個有るという意味になります。この時点でss秒の情報が
無くなります。1分が61個ですから、これに対して60で割れば1と余り1です。ここで%を使ったことにより
余り以外の情報は削られますから、余りの1がfunに入ります。
jkanですが、1時間は60秒が60回、60(秒)×60(分)=1時間(3600秒)です。ですので、1時間の秒数である60(秒)×60(分)でtimeを割れば答えは時間になります。例えば3600秒は1時間、7200秒は2時間といった感じです。
また、DVDMさんがjkanの計算式に %24 を入れていたのは、もしも24以上になった時に24時以上にしないためです。25時は1時ですよね?これがまさに25を24で割った余りということです。
理解していたのならいいのですが、数式の丸写しだったのなら一応これからの為に知っておいて損はありません。
せっかくですから
printf("%d秒 = %d時間%d分%秒",time,jkan,fun,byou);にした方が色気があると思いますw
ところでそれぞれの数式の意味は理解できましたか?
一応解説させてもらうと。
余剰演算子「%」については皆さんの説明する通りです。
ここで大切なのはtimeが秒数を入れているというところです。
byouでは60で割ることによって必要のないhh時間mm分の情報を削り落しています。
例えば150秒は2分30秒ですよね。60で割れば2と余り30です。そこで余り以外の情報を削り落せば残った30が秒数になります。そこでbyouには60で割った余りを入れています。
funではtimeを秒数で割ったものに対して、更に必要のないhh時間とss秒の情報を削り落しています。
例えば60(秒)×60(分)=3600秒が1時間ですよね。ということで3666秒は1時間1分6秒です。
3666をまず60で割れば61です。これは1分が61個有るという意味になります。この時点でss秒の情報が
無くなります。1分が61個ですから、これに対して60で割れば1と余り1です。ここで%を使ったことにより
余り以外の情報は削られますから、余りの1がfunに入ります。
jkanですが、1時間は60秒が60回、60(秒)×60(分)=1時間(3600秒)です。ですので、1時間の秒数である60(秒)×60(分)でtimeを割れば答えは時間になります。例えば3600秒は1時間、7200秒は2時間といった感じです。
また、DVDMさんがjkanの計算式に %24 を入れていたのは、もしも24以上になった時に24時以上にしないためです。25時は1時ですよね?これがまさに25を24で割った余りということです。
理解していたのならいいのですが、数式の丸写しだったのなら一応これからの為に知っておいて損はありません。
Re:整数型の変数timeに…
>ゆーずぃさんありがとうございます。
おかげで詳しく分かりました。
ほかの皆さんもありがとうございます。
また分からないことがあったら質問させ頂きますね。
おかげで詳しく分かりました。
ほかの皆さんもありがとうございます。
また分からないことがあったら質問させ頂きますね。