第11講 ユークリッド互除法
第8話 分数の足し算を求めるアプリ例
実行画面
30/34+90/16=1770/272
を実現するコード例
#include<stdio.h>
#include<stdlib.h>
#include <time.h>
void f(int a,int b); //aとbを交換する社員
int g(int a,int b); //ユークリッド互除法を行う社員
int h(); //乱数を発生させる社員
int main(){
int a[10];
srand(time(NULL)); //シード値を自動的に指定
a[0]=h(); //a
a[1]=h(); //b
a[4]=a[0]; //aのバックアップ
a[5]=a[1]; //bのバックアップ
for(;;){
for(;;){
a[2]=h(); //c
a[3]=h(); //d
if(a[2]*a[3]>0)break;
}
a[6]=a[2]; //cのバックアップ
a[7]=a[3]; //dのバックアップ
if(a[2]<a[3])f(a[2],a[3]);
a[8]=g(a[2],a[3]);
if(a[8]>1)break;
}
printf("%d/%d+%d/%d=",a[4],a[6],a[5],a[7]);
a[9]=(a[6]/a[8])*a[7];
printf("%d/%d\n",a[4]*(a[9]/a[6])+a[5]*(a[9]/a[7]),a[9]);
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));
}
int h(){
return(rand()%100);
}
コピペ用添付ファイル
変数が多くなりましたので、
今回は配列を利用してみました。
配列だと、役割がわかりにくいですから、
注釈文を入れてあります。
注釈文を入れれば、
変数を意味ありげな長い英単語にする必要は全くありませんね。
意味ありげな英単語で変数名を付けていて、初心者を惑わせている
入門書籍や入門サイトの諸先生方に是非とも考えて頂きたいと思います。
確かに、分母は互いに素でなく(最大公約数が1より大きく)、
通分しての足し算は実現できていますが、
30/34+90/16=1770/272
のように、まだ計算が終わっていない例も出来てしまいます。
約分されていませんね。
そこで、約分できる場合には約分も実行するプログラム
22/93+10/69=816/2139=272/713
31/90+80/87=3299/2610
に変更して下さい。
初心者のための excel 2016 マクロ VBA 入門講義 基礎から応用まで
vc++ c言語 c++ 入門 初心者 基礎から応用まで
eclipse c++ 入門
魔方陣 数独で学ぶ VBA 入門
数独のシンプルな解き方・簡単な解法の研究
VB講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 C++ 入門 基礎から応用まで第1部
eclipse java 入門
java 入門 サイト 基礎から応用まで
本サイトトップへ