第290話 電卓魔法と、足し算と、仲人

 結局、リッツの班も優勝は出来なかった。


「タイト、石取りゲームで思いついたけど、計算するのにボタンでやれたら便利だろうな」


 ベークがまた難しそうなことを言って来た。

 四則演算というのは簡単なようで奥が深い。

 というのもマイナスの使い方だ。


 『1+1』こんなのは別に良い。

 『1×1』これもいい。

 問題は『1×-1』。

 なんだと思うだろ。

 『×-』と記号が続けて現れるのだ。

 数字と記号が交互ならプログラム的には物凄く簡単だ。


 しかも足し算より掛け算と割り算を優先するなんてのが入った時には、物凄く頭が痛い問題になる。

 電卓は難しい。


「どんな交換条件でも駄目だ。前に【数の応えを魔法に求め、何も渡されず。疾く魔法開始せよ。帰還せよ、○○の答えを持って。われ魔法終了せし】ってのがあっただろあれで我慢しとけ」

「だってあれじゃ魔道具化出来ない。数式が変わると呪文も変わるのだから」


 仕方ない前に作った奴を引っ張り出すか。


#include <stdio.h>

#include <stdlib.h>


int main(int argc,char *argv[])


{

 int i,sum=0; /*カウンターと合計*/


 if(argc<=1) return(0); /*足し算なし*/


 for(i=1;i<argc;i++){ /*入力された数だけループする*/

  sum=sum+atoi(argv[i]); /*入力された数値を足す*/

 }

 return(sum); /*答えを返す*/

}


 俺はベークにそれを見せてやった。


「ええと【われは内包する、標準入出力規則。われは内包する、標準書庫規則。魔法の応えは数、贄として囁き数と、囁き群を渡す。疾く魔法開始せよ。カタカナのにとトナモは数でトモナは0。もし囁き数が1より小さければ、0を持って帰還せよ。カタカナのには1から始まり、囁き数だけ繰り返す、ニは1ずつ増加。繰り返し始め。トナモは、トモナ足す数変換、渡すのは囁き群のカタカナのに番目。繰り返し終わり。トモナを持って帰還せよ。われ魔法終了せし】となるのか」


「どうだ実行してみろよ」

「うん。【計算】。足し算だけだけど、便利だね」

「この魔法には裏技があってな。数の頭にマイナスを付けると引き算も出来る」

「【計算】。本当だ。この魔道具作って良いかな? バージョンアップもしてくれると嬉しいけど」

「支払いによっては考えてやる」


「ラチェッタとする結婚式の仲人の権利だ」

「そんなもの要らん。馬鹿にしているのか」

「うーん、良いと思ったんだけどな。マイラさんは気に入ってくれたけど」


 マイラに話したのか。

 くそう、弱点を見抜かれてる。

 仲人と言ったら正妻を連れて行くよな。

 マイラなら連れて行ってもらえたら喜ぶ。


「4人一緒だ。5人で仲人をやる」

「別に良いけど。スピーチはどうするの」

「俺が代表でやる。または全員だ」

「仕方ないな」


 なんで俺が無理を言っているかのようになっているんだ。

 はっきりしておかないと。


「お願いじゃないぞ。命令だ。それと仲人には一生頭が上がらないんだからな」

「ええっ、辞めようかな」

「そんな事を言うとラチェッタに嫌われるぞ」


「何です?」

「ラチェッタ関係ないんだ。いや、あのね。タイトに仲人を頼もうかと思って」

「少し、気が早い気もしますが、嬉しいですわ」

「みろ、ラチェッタは俺を尊敬している」

「くっ、仕方ない」

「元はと言えばお前が言い出したんだからな」


「何々?」

「秘密の相談ですか」

「聞こえてたわ。仲人の件よね」

「気が早いですね」


 マイラ達も寄って来た。


「ベークとラチェッタの仲人をする事になったから。ただし、結婚までにベークが愛想を尽かされなきゃな。言っておくが5人でだぞ」


 マイラ達が騒ぎ始めた。

 仲人する時に着ていく服装の話などをしている。


「同志、払った犠牲は大きかったけど、良い物を手に入れましたな」

