2016-11-11 2 views
1

я должен написать программу, которая позволяет вычислить среднее арифметическое из произвольного числа значений (выбранного пользователем)Упражнения: для цикла и массива

Это будет выходы:

Количество: 34

Количество: 36

Количество: 44

Количество: // и я выбираю, чтобы остановить ввод нажатием

// Выходы:

Он был введён 3 номера и насчитайте является: 38

Конечно, я забыл после того, что я сделал:

for (int x = 0; x < 50; x++){ 
cout << "Number: "; 
cin >> number[x]; 
cout << "You have inserted the " << x << " element of the array;" << endl; 

    sum += number[x]; 
    avarage = sum/number[x]; 
    nEelementi = number[x];} 

так я бегу программа, введите некоторые цифры, нажмите что-то вроде ctrl + d или попытайтесь добавить что-то в код .. но это только переход от первого к последнему элементу массива без значений, потому что не введен, конечно .. и затем напечатайте абсурдную сумму и сумму.

Я знаю, что мне не нужен массив, чтобы это сделать, но это необходимо из упражнения .. также упражнение только для использования для циклов или массивов while или while. Что мне нужно, это остановить процесс ввода и рассчитать сумму и разрешить только то, что я написал.

редактирование1. Я попытался нырнуть, написав для (x = 0; x < n, x ++), потому что это имело смысл для меня, но я думаю, что он «думает» n, писал так, бесконечно, потому что результаты равны 0 (потому что предел числа, деленного на бесконечность, равен 0) .. так что я начал злиться. Теперь я начал думать, что было бы проще использовать цикл while! и написали

#include <iostream> 
using namespace std; 

int main() { 

    int num[50]; 
    double sum = 0; 
    double average = 0; 
    int cont; 
    int end = 0; 

while (cont < 50) { 
cout << "num: "; 
cin >> num[cont]; 
sum += num[cont]; 
cont++; 
cout << "Want to continue 0 = sì, 1 = no"; 
cin >> end; 

    if (end == 1) {break;} 
} 

    average = sum/cont; 

    cout << "You have insert " << cont << " elements" << endl; 
    cout << "LThe sum is: " << sum << endl; 
    cout << "The avarage is: " << average << endl; 

    return 0; 
    } 

НО все еще не работает. Мой профессор говорит, что вы можете остановить номер входа, нажав ctrl + d, чтобы я не делал ничего хорошего. Извините за поздний ответ, но мне также нужно перевести код. Надеюсь, весь перевод будет хорошим :)

изменить2.

#include <iostream> 


int main() { 
int sum = 0; 
int num; 

while (std::cin) { 

std::cout << "Number: "; 
std::cin >> num; 

} 

if (std::cin >> num) { 

sum += num; 
num++; 

} 

else { 

std::cin.clear(); 
std::cout << "Input interrupted" << std::endl; 

} 

std::cout << "Sum is " << sum << std::endl; 
std::cout << "You have entered " << num << " numbers" << std::endl; 

return 0; 
} 

Я люблю этот новый код, очень простой и понятный для меня, но я не был в состоянии добавить операцию суммы, она выводит только 0! (оставив в среднем) А также я не смог определить и отобразить, сколько цифр я ввел. Последняя строка кода является лишь примером того, что я хочу сделать.

edit3.

Наконец-то я сделал это.

#include <iostream> 
using namespace std; 

int main(){ 

double numero; 
int index = 0; 
double somma = 0.; 


cout << "Inserire un numero: "; 

while(cin)   

{ 
    if (cin >> numero) 

    { 
    somma = somma + numero;  
    index++; 
    cout << "Inserire un numero: "; 
    } 

    else 

    { 
    cout << "Input interrotto" << endl; 
    } 
} 

cout << "Sono stati inseriti " << index << " numeri e la lora media è: 
<< somma/index << endl; 

return 0; 
} 

Большое спасибо!

P.S.В конце концов, мне не нужно использовать массив, это просто просто

+1

не очищенный вопрос. что тогда? – jace

+1

у вас есть вопрос? – pm100

+1

Зачем вам нужен массив? Просто прочитайте номер, добавьте его в сумму (изначально нуль), подсчитайте количество чисел, которые вы читаете, и определите среднее значение по сумме/счету, когда закончите. – WhozCraig

ответ

1

Здесь есть несколько проблем. Один из них заключается в том, что если ошибки потока из-за закрытого или плохого ввода, вы не восстанавливаетесь, и вы просто заряжаетесь через свой цикл.

Итак, прежде всего, сделайте петлю, если необходимо, прекратите работу. Я также собираюсь преобразовать его в цикл while в рамках подготовки к следующей части.

int x = 0; 
while(std::cin && x < 50) 
{ 
    std::cin >> number[x++]; 
} 

Теперь он заканчивается раньше, если ошибки потока. Но что, если пользователь набрал «привет»? Вы можете его игнорировать и продолжать:

if(std::cin >> number[x]) 
    { 
     x++; 
    } 
    else 
    { 
     std::cin.clear(); 
    } 

Обратите внимание, что я не вычислял сумму или что-либо внутри цикла. Нет необходимости, поскольку вы уже помещаете их в массив. Вы можете просто сделать это после цикла. Здесь я использую std::accumulate

double sum = std::accumulate(number, number + x, 0.0); 
double average = 0.0; 
if(x > 0) average = sum/x; 

Теперь, вы также сказали, что вы хотите произвольное число значений. Ваш исходный код допускает до 50. Вместо того, чтобы хранить их, вы можете вместо этого просто вычислить «на лету» и сбросить значения.

double sum = 0.0; 
int count = 0; 

while(std::cin) 
{ 
    double value; 
    if(std::cin >> value) 
    { 
     sum += value; 
     count++; 
    } 
    else 
    { 
     std::cin.clear(); 
    } 
} 

double average = 0.0; 
if(count > 0) average = sum/count; 

Если вы еще хотите сохранить значения по пути, вы можете использовать вектор.

std::vector<double> numbers; 

//... 

     numbers.push_back(value); 

И если вы хотите, чтобы пользователь, чтобы выбрать количество значений:

std::cout << "Enter number of values: " << std::flush; 
std::size_t max_count = 0; 
std::cin >> max_count; 

std::vector<double> numbers; 
numbers.reserve(max_count); 

while(std::cin && numbers.size() < max_count) 
{ 
    // ... 
} 
+0

Хорошо, что ваш код идеально подходит для меня! Но я еще не изучил векторы (а также упражнения не требуют от них, от доставки. Это школьное упражнение), поэтому трудно понять эту часть. Теперь мой код кандидата - это что-то вроде этого, но все еще не может добавить операцию суммирования (см. Edit2 выше) – Alberto

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