第11講 ユークリッド互除法

第9話 分数の足し算を求め約分できる場合には約分するアプリ例


実行画面
22/93+10/69=816/2139=272/713
31/90+80/87=3299/2610

を実現するコード例
#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[14];
  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];
  a[10]=a[4]*(a[9]/a[6])+a[5]*(a[9]/a[7]);
  printf("%d/%d",a[10],a[9]);
  a[11]=a[9];
  a[12]=a[10];
  if(a[11]>a[12])f(a[11],a[12]);
  a[13]=g(a[11],a[12]);
  if(a[13]>1){
    printf("=%d/%d\n",a[10]/a[13],a[9]/a[13]);
  }
  else{
    printf("\n");
  }
  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);
}
コピペ用添付ファイル

ユークリッド互除法は、結構面白いテーマだと思いませんか。
まだまだ、いろいろなマクロが組めそうですが、
それは、皆さんにお任せして、
第12講のFor文以外の繰り返し処理に進みたいと思います。




第8話へ 第12講第1話へ

a


初心者のための excel 2016 マクロ VBA 入門講義 基礎から応用まで
vc++ c言語 c++ 入門 初心者 基礎から応用まで
eclipse c++ 入門
魔方陣 数独で学ぶ VBA 入門

数独のシンプルな解き方・簡単な解法の研究
VB講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座

初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 C++ 入門 基礎から応用まで第1部
eclipse java 入門
java 入門 サイト 基礎から応用まで
本サイトトップへ