「まあね。億万長者になれるかも知れない」

「では早速、ソ・ミカカ語に翻訳してみましょうか」


 【あニミソリナシイ・ねトカシニラルクる・あニミソリナシイ・ねトカシリニコルクる・ニミカ・モチニミゆニミカ・チスキソネソクチス・けチスキヒガムよ・が・ニミカ・ニネトナモほワレ・ニハゆチスキソねほヌよ・スイカナスミゆワよレ・ハラスゆニほヌレニねチスキソレニれれよが・トナモほトナモれチカラニゆチスキヒガニムよレ・む・スイカナスミゆトナモよレ・む】と書いてある。


 いつ見ても、ソ・ミカカ語は分からない。

 足し算の魔道具とお札は売れに売れた。

 しばらく、ベークとリッツのホクホク顔が止まらなかったぐらいだ。

 気持ち悪いったらなかった。

 計算に困っている人は多いのだな。


 それで電卓魔法に着手したが、途中で辞めた。

 せっかく作ったのだから、記しておこう。

――――――――――――――――――――――――

 未完成の電卓魔法です。

 プログラムの最中で嫌になったとも言う。


 長くなり過ぎたので文末に載せておきます。

 表示とか色々な改良点がありますが、作者はへっぼこプログラマーなので完成版を作る気力がわきません。

 別に読まなくても支障はないです。


 時たま、この作品をプログラム8割の、1話1万字ぐらいでやったらと考える時があります。

 たぶん読まれないんだろうなとは思いますが、アドスコア的な効率は良さそうです。


#include <stdio.h>

#include <stdlib.h>



extern MAGIC *obj_make(long obj_size_mm,int image,int attri);

extern int touch(MAGIC *mp);

extern int mclose(MAGIC *mp);


MAGIC *mp[10],*mpadd,*mpsub,*mpmul,*mpdiv,*mpequ; /*魔法の定義*/

int sum,value,step; /*合計、対象の数、ステップ*/


void value_inpit(void)

{

 int i; /*カウンタ*/

 for(i=0;i<10;i++){

  if(touch(mp[i])==1){ /*数字に触った*/

   value=value*10+i; /*桁が進む*/

  }

 }

}

void close_button(void) /*ボタンを閉じる*/

{

 for(i=0;i<10;i++){

  mclose(mp[i]);

 }

 mclose(mpadd);

 mclose(mpsub);

 mclose(mpmul);

 mclose(mpdiv);

 mclose(mpequ);

}


int main(void)

