日本語プログラミング言語ＭＩＮＤで十進数計算を行う

## mind8 で大きな10進数を計算
事務処理用に必要な10進数計算のmind単語を作成します。
まず非負整数の加減算と乗算です。
### 構造体を使った長整数型の定義
```
※タイトル 長整数をｍｉｎｄ独自で定義し計算する。（現在　非負整数の加算のみ実装）      
Ｌ整数型は　型紙
　	Ｌ数字は　変数
	Ｌ桁数は　変数
	全体は　Ｌ桁数と　１００個の　Ｌ数字。

Ｌ数値変換とは
	Ｗ整数は　構造体　Ｌ整数型
　　Ｗ文字列は　文字列実体

	Ｗ文字列に　入れる
	Ｗ文字列の　文字数を　Ｗ整数の　Ｌ桁数に　入れる
	Ｗ文字列の　文字数　回数指定し
		Ｗ文字列から　一文字右側切り出し　
		一文字数値変換し　捨て　Ｗ整数の　Ｌ数字（回数）に　入れる
	繰り返す
	Ｗ整数を　返す。

Ｌ文字列変換とは
	Ｗ整数は　構造体　Ｌ整数型
	Ｗ文字列は　文字列実体
	Ｗ桁数は　変数
	Ｗ桁は　変数
	Ｗ整数に　入れる
	Ｗ文字列を　クリアする
	Ｗ整数の　Ｌ桁数を　Ｗ桁数に　入れる
	Ｗ桁数を　Ｗ桁に　入れる
	Ｗ桁数　回数指定し
		Ｗ整数の　Ｌ数字（Ｗ桁）を　文字列変換し
		Ｗ文字列に　追加する
		Ｗ桁を　一つ減少
	繰り返す
	Ｗ文字列を　返す。
 ```
