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

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

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

#1

投稿記事 by 迷子の子猫 » 15年前

「回路において、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回路]でわからないところがあります

#2

投稿記事 by パコネコ » 15年前

printf( %f %f %f\n",t,i,V3);
とりあえず1つ

box

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

#3

投稿記事 by box » 15年前

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

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

パコネコ

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

#4

投稿記事 by パコネコ » 15年前

回路苦手なんでわからないですがLは1.0であってるんですか?

迷子の子猫

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

#5

投稿記事 by 迷子の子猫 » 15年前

すいません。エラーの内容を書きますと、

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を使っています。

fatens

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

#6

投稿記事 by fatens » 15年前

>c 11: 未定義のシンボル i(関数 main )

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

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

パコネコ

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

#7

投稿記事 by パコネコ » 15年前

とりあえずiと(I?l?)間違えてませんか?

パコネコ

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

#8

投稿記事 by パコネコ » 15年前

for文やif文の後の;(セミコロン)いらないんじゃないですか?

シエル

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

#9

投稿記事 by シエル » 15年前

main関数の戻り値の設定がない。
if文elseif文の後ろにセミコロンがあってそこで終了してる。
変数iが宣言されてない。

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

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

迷子の子猫

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

#10

投稿記事 by 迷子の子猫 » 15年前

ソースを下のように変えて見たのですが、エラーがまだでます。何分プログラミングにうとい者です。よろしくお願いします。

#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回路]でわからないところがあります

#11

投稿記事 by パコネコ » 15年前

for ( t=0.0;t<0.25;t=t+dt );
{
このセミコロンはいりません(;)。

パコネコ

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

#12

投稿記事 by パコネコ » 15年前

いらないかもですが
void main(void)
{
のほうがいい気がします・・・

迷子の子猫

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

#13

投稿記事 by 迷子の子猫 » 15年前

void main(void)とfor ( t=0.0;t<0.25;t=t+dt )にしたところ

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

が消えました。

へろりくしょん

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

#14

投稿記事 by へろりくしょん » 15年前

>void main(void)
>{
>のほうがいい気がします・・・

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

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

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

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


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

パコネコ

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

#15

投稿記事 by パコネコ » 15年前

i=i+( V0-R*i-V3 )"dt/L;
"があります。

パコネコ

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

#16

投稿記事 by パコネコ » 15年前

そうですか…すいませんでした。
int main(void)
int main(int argc, char *argv[/url])

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

パコネコ

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

#17

投稿記事 by パコネコ » 15年前

一回書いたけどprintf( %f %f %f/n",t,i,V3);
"が足りていません

迷子の子猫

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

#18

投稿記事 by 迷子の子猫 » 15年前

回答してもらった通りにソースを変えました。エラーの数が減りました。後少しだと思いますので、ご協力お願いします。

#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回路]でわからないところがあります

#19

投稿記事 by へろりくしょん » 15年前

>エラー 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回路]でわからないところがあります

#20

投稿記事 by 迷子の子猫 » 15年前

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回路]でわからないところがあります

#21

投稿記事 by へろりくしょん » 15年前

>警告 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回路]でわからないところがあります

#22

投稿記事 by 迷子の子猫 » 15年前

返信が遅れてすみません。

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; に変えたところ

うまくできました。

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

閉鎖

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