第11講 ユークリッド互除法
第3話 ユークリッド互除法アプリ例
a=3600
b=3780
aとbの最大公約数は180です。
a=5
b=0
aにもbにも0より大きい値を入れて下さい。
a=256
b=384
を実現するアプリ例
#include<stdio.h>
void f(int a,int b); //aとbを交換する社員
int g(int a,int b); //ユークリッド互除法を行う社員
int main(){
int a,b;
yarinaosi:;
printf("a=");
fflush(0); //pirntfを先に実行させるためのお呪い
scanf("%d",&a);
printf("b=");
fflush(0); //pirntfを先に実行させるためのお呪い
scanf("%d",&b);
if(a==0 || b==0){
printf("aにもbにも0より大きい値を入れて下さい。\n");
goto yarinaosi; //goto文、yarinaosiに戻る
}
if(a<b)f(a,b);
printf("aとbの最大公約数は%dです。\n",g(a,b));
return(0);
}
void f(int a,int b){
int w;
w=a;
a=b;
b=w;
}
int g(int a,int b){
a=a%b;
if(a==0){
return(b);
}
return(g(b,a));
}
コピペ用添付ファイル
解説
goto yarinaosi; //goto文、yarinaosiに戻る
は注釈文にも書いてある通り、
goto文と呼ばれるものです。
BASICの頃、スパゲティプログラムの元凶といわれ、
プログラム言語では、嫌われる命令文の1つです。
ですが、私は次の原則を守れば使って良いと考えています。
原則 入り口と出口はそれぞれ1カ所のみ
もし、goto文を使わないでプログラムせよといわれれば、
#include<stdio.h>
void f(int a,int b); //aとbを交換する社員
int g(int a,int b); //ユークリッド互除法を行う社員
int main(){
int a,b;
for(;;){
printf("a=");
fflush(0); //pirntfを先に実行させるためのお呪い
scanf("%d",&a);
printf("b=");
fflush(0); //pirntfを先に実行させるためのお呪い
scanf("%d",&b);
if(a==0 || b==0){
printf("aにもbにも0より大きい値を入れて下さい。\n");
}
else{
break;
}
}
if(a<b)f(a,b);
printf("aとbの最大公約数は%dです。\n",g(a,b));
return(0);
}
void f(int a,int b){
int w;
w=a;
a=b;
b=w;
}
int g(int a,int b){
a=a%b;
if(a==0){
return(b);
}
return(g(b,a));
}
コピペ用添付ファイル
等が考えられます。
for(;;){
のように、;の前後を空欄にする使い方があります。
この場合、必ず
if(a==0 || b==0){
printf("aにもbにも0より大きい値を入れて下さい。\n");
}
else{
break;
}
のようにfor文を強制的に終了させるbreak;を入れないと、
永久ループになってしまいますので、
気をつけなければなりません。
解説は、第5話で行うことにして、次の課題です。
キーボードから入力するのではなく、
aとbの値をランダムに発生させて、
最大公約数を見つけるアプリに改造して下さい。
ランダムは毎回実行結果が異なるように、
srand(time(NULL));
をいれてください。これを使い際には、
#include<stdlib.h>
#include <time.h>
をインクルード(読み込む)ことを忘れないで下さい。
実行画面
a=20835
b=23562
aとbの最大公約数は9です。
初心者のための excel 2016 マクロ VBA 入門講義 基礎から応用まで
vc++ c言語 c++ 入門 初心者 基礎から応用まで
eclipse c++ 入門
魔方陣 数独で学ぶ VBA 入門
数独のシンプルな解き方・簡単な解法の研究
VB講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 C++ 入門 基礎から応用まで第1部
eclipse java 入門
java 入門 サイト 基礎から応用まで
本サイトトップへ