他の

Mac C ++配列と乱数

iBookG4user

オリジナルポスター
2006年6月27日
Seattle, WA
  • 2009年9月20日
彼らは私の大学で最も不便な時期にC ++の家庭教師を配置します...とにかく、インストラクターは次の指示を投稿しました:

'1から10までの25個の乱数で配列を埋める関数を記述します。次に、配列を出力する関数を記述します。関数をテストするために、mainにいくつかのコードを記述します。このテストコードは*ドライバーと呼ばれることもあります

ここではグローバル変数を使用しないでください。パラメータリストを介して配列を関数に渡します。

私の現在のコードでは、デバッガーでエラーは発生しませんが、配列は出力されません。そして、私は彼がドライバーを書くことによって何を意味するのかわかりません、私は何をテストすることになっていますか?あなたは過去に非常に役に立ったことが証明されており、今回は私を正しい方向に向けるのを手伝ってくれると確信しています

コード:#include #include using namespace std; double print(double array); double produce(); int main() { double produce(); double print(); } double produce() { srand(time(0)); double array[25]; for(int i=0; i<25; i++) { array[i] = (rand()%10)+1; cout << array[i] << endl; } return *array; } double print (int array) { cout << array << endl; }

lee1210

2005年1月10日


テキサス州ダラス
  • 2009年9月20日
いくつかのこと:配列はdouble []ではなくint []型である必要があります。生成および印刷するには、int配列を受け入れる必要があります。 mainでint []を宣言し、それを渡して生成し、そこに入力してから、それを渡して印刷する必要があります。 NS<< operator of ofstream does not deal with arrays as you'd hope, so you'll need to loop to display in print.

また、それは正直な間違いだと確信しています。あなたの教授は 擬似- ランダム。

また、メインでは、produceとprintを呼び出さずに、新しいdouble()を宣言しています。そこでdoubleを取り除いて、上記のように引数を渡し、これらの両方の戻り型をvoidに変更します。

-読んだ

gnasher729

一時停止
2005年11月25日
  • 2009年9月20日
関数 'produce'の関数プロトタイプをどのように記述しますか?
そして、関数 'produce'の呼び出しをどのように記述しますか?

そして、あなたの「メイン」関数の中で、あなたは2つのうち、関数プロトタイプまたは関数呼び出しのどちらを書きましたか?

iBookG4user

オリジナルポスター
2006年6月27日
Seattle, WA
  • 2009年9月20日
lee1210によると:いくつかのこと:配列はdouble []ではなくint []型である必要があります。生成および印刷するには、int配列を受け入れる必要があります。 mainでint []を宣言し、それを渡して生成し、そこに入力してから、それを渡して印刷する必要があります。 NS<< operator of ofstream does not deal with arrays as you'd hope, so you'll need to loop to display in print.

また、それは正直な間違いだと確信しています。あなたの教授は 擬似- ランダム。

また、メインでは、produceとprintを呼び出さずに、新しいdouble()を宣言しています。そこでdoubleを取り除いて、上記のように引数を渡し、これらの両方の戻り型をvoidに変更します。

-読んだ

さて、私はあなたが提案した変更を加えました、そしてコードはより論理的に見えます。現在、forループで3つのエラーが発生しています。

コード:#include #include using namespace std; double print(int array); double produce(int array); int main() { int array[25]; produce(*array); } double produce(int array) { srand(time(0)); for(int i=0; i<25; i++) { array[i] = (rand()%10)+1; cout << array[i] << endl; } print(array); } double print (int array) { for(int i=0; i<25; i++) { cout << array[i] << endl; } return array; }

添付ファイル

  • スクリーンショット2009-09-20at 5.42.31 PM.png スクリーンショット2009-09-20at 5.42.31 PM.png'file-meta '> 178.1 KB・再生回数:1,941

lee1210

2005年1月10日
テキサス州ダラス
  • 2009年9月20日
produceの引数型をint []またはint *に変更します。現在はintなので、[]などは使用できません。印刷についても同様です。また、農産物や印刷物から何も返品する必要はありません。リターンタイプをvoidに変更します。

