第10講 for文以外の繰り返し(ループ)処理
第2話 第1話問題解答例

第1話問題解答例

#include<iostream>
using namespace std;
int f();
void main(){
   cout<<"1から100までの和="<<f()<<endl;
}
int f(){
   int i,w;
   i=1;
   w=0;
   while(i<=100){
     w=w+i;
     i++;
   }
   return(w);
}
実行画面
q


#include<iostream>
using namespace std;
int f();
void main(){
   cout<<"2+4+6+・・・+100="<<f()<<endl;
}
int f(){
   int i,w;
   i=2;
   w=0;
   while(i<=100){
     w=w+i;
     i=i+2;
   }
   return(w);
}

実行画面
w


#include<iostream>
using namespace std;
int f();
void main(){
   cout<<"2+5+8+・・・+98="<<f()<<endl;
}
int f(){
   int i,w;
   i=2;
   w=0;
   while(i<=100){
     w=w+i;
     i=i+3;
   }
   return(w);
}
別解1
#include<iostream>
using namespace std;
int f();
void main(){
   cout<<"2+5+8+・・・+98="<<f()<<endl;
}
int f(){
   int i,w;
   i=2;
   w=0;
   while(1){
     w=w+i;
     i=i+3;
     if(i>100)break;
   }
   return(w);
}
別解2
#include<iostream>
using namespace std;
int f();
void main(){
   cout<<"2+5+8+・・・+98="<<f()<<endl;
}
int f(){
   int i,w,a;
   i=2;
   w=0;
   a=1;
   while(a){
     w=w+i;
     i=i+3;
     if(i>100)a=0;
   }
   return(w);
}
実行画面
a

一般にプログラム言語では、条件式(上例では、i<=100)は条件式自体が0または1の値をもっています。
条件式が偽すなわち間違っている場合、条件式は0の値を
条件式が真すなわち正しい場合、条件式は1の値をもちます。
例えば、i=200のときは、i<=100は200<=100で間違っているので0の値を
i=2のときはi<=100は2<=100で正しいので1の値をもちます。
この点に注意すると③の解答例は次のように変更することもできます。
#include<iostream>
using namespace std;
int f();
void main(){
   cout<<"2+5+8+・・・+98="<<f()<<endl;
}
int f(){
   int i,w;
   i=2;
   w=0;
   while(1){
     w=w+i;
     i=i+3;
     if(i>100)break;
   }
   return(w);
}
breakは、強制的にループ処理を抜けるときに使う命令です。
これは、for文でも使えます。
while文で気をつけなければならないことは、永久ループにならないよう注意することです。
たとえば、今のコーティングでうっかりif(i>100)break;を忘れてしまうと
#include<iostream>
using namespace std;
int f();
void main(){
   cout<<"2+5+8+・・・+98="<<f()<<endl;
}
int f(){
   int i,w;
   i=2;
   w=0;
   while(1){
     w=w+i;
     i=i+3;
   }
   return(w);
}
永久ループになってしまいます。while(1)ですから永久に続けてしまうわけです。
ループを抜け出す条件を忘れると、永久ループになってしまいます。
また、ループを抜け出す条件が不適切な場合にも永久ループなってしまう場合があります。
実行して10秒も20秒も結果がでなければ永久ループになっている可能性を疑わなければなりません。
今作っているソフトは、ほとんどが0.001秒もかからず結果の出るものばかりだからです。
これを超えたのは、円周率πの計算ぐらいでしょう。
永久ループになると、コンピュータは無限に計算を続けます。
つまり、ソフトは永久に稼働してしまいます。
このような状態になったときは、強制的にソフトを閉じてください。
強制的にソフトを終了させる方法は、
z
画面の一番下の矢印のあたりを右クリックしてください。
すると、サブメニュー初心者が開きます。
それのタスクマネージャの起動をクリックします。
q
(windows7 かつ 物理CPU4つ論理CPU4つ の場合)
s
(windows8 かつ 物理CPU4つ論理CPU8つ の場合)
パフォーマンスタブをクリックして
CPU使用率が画面のように15%を超えていれば、
永久ループになっている可能性が濃厚です。
15%を指標にするのは、
コンピュータがCPUを4つ積んでいて論理CPUが8つの場合です。
(論理CPUとは見かけのCPUです。
物理的にはCPUが4つしかなかったとしても、
ひとつのCPUを時間で2分割して、別の仕事をさせれば、
あたかもCPUが8つあるように見えます。
見かけを2倍にしても意味がなさそうに思えますが、
現実には、物理CPU8つに近い状態を実現できるのです。)
少なくともCPUひとつ分がフル稼働に近いということは、
コンピュータが永久ループの計算を
永遠と計算している可能性を示しています。
アイドリング状態では、CPU使用率は高々数%です。
永久ループに陥ってしまった場合は、
タスクマネージャーのアプリケーションタブをクリックします。
下の方にするロールするとCPUを多く消費している
hkv
プログラムが明らかになります。
(図の『while文による和』今回のプロジェクト名です。)
CPUを多く消費しているプログラム(ソフト)を選び、
右下のnをクリックします。
すると、プログラムの終了がでてきますので、
すぐに終了をクリックしてください。
永久ループになったソフトを終了することができます。
ループを抜け出す条件は、
忘れたり不適切であることが結構ありますので慎重にしなければなりません。

さて、先のタイピングは次のようにすることも可能です。
#include<iostream>
using namespace std;
int f();
void main(){
   cout<<"2+5+8+・・・+98="<<f()<<endl;
}
int f(){
   int i,w,a;
   i=2;
   w=0;
   a=1;
   while(p){
     w=w+i;
     i=i+3;
     if(i>100)a=0;
   }
   return(w);
}
if(i>100)f=0;がループを抜け出す条件です。
while文は条件式の値が1の間だけ繰り返しますので、
0なれば終了するわけです。


今回作ったソフトだといちいちプログラムソースを
いじらなければなりません。
そこで、プログラムソースをいちいちいじらなくてもコンソール上から
条件を入力できるように改造しましょう。
はじめの値、終わりの値、変化の幅を
コンソール上から入力して、
1乗の和、2乗の和、3乗の和、4乗の和を計算できるように変更しましょう。
n
2乗の和とは、
bv
vc等を表すことにします。



第1話へ 第3話へ


a

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