- ベストアンサー
線形リスト上で方程式の計算をするプログラムの作り方
- 線形リスト上で2個の一次方程式を入力しその和を出力するプログラムの作り方を教えてください。
- 文字ごとに条件分岐を行うことで、入力された方程式の係数や変数を判別し、結果を表示するアルゴリズムを考えることが困難になっています。
- 前の課題を参考にすることで、線形リスト上で方程式の計算をするプログラムを作ることができます。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
出題者の意図は、多項式の項を要素とする線形リストを作り、検索、更新させることにあるのではないでしょうか。その前提で考えてみましたのでヒントになりましたら。 まず、例えばrecordを下記のようにするのでは。 type list = ^kourec; kourec = record keisu : integer; (*係数。負の場合もある*) hensu : char; (*変数*) next : list end; x+y.が入力されたら二つのrecordのリストを作ることを考えます。 [+1x]→[+1y] 上記を更に分解すれば、x の入力に対し一つ目のrecordを作って追加、+y の入力に対し二つ目のrecordを作って追加、ピリオドで作成を終了します。 次に 2y の入力に対しリストを検索し、見つかったrecordの係数を変更します。 [+1x]→[+3y] 次にピリオドで表示します。表示のポイントは下記でしょう。 ・係数が全てゼロだったら 空です などど表示して終わる。 ・係数がゼロだったらそのrecordは表示しない。 ・係数が負であれば-符号を表示する。 ・初めての表示でなければ符号を表示する。 ・係数が1なら省略する。 テストです。下記は空になります。 -z+2y-3x.3x-2y+z. [-1z]→[+2y]→[-3x] に [+3x]、[-2y]、[+1z] を加える ----- 順番が逆になりましたが文字読み取りとrecord作成のヒントです。エラーチェックするなら例えばフラグを使って許す文字を判定すればよいのでは。 ・無限ループ ・recordを係数1に初期化する ・文字を読むループ ・ピリオドなら無限ループ終わり ・符号+なら無視。-なら係数に-1を設定する ・数字なら係数にかける ・英字なら変数に設定し、recordをリストに追加する。文字を読むループ終わり ----- 課題の本質ではないと思いますが仕様を詰める必要があるかもしれません。x+xを許すかとか、y+xのときに表示順をx+yにするかとか。エラーチェックをどこまでやるかとか。
お礼
ありがとうございます、参考になりました。