### 繰り上がり、繰り下がり、先頭のゼロ抑止
 ```

Ｌ繰り上がり処理とは　（Ｌ整数　→　Ｌ整数）
 	Ｗ整数は　構造体　　Ｌ整数型
	Ｗ桁数は　変数
	Ｗ桁は　　変数
	Ｗ商は　　変数
	Ｗ余は　　変数
	Ｗ整数に　入れる
	Ｗ整数の　Ｌ桁数を Ｗ桁数に　入れる
　	Ｗ桁数から　一つ引いて　回数指定し
		Ｗ整数の　Ｌ数字（回数）が　９　以下
　　　　　　　　ならば　もう一度
		      	つぎに
		Ｗ整数の　Ｌ数字（回数）を　１０での　余りと商をとり
　　　　　　　　Ｗ整数の Ｌ数字（回数）と　Ｗ商に　入れる
		回数に　一つ加え　Ｗ桁に　入れる
		Ｗ整数の Ｌ数字（Ｗ桁）を　Ｗ商だけ　増加する
	
	繰り返す
	ここから
		Ｗ整数の Ｌ数字（Ｗ桁数）が　１０　以上
			ならば
				Ｗ整数の Ｌ数字（Ｗ桁数）を　１０での　余りと商をとり　
				Ｗ整数の Ｌ数字（Ｗ桁数）と　Ｗ商に　入れる
　　　　　　　　　		Ｗ桁数を　一つ増加し
				Ｗ商を　Ｗ整数の Ｌ数字（Ｗ桁数）に　入れる
　　　　　　　　　　　　さもなければ
　				打ち切り
			つぎに
	繰り返す

	ここから		
　　　　Ｗ桁数が　２　以上
		かつ
		Ｗ整数の　Ｌ数字（Ｗ桁数）が　０と　等しい
			ならば	Ｗ桁数を　一つ減少する
			さもなければ
				打ち切り
			つぎに
	繰り返す
	Ｗ桁数を　Ｗ整数の　Ｌ桁数に　入れる
	Ｗ整数を　返す。
```
### 加算処理
```
Ｌ加算結果とは　（Ｌ整数、Ｌ整数　→　Ｌ整数）
　　Ｗ整数Ａは　構造体　Ｌ整数型
　　Ｗ整数Ｂは　構造体　Ｌ整数型
	Ｗ整数Ｃは　構造体　Ｌ整数型
	Ｗ桁数Ａは　変数
	Ｗ桁数Ｂは　変数
	Ｗ和は　変数
	Ｗ桁数Ｃは　変数

	Ｗ整数Ａと　Ｗ整数Ｂに　入れる
	Ｗ整数Ａの　Ｌ桁数を　Ｗ桁数Ａに　入れる
	Ｗ整数Ｂの　Ｌ桁数を　Ｗ桁数Ｂに　入れる	
	Ｗ桁数Ａが　Ｗ桁数Ｂ　以上
		ならば　Ｗ桁数Ａを
		さもなければ
　　　　　　　　　　　　Ｗ桁数Ｂを
		つぎに
　　			Ｗ桁数Ｃに　入れる
	Ｗ桁数Ｃを　Ｗ整数Ｃの　Ｌ桁数に　入れる
	Ｗ桁数Ｃ　回数指定し
		Ｗ和を　クリアする
　　　　Ｗ桁数Ａが　回数　以上
			ならば　Ｗ整数Ａの　Ｌ数字（回数）だけ　Ｗ和を　増加し
			つぎに
		Ｗ桁数Ｂが　回数　以上
			ならば　Ｗ整数Ｂの　Ｌ数字（回数）だけ　Ｗ和を　増加し
			つぎに
		Ｗ和を　Ｗ整数Ｃの　Ｌ数字（回数）に　入れる
	繰り返す

　　　	Ｗ整数Ｃを　Ｌ繰り上がり処理し　返す。

```
### 減算処理
```
Ｌ減算結果とは　（Ｌ整数、Ｌ整数　→　Ｌ整数）　※答えが負の場合は未対応
	Ｗ整数Ａは　構造体　Ｌ整数型
　　Ｗ整数Ｂは　構造体　Ｌ整数型
	Ｗ整数Ｃは　構造体　Ｌ整数型
	Ｗ桁数Ａは　変数
	Ｗ桁数Ｂは　変数
	Ｗ和は　変数
	Ｗ桁数Ｃは　変数　　　　

	Ｗ整数Ａと　Ｗ整数Ｂに　入れる
	Ｗ整数Ａの　Ｌ桁数を　Ｗ桁数Ａに　入れる
	Ｗ整数Ｂの　Ｌ桁数を　Ｗ桁数Ｂに　入れる	
	Ｗ桁数Ａが　Ｗ桁数Ｂ　以上
		ならば　Ｗ桁数Ａを
		さもなければ
　　　　　　　　Ｗ桁数Ｂを
		つぎに
　　			Ｗ桁数Ｃに　入れる
	Ｗ桁数Ｃを　Ｗ整数Ｃの　Ｌ桁数に　入れる
	Ｗ桁数Ｃ　回数指定し
		Ｗ和を　クリアする
　　　　Ｗ桁数Ａが　回数　以上
			ならば　Ｗ整数Ａの　Ｌ数字（回数）だけ　Ｗ和を　増加し
			つぎに
		Ｗ桁数Ｂが　回数　以上
			ならば　Ｗ整数Ｂの　Ｌ数字（回数）だけ　Ｗ和を　減少し
			つぎに
		Ｗ和を　Ｗ整数Ｃの　Ｌ数字（回数）に　入れる
	繰り返す

　　Ｗ整数Ｃを　Ｌ繰り上がり処理し　返す。
	
```
### 掛け算の処理
```
Ｌ掛け算結果とは　（Ｌ整数、Ｌ整数　→　Ｌ整数）
　　Ｗ整数Ａは　構造体　Ｌ整数型
　　Ｗ整数Ｂは　構造体　Ｌ整数型
	Ｗ整数Ｃは　構造体　Ｌ整数型
	Ｗ桁数Ａは　変数
	Ｗ桁数Ｂは　変数
　　Ｗ桁は　　　変数

	Ｗ整数Ａと　Ｗ整数Ｂに　入れる
	Ｗ整数Ａの　Ｌ桁数を　Ｗ桁数Ａに　入れる
	Ｗ整数Ｂの　Ｌ桁数を　Ｗ桁数Ｂに　入れる	
	Ｗ桁数Ａに　Ｗ桁数Ｂを　加え　一を引いて　Ｗ整数Ｃの　Ｌ桁数に　入れる

	Ｗ整数Ｃの　Ｌ桁数　回数指定し
		Ｗ整数Ｃの　Ｌ数字（回数）を　クリアする
	繰り返す

	Ｗ桁数Ａ　回数指定し
		Ｗ桁数Ｂ　回数指定し
			外側回数と　回数を　加え 一つ引いて　Ｗ桁に　入れる
　　　　　　　　　　　　Ｗ整数Ａの　Ｌ数字（外側回数）と
　　　　　　　　　　　　Ｗ整数Ｂの　Ｌ数字（回数）を　掛け　
　　　　　　　　　　　　Ｗ整数Ｃの　Ｌ数字（Ｗ桁）を　増加する
		繰り返す
	繰り返す
	
　　　	Ｗ整数Ｃを　Ｌ繰り上がり処理し　返す。
```
### テスト用の処理
```

メインは　　　　　　　　（ ・ －－＞ ・ ）
    Ｌ整数１は　構造体　Ｌ整数型
    Ｌ整数２は　構造体　Ｌ整数型
    Ｌ整数３は　構造体　Ｌ整数型
　　Ｗ文字列は　文字列実体
	「２つの自然数の足し算をします。（空入力で終了）」と 表示し　改行し
	ここから
		「自然数１＝」と　表示し
　　　　　　　　　文字列入力し　Ｗ文字列に　入れる
		Ｗ文字列が　空列？
			ならば　打ち切り
			つぎに
　　　　　　　　Ｗ文字列を　Ｌ数値変換し　Ｌ整数１に　入れる
		「自然数２＝」と　表示し
　　　　　　　　文字列入力し　Ｌ数値変換し　Ｌ整数２に　入れる
		Ｌ整数１と　Ｌ整数２の　Ｌ加算結果を　Ｌ整数３に　入れる
		「　　　和＝」と　表示し　Ｌ整数３を　Ｌ文字列変換し　表示し　改行する 
		Ｌ整数１と　Ｌ整数２の　Ｌ減算結果を　Ｌ整数３に　入れる
		「　　　差＝」と　表示し　Ｌ整数３を　Ｌ文字列変換し　表示し　改行する 
		Ｌ整数１と　Ｌ整数２の　Ｌ掛け算結果を　Ｌ整数３に　入れる
		「　　　積＝」と　表示し　Ｌ整数３を　Ｌ文字列変換し　表示し

		改行する　
	繰り返す。

```
### 実行結果　
```
c:\mind8\pmind\sample>lnum
２つの自然数の足し算をします。（空入力で終了）
自然数１＝1111111111111
自然数２＝1111111111111
　　　和＝2222222222222
　　　差＝0
　　　積＝1234567901234320987654321
自然数１＝123456789
自然数２＝1234
　　　和＝123458023
　　　差＝123455555
　　　積＝152345677626
自然数１＝123456789
自然数２＝12345678
　　　和＝135802467
　　　差＝111111111
　　　積＝1524157763907942
自然数１＝1234567890
自然数２＝123456789
　　　和＝1358024679
　　　差＝111111111-9
　　　積＝152415787501905210
   ```
