
1から10の乱数を使った
足し算、引き算を考えていまして、
ダイナミックテキスト(mondai)に
式と答えを表示。
同じ数字の組み合わせの問題が続けて出るので
それを回避するために、
皆様のお知恵をお借りしたいと思いました。
自分が考えている回路図は、
//乱数[0-9]
randam_a = Math.floor(Math.random()*10);
randam_b = Math.floor(Math.random()*10);
//足し算か引き算か計算ちぇっく
check = Math.floor(Math.random()*2);
※このあたりに前回のrandam_a & randam_bの
値を調べて同じならば、前回と違う値が入るまで
loop処理を加える。
//足し算ならば
if (check == 0){
total = randam_a - randam_b ;
mondai = String(randam_a)+"+"+String(randam_b)+"="+String(total);
//引き算ならば
} else if (check == 1) {
total = randam_a + randam_b ;
mondai = String(randam_a)+"-"+String(randam_b)+"="+String(total);
//引き算の処理ならば
}else if (check == 1){
(略してます)
}
という流れを考えてます。
それ以外に、いけそうな処理の流れが
あれば、そのチャートも知りたいので
解説して頂けると勉強になります><
宜しくお願いします!

No.2ベストアンサー
- 回答日時:
なんだか楽しそうな計画名ですね。
私の案も1つ。
私はあまり後を振り返りません(少しは反省しろ!)。
そして,
先に道がないと進みません(堅実派?)。
という性格が出ているのかどうかは知りませんが,
「過去にあったデータと重複しないように次のデータを出す。」
という考え方ではなくて,
「先に重複しないデータを用意しておく。」
という方法を考えました。
概要は,次の通りです。
次のものは実際のスクリプトコードではありません。
単なるイメージフローです。
-----------------------------------
// とりあえずデータ用1次元配列を作って
dataArr= new Array();
// ↓こんな感じに値を入れて行き(本当はfor文)
dataArr[0] = "1,1";
dataArr[1] = "1,2";
dataArr[2] = "1,3";
dataArr[3] = "1,4";
… …
dataArr[98] = "10,8";
dataArr[98] = "10,9";
dataArr[99] = "10,10";
// 100個の要素からランダムな要素取得し,
// ,(カンマ)で区切って新しい配列 quesArr0 に代入
quesArr0 = new Array();
quesArr0 = dataArr[乱数].split(",");
//そして 100個の要素から上のランダムな要素を抜きとる
dataArr.splice(乱数);
//---
// 99個の要素からランダムな要素取得し,
// ,(カンマ)で区切って新しい配列 quesArr0 に代入
quesArr1 = new Array();
quesArr1 = dataArr[乱数].split(",");
//そして 99個の要素から上のランダムな要素を抜きとる
dataArr.splice(乱数);
// ↓ 1つずつ要素を減らしながら繰り返す ↓
// 1個の要素からランダムな要素取得し,
// ,(カンマ)で区切って新しい配列 quesArr0 に代入
quesArr99 = new Array();
quesArr99 = dataArr[乱数].split(",");
//そして 1個の要素から上のランダムな要素を抜きとる
dataArr.splice(乱数);
// dataArr は空になる。
---------------------------------------
という考え方で,
最終的に,
quesArr0() ~ quesArr99() という100個の配列に,
重複しない要素を取得する方法です。
と書きましたものの,フローがやたらややこしいですね。
スクリプトの方が簡単かもしれません。
新規ドキュメントを作成して,
ステージ上にインスタンス名 「my_btn」 という検証用の適当なボタンを用意して,
フレーム1 に次のスクリプトをコピペしてください↓。
-----------------------------------------
// 上限の数を設定(1~10なので10)
var lastNum = 10;
//
// ---元データの準備---
// 元データ配列 dataArr の作成
dataArr = new Array();
var i = 0;
for (var j = 1; j<=lastNum; j++) {
for (var k = 1; k<=lastNum; k++) {
dataArr[i] = j+","+k;
i++;
}
}
/*
// ちょっと中間検証
trace("dataArr[99]="+dataArr[99]);
trace("dataArrの要素数="+dataArr.length);
*/
//
// 配列 qesArr0~要素数 に dataArr の各要素を代入
var len = dataArr.length-1;
for (i=0; i<=len; i++) {
ransu = Math.floor(Math.random()*(len+1-i));
this["quesArr"+i] = new Array();
this["quesArr"+i] = dataArr[ransu].split(",");
dataArr.splice(ransu, 1);
}
// ---以下検証用スクリプト---
// 変数 i の初期化
i = 0;
// インスタンス名 my_btn の 動作を定義
_root.my_btn.onRelease = function() {
//
var a = _root["quesArr"+i][0];
var b = _root["quesArr"+i][1];
trace("quesArr"+i+"[0]="+a+" , quesArr"+i+"[1]="+b);
i++;
};
-----------------------------------------
コピペできましたら,
「制御」→「ムービープレビュー」で,動作させてみてください。
(「ファイル」→「パブリッシュ」ではありませんよ。)
そして,
インスタンス名 「my_btn」 という検証用のボタンをクリックしてみてください。
quesArr0~quesArr99 までの,
各 0 と 1 の要素が確認できると思います。
変数名の付いたテキストフィールドを用意しても検証できますが,
面倒くさいので,上のように
有効に trace() を使って検証してみてください。
trace() は便利な関数ですよ。
最初の,
// 上限の数を設定(1~10なので10)
var lastNum = 10;
ここを,例えば
var lastNum = 30;
に変えると,
30×30=900のランダムな問題データが用意されます。
私の考えた回路は以上です。
=====================
この場をお借りしまして,
前回ご質問の回答の補足をさせていただきます。
今回のご質問で律儀に String() 関数を使われていますが,
そんなに厳密に使われなくてもかまいませんよ。
ああいう厳密っぽいご質問があったので,私も律儀に答えただけです。
↓ ↓
「【Flash8】文字列の足し算?」
http://oshiete1.goo.ne.jp/qa2690349.html
↑教えて!goo ↓OKWave (同じです)
http://okwave.jp/qa2690349.html
あと,訂正です。
> 「文字列」+「数値」は「文字列」ですから,
> 最後の行は,
>
> hyouji = String(hensu_A)+"+"+hensu_B+"="+total_AB;
>
> でもかまいません。
と書きましたが,
よく考えると,「数値」+「文字列」も「文字列」ですから,
さらに,
hyouji = hensu_A+"+"+hensu_B+"="+total_AB;
でも良かったのです。
String() 関数はご質問の場合,全く不要でした。
お詫び致します。
ダイナミックなコードびっくりしました!
ボタンを押すたびに配列の中が出力されて
ワクワクします!
ありがとうございます!参考になりました。
No.1
- 回答日時:
var history = new Object(); // 連想配列
do{
randam_a = Math.floor(Math.random()*10);
randam_b = Math.floor(Math.random()*10);
} while(history[randam_a + ":" + randam_b]);
history[randam_a + ":" + randam_b] = 1; // 組み合わせ履歴を保存
こんな感じですかねー。
なるほどー。
変数配列に組み合わせ履歴を調べて
同じ問題を回避するのか!
こういう手法もあるのか
自分の視野せまいなー><
ひとつ大人になりました!
ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- 物理学 QEDラグランジアンについて 7 2022/09/03 13:17
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Excel(エクセル) エクセル VBA For Next 繰り返しの書き方を教えてください 6 2022/09/01 14:11
- Java java 飾子を付けること(public static・・・) ・コンソールへの出力処理はmainメ 2 2022/06/16 19:34
- Java javaの質問です 次の機能を有するメソッド4つを自クラスに作成し、実装したいです 【機能】 足し算 1 2022/06/15 17:49
- 高校 有効数字計算 確定した値を含む 2 2023/01/18 06:03
- Excel(エクセル) エクセル 関数について質問です。 2 2022/10/03 11:14
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
配列の要素番号を取得するには?
-
【数字ランダム】計算問題ラン...
-
onload時の変数の有効範囲について
-
2次元配列 ソート
-
FLASHでXMLを読み込んだときに...
-
DataGridでCTRLキーを押さずに...
-
Vba 配列の中の特定文字列の位...
-
変な質問ですみません、n番目の...
-
即時関数で
-
sleepの時間の値に変数を!
-
LRESULTとHRESULT
-
VB6でユーザー定義型がNothing...
-
アクションスクリプトを簡素化...
-
c++ cmathとmath.h
-
三辺の長さから角度を求めたい...
-
インスタンスをまとめて生成?
-
全国のイベント情報
-
【奇数・偶数のときの処理】
-
AS3.0でボタン処理をまとめて書...
-
エラー(型が一致しません。)...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
配列の要素番号を取得するには?
-
VB.NET の配列の要素数
-
重複しない乱数の生成
-
Vba 配列の中の特定文字列の位...
-
IDの自動採番について
-
VBでボタンを押すと画像をラン...
-
変な質問ですみません、n番目の...
-
ActionScript3で乱数を取得しな...
-
[Objective-c]多次元配列のアク...
-
データ構造のテキスト保存につ...
-
複数の変数宣言を、for文で一気...
-
重複しない乱数を作り配列に入...
-
配列操作
-
String.prototype.split2d 理...
-
ユーザー定義関数が呼び出せない
-
Action Script 2.0 配列の比較
-
【ActionScript】配列の昇順降...
-
ActionScriptで配列をクリアす...
-
VB6 複数行のテキストをリスト...
-
アクションスクリプト for~in時
おすすめ情報