ページ 11

学校の課題[RLC回路]でわからないところがあります

Posted: 2010年7月05日(月) 23:59
by 迷子の子猫
「回路において、V0=10V,R=100Ω,L=1mFとし、t<0においてコンデンサー内に電荷は蓄積されていないもの(Vc=0)とする。t=0でスイッチを電源側に入れると、電流が流れコンデンサーの両端の電位差Vc(t)は、充電の結果上昇する。Vc(t)が7Vになったら、スイッチを切り、別の方に接続しする。今度は放電されてVc(t)が5Vになったら、スイッチを再び電源側に戻して、充電する。以下、これを繰り返す。」という課題が出ました。

自分なりにソースプログラムをつくって見たのですがエラーが出ました。何がおかしいのか教えてください。

#include <stdio.h>
#include <math.h>

main()
{
double L=1.0,C=0.001,R=100.0,dt=0.001;
double V0=10.0,I=0.0,V3=0.0,t=0.0;
printf( "t i V3 \n" );
for ( t=0.0;t<0.25;t=t+dt );
{
V3=V3+( i*dt/C );
i=i+( V0-R*i-V3 )"dt/L;
if( V3 > 7.0 );
V0=0.0;
else if( V3 < 5.0 );
V0=10.0;
printf( %f %f %f\n",t,i,V3);
}
}

Re:学校の課題[RLC回路]でわからないところがあります

Posted: 2010年7月06日(火) 00:02
by パコネコ
printf( %f %f %f\n",t,i,V3);
とりあえず1つ

Re:学校の課題[RLC回路]でわからないところがあります

Posted: 2010年7月06日(火) 00:08
by box
> 自分なりにソースプログラムをつくって見たのですがエラーが出ました。何がおかしいのか教えてください。

何をしたときにどんなエラーが出たか、具体的に書きましょう。
質問が抽象的だと、具体的な答えは返ってきません。

Re:学校の課題[RLC回路]でわからないところがあります

Posted: 2010年7月06日(火) 00:09
by パコネコ
回路苦手なんでわからないですがLは1.0であってるんですか?

Re:学校の課題[RLC回路]でわからないところがあります

Posted: 2010年7月06日(火) 00:26
by 迷子の子猫
すいません。エラーの内容を書きますと、

c 11: 未定義のシンボル i(関数 main )
c 12: ステートメントにセミコロン(;)がない(関数 main )
c 12: 文字列または文字定数が閉じていない(関数 main )
c 15: else の位置が誤っている(関数 main )
15: コードは効果を持たない(関数 main )
c 17: 式の構文エラー(関数 main )
c 17: 文字列または文字定数が閉じていない(関数 main )
19: 関数は値を返すべき(関数 main )
19: 'I' に代入した値は使われていない(関数 main )
19: 'V0' に代入した値は使われていない(関数 main )
19: 'R' に代入した値は使われていない(関数 main )
19: 'C' に代入した値は使われていない(関数 main )
19: 'L' に代入した値は使われていない(関数 main )

と出ます。
コンパイラはBorland C++ Compiler 5.5を使っています。

Re:学校の課題[RLC回路]でわからないところがあります

Posted: 2010年7月06日(火) 00:32
by fatens
>c 11: 未定義のシンボル i(関数 main )

そのままです。
iが定義されていないので、定義してもう一度コンパイルしてみてください。

とりあえず上から順番に解決していきましょう。
画像

Re:学校の課題[RLC回路]でわからないところがあります

Posted: 2010年7月06日(火) 00:33
by パコネコ
とりあえずiと(I?l?)間違えてませんか?

Re:学校の課題[RLC回路]でわからないところがあります

Posted: 2010年7月06日(火) 00:35
by パコネコ
for文やif文の後の;(セミコロン)いらないんじゃないですか?

Re:学校の課題[RLC回路]でわからないところがあります

Posted: 2010年7月06日(火) 00:35
by シエル
main関数の戻り値の設定がない。
if文elseif文の後ろにセミコロンがあってそこで終了してる。
変数iが宣言されてない。

↓はそのままその変数が使われないという意味

19: 'I' に代入した値は使われていない(関数 main )
19: 'V0' に代入した値は使われていない(関数 main )
19: 'R' に代入した値は使われていない(関数 main )
19: 'C' に代入した値は使われていない(関数 main )
19: 'L' に代入した値は使われていない(関数 main )

Re:学校の課題[RLC回路]でわからないところがあります

Posted: 2010年7月06日(火) 00:57
by 迷子の子猫
ソースを下のように変えて見たのですが、エラーがまだでます。何分プログラミングにうとい者です。よろしくお願いします。

#include <stdio.h>
#include <math.h>

main()
{
double L=1.0,C=0.001,R=100.0,dt=0.001;
double V0=10.0,i=0.0,V3=0.0,t=0.0;
printf( "t i V3 \n" );
for ( t=0.0;t<0.25;t=t+dt );
{
V3=V3+( i*dt/C );
i=i+( V0-R*i-V3 )"dt/L;
if( V3 > 7.0 )
V0=0.0;
else if( V3 < 5.0 )
V0=10.0;
printf( %f %f %f/n",t,i,V3);
}
}

エラーは

c 12: ステートメントにセミコロン(;)がない(関数 main )
c 12: 文字列または文字定数が閉じていない(関数 main )
c 15: else の位置が誤っている(関数 main )
c 17: 式の構文エラー(関数 main )
c 17: 文字列または文字定数が閉じていない(関数 main )
19: 関数は値を返すべき(関数 main )
19: 'L' に代入した値は使われていない(関数 main )

とでます。

Re:学校の課題[RLC回路]でわからないところがあります

Posted: 2010年7月06日(火) 01:00
by パコネコ
for ( t=0.0;t<0.25;t=t+dt );
{
このセミコロンはいりません(;)。

Re:学校の課題[RLC回路]でわからないところがあります

Posted: 2010年7月06日(火) 01:02
by パコネコ
いらないかもですが
void main(void)
{
のほうがいい気がします・・・

Re:学校の課題[RLC回路]でわからないところがあります

Posted: 2010年7月06日(火) 01:09
by 迷子の子猫
void main(void)とfor ( t=0.0;t<0.25;t=t+dt )にしたところ

19: 関数は値を返すべき(関数 main )

が消えました。

Re:学校の課題[RLC回路]でわからないところがあります

Posted: 2010年7月06日(火) 01:12
by へろりくしょん
>void main(void)
>{
>のほうがいい気がします・・・

あまり重隅をつつくようなまねはしたくないのですが一応。

最近の規格は知りませんが、ANCI-C では main() 関数は

int main(void)
int main(int argc, char *argv[/url])

の2つのいずれかと決まっています。
それ以外の方法は実装依存になります。


私も掲示板では if(....){} なんて書いたりしますから、アレですけど、あえて void main(void) と書かせるのはどうかと。

Re:学校の課題[RLC回路]でわからないところがあります

Posted: 2010年7月06日(火) 01:12
by パコネコ
i=i+( V0-R*i-V3 )"dt/L;
"があります。

Re:学校の課題[RLC回路]でわからないところがあります

Posted: 2010年7月06日(火) 01:13
by パコネコ
そうですか…すいませんでした。
int main(void)
int main(int argc, char *argv[/url])

どっちかに治しといてください

Re:学校の課題[RLC回路]でわからないところがあります

Posted: 2010年7月06日(火) 01:16
by パコネコ
一回書いたけどprintf( %f %f %f/n",t,i,V3);
"が足りていません

Re:学校の課題[RLC回路]でわからないところがあります

Posted: 2010年7月06日(火) 01:46
by 迷子の子猫
回答してもらった通りにソースを変えました。エラーの数が減りました。後少しだと思いますので、ご協力お願いします。

#include <stdio.h>
#include <math.h>

int main(void)
{
double L=1.0,C=0.001,R=100.0,dt=0.001;
double V0=10.0,i=0.0,V3=0.0,t=0.0;
printf( "t i V3 \n" );
for ( t=0.0;t<0.25;t=t+dt )
{
V3=V3+( i*dt/C );
i=i+( V0-R*i-V3 )dt/L;
if( V3 > 7.0 )
V0=0.0;
else if( V3 < 5.0 )
V0=10.0;
printf(" %f %f %f/n",t,i,V3);
}
}

エラーの内容は下の通りです。

エラー E2379 kadai3-2.c 12: ステートメントにセミコロン(;)がない(関数 main )
警告 W8070 kadai3-2.c 19: 関数は値を返すべき(関数 main )
警告 W8004 kadai3-2.c 19: 'L' に代入した値は使われていない(関数 main )

Re:学校の課題[RLC回路]でわからないところがあります

Posted: 2010年7月06日(火) 01:57
by へろりくしょん
>エラー E2379 kadai3-2.c 12: ステートメントにセミコロン(;)がない(関数 main )
>警告 W8070 kadai3-2.c 19: 関数は値を返すべき(関数 main )
>警告 W8004 kadai3-2.c 19: 'L' に代入した値は使われていない(関数 main )

1番目と3番目は関連しています。

i=i+( V0-R*i-V3 )dt/L;

の行ですね。コンパイラは ...V3)までしか解釈出来ません。 ")" の後dtの前に演算子が必要です。
そのために、あとに続く/L;が読み飛ばされています。

それが1番目と3番目のエラーです。

2番目のエラーは、そのままです。 main() 関数の最後にreturn 0;とでもしてください。
OS環境下ではOSに値を返すというのはとても大切な事です。

Re:学校の課題[RLC回路]でわからないところがあります

Posted: 2010年7月06日(火) 02:13
by 迷子の子猫
return 0; を付けたら2番目のエラーが消えました。

本当に申し訳ないのですが、

i=i+( V0-R*i-V3 )dt/L; を i=i + ( V0-R*i-V3 ) * dt/L; に変えたところ


警告 W8004 kadai3-2.c 7: 't' に代入した値は使われていない(関数 main )
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland

というエラーがでてしまいました。
演算子は何を入れればよろしいですか

Re:学校の課題[RLC回路]でわからないところがあります

Posted: 2010年7月06日(火) 02:24
by へろりくしょん
>警告 W8004 kadai3-2.c 7: 't' に代入した値は使われていない(関数 main )
>Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland

>というエラーがでてしまいました。


BCCってホントおしゃべりですよね。

double V0=10.0,i=0.0,V3=0.0,t=0.0;

と、宣言時に0.0を代入してますね。そして

for ( t=0.0;t<0.25;t=t+dt )

と、宣言時に代入された0.0が使われる事なく、for()文内でまた0.0を代入しています。 これが原因です。

このエラーというか警告は無視してもいいんですが、とりあえず宣言時に初期化しないことで回避出来ます。
もしくは、for(;t<0.25;t=t+dt) とするかです。


>演算子は何を入れればよろしいですか

回路の事はさっっっっぱり解りませんので解りません。

Re:学校の課題[RLC回路]でわからないところがあります

Posted: 2010年7月08日(木) 10:15
by 迷子の子猫
返信が遅れてすみません。

for ( t=0.0;t<0.25;t=t+dt ) を for(;t<0.25;t=t+dt) に変え、
i=i+( V0-R*i-V3 )dt/L; も i=i + ( V0-R*i-V3 ) * dt/L; に変えたところ

うまくできました。

回答してくださった皆さんありがとうございます。