減算結果が一部おかしいですね！
これを直せたら、今後の計画は
負の数を扱えるようにする。
割り算を実装。
小数を実装。（これは時間が掛かるかも）

## 繰り下がりの処理が抜けてました
```
Ｌ繰り上がり処理とは　（Ｌ整数　→　Ｌ整数）
        Ｗ整数は　構造体　　Ｌ整数型
	Ｗ桁数は　変数
	Ｗ桁は　　変数
	Ｗ商は　　変数
	Ｗ余は　　変数
　　　　Ｗ値は　　変数
	Ｗ整数に　入れる
	Ｗ整数の　Ｌ桁数を Ｗ桁数に　入れる
　	Ｗ桁数から　一つ引いて　回数指定し
		Ｗ整数の　Ｌ数字（回数）が　１０　以上
　　　　　　　　　　　ならば　			
			Ｗ整数の　Ｌ数字（回数）を　１０での　余りと商をとり
　　　　　　　　	Ｗ整数の Ｌ数字（回数）と　Ｗ商に　入れる
			回数に　一つ加え　Ｗ桁に　入れる
			Ｗ整数の Ｌ数字（Ｗ桁）を　Ｗ商だけ　増加する
　　　　　　　　　　　　もう一度
		      つぎに
		
		Ｗ整数の Ｌ数字（回数）が　０より　小さい
			ならば
				Ｗ整数の Ｌ数字（回数）に -1を　掛け　一を引いて
　　　　　　　　　　　　　　　	１０での　余りと商をとり　Ｗ余りと　Ｗ商に　入れる
				Ｗ商に　一つ加え　Ｗ値に　入れる
				回数に　一つ加え　Ｗ桁に　入れる
				Ｗ整数の Ｌ数字（Ｗ桁）を　Ｗ値だけ　減少する
　　　　　　　　　　　　　　　　Ｗ値に　１０を　掛け　Ｗ値に　入れ
　　　　　　　　　　　　　　　　Ｗ整数の Ｌ数字（回数）を　Ｗ値だけ　増加し
				
				
			つぎに
	繰り返す
		　　　
	
	ここから
		Ｗ整数の Ｌ数字（Ｗ桁数）が　１０　以上
			ならば
				Ｗ整数の Ｌ数字（Ｗ桁数）を　１０での　余りと商をとり　
				Ｗ整数の Ｌ数字（Ｗ桁数）と　Ｗ商に　入れる
　　　　　　　　　		Ｗ桁数を　一つ増加し
				Ｗ商を　Ｗ整数の Ｌ数字（Ｗ桁数）に　入れる
　　　　　　　　　　　　さもなければ
　				打ち切り
			つぎに
	繰り返す
	

	ここから		
　　　　　　　　Ｗ桁数が　２　以上
		かつ
　　　　　　　　Ｗ整数の　Ｌ数字（Ｗ桁数）が　０と　等しい
			ならば	Ｗ桁数を　一つ減少する
			さもなければ
				打ち切り
			つぎに
	繰り返す
				
　　
	Ｗ桁数を　Ｗ整数の　Ｌ桁数に　入れる
	Ｗ整数を　返す。　　　　　　　
```

途中の桁が負の場合の繰り下がりを加えました。
## 実行結果
```
c:\mind8\pmind\sample>mind lnum file

日本語プログラミング言語 Ｍｉｎｄ Version 8.10 for Windows
          Copyright(C) 1985 Scripts Lab. Inc.
コンパイル中 .. 終了
Coping.. c:\mind9\pmind\bin\mindex.exe --> lnum.exe

c:\mind8\pmind\sample>lnum
２つの自然数の足し算をします。（空入力で終了）
自然数１＝12340
自然数２＝1234
　　　和＝13574
　　　差＝11106
　　　積＝15227560
自然数１＝1234567890
自然数２＝123456789
　　　和＝1358024679
　　　差＝1111111101
　　　積＝152415787501905210
```