C++ 合成抵抗値のプログラム

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ののき

C++ 合成抵抗値のプログラム

#1

投稿記事 by ののき » 9年前

こんばんは、このプログラムは実行はできるのですが、正しく値が表示しないのです。
どのように修正すれば、正しく値を出力できるのでしょうか。ぜひご指導ください。


値を二つ入力して、400、200とする。成功時は1.33333・・・・としたいのだが、実際の値は0.0075となる。

コード:

/*****************************************************************************
*合成電圧を出力するプログラム 

*
******************************************************************************/
#include <iostream>
#include<math.h>
char line[10000];
double number,count,next1,old,current;
double current2,old2,next2,next3;
int main()
{
	using namespace std;
	
	cout<<"判定する数の個数を入力し、エンターを押してください";
	cin>>number;
	
	
	    for(count=0;count<number;++count){
			cout<<"値を入力してください";
			cin>>current;//電圧を入力。値の表記はRとする
			current2=1/current;//1/R1
			old2=1/old;//1/R2
			next2=1/next1;//1/R
				next2=current2+old2;// 1/R=1/R1+1/R2
				next3=next2*pow(2.0,next1);// 1/R*R^2
	
 



				old=current;
				current=next1;
			
			


		
		}
		cout<<"値は"<<next3<<"です";
		
		
		


		
return(0);
}

box
記事: 1746
登録日時: 9年前

Re: C++ 合成抵抗値のプログラム

#2

投稿記事 by box » 9年前

ののき さんが書きました:

コード:

			old2=1/old;//1/R2
			next2=1/next1;//1/R
oldやnext1にちゃんと値をセットしていない状態で参照するのは、大いにまずいと思います。
最後に編集したユーザー box on 2011年3月07日(月) 00:13 [ 編集 2 回目 ]
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

アバター
bitter_fox
記事: 607
登録日時: 9年前
住所: 大阪府

Re: C++ 合成抵抗値のプログラム

#3

投稿記事 by bitter_fox » 9年前

ののき さんが書きました:こんばんは、このプログラムは実行はできるのですが、正しく値が表示しないのです。
どのように修正すれば、正しく値を出力できるのでしょうか。ぜひご指導ください。


値を二つ入力して、400、200とする。成功時は1.33333・・・・としたいのだが、実際の値は0.0075となる。

コード:

double number,count,next1,old,current;
double current2,old2,next2,next3;

	    for(count=0;count<number;++count){
			cout<<"値を入力してください";
			cin>>current;//電圧を入力。値の表記はRとする
			current2=1/current;//1/R1
			old2=1/old;//1/R2
			next2=1/next1;//1/R
				next2=current2+old2;// 1/R=1/R1+1/R2
				next3=next2*pow(2.0,next1);// 1/R*R^2
 
				old=current;
				current=next1;
		}
グローバル変数old, next1は0で初期化されているので0割が発生してしまっているのですが・・・

ののき

Re: C++ 合成抵抗値のプログラム

#4

投稿記事 by ののき » 9年前

0割はどのように修正すればいいのですか。
情けない話ですが、この処理しか自分には思いつかなかったのです。

アバター
bitter_fox
記事: 607
登録日時: 9年前
住所: 大阪府

Re: C++ 合成抵抗値のプログラム

#5

投稿記事 by bitter_fox » 9年前

ののき さんが書きました:0割はどのように修正すればいいのですか。
情けない話ですが、この処理しか自分には思いつかなかったのです。
0割りは分母が0かどうかを判断するのが一般的でしょう。
ただ、0割りが発生しないようにしても正しい値は出力されませんでした。

合成電圧(抵抗?)の求め方を教えていただけますか?

ののき

Re: C++ 合成抵抗値のプログラム

#6

投稿記事 by ののき » 9年前

n個の抵抗を並列接続した場合の抵抗値は次の式で求められます。
1/R=1/R1+1/R2・・・1/Rn
400Ωと200Ωの二つの抵抗を並列接続した場合を考えてください。二つの抵抗のばあい、抵抗値は次の式で表せます。
1/R=1/R1+1/R2
次の値を代入し、計算すると次のようになります。
1/R=1/400+1/200
R=400/3

この場合の抵抗値は「133.3Ωとなります。

この問題にそって、プログラミングを記述しました。

YuO
記事: 941
登録日時: 9年前
住所: 東京都世田谷区

Re: C++ 合成抵抗値のプログラム

#7

投稿記事 by YuO » 9年前

各変数は何を意味しているのですか。
特に,next3など,なぜpowが出てくるのかがわかりません。
N個の抵抗を平行に並べた時の合成抵抗なら,

コード:

double r[N]; // N個の抵抗値 (適切に設定済み)
double cc = 0.0; // 合成コンダクタンス値
for (int i = 0; i < N; ++i)  {
  cc += 1 / r[i];
}
double cr = 1 / cc; // 合成抵抗値
とするだけだと思いますが。

アバター
bitter_fox
記事: 607
登録日時: 9年前
住所: 大阪府

Re: C++ 合成抵抗値のプログラム

#8

投稿記事 by bitter_fox » 9年前

ののき さんが書きました: 1/R=1/R1+1/R2・・・1/Rn
400Ωと200Ωの二つの抵抗を並列接続した場合を考えてください。二つの抵抗のばあい、抵抗値は次の式で表せます。
1/R=1/R1+1/R2
次の値を代入し、計算すると次のようになります。
1/R=1/400+1/200
R=400/3
ではまず一個の時を考えてみましょう。(R1 = 400)
1/R = 1/400
になりますね。ここからRを求めると
R = 1 / (1/400)となります。

次に二個の時を考えてみましょう。(R1 = 400, R2 = 200)(実際の手順に準ずるためにbufという変数を導入します。)
buf = 0;
buf += 1/400; // 一項目
buf += 1/200; // 二項目
そして
1/R = bufになり
R = 1 / bufとなります。

どうでしょう?ヒントになれば幸いですが。
[hr][追記]
YuOさん>>被ってしまいましたね。すみません。

ののき

Re: C++ 合成抵抗値のプログラム

#9

投稿記事 by ののき » 9年前

手間取っていましたが、修正に成功しました。ご指導ありがとうございます。

bitter_fox様の書かれた通りに

R = 1 / (1/400)の考えを用いて、
next3=1/next2;
としたところ、無事に数値が出力されました。

閉鎖

“C言語何でも質問掲示板” へ戻る