第10講 for文以外の繰り返し(ループ)処理
第5話 do...while文による和

q
をdo...while文でのプログラミング例
#include<iostream>
using namespace std;
int f1(int h,int j,int k);
int f2(int h,int j,int k);
int f3(int h,int j,int k);
long f4(int h,int j,int k);
void main(){
   int h,j,k,i,w; //hははじめの値(初項)、jは合計の上限値、kは変化の幅(公差)
   cout<<"はじめの値は?"<<endl;
   scanf("%d",&h);
   cout<<"合計の上限値は?"<<endl;
   scanf("%d",&j);
   cout<<"変化の幅?"<<endl;
   scanf("%d",&k);
   if(f1(h,j,k)>0){
     cout<<"1乗の和="<<f1(h,j,k)<<endl;
   }
   else{
     cout<<"初項の段階で上限値を越えています。"<<endl;
   }
   if(f2(h,j,k)>0){
     cout<<"2乗の和="<<f2(h,j,k)<<endl;
   }
   else{
     cout<<"初項の段階で上限値を越えています。"<<endl;
   }
   if(f3(h,j,k)>0){
     cout<<"3乗の和="<<f3(h,j,k)<<endl;
   }
   else{
     cout<<"初項の段階で上限値を越えています。"<<endl;
   }
   if(f4(h,j,k)>0){
     cout<<"4乗の和="<<f4(h,j,k)<<endl;
   }
   else{
     cout<<"初項の段階で上限値を越えています。"<<endl;
   }
}

int f1(int h,int j,int k){
   int i,w;
   i=h;
   w=0;
   do{
     w=w+i;
     if(w>j){
        w=w-i;
        break;
     }
     i=i+k;
   }while(w<=j);
   w=w-(i-k);
   return(w);
}

int f2(int h,int j,int k){
   int i,w;
   i=h;
   w=0;
   do{
     w=w+i*i;
     if(w>j){
        w=w-i*i;
        break;
     }
     i=i+k;
   }while(w<=j);
   w=w-(i-k)*(i-k);
   return(w);
}

int f3(int h,int j,int k){
   int i,w;
   i=h;
   w=0;
   do{
     w=w+i*i;
     if(w>j){
        w=w-i*i*i;
        break;
     }
     i=i+k;
   }while(w<=j);
   w=w-(i-k)*(i-k)*(i-k);
   return(w);
}

long f4(int h,int j,int k){
   int i;
   long w;
   i=h;
   w=0;
   do{
     w=w+i*i;
     if(w>j){
        w=w-i*i*i*i;
        break;
     }
     i=i+k;
   }while(w<=j);
   w=w-(i-k)*(i-k)*(i-k)*(i-k);
   return(w);
}

すでに触れていますが、
2,5,8,11
を等差数列といい、
最初の項2を初項、最後の項11を末項といいます。
そして、項の差を公差といいます。
ですから、
2+5+8+11
を初項2,末項11、公差3の等差数列の和といいます。
2の2乗+5の2乗+8の2乗+11の2乗
も考えますので、
2+5+8+11
の場合を初項2,末項11、公差3の等差数列の1乗の和と呼び、
2の2乗+5の2乗+8の2乗+11の2乗
の場合をを初項2,末項11、公差3の等差数列の2乗の和等と呼ぶことにします。
今話の課題が、上限値を超えない和でしたが、
末項が指定された値以下の最大値の場合の和について考えましょう。
初項が2、指定された値が10、公差が3の場合でいえば、
等差数列は2,5,8,11,14,・・・ですから、
末項が指定された値以下の最大値は、8ということになり
1乗の和なら
2+5+8=15
2乗の和なら
2の2乗+5の2乗+8の2乗
=4+25+64=93
3乗の和なら
2の3乗+5の3乗+8の3乗
=8+125+512=701
2乗の和なら
2の4乗+5の4乗+8の4乗
=16+625+4096=93
です。
末項が指定された値以下の最大値の場合の和
cx
を実現するプログラムを考えましょう。

第4話へ 第6話へ


a

魔方陣 数独で学ぶ VBA 入門
数独のシンプルな解き方・簡単な解法の研究
VB講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 C++ 入門 基礎から応用まで第1部
eclipse java 入門
java 入門 サイト 基礎から応用まで
VC++ C言語 C++ 入門 初心者 基礎から応用まで
本サイトトップへ