HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2020
0813
阿弥陀如来数値を規則的に分割したい!3解決


阿弥陀如来

リンク

2020/8/13(Thu) 16:17:35|NO.91157

特定の数値(a)をある数値(b)で分割できるまで分割したいです

>【例1】a = 1000、b = 100
a = 100 × 10 + 0 なので 配列は [10]

>【例2】a = 1001、b = 100
a = 100 × 10 + 1 なので 配列は [1, 10]

>【例3】a = 10001、b = 100
a = 100 × 100 + 1 なので 配列は [1, 100, 100]

>【例4】a = 20000、b = 100
a = 100 × 100 × 2 なので 配列は [100, 100, 2]

>【例5】a = 2020、b = 100
a = 100 × 20 + 20 なので 配列は [20, 100, 20]

① 配列の先端が a mod b = c の値が0以外なら c になる
② 配列の各値が b より大きい場合は次のインデックスの値を1追加(繰り上がり(?))
③ ②の繰り上がりが出来るまで②を繰り返す

...のような感じの動作はどういうコードを書けばいいのでしょうか



この記事に返信する


あらや

リンク

2020/8/13(Thu) 22:56:58|NO.91161

例1と2はbの100を配列に入れず
>>【例2】a = 1001、b = 100
>a = 100 × 10 + 1 なので 配列は [1, 10]

例3以降は100を配列に入れる。。。
>>【例3】a = 10001、b = 100
>a = 100 × 100 + 1 なので 配列は [1, 100, 100]

どちらが正しいのかわかりませんが、
後者に合わせたソースを書いてみました。

配列の大きさがどうなるかわからないので
一旦文字列として記録していき、最後に数値に変換しています。

a = 1000; b = 100; pos 0, 0 : mes "a:"; pos 20, 0 : input a; pos 0, 20 : mes "b:"; pos 20, 20 : input b; pos 20, 40 : button gosub "計算", *calc; stop; // 計算処理 *calc mod = a \ b; // 剰余を取得用の変数 quo = a; // 商取得用の変数 res_str = ""+mod+""; // 文字列として結果を格納していく // 無限ループで同じ処理を繰り返す repeat if( quo == 0 ) { break; // 商が0になった時点でループ終了 } else : if( quo != 1 ) { // 1は記録しない if( quo > b ) { res_str += "\n"+b+""; // 商が除数よりも大きい場合は除数を記録 } else { res_str += "\n"+quo+""; // 除数の方が大きければ商を記録 } } quo /= b; // 商を更に割る loop gosub *arr; return; // 配列への格納処理 *arr notesel res_str; len = notemax; // 行数(数値の数)を取得 noteget p_str, 0; // 1行目(剰余)だけを抽出 if( int(p_str) == 0 ) { notedel 0; // 剰余が0のときは1行削除 len--; } dim res_int, len; // 数値の数に合わせた配列を用意 repeat len noteget p_str, cnt; // 1行ずつ抽出 res_int(cnt) = int(p_str); // 文字列を数値型に変換し格納 loop return;
配列変数res_intに結果の数値が入ります。



あらや

リンク

2020/8/13(Thu) 23:25:11|NO.91162

数値(a)が数値(b)よりも小さかった場合を考慮していなかったので
一部修正しました。


a = 1000; b = 100; pos 0, 0 : mes "a:"; pos 20, 0 : input a; pos 0, 20 : mes "b:"; pos 20, 20 : input b; pos 20, 40 : button gosub "計算", *calc; stop; // 計算処理 *calc mod = a \ b; // 剰余を取得用の変数 quo = a - mod; // 商取得用の変数 res_str = ""+mod+""; // 文字列として結果を格納していく // 無限ループで同じ処理を繰り返す repeat if( quo == 0 ) { break; // 商が0になった時点でループ終了 } else : if( quo != 1 ) { // 1は記録しない if( quo > b ) { res_str += "\n"+b+""; // 商が除数よりも大きい場合は除数を記録 } else { res_str += "\n"+quo+""; // 除数の方が大きければ商を記録 } } quo /= b; // 商を更に割る loop gosub *arr; return; // 配列への格納処理 *arr notesel res_str; len = notemax; // 行数(数値の数)を取得 noteget p_str, 0; // 1行目(剰余)だけを抽出 if( int(p_str) == 0 ) { notedel 0; // 剰余が0のときは1行削除 len--; } dim res_int, len; // 数値の数に合わせた配列を用意 repeat len noteget p_str, cnt; // 1行ずつ抽出 res_int(cnt) = int(p_str); // 文字列を数値型に変換し格納 loop return;



阿弥陀如来

リンク

2020/8/14(Fri) 20:20:43|NO.91165

すいません...w
ありがとうございます!



ONION software Copyright 1997-2025(c) All rights reserved.