学校の課題[RLC回路]でわからないところがあります
学校の課題[RLC回路]でわからないところがあります
「回路において、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);
}
}
自分なりにソースプログラムをつくって見たのですがエラーが出ました。何がおかしいのか教えてください。
#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回路]でわからないところがあります
> 自分なりにソースプログラムをつくって見たのですがエラーが出ました。何がおかしいのか教えてください。
何をしたときにどんなエラーが出たか、具体的に書きましょう。
質問が抽象的だと、具体的な答えは返ってきません。
何をしたときにどんなエラーが出たか、具体的に書きましょう。
質問が抽象的だと、具体的な答えは返ってきません。
Re:学校の課題[RLC回路]でわからないところがあります
すいません。エラーの内容を書きますと、
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を使っています。
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回路]でわからないところがあります
>c 11: 未定義のシンボル i(関数 main )
そのままです。
iが定義されていないので、定義してもう一度コンパイルしてみてください。
とりあえず上から順番に解決していきましょう。

そのままです。
iが定義されていないので、定義してもう一度コンパイルしてみてください。
とりあえず上から順番に解決していきましょう。

Re:学校の課題[RLC回路]でわからないところがあります
main関数の戻り値の設定がない。
if文elseif文の後ろにセミコロンがあってそこで終了してる。
変数iが宣言されてない。
↓はそのままその変数が使われないという意味
19: 'I' に代入した値は使われていない(関数 main )
19: 'V0' に代入した値は使われていない(関数 main )
19: 'R' に代入した値は使われていない(関数 main )
19: 'C' に代入した値は使われていない(関数 main )
19: 'L' に代入した値は使われていない(関数 main )
if文elseif文の後ろにセミコロンがあってそこで終了してる。
変数iが宣言されてない。
↓はそのままその変数が使われないという意味
19: 'I' に代入した値は使われていない(関数 main )
19: 'V0' に代入した値は使われていない(関数 main )
19: 'R' に代入した値は使われていない(関数 main )
19: 'C' に代入した値は使われていない(関数 main )
19: 'L' に代入した値は使われていない(関数 main )
Re:学校の課題[RLC回路]でわからないところがあります
ソースを下のように変えて見たのですが、エラーがまだでます。何分プログラミングにうとい者です。よろしくお願いします。
#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 )
とでます。
#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回路]でわからないところがあります
void main(void)とfor ( t=0.0;t<0.25;t=t+dt )にしたところ
19: 関数は値を返すべき(関数 main )
が消えました。
19: 関数は値を返すべき(関数 main )
が消えました。
Re:学校の課題[RLC回路]でわからないところがあります
>void main(void)
>{
>のほうがいい気がします・・・
あまり重隅をつつくようなまねはしたくないのですが一応。
最近の規格は知りませんが、ANCI-C では main() 関数は
int main(void)
int main(int argc, char *argv[/url])
の2つのいずれかと決まっています。
それ以外の方法は実装依存になります。
私も掲示板では if(....){} なんて書いたりしますから、アレですけど、あえて void main(void) と書かせるのはどうかと。
>{
>のほうがいい気がします・・・
あまり重隅をつつくようなまねはしたくないのですが一応。
最近の規格は知りませんが、ANCI-C では main() 関数は
int main(void)
int main(int argc, char *argv[/url])
の2つのいずれかと決まっています。
それ以外の方法は実装依存になります。
私も掲示板では if(....){} なんて書いたりしますから、アレですけど、あえて void main(void) と書かせるのはどうかと。
Re:学校の課題[RLC回路]でわからないところがあります
そうですか…すいませんでした。
int main(void)
int main(int argc, char *argv[/url])
どっちかに治しといてください
int main(void)
int main(int argc, char *argv[/url])
どっちかに治しといてください
Re:学校の課題[RLC回路]でわからないところがあります
回答してもらった通りにソースを変えました。エラーの数が減りました。後少しだと思いますので、ご協力お願いします。
#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 )
#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回路]でわからないところがあります
>エラー 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に値を返すというのはとても大切な事です。
>警告 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回路]でわからないところがあります
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
というエラーがでてしまいました。
演算子は何を入れればよろしいですか
本当に申し訳ないのですが、
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回路]でわからないところがあります
>警告 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) とするかです。
>演算子は何を入れればよろしいですか
回路の事はさっっっっぱり解りませんので解りません。
>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回路]でわからないところがあります
返信が遅れてすみません。
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; に変えたところ
うまくできました。
回答してくださった皆さんありがとうございます。
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; に変えたところ
うまくできました。
回答してくださった皆さんありがとうございます。