0

現在、一連の整数を含む入力ファイルを受け取り、特定の範囲の数値の量を表示できるプログラムを作成しようとしています。例えば:

入力ファイルに 20、30、40、50、60 があり、範囲が 1 ~ 20、21 ~ 40、41 ~ 60 の場合

出力は次のようになります

1-20: 1 21-40: 2 41-60: 3

私はプログラミングが初めてなので、自分のコードに少し問題があるだけで、近いことはわかっています。それらを格納するために配列を使用していますが、ファイルに含まれる整数の数に適応する配列を作成する方法がわかりませんでした。これが私がこれまでに得たものです。(この演習のために、配列が 100 個の整数を格納する最大量を作成しようとしています)。

#include <iostream>
#include <fstream>
#include <iomanip>
using namespace std;

int ranges(int);


int main()
{
ifstream indata;
ofstream outdata;

indata.open("scores1.txt");

outdata.open("scoresoutput.txt");

if(!indata)
{
    cout << "Unable to open file" << endl;
    return 1;
}

int range1=0;
int range2=0;
int range3=0;
int range4=0;
int range5=0;
int range6=0;
int range7=0;
int range8=0;


const int max=100;
int score[max];



while(indata)
{

    for(int i=0; i < max ; i++)
    {

    indata >> score[i];
    indata.ignore(1);

    if(0 <= score[i] <= 24)
            {
            range1++;
            }

            else if(25 <= score[i] <= 49)
            {
                range2++;
            }

            else if(50 <= score[i] <=74)
            {
                range3++;
            }

            else if(75<= score[i] <= 99)
            {
                range4++;
            }

            else if(100 <= score[i] <= 124)
            {
                range5++;
            }

            else if(125 <= score[i] <= 149)
            {
                range6++;
            }

            else if(150 <= score[i] <= 174)
            {
                range7++;
            }

            else if(175 <= score[i]<= 200)
            {
                range8++;
            }


    }

        }



outdata << "Range" << setw(10) << "Number of Students" << endl <<
    "0-24" << setw(10) << range1 << endl<<
    "25-49" << setw(10) << range2 << endl <<
    "50-74" << setw(10) << range3 << endl <<
    "75-99" << setw(10) << range4 << endl <<
    "100-124" << setw(10) << range5 << endl <<
    "125-149" << setw(10) << range6 << endl <<
    "150-174" << setw(10) << range7 << endl <<
    "175-200" << setw(10) << range8 << endl;


return 0;

}

現在、出力には 0-24 100 が表示されているだけです。これを行うためのより簡単な方法はありますか?

4

1 に答える 1

0

アレイはあなたの親友です。配列を使用してカウントを管理してみてください。

int range_count[8];
for (int i = 0; i < 8; ++i) {
  range_count[i] = 0;
}

そしてあなたのwhileループ内のforループで:

for(int i = 0; i < max ; ++i) {

  indata >> score[i];
  indata.ignore(1);

  if (score[i] >= 0 && score[i] <= 200) {
    range_count[score[i] / 25]++; // since your range intervals is a constant 25.
  }
}

そして最後に、出力で:

outdata << "Range" << setw(10) << "Number of Students" << endl;
for (int i = 0; i < 8; ++i) {
  i * 25 << "-" << i * 25 + 24 << setw(10) << range_count[i] << endl;
}
于 2013-06-11T01:59:51.973 に答える