第84話 電卓と、加減算と、未完成品
魔王タイトの魔法手引書には役に立つ魔法が沢山ある。
俺はその中から、電卓魔法を見つけた。
まずは簡単な足し算のみの奴。
#include <stdio.h>
#include <stdlib.h>
extern int tax_collection(int money);
int main(int argc,char *argv[])
{
int i,sum=0; /*合計*/
if(argc<=1) return(0); /*足し算なし*/
if(tax_collection(1)==1){ /*税金徴収、銅貨1枚 金が無ければ、何も起こらない*/
for(i=1;i<argc;i++){ /*入力された数だけループする*/
sum=sum+atoi(argv[i]); /*入力された数値を足す*/
}
}
return(sum); /*答えを返す*/
}
足し算のみのアプリだ。
銅貨一枚は高すぎるので少し改良が必要か。
20回で銅貨1枚が妥当かな。
20回のループを増やすのと、入力関係をなんとかすれば良い。
簡単な事だ。
#include <stdio.h>
#include <stdlib.h>
extern int tax_collection(int money);
void main(void)
{
int i,j,sum; /*カウンタ2つと、合計*/
if(tax_collection(1)==1){ /*税金徴収、銅貨1枚 金が無ければ、何も起こらない*/
for(i=1;i<20;i++){ /*20回ループ*/
sum=0;
while(1){
scanf("%d",&j); /*数入力*/
if(j==9999) break; /*9999がイコールの代わり*/
sum=sum+j; /*数を足す*/
}
printf("%d\n",sum); /*答え表示*/
}
}
}
こんな感じに改良した。
足し算のみの計算をする部署は多い。
それなりに使えるだろう。
使用料は20回で銅貨1枚。
アプリの売値は金貨1枚とした。
高いが買う奴はいる。
足し算だけのアプリは流行った。
日常の買い物だとそれで済むものな。
「ええと引き算の混在も欲しいです」
ラメルに懇願された。
「まあ作ってみるけど」
#include <stdio.h>
#include <stdlib.h>
extern int tax_collection(int money);
void main(void)
{
int i,sum; /*カウンタ2つと、合計*/
char val[256];
if(tax_collection(1)==1){ /*税金徴収、銅貨1枚 金が無ければ、何も起こらない*/
for(i=1;i<20;i++){ /*20回ループ*/
sum=0;
while(1){
scanf("%s",val); /*数入力*/
if(val[0]=='=') break; /*イコールで終り*/
sum=sum+atoi(val); /*数を足す*/
}
printf("%d\n",sum); /*答え表示*/
}
}
}
手抜きだが、数字の頭にマイナスを付けると引き算になる。
『123 256 -589 =』と入力すると『123+256-589』の計算をしてくれる。
「これでどう?」
「ここまで言ったら掛け算と割り算も」
そこまで来ると正直ギブアップ気味だ。
作れるか作れないかと言ったら作れるけども。
手引き書に何ページにも渡る魔法がある。
まだ未完成らしいが、魔法電卓という事だ。
入力された数字の表示と、演算順位の処理が出来てないらしい。
十分に思える。
小数点以下が出来たらもっと良いと感じるぐらいしか思えない。
あとでバージョンアップしてアプリにしてみよう。
加減算のアプリは爆発的に流行った。
置いてない店の方が少ないぐらいだ。
ヘーゼルはさぞ悔しがった事だろう。
同じ魔道具がはたして作れるかな。
魔道具職人の頭を抱える姿が目に浮かぶ。
――――――――――――――――――――――――
未完成の電卓です。
プログラムの最中で嫌になったとも言う。
長くなり過ぎたので文末に載せておきます。
表示とか色々な改良点がありますが、へっぼこなので完成版を作る気力がわきません。
別に読まなくても支障はないです。
#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); /*×2と書かれたボタンをホログラフィで生成*/
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); /*終わり*/
}
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます