2012-02-26 14 views
-3

3つのswitch文について、私は各switch文を2つ以上の関数呼び出しに置き換えます。これは私の初心者のC++クラスの "不完全な"ものを前回の学期に置き換えて、ローンを手に入れることができ、どこから始めたらいいのかわかりません。switch文を2つ以上の関数にそれぞれ変更します

私はスイッチステートメントを取って、それ自身の機能、スイッチステートメントそのもの、そしてもちろん、数多くの構文エラー(counter、random_numberなど)を作成しました。どのようにすればいいのか、適切な値をmain()に返す方法と、プログラムの他の部分と通信するためのプログラムを取得する方法(たとえば、メインで定義された/初期化された変数)。目に見えるように、私はここでかなり失われており、これを理解するためのガイダンスが欲しいと思います。私は誰も私のためにこれを行うには、いくつかのガイダンス(私のC + +の知識は限られており、時間の制約がある)を求めることではない。

// random.cpp : Defines entry point for the console application. 
// 

#include <iostream> 
#include <iomanip> 
#include <string> 
#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 
using namespace std; 

//random number generator prototypes 
void randomize(void); 
void randomize(int seed); 
int random(void); 
int random(int upper_bound); 
int random(int upper_bound, int lower_bound); 

int main() 
{ 
int upper_bound = 999; 
int lower_bound = 100; 
int n_random_numbers = 1000; 

randomize(); 

int counter_0 = 0; 
int counter_1 = 0; 
int counter_2 = 0; 
int counter_3 = 0; 
int counter_4 = 0; 
int counter_5 = 0; 
int counter_6 = 0; 
int counter_7 = 0; 
int counter_8 = 0; 
int counter_9 = 0; 

for(int counter = 1; counter <= n_random_numbers; counter++) 
{ 
    int random_number = random(upper_bound, lower_bound); 
    int digit_1 = random_number % 10; random_number = random_number/10; 
    switch(digit_1) 
    { 
     case 0: 
      counter_0++; 
      break; 
     case 1: 
      counter_1++; 
      break; 
     case 2: 
      counter_2++; 
      break; 
     case 3: 
      counter_3++; 
      break; 
     case 4: 
      counter_4++; 
      break; 
     case 5: 
      counter_5++; 
      break; 
     case 6: 
      counter_6++; 
      break; 
     case 7: 
      counter_7++; 
      break; 
     case 8: 
      counter_8++; 
      break; 
     case 9: 
      counter_9++; 
      break; 
    } 
    int digit_2 = random_number % 10; random_number = random_number/10; 
    switch(digit_2) 
    { 
     case 0: 
      counter_0++; 
      break; 
     case 1: 
      counter_1++; 
      break; 
     case 2: 
      counter_2++; 
      break; 
     case 3: 
      counter_3++; 
      break; 
     case 4: 
      counter_4++; 
      break; 
     case 5: 
      counter_5++; 
      break; 
     case 6: 
      counter_6++; 
      break; 
     case 7: 
      counter_7++; 
      break; 
     case 8: 
      counter_8++; 
      break; 
     case 9: 
      counter_9++; 
      break; 
    } 

    int digit_3 = random_number % 10; random_number = random_number/10; 
    switch(digit_3) 
    { 
     case 0: 
      counter_0++; 
      break; 
     case 1: 
      counter_1++; 
      break; 
     case 2: 
      counter_2++; 
      break; 
     case 3: 
      counter_3++; 
      break; 
     case 4: 
      counter_4++; 
      break; 
     case 5: 
      counter_5++; 
      break; 
     case 6: 
      counter_6++; 
      break; 
     case 7: 
      counter_7++; 
      break; 
     case 8: 
      counter_8++; 
      break; 
     case 9: 
      counter_9++; 
      break; 
    } 

} 
cout << "0 occurs " << counter_0 << " times" << endl; 
cout << "1 occurs " << counter_1 << " times" << endl; 
cout << "2 occurs " << counter_2 << " times" << endl; 
cout << "3 occurs " << counter_3 << " times" << endl; 
cout << "4 occurs " << counter_4 << " times" << endl; 
cout << "5 occurs " << counter_5 << " times" << endl; 
cout << "6 occurs " << counter_6 << " times" << endl; 
cout << "7 occurs " << counter_7 << " times" << endl; 
cout << "8 occurs " << counter_8 << " times" << endl; 
cout << "9 occurs " << counter_9 << " times" << endl; 

system("pause"); 

return 0; 
} 

//random number generators 
void randomize(void) 
{ 
srand(unsigned(time(NULL))); 
} 

void randomize(int seed) 
{ 
srand(unsigned(seed)); 
} 

int random(void) 
{ 
return rand(); 
} 

int random(int upper_bound) 
{ 
return rand() % (upper_bound + 1); 
} 

int random(int upper_bound, int lower_bound) 
{ 
    if(upper_bound < lower_bound) 
     { 
    int t = upper_bound; 
    upper_bound = lower_bound; 
    lower_bound = t; 
     } 
int range = upper_bound - lower_bound + 1; 
int number = rand() % range + lower_bound; 
return number; 
} 

