ページ 1 / 1
if文について、問題点を教えてください
Posted: 2019年5月25日(土) 02:41
by Riko
初心者で、次の課題に悩んでいます。
問題:3つの整数x、m、nを入力したときxがmとnの公倍数かどうかを判定した結果を表示するプログラムを作成しなさい。
この問いに対する自分のプログラムが以下ですが、公倍数であるものでも公倍数でないとなっています。(何を入れても公倍数でないという結果が表示される)
ヒントをいただけたら幸いです。
コード:
#include <stdio.h>
int main(void)
{
int x;
printf("Input a number x: ");
scanf("%d" , &x);
int m;
printf("Input a number m: ");
scanf("%d" , &m);
int n;
printf("Input a number n: ");
scanf("%d" , &n);
int kekka;
kekka = x%(m*n);
if( kekka=0 )
{
printf("x ha m to n no koubaisuu desu \n");
}
else( kekka!=0 )
{
printf("x ha m to n no koubaisuu deha arimasenn \n");
}
return 0;
}
Re: if文について、問題点を教えてください
Posted: 2019年5月25日(土) 03:25
by box
ここ、kekkaにゼロを代入していますが、それでよいですか?
kekkaとゼロとを比べるときは == ではないですか?
Re: if文について、問題点を教えてください
Posted: 2019年5月25日(土) 05:34
by かずま
Riko さんが書きました: ↑6年前
この問いに対する自分のプログラムが以下ですが、公倍数であるものでも公倍数でないとなっています。(何を入れても公倍数でないという結果が表示される)
本当ですか?
そのプログラムをコンパイルすると 24行目がエラーになりますよ。
実行できないので、結果が表示されることはありません。
コンパイラは何を使っていますか?
本当に悪いのは 23行目の else( kekka!=0 ) なんですが。
それから 12 は、4 の倍数であり、かつ 6 の倍数だから、
4 と 6 の公倍数ですよね。
Re: if文について、問題点を教えてください
Posted: 2019年5月25日(土) 09:54
by dic
また匿名か
Re: if文について、問題点を教えてください
Posted: 2019年5月25日(土) 21:14
by Math
ヒントです(^^; gcc8.2.0 使用
コード:
#include <stdio.h>
int main(void)
{
int x;
printf("Input a number x: ");
scanf("%d" , &x);
int m;
printf("Input a number m: ");
scanf("%d" , &m);
int n;
printf("Input a number n: ");
scanf("%d" , &n);
int z;
z=m * n;
int t;
if(m < n){ t=m; m=n; n=t;}
int r;
r=m % n;
while(r != 0){ m=n; n=r; r=m % n;}
int lcm=z / n;
int kekka;
kekka = x % lcm; // x%(m*n);
if( kekka==0 )
{
printf("x ha m to n no koubaisuu desu \n");
}
else
{
printf("x ha m to n no koubaisuu deha arimasenn \n");
}
return 0;
}
実行
コード:
C:\19\19c\gcc820>gcc main.c
C:\19\19c\gcc820>dir a.exe
ドライブ C のボリューム ラベルがありません。
ボリューム シリアル番号は 7813-6100 です
C:\19\19c\gcc820 のディレクトリ
2019/05/25 21:04 42,838 a.exe
1 個のファイル 42,838 バイト
0 個のディレクトリ 116,542,201,856 バイトの空き領域
C:\19\19c\gcc820>a.exe
Input a number x: 12
Input a number m: 4
Input a number n: 6
x ha m to n no koubaisuu desu
C:\19\19c\gcc820>pause
続行するには何かキーを押してください . . .
Re: if文について、問題点を教えてください
Posted: 2019年5月28日(火) 17:11
by かずま
Riko さんが書きました: ↑6年前
初心者で、次の課題に悩んでいます。
ヒントをいただけたら幸いです。
まだ悩みが解消しませんか?
たくさんのヒントがもらえているので、応答をお願いします。
ところで、次のプログラムをどう思いますか?
コード:
#include <stdio.h>
int main(void)
{
int x, m, n;
printf("Input a number x: "), scanf("%d" , &x);
printf("Input a number m: "), scanf("%d" , &m);
printf("Input a number n: "), scanf("%d" , &n);
if (x % m == 0 && x % n == 0)
puts("x is a common multiple of m and n.");
else
puts("x is not a common multiple of m and n.");
}
Re: if文について、問題点を教えてください
Posted: 2019年5月28日(火) 20:12
by Math
ヒント: lcm を求める過程でユークリッドの互除法をつかっていますよ。
Re: if文について、問題点を教えてください
Posted: 2019年6月01日(土) 08:27
by Riko
かずま さんが書きました: ↑6年前
Riko さんが書きました: ↑6年前
この問いに対する自分のプログラムが以下ですが、公倍数であるものでも公倍数でないとなっています。(何を入れても公倍数でないという結果が表示される)
本当ですか?
そのプログラムをコンパイルすると 24行目がエラーになりますよ。
実行できないので、結果が表示されることはありません。
コンパイラは何を使っていますか?
本当に悪いのは 23行目の else( kekka!=0 ) なんですが。
それから 12 は、4 の倍数であり、かつ 6 の倍数だから、
4 と 6 の公倍数ですよね。
返答ありがとうございます、ここに張り付けた通りでは実行できていませんでした。
何かを書き換えた後にここに載せていたのだと思います。
Re: if文について、問題点を教えてください
Posted: 2019年6月01日(土) 08:34
by Riko
Math さんが書きました: ↑6年前
ヒントです(^^; gcc8.2.0 使用
コード:
#include <stdio.h>
int main(void)
{
int x;
printf("Input a number x: ");
scanf("%d" , &x);
int m;
printf("Input a number m: ");
scanf("%d" , &m);
int n;
printf("Input a number n: ");
scanf("%d" , &n);
int z;
z=m * n;
int t;
if(m < n){ t=m; m=n; n=t;}
int r;
r=m % n;
while(r != 0){ m=n; n=r; r=m % n;}
int lcm=z / n;
int kekka;
kekka = x % lcm; // x%(m*n);
if( kekka==0 )
{
printf("x ha m to n no koubaisuu desu \n");
}
else
{
printf("x ha m to n no koubaisuu deha arimasenn \n");
}
return 0;
}
実行
コード:
C:\19\19c\gcc820>gcc main.c
C:\19\19c\gcc820>dir a.exe
ドライブ C のボリューム ラベルがありません。
ボリューム シリアル番号は 7813-6100 です
C:\19\19c\gcc820 のディレクトリ
2019/05/25 21:04 42,838 a.exe
1 個のファイル 42,838 バイト
0 個のディレクトリ 116,542,201,856 バイトの空き領域
C:\19\19c\gcc820>a.exe
Input a number x: 12
Input a number m: 4
Input a number n: 6
x ha m to n no koubaisuu desu
C:\19\19c\gcc820>pause
続行するには何かキーを押してください . . .
ヒントありがとうございます!
コード:
int z;
z=m * n;
int t;
if(m < n){ t=m; m=n; n=t;}
int r;
r=m % n;
while(r != 0){ m=n; n=r; r=m % n;}
int lcm=z / n;
この部分はいったい何をやっているのか教えていただけますでしょうか。
Re: if文について、問題点を教えてください
Posted: 2019年6月01日(土) 08:39
by Riko
かずま さんが書きました: ↑6年前
Riko さんが書きました: ↑6年前
この問いに対する自分のプログラムが以下ですが、公倍数であるものでも公倍数でないとなっています。(何を入れても公倍数でないという結果が表示される)
本当ですか?
そのプログラムをコンパイルすると 24行目がエラーになりますよ。
実行できないので、結果が表示されることはありません。
コンパイラは何を使っていますか?
本当に悪いのは 23行目の else( kekka!=0 ) なんですが。
それから 12 は、4 の倍数であり、かつ 6 の倍数だから、
4 と 6 の公倍数ですよね。
このままだと、12,4,6を入力したときに、正しく表示されないということですね!
そこを改善する必要があるのですね、、、。
Re: if文について、問題点を教えてください
Posted: 2019年6月01日(土) 13:48
by Math
Re: if文について、問題点を教えてください
Posted: 2019年6月01日(土) 15:39
by かずま
Riko さんが書きました: ↑6年前
返答ありがとうございます、ここに張り付けた通りでは実行できていませんでした。
何かを書き換えた後にここに載せていたのだと思います。
それなら、最新のソースを提示し、何種類かの数値による
実行例を示し、疑問点をもう一度書いてください。
最新のソースには次のアドバイスが反映されていることを希望します。
・boxさんの「kekkaとゼロとを比べるときは == ではないですか?」
・私の「本当に悪いのは 23行目の else( kekka!=0 ) なんですが。」
また、#6のプログラムについて「どう思いますか?」という質問に
答えていただけないでしょうか?
Re: if文について、問題点を教えてください
Posted: 2019年6月04日(火) 21:44
by Math
「公倍数は最小公倍数の倍数である。」が 証明してあるとは 思わなかった!(^^;
https://ja.wikipedia.org/wiki/%E6%9C%80 ... D%E6%95%B0
諸概念の
公倍数は最小公倍数の倍数である。
証明
を参照。