2012-11-13 4 views
0

저는 C++ 프로그래밍에 상당히 익숙합니다. 텍스트 파일의 숫자를 오름차순으로 정렬하는 코딩에 도움이 필요하므로 중간 값을 취할 수는 있지만 어떻게 수행해야할지 모르겠습니다.텍스트 파일에서 오름차순으로 데이터를 정렬하려면 어떻게합니까?

여기에 지금까지 내 코드입니다 : 사전에

//Create a Vector to hold a set of exam scores.Write a program to do the following tasks: 1. Read exam scores into a vector from Scores.txt 
//2. Display scores in rows of five(5) scores. 
//3. Calculate average score and display. 
//4. Find the median score and display. 
//5. Compute the Standard Deviation and display 

#include <vector> 
#include <iostream> 
#include <fstream> 
#include <algorithm> 

using namespace std; 

int main() 
{ const int array_size = 36; // array size 
    int numbers[array_size]; //array with 36 elements 
    int count = 0; 
    int column_count = 5; 
    ifstream inputfile; //input file into stream object 
    //open file 
    inputfile.open("Scores.txt"); 
    //read file 
    while (count < array_size && inputfile >> numbers[count]) 
     count++; 
    //close file 
    inputfile.close(); 
    //display numbers read 
    for (count = 0; count < array_size; count++) { 
    cout << numbers[count] << " "; 
    if (count % column_count == column_count - 1) { 
     cout << "\n"; 
    } 
} 

    //find the average 
     double average; //average 
     double total = 0; //initialize accumulator 
     cout << "\nAverage:\n"; 
     for (count = 0; count < array_size; count++) 
      total += numbers[count]; 
     average = total/array_size; 
     cout << average << " "; 
     cout << endl; 

    //find the median 
     std::sort(numbers.begin(), numbers.end(), std::greater<int>()); 





     system ("pause"); 

     return 0; 
} 

감사합니다!

+2

직접 정렬 알고리즘을 작성해야합니까? – evanmcdonnal

+0

시도한 것을 게시하십시오. – user93353

답변

1

"큰"의 '덜'를 지정해야 일반 배열의 경우 첫 번째 인수는 배열의 첫 번째 위치를 가리키는 포인터입니다. 두 번째 인수는 배열의 마지막 요소를 지나간 포인터를 가리키는 포인터입니다. 세 번째 인수는 배열을 정렬해야하는 방향을 나타냅니다 (사용자의 경우 중앙값을 찾고 방향이 중요하지 않음).

std::sort(&(numbers[0]), &(numbers[array_size]), std::greater<int>()); 

기능에 배열을 전달, 그들은 자신에 대한 포인터로 붕괴 : 배열이 array_size의 길이와 번호를 호출에 관해서는, 새로운 함수 호출은 다시 작성됩니다. 따라서 & 연산자를 사용할 필요가 없습니다.

std::sort(numbers, numbers + array_size, std::greater<int>()); 

이 situtation의 데이터를 정렬하는 목적은 중간을 찾을 수 있습니다 : 함수 호출로 단순화 할 수있다. 오름차순 또는 내림차순 배열 정렬에 관계없이 중간 요소의 평균은 동일합니다. 오름차순으로 정렬해야하는 배열을 계속 사용하려면 세 번째 인수를 std::less<int>()으로 변경하거나 완전히 제거하십시오. 배열이 오름차순으로 정렬됩니다.

std::sort(numbers, numbers + array_size); 
+0

-1 OP의 필수 "오름차순"입니다.이 대답은 내림차순으로 정렬되기 때문에 (이 주석을 게시 할 때) 잘못되었습니다. 나의 짧은 대답은 그것을 정확하게하는 방법을 보여줍니다. 더 짧은 코드. –

+0

@ Cheersandhth.-Alf 좋은 지적이지만이 장면에서 데이터를 정렬하는 목적은 중간 값을 찾는 것입니다. 오름차순 또는 내림차순 배열 정렬에 관계없이 중간 요소의 평균은 동일합니다. 오름차순으로 정렬해야하는 배열을 계속 사용하려면 세 번째 인수를'std :: less ()'으로 변경하십시오 (또는 완전히 제거하십시오). 배열이 오름차순으로 정렬됩니다. – Ryan

+0

대답은 * 필자가 오름차순 대신 내림차순으로 정렬하기 때문에 잘못되었습니다. desending 순서가 주어진 목적에 유용하다는 것은 중요하지 않습니다 : 질문은 오름차순을 직접 요구합니다. 코드가 수정 될 수도 있습니다. 수정이 가능하다는 점을 지적하는 대신, 단지 수정하지 않는 것이 좋습니다. –

1
#include <algorithm> 

// ... 
std::sort(numbers, numbers + array_size); 
0

std :: sort (...) 기능에 대해서는 http://www.cplusplus.com/reference/algorithm/sort/을 참조하십시오. 질문에, 당신은 내장형을 다루고 있습니다. "Compare"매개 변수를 사용하지 않는 std :: sort의 첫 번째 오버로드 된 버전이면 충분합니다. 당신이

std::sort(numbers.begin(), numbers.end(), std::greater<int>()); 

을 사용하고 있기 때문에 : 당신은 내가 생각하지 않는 경우에, 당신은 정말 무엇을 의미 대신에 당신은 아마 이해하지 않고 어딘가에서이 줄을 복사

관련 문제