{

 int image_button[10]={IMAGEBUTTON0,IMAGEBUTTON1,IMAGEBUTTON2,IMAGEBUTTON3,IMAGEBUTTON4,IMAGEBUTTON5,IMAGEBUTTON6,IMAGEBUTTON7,IMAGEBUTTON8,IMAGEBUTTON9}; /*ボタンイメージ*/

 int i; /*カウンタ*/


 for(i=0;i<10;i++){

  mp[i]=obj_make(10,IMAGEBUTTON[i],HOLOGRAPHY); /*0から9までの番号が書かれたボタンをホログラフィで生成*/

 }


 mpadd=obj_make(10,IMAGEBUTTONADD,HOLOGRAPHY); /*+と書かれたボタンをホログラフィで生成*/

 mpsub=obj_make(10,IMAGEBUTTONSUB,HOLOGRAPHY); /*-と書かれたボタンをホログラフィで生成*/

 mpmul=obj_make(10,IMAGEBUTTONMUL,HOLOGRAPHY); /*×と書かれたボタンをホログラフィで生成*/

 mpdiv=obj_make(10,IMAGEBUTTONDIV,HOLOGRAPHY); /*÷と書かれたボタンをホログラフィで生成*/

 mpequ=obj_make(10,IMAGEBUTTONEQU,HOLOGRAPHY); /*=と書かれたボタンをホログラフィで生成*/


 sum=0; /*合計0*/

 value=0; /*数値0*/

 step=0; /*処理ステップ0*/


 while(1){

  switch(step){

   case 0: /*最初*/

    if(touch(mpsub)==1){ step=2; break; } /*マイナスから始まる*/

    value_inpit(); /*1桁入力*/

    if(value!=0){ step=1; break; } /*プラスから始まる*/

   break;


   case 1: /*足す*/

    value_inpit(); /*1桁入力*/

    if(touch(mpadd)==1){ step=1; sum=sum+value; value=0; break; }

    if(touch(mpsub)==1){ step=2; sum=sum+value; value=0; break; }

    if(touch(mpmul)==1){ step=3; sum=sum+value; value=0; break; }

    if(touch(mpdiv)==1){ step=6; sum=sum+value; value=0; break; }

    if(touch(mpequ)==1){ sum=sum+value; close_button(); retuen(sum); } /*イコール処理*/

   break;

   case 2: /*引く*/

    value_inpit(); /*1桁入力*/

    if(touch(mpadd)==1){ step=1; sum=sum-value; value=0; break; }

    if(touch(mpsub)==1){ step=2; sum=sum-value; value=0; break; }

    if(touch(mpmul)==1){ step=3; sum=sum-value; value=0; break; }

    if(touch(mpdiv)==1){ step=6; sum=sum-value; value=0; break; }

    if(touch(mpequ)==1){ sum=sum-value; close_button(); retuen(sum); } /*イコール処理*/

   break;


   case 3: /*掛ける*/

    if(touch(mpsub)==1){ step=4; break; } /*マイナスを掛ける*/

    value_inpit(); /*1桁入力*/

    if(value!=0){ step=5; break; } /*プラスを掛ける*/

   break;

   case 4: /*掛けるマイナス*/

    value_inpit(); /*1桁入力*/

    if(touch(mpadd)==1){ step=1; sum=sum*value*-1; value=0; break; }

    if(touch(mpsub)==1){ step=2; sum=sum*value*-1; value=0; break; }

    if(touch(mpmul)==1){ step=3; sum=sum*value*-1; value=0; break; }

    if(touch(mpdiv)==1){ step=4; sum=sum*value*-1; value=0; break; }

    if(touch(mpequ)==1){ sum=sum*value*-1; close_button(); retuen(sum); } /*イコール処理*/

   break;


   case 5: /*掛けるプラス*/

    value_inpit(); /*1桁入力*/

    if(touch(mpadd)==1){ step=1; sum=sum*value; value=0; break; }

    if(touch(mpsub)==1){ step=2; sum=sum*value; value=0; break; }

    if(touch(mpmul)==1){ step=3; sum=sum*value; value=0; break; }

    if(touch(mpdiv)==1){ step=4; sum=sum*value; value=0; break; }

    if(touch(mpequ)==1){ sum=sum*value; close_button(); retuen(sum); } /*イコール処理*/

   break;


   case 6: /*割る*/

    if(touch(mpsub)==1){ step=7; break; }

    value_inpit(); /*1桁入力*/

    if(value!=0){ step=8; break; }

   break;

   case 7: /*割るマイナス*/

    value_inpit(); /*1桁入力*/

    if(touch(mpadd)==1){ step=1; sum=sum/value*-1; value=0; break; }

    if(touch(mpsub)==1){ step=2; sum=sum/value*-1; value=0; break; }

    if(touch(mpmul)==1){ step=3; sum=sum/value*-1; value=0; break; }

    if(touch(mpdiv)==1){ step=4; sum=sum/value*-1; value=0; break; }

    if(touch(mpequ)==1){ sum=sum/value*-1; close_button(); retuen(sum); } /*イコール処理*/

   break;


   case 8: /*割るプラス*/

    value_inpit(); /*1桁入力*/

    if(touch(mpadd)==1){ step=1; sum=sum/value; value=0; break; }

    if(touch(mpsub)==1){ step=2; sum=sum/value; value=0; break; }

    if(touch(mpmul)==1){ step=3; sum=sum/value; value=0; break; }

    if(touch(mpdiv)==1){ step=4; sum=sum/value; value=0; break; }

    if(touch(mpequ)==1){ sum=sum/value; close_button(); retuen(sum); } /*イコール処理*/

   break;

  }

 }

 close_button(); /*ボタン閉じる*/

 retuen(sum); /*終わり*/

}

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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

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

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

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