私は機能を持たせる方法を見つけ出すことができなかったので、(私はcounterupper_boundlower_boundn_random_numbersを追加し、それが(図1.1) をうまくいくかどうかを確認するために、これらの機能を追加しましたmain()からこれらの変数を読みます私はそれらを関数にして、mainで呼び出し、作成した関数で呼び出そうとしましたが、間違いなく機能しませんでした。コンパイルは実行されますが、出力には「0回発生0回、1回0回発生など」

図1.1

int switch1 (int switch_1) 
{ 
int upper_bound = 999; 
int lower_bound = 100; 
int n_random_numbers = 1000; 
int counter = 0; 

randomize(); 

int counter_0 = 0; 
int counter_1 = 0; 
int counter_2 = 0; 
int counter_3 = 0; 
int counter_4 = 0; 
int counter_5 = 0; 
int counter_6 = 0; 
int counter_7 = 0; 
int counter_8 = 0; 
int counter_9 = 0; 

int random_number = random(upper_bound, lower_bound); 

int digit_1 = random_number % 10; random_number = random_number/10; 
    switch(digit_1) 
    { 
     case 0: 
      counter_0++; 
      break; 
     case 1: 
      counter_1++; 
      break; 
     case 2: 
      counter_2++; 
      break; 
     case 3: 
      counter_3++; 
      break; 
     case 4: 
      counter_4++; 
      break; 
     case 5: 
      counter_5++; 
      break; 
     case 6: 
      counter_6++; 
      break; 
     case 7: 
      counter_7++; 
      break; 
     case 8: 
      counter_8++; 
      break; 
     case 9: 
      counter_9++; 
      break; 
    } 

} 

int switch2 (int switch_2) 
{ 
int upper_bound = 999; 
int lower_bound = 100; 
int n_random_numbers = 1000; 
int counter = 0; 

randomize(); 

int counter_0 = 0; 
int counter_1 = 0; 
int counter_2 = 0; 
int counter_3 = 0; 
int counter_4 = 0; 
int counter_5 = 0; 
int counter_6 = 0; 
int counter_7 = 0; 
int counter_8 = 0; 
int counter_9 = 0; 

int random_number = random(upper_bound, lower_bound); 

int digit_2 = random_number % 10; random_number = random_number/10; 
    switch(digit_2) 
    { 
     case 0: 
      counter_0++; 
      break; 
     case 1: 
      counter_1++; 
      break; 
     case 2: 
      counter_2++; 
      break; 
     case 3: 
      counter_3++; 
      break; 
     case 4: 
      counter_4++; 
      break; 
     case 5: 
      counter_5++; 
      break; 
     case 6: 
      counter_6++; 
      break; 
     case 7: 
      counter_7++; 
      break; 
     case 8: 
      counter_8++; 
      break; 
     case 9: 
      counter_9++; 
      break; 
    } 

} 

int switch3 (int switch_3) 
{ 
int upper_bound = 999; 
int lower_bound = 100; 
int n_random_numbers = 1000; 
int counter = 0; 

randomize(); 

int counter_0 = 0; 
int counter_1 = 0; 
int counter_2 = 0; 
int counter_3 = 0; 
int counter_4 = 0; 
int counter_5 = 0; 
int counter_6 = 0; 
int counter_7 = 0; 
int counter_8 = 0; 
int counter_9 = 0; 

int random_number = random(upper_bound, lower_bound); 

int digit_3 = random_number % 10; random_number = random_number/10; 
    switch(digit_3) 
    { 
     case 0: 
      counter_0++; 
      break; 
     case 1: 
      counter_1++; 
      break; 
     case 2: 
      counter_2++; 
      break; 
     case 3: 
      counter_3++; 
      break; 
     case 4: 
      counter_4++; 
      break; 
     case 5: 
      counter_5++; 
      break; 
     case 6: 
      counter_6++; 
      break; 
     case 7: 
      counter_7++; 
      break; 
     case 8: 
      counter_8++; 
      break; 
     case 9: 
      counter_9++; 
      break; 
    } 

} 

図1.2

for(int counter = 1; counter <= n_random_numbers; counter++) 
{ 
    int random_number = random(upper_bound, lower_bound); 
    int digit_1 = random_number % 10; random_number = random_number/10; 
    int digit_2 = random_number % 10; random_number = random_number/10; 
    int digit_3 = random_number % 10; random_number = random_number/10; 

switch1 (digit_1); 
switch2 (digit_2); 
switch3 (digit_3); 

} 
+1

あなたは良いC++の本を読んで、一般的には配列、ベクター、およびコレクションについて学ぶ必要があります。それが何をしようとしているのかを行うには、はるかに良い方法があります。 – Mat

+0

@Mat - 私はこの割り当てを行うより良い方法があると確信していますが、割り当ては特に "それぞれのswitch文を2つ以上の関数呼び出しで置き換える"ものでした。だからこそ私はそのような方法で質問を提案しています。 – Danny

+0

私たちがあなたに代わって割り当てを投稿する場合は、少なくとも「複数の関数呼び出しで各switch文を置き換える」だけでなく、要件の全文を投稿することができます。 –

答えて

1

は不要スイッチ:

int counters[10] = {}; 

for(int counter = 1; counter <= n_random_numbers; counter++) 
{ 
    int random_number = random(upper_bound, lower_bound); 
    int digit_1 = random_number % 10; random_number = random_number/10; 
    ++counters[digit_1]; 

    int digit_2 = random_number % 10; random_number = random_number/10; 
    ++counters[digit_2]; 

    int digit_3 = random_number % 10; random_number = random_number/10; 
    ++counters[digit_3]; 
} 
+0

あなたのソリューションは非常にクリーンでプログラミングの方がはるかに優れていますが、教授の指示で定義されているように、 "switch文を2つ以上の関数呼び出しに置き換える" 。ありがとう、結構です。 – Danny

+0

"各switch文を2つ以上の関数呼び出しに置き換えてください"という意味での意味がわかりません。 – ronag

+0

命令は私にとっても奇妙に思えました。上記の配列と 'for'ステートメントを取って、それを関数にどのように置きますか?あなたは何をプログラムに戻しますか?そして、 'random(upper_bound、lower_bound)'関数は関数内でどのように読み込まれますか?関数内で関数を呼び出せますか? – Danny

関連する問題