第6話 問題点と、式の切り離しと、将来

 加減剰余算ができる計算魔法を作りたいな。

 まず最初の問題は。


 『1+2×3』という計算があったとする。

 端から計算したのでは答えが違う。

 掛け算を最初に計算しなければいけない。


 次の難問は。

 『2×-4』という式。

 みて分かると思うけど、『×-』と記号が連続して続いている。


 『マイナス』が引き算なのか数値に掛かるのか考えないといけない。

 この二つが難問。


 プログラムを考えるうえで注意点は、いっぺんに物事をしないこと。


 二つの難問を同時に考えるとややこしくなる。

 その前に数式を切り分けるところから始めるべきね。


 『char str[1024];』という定義があって、これに数式が入っているとする。

 例えば『1+2+3-4*5+6/7』みたいなのがね。


 これを記号と数字に切り離すプログラムはこうかな。

 char str[2048];

 int i,j,item[100]; /*カウンターと項目*/


 scanf("%s",str); /*式を入力*/


 for(j=0;j<100;j++){

  item[j]=0; /*項目の初期化*/

 }

 j=0; /*カウンターの初期化*/

 i=0; /*カウンターの初期化*/

 while(i<strlen(str)){ /*式の終わりまでループ*/

  if(str[i]>='0' && str[i]<='9'){ /*数字かどうか判別*/

   while(str[i]>='0' && str[i]<='9') /*数字の間だけループ*/

    item[j]=item[j]*10+str[i]-'0'; /*桁を一つ繰り上げ、数字を一桁付け加える*/

    if(item[j]>=999999990) return(-1); /*エラー終了*/

    i++;

   }

   j++;

  }

  else{

   switch(str[i]){

    case'+': /*+の処理*/

    item[j]=999999991;

    j++;

    i++;

    break;


    case'-': /*-の処理*/

    item[j]=999999992;

    j++;

    i++;

    break;


    case'*': /*×の処理*/

    item[j]=999999993;

    j++;

    i++;

    break;


    case'/': /*÷の処理*/

    item[j]=999999994;

    j++;

    i++;

    break;


    default: /*ここはエラー*/

    return(-1); /*エラー終了*/

    break;

   }

  }

 }


 切り離しのプログラムはこんな所で良いと思う。


「ニーナ、石碑の所にいないから心配したよ」


 お客さんを待つ間にプログラムしてたけど、熱中し過ぎて時間の経つのを忘れていたみたい。

 ビュートが呼びに来た。


「お母さん、休憩に行って来る」

「はいよ」


 私が声を奥に掛けると返事があった。

 ビュートと連れだって石碑の所に行く。


「ほらよ」


 石碑に着くと、ビュートは真っ赤に熟れた野菜のトップルを投げてきた。

 それを慌てて受け取る。


 もう乱暴ね。

 何でも投げるんだから。

 お父さんも床に邪魔な物があると足でどかしたりする。


 男の子らしいといえばそうだけど、行儀よくしてほしいなと思わないでもない。

 ハンカチでトップルを磨いてかぶりつく。

 甘酸っぱい味が口の中に広がった。

 とても美味しい。


 前世より良いこともある野菜が美味しいのはそのひとつ。

 頭を使って疲れた感覚が甘味で解きほぐされていく。


「ねぇ、ビュートは将来どうしたい?」

「将来かぁ。石碑の謎を解き明かすには、冒険者になりたいな」

「私は雑貨屋を継ぐつもりだけど」

「石碑の謎が分かって、冒険者を引退したら、一緒に雑貨屋をやろう」

「それもいいかもね」


 雑貨屋はともかくビュートの将来は厳しい。

 ビュートは三男だから、家には残れない。

 職人か店に奉公に行くしかないんだけど、勉強もしてないし、特技もない。

 冒険者になるしかないけれど。

 ゴブリンの魔石は銅貨10枚。

 一日の宿代と食費を出すには30匹は倒さないといけない。


 これが熟練じゃなくて駆け出しの最初の頃よ。

 無理をして死んでいく冒険者のなんて多いこと。

 私も話に聞いているだけだけど。

 農家であぶれた男の子の半数は1年で死ぬ。


 悲しい現実だけど仕方ない。


「俺、畑の合間にゴブリン退治を頑張ろうかと思うんだ」

「子供じゃきついわよ」

「もう12歳だ。職人なら見習いになってバリバリ稼いでる」


 ビュートに死んで欲しくない。

 ゴブリン退治ができる魔道具を作りましょうか。

 でも魔女認定されたらどうしようという考えも頭を巡る。

 なるべく攻撃でない攻撃魔道具。


「分かった。何か魔道具で武器を作ってみる」

「頼む。凄いのを作って」


 何か作れるかなぁ。

 考えないと。

  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る