整数型の変数timeに…

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

整数型の変数timeに…

#1

投稿記事 by sasap » 14年前

初めてここで質問させていただきます。

今高一でC言語の基礎をやっています。課題が早く終わったので先生から問題を出されたのですが、
まったくわかりません。ヒントをください。(先生からは1時間=60×60=3600というヒントをもらった
 

整数型の変数timeに時間データ(秒)を
入力し、それが何時間 何分 何秒になるか
表示せよ。 ↑ ↑ ↑
| | |
  jkan   fun   byou

DVDM

Re:整数型の変数timeに…

#2

投稿記事 by DVDM » 14年前

>>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 で入力した秒から何秒が求められます。

後は、求めたものを表示すれば完成です。

sasap

Re:整数型の変数timeに…

#3

投稿記事 by sasap » 14年前

一応言われた通りにやりましたが…無理です。
なんか変なのになってしまいました。

間違っているところをおしえてください。


#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);


}

DVDM

Re:整数型の変数timeに…

#4

投稿記事 by DVDM » 14年前

>>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 はあってもなくてもどちらでもいいです。

たかぎ

Re:整数型の変数timeに…

#5

投稿記事 by たかぎ » 14年前

全然違うアプローチも書いておきます。

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を今年に設定しているのは、扱える範囲を超えてエラーになるのを防ぐためです。

sasaP

Re:整数型の変数timeに…

#6

投稿記事 by sasaP » 14年前

今、学校なので出来ませんがこれであってるんですよね?



#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)%; これの%って何の意味があるんですか?

DVDM

Re:整数型の変数timeに…

#7

投稿記事 by DVDM » 14年前

>>sasapさん
> fun=(time/60)%; これの%って何の意味があるんですか?
fun=(time/60)%60; です。
x%y で、x を y で割った余りを求める事が出来ます。
なので、(time/60) を 60 で割った余りが fun に代入されます。

toyo

Re:整数型の変数timeに…

#8

投稿記事 by toyo » 14年前

%は剰余演算子といいます

65 % 60 = 5
138 % 60 = 18

のようになります

sasap

Re:整数型の変数timeに…

#9

投稿記事 by sasap » 14年前

これで出来たんでしょうか?

#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に…

#10

投稿記事 by ゆーずぃ » 14年前

大丈夫です。

せっかくですから
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で割った余りということです。

理解していたのならいいのですが、数式の丸写しだったのなら一応これからの為に知っておいて損はありません。

sasap

Re:整数型の変数timeに…

#11

投稿記事 by sasap » 14年前

>ゆーずぃさんありがとうございます。
おかげで詳しく分かりました。

ほかの皆さんもありがとうございます。
また分からないことがあったら質問させ頂きますね。

閉鎖

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