ページ 11

教えてください

Posted: 2009年4月06日(月) 22:21
by iyhakj
はじめまして、iyhakjと申します。
今回は学校から出た宿題がどうしてもわからないので質問させていただきます。
問題は以下のようなものです

(キーボード上から秒数を入力すると,その秒数を時間,分,秒
に変換して出力するプログラムを作成してください。なお,入力可能な時間は0秒から
1000000秒とし,それ以外の秒数が入力された場合はエラー処理を行ってください。)

というものです。
今のところ自分はこうすればできると思っています。

まず、入力された数をaとし、 a÷3600 の計算を行います。出た答えをb時とし、余りをcとします。
その後余りcを60で割る計算 c÷60 を行い、結果をd分、余りをe秒と表示する。

for文とif文を使えば作れると思っているのですが、ソースコードをどう作ったらいいのかわかりません。

Cのプログラミング歴は2ヵ月くらいで、条件分岐(if)、配列、繰り返し命令(for,while)、scanf、printf
などの使い方はわかるのですがソースコード状にすることが苦手です。

使っているソフトはvisual C++ 2008です。

本当にソースコードがわからなくで困っています。

長文ですみません。どうぞよろしくお願いします。

Re:教えてください

Posted: 2009年4月06日(月) 23:36
by box
全部を一度に作ろうとせずに、部分ごとに考えればよいでしょう。
まずは、秒数を入力するところだけを考えてみてください。
a~eという無機質な名前ではなく、見ただけで意味がわかる変数名を付けるとよいでしょう。

Re:教えてください

Posted: 2009年4月06日(月) 23:50
by たかぎ
> 部分ごとに考えればよいでしょう。

キーボードからの入力処理が一番面倒かも。
標準入力からなら簡単ですが...

Re:教えてください

Posted: 2009年4月07日(火) 02:54
by lbfuvab
入力に関しては標準入力がキーボードに割り当てられている場合(多分課題が想定している環境)
scanfで良いです。

>for文とif文を使えば作れると思っているのですが、ソースコードをどう作ったらいいのかわかりません。
for分を使う必要性が見つからないのですが・・・
使うなら以下を工夫してfor分にしたらいいと思いますよ。
ユーザ入力をinputとしています。
second =  input;
minute =  second/60;
second %= 60;
hour   =  minute/60;
minute %= 60;

Re:教えてください

Posted: 2009年4月07日(火) 03:23
by hss12
とりあえず、
>まず、入力された数をaとし、 a÷3600 の計算を行います。出た答えをb時とし、余りをcとします。
>その後余りcを60で割る計算 c÷60 を行い、結果をd分、余りをe秒と表示する。

の通りに作ってみましたが、そのままではないですか?
なぜ書けないのでしょう。

>a÷3600 の計算を行います。出た答えをb時とし、
これはb=a/3600になります。

>余りをcとします。
これはc=a%3600です。

同じく計算し、
printf("%d時間%d分%d秒\n", b,d,e);
で表示できると思います。

エラー処理はif文が必要かもしれませんが
for文は使わなくても良いような。

Re:教えてください

Posted: 2009年4月07日(火) 11:35
by s-rush
考え方がそこまで出ているのなら、あとはプログラムに直すだけなんですが・・・

>まず、入力された数をaとし、 a÷3600 の計算を行います。出た答えをb時とし、余りをcとします。
>その後余りcを60で割る計算 c÷60 を行い、結果をd分、余りをe秒と表示する。
そのまま組んでみました。変数名は分かりやすいものに変えてあります。
#include <stdio.h>

int main()
{
	int input;
	int hour;
	int second;
	int minute;
	int temp;

	printf("秒数を入力してください");
	scanf("%d", &input);

	if(input>=1000000 || input<0){
		printf("error");
		return -1;
	}

	hour = input/3600;
	temp = input%3600;
	minute = temp/60;
	second = temp%60;

	printf("時:%d 分:%d 秒:%d\n", hour, minute, second);
	return 0;
}
iyhakjさんの言うような考え方をそのままプログラムに直しただけです。
(動作確認はしていません)

他の方のアドバイスでもうすでに完成されているかもしれませんが^^;

皆さん、本当にありがとうございます!

Posted: 2009年4月07日(火) 14:10
by iyhakj
皆さん、ありがとうございます。
たった今皆さんのアドバイスをもとに作ってみたところきちんと動作しました。
//課題1 キーボード上から秒数を入力すると,その秒数を時間,分,秒 に変換して出力するプログラム

#include <stdafx.h>

void main(void)
{
	unsigned long int h,m,s,a,b;

	printf("秒数を入力してください。(※入力可能な時間は0秒から 1000000秒まで)\n");
	scanf("%d",&a);  //キーボード上から入力

	if(1000000<a) //入力した値が1000000より大きい場合
	{
		printf("エラーです。入力可能な数字は0から1000000までです。\a"); //\aを使い音でもエラーを知らせる
	}
	
	else //それ以外
	{
		h=a/3600; //hの値は入力された数÷3600

		b=a%3600; //bの値は入力された数÷3600の余り

		m=b/60; //mの値は余り÷60

		s=a%60; //sの値は余り÷60の余り

		printf("%d時間%d分%d秒です。",h,m,s);

	}
}
このように作ってみました。for文要りませんでしたね(汗)

ホント感謝の気持ちでいっぱいです!どうもありがとうございました!(礼)