2015-11-23 8 views
0

Программа предназначена для чтения элементов из файла, затем сортировки этих элементов с использованием сортировки оболочки, сохранения отсортированных элементов в массиве, а затем поиска минимального, максимальный, суммарный и средний.Как найти MIN, MAX, SUM и AVG из отсортированного списка

Пока он читает файл, сортирует элементы и хранит их в массиве, но после этого я не могу разглядеть вокруг него минуты, макс, сумму и avg.

Вот мой код до сих пор:

#include <iostream> 
#include <fstream> 

#include "arrayListType.h" 

using namespace std; 

int main() 
{ 
    ifstream inFile; 
    ofstream outFile; 

    inFile.open("text.txt"); 

    arrayListType<int> list; 
    arrayListType<int> newList; 

    int num, counter = 0, min, max, sum = 0, avg = 0; 

    while (inFile >> num) 
    { 
     list.insertEnd(num); 
    } 

    inFile.close(); 

    outFile.open("out.txt"); 


    cout << "The list before sorting:" << endl; 
    list.print(); 
    cout << endl; 

    list.shellSort(); 

    cout << "The list after sorting:" << endl; 
    list.print(); 
    cout << endl; 

    list = newList; 


    cout << endl; 
    return 0; 
} 
+1

Подсказка - использовать петли. – SergeyA

+0

SergeyA Я знаю, как использовать для этого циклы. Я просто не знаю, как ссылаться на новый список. –

ответ

3

Ну, если список отсортирован, то:

мин является первым элементом

Макс является последним элементом

сумма добавить все элементы вместе

средний (при условии, что вы имеете в виду среднее значение) su м/количество элементов в списке

+0

За исключением случаев, когда число элементов в списке равно нулю; в этом случае среднее значение, вероятно, также равно нулю. – Codor

+1

Фактически в этом случае среднее значение не определено. NaN. Однако вы правы, любой правильный код усреднения должен определять поведение для этого случая использования. –

+0

Да, это может показаться совершенно бесполезным. Мне нужно отображать эти элементы самостоятельно (т. Е. Минимум списка: ...) Я знаю, как выполнять вычисления, но я не могу сказать, что нужно указывать во время процесса, например, если бы я использовал цикл while для вычисления min, я бы сказал, что newList.top() - случай стеков или очередей, например. Это то, с чем меня беспокоит. –

0

С или без сортировки, можно использовать грубый метод силы:

int minimum = MAX_INT; 
int maximum = MIN_INT; 
int sum = 0; 
unsigned int quantity = 0U; 
Let p = start of list; 
while (p != end of list) 
{ 
    if (p->value < minimum) minimum = p->value; 
    if (p->value > maximum) maximum = p->value; 
    sum = sum + p->value; 
    ++quantity; 
    p = p->next; 
} 
double average = 0.0; 
if (quantity != 0) 
{ 
    average = (double)sum/(double) quantity; 
} 

Edit 1:
Чтобы сэкономить время, вы можете выполнить эти расчеты, минимальный, максимальный, сумма и количество, пока вы вставляете в список.

Что вызывает мысль о том, что список не нужен, если вы не собираетесь обрабатывать значения после вычисления среднего.

Смежные вопросы