私はあなたがメインでプリントをコールバックすることを意図していると思います、それは問題ないはずです。

また、配列を渡して生成する場合は、* arrayではなくarrayを使用してください。

-読んだ

iBookG4user

オリジナルポスター
2006年6月27日
Seattle, WA
  • 2009年9月20日
lee1210のコメント:プロデュースの引数タイプをint []またはint *に変更します。現在はintなので、[]などは使用できません。印刷についても同様です。また、農産物や印刷物から何も返品する必要はありません。リターンタイプをvoidに変更します。

私はあなたがメインでプリントをコールバックすることを意図していると思います、それは問題ないはずです。

また、配列を渡して生成する場合は、* arrayではなくarrayを使用してください。

-読んだ

出来た
さて、関数をテストするためのコードを書くことによって彼が何を意味したか知っていますか?それはどういう意味ですか?そして、これまでのあなたの助けに本当に感謝します!

コード:#include #include using namespace std; double print(int *array); double produce(int *array); int main() { int array[25]; produce(array); print(array); } double produce(int *array) { srand(time(0)); for(int i=0; i<25; i++) { array[i] = (rand()%10)+1; cout << array[i] << endl; } return *array; } double print (int *array) { for(int i=0; i<25; i++) { cout << array[i] << endl; } return *array; }

chown33

モデレータ
スタッフ
2009年8月9日
深海平原
  • 2009年9月20日
iBookG4userは言った:さて、あなたは彼が関数をテストするためのコードを書くことによって何を意味したか知っていますか?それはどういう意味ですか?

仕様によると、配列内の数値は1から10の間でなければなりません。それを確認するテストを作成できます。

また、数字はランダムでなければならないと述べました。ランダム性は見た目よりもテストが難しい場合がありますが、単純な非ランダム性はテストが簡単です。最も簡単なのは、すべての数値が同じ値ではないことを確認することです。ランダム性のより複雑なテストでは、統計分析を使用します。

記述できるもう1つのテストは、produce()関数が呼び出されるたびに異なる値を返すことを確認することです。これは統計分析の単純な形式です。つまり、連続した呼び出しで独立した結果が得られるようにします。

また、produce()を呼び出す前に、-1や0などの既知の無効な値で配列を初期化することを検討する必要があります。そうしないと、初期化されていないローカル配列に予測できない値がすでに含まれている可能性があります。これは、produce()が何もしない場合でも、テストがランダムとして解釈する可能性があります。

仕様として、作業範囲記述書はややあいまいです。一つには、どのテストに合格する必要があるかを指定していません。私を信じてください。ほとんどのプログラマーに資格テストの選択を任せれば、それは大きな間違いです。コードは、プログラマーがコードを開発するために使用した1つのケースでのみ機能する可能性があります。それがおかしいと思われる場合は、それが起こったことを保証できます。

iBookG4user

オリジナルポスター
2006年6月27日
Seattle, WA
  • 2009年9月20日
それはとても簡単でした、ありがとう!
これはおやつでした:
コード:if (print(array) 10) // driver { cout << 'Numbers are not between 1 and 10!' << endl; } NS

サンダー

2008年4月24日
  • 2009年9月21日
iBookG4userは言った:それは十分に単純でした、ありがとう!
これはおやつでした:

配列に「無効な」数値(たとえば11)を入れて、この関数がそれを検出するかどうかを確認してください。

iBookG4user

オリジナルポスター
2006年6月27日
Seattle, WA
  • 2009年9月21日
Sander氏は次のように述べています。配列に「無効な」数値(たとえば11)を入れて、この関数がそれを検出するかどうかを確認してください。

10より大きい数を許可するように一時的に配列を設定しましたが、それを検出しました。 NS

サンダー

2008年4月24日
  • 2009年9月22日
iBookG4userは言った:私は一時的に10より大きい数を許可するように配列を設定しました、そしてそれはそれを検出しました、ありがとう

配列の最初の要素でなくても..?

私が尋ねている理由は、print()関数(少なくともこのスレッドに示されている最後のバージョン)は配列の最初の要素(doubleに変換されたもの)のみを返すためです。