質問: v then found := true else p := p^.next; procedure print( p : list ); begin if p<> nil then begin writeln( p^.moji,p^.kaisu ); print( p^.next ) end end;
回答: 出題者の意図は、多項式の項を要素とする線形リストを作り、検索、更新させることにあるのではないでしょうか。その前提で考えてみましたのでヒントになりましたら。 まず、例えば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にするかとか。エラーチェックをどこまでやるかとか。