2010-12-12 21 views
0

問題は、3ヵ月を組み合わせることで各従業員の合計売上を与える1から10までの従業員番号(彼らは配列に入る配列番号を与えました)を求めていました。私の追加機能では、すべて正常に処理されます。最初の部分は...配列の数字は完全に表示されますが、配列を追加するときには数字が表示され、ここでは正しくない合計が返されます。私のコードでは、配列番号に最初に付いた配列番号の後に、配列に続く配列に続く配列番号を付けるべきであると付け加えました。2次元配列の追加問題

私は、 btw)、残りの部分に従業員#1の合計を追加しています。これはやりたくありません。私は従業員#1のお互いに入力したいそれを表示して停止してから、3ヶ月の3つの数字から従業員#2の合計を追加する配列の表示を停止する(各部分が1から10まで表示されるまで続ける)新しいコードを入力する。私はC++プログラミングが初めてで、クラスについてまだ学んでいないので、正直なところ使用できません。

#include <iostream> 
#include <iomanip> 
#include <cstdlib> 

using namespace std; 

void displaySales(int sales[10][3]); 
void displayTotalSales(int total[10][3]); 

int main() 
    { 

    //declare array  Jan Feb Mar 
    int employ[10][3] = {{2400, 3500, 2000}, 
         {1500, 7000, 1000}, 
         {600, 450, 2100}, 
         {790, 240, 500}, 
         {1000, 1000, 1000}, 
         {6300, 7000, 8000}, 
         {1300, 450, 700}, 
         {2700, 5500, 6000}, 
         {4700, 4800, 4900}, 
         {1200, 1300, 400}}; 
    //displays the sales for the month 
    displaySales(employ); 
    displayTotalSales(employ); 
    system("pause"); 
    return 0; 
    } 

//******Functions******* 

void displaySales(int sales[10][3]) 
{ 


    for(int emp = 0; emp < 10; emp++) 
    { 
     cout << "Employee # " << emp + 1 
      << ": " << endl; 
     for (int month = 0; month < 3; month++) 
     { 

      cout << " Month " << month + 1 
       << ": "; 
      cout << sales[emp][month] << endl; 

     } //end for 
    } //end for 
} //end function 

void displayTotalSales(int total[10][3]) 
{ 
    int employ = 1; //employee number 
    int totalSales = 0; // total sales for the employee 


     for (int i = 0; i < 10; i++) 
     { 
      for (int j = 0; j < 3; j++) 
      { 
       totalSales += total[i][j]; 
      cout << "Employee # " << employ << ": " << endl; 
      cout << endl; 
      cout << "Total sales for the month: " << "$" << total[i][j]; 
      cout << endl; 
      } 
      cout << " Total Sales for the three months is: $" << totalSales << endl; 
      cout << endl; 
      employ++; 
     } 
} 
+2

なぜ、従業員1人につき3回追加していますか? –

+0

編集にコードをコピーすると、インデントが移動してしまいます。このような不便は残念です。 – Rootz

+0

クロムを使用している場合は、テキストエリア内のテキストを選択し、タブを押してインデント(テキストエリアフォーマッタ)するだけの素晴らしい拡張機能があります。 – 6502

答えて

3
do { 
    ... 
    totalSales = (total[i][j] + total[i][j+1] + total[i][j+2]); 
    j++; 
} while (j < 3); 

jは最初の反復後の境界の外に出ます。

真剣に:classesを使用してください!そしてcontainersを使用してください!

ああ、あなたの中かっこは完全に台無しです。

+0

最後の部分について同意しました.- boost :: multi_arrayは私たちの友達です – Kos

+0

@特定のサイズのデータ​​に対してKosを使うと、入れ子にされた 'boost :: array'がうまく動作します。あるいは、例えば、正確な状況に応じて、 'boost :: array'の' std :: vector'などがあります。ジョブに適したツールを選択してください。 :) –

+0

マニュアル索引付けを使った 'std :: vector'が' boost :: multi_array'よりも優れたパフォーマンスを発揮する状況があります(これは、私が理解しているように、同じことについての有益な抽象化頂上で)? – Kos

1

まずはコードを整理してください。インデントすると、これを理解しやすくするのに役立ちます。

これはプログラミングクラスの宿題に関する質問ですが、とにかくお手伝いします。あなたがJ + 2である参照しようとしている

totalSales = (total[i][j] + total[i][j+1] + total[i][j+2]); 

は、基本的には問題がj == 2は、例えば、あなたはステートメントを使用する場合ときので、あなたは、配列の端の上で実行されていることです実際には存在しない配列の5番目の要素です。

私はあなたがこのような何かを試みることができる

(優れた機能に名前を付けてください)あなたのaddFunkの10秒の書き換えをしました:コードへのあなたの更新について

void addFunk(int total[10][3]) 
{ 
    int employ = 1; //employee number 
    int totalSales = 0; // total sales for the employee 


    for (int i = 0; i < 10; i++) 
    { 
      for (int j = 0; j < 3; j ++) 
      { 
       totalSales += total[i][j];   
      } 

      cout << "employee num " << employ << "earned " 
      << "$" << totalSales << endl; 
      totalSales = 0; 

      employ++; 
      totalSales = 0; 
    } 
} 
+0

+1編集や良い命名規則などに言及してもプラスですが、実際には答えの一部ではありませんが、一般的には教育的です:)(私はインデックス上で訂正しました.4は実際には5番目の要素です) – ralphtheninja

0

を、あなたが言う:

残りの部分に従業員#1の合計を追加します。あなたがそこに置かれているコメントで

int totalSales = 0; // total sales for the employee 

ルック:

問題は、この行でそれがあたりの従業員です。したがって、「従業員一人一人のループ」内に入る必要があります。

for (int i = 0; i < 10; i++) 
{ 
    int totalSales = 0; 
    // Proceed as before with the per-month work. 

C++の変数の「範囲」についてお読みください。

また、C++の新機能や一般的なプログラミングの新機能は、実際にはクラスを回避する言い訳ではありません。特に彼らについては何も進んでいませんそれ自体はです。コードを作成するだけで複雑になります。クラスを適切に使用すると、コードを整理(シンプル化)するのに役立ちます。

1

これは私にはこの答えを追加するには適切ではないかもしれませんが、初心者の方はコメントする方法がないので、ここでそれを言います。

私はオブジェクトに関する学習に関してkarlに同意します。私たちは大学でcとC++について学んだときに構造体を使い始めてから、クラスに移りました。プログラミングについて真剣に考えているなら、このことを学ぶことが本当に重要です。

クラスは、現実世界のオブジェクトを説明する単なる方法です。属性と振る舞いを持っています。たとえば、毎月の収入をすべて貯めることができる従業員クラスを作成し、その中に最近の収入を計算できる機能を持つことができます。これらのコードを少し追加するだけで、読みやすく、整理して再利用することができます。

私は真剣にオブジェクト指向の概念を検索し、いくつかのC++の例を試してみることをお勧めします。彼らは非常に簡単です。

+0

+1コメントとしてコメントを投稿し始めます。 ;) –

+0

ありがとうKarl !!!ストーク! –