ошибки компилятора — Ошибка исходного кода C ++ — Вычисления различий в расстоянии и общей сумме

Цель этой программы — иметь возможность вводить набор целых двойных значений и выводить общее расстояние в виде суммы. Он также предназначен для распознавания наименьшего и наибольшего расстояний, а также для вычисления среднего значения двух или более расстояний.

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

Вот источник:

/* These includes are all part of a custom header designed
by Bjarne Stroustrup as part of Programming: Principles and Practice
using c++
*/

#include<iostream>
#include<iomanip>
#include<fstream>
#include<sstream>
#include<cmath>
#include<cstdlib>
#include<string>
#include<list>
#include <forward_list>
#include<vector>
#include<unordered_map>
#include<algorithm>
#include <array>
#include <regex>
#include<random>
#include<stdexcept>

// I am also using the "stdafx.h" header.

// reading a sequence of integer doubles into a vector.
This could be the distance between two areas with different paths

int main()
{
vector<double> dist;    // vector, double integer value

double sum = 0;             // sum of two doubles
double min = 0;             // min dist
double max = 0;             // max dist

cout << "Please enter a sequence of integer doubles (representing distances): \n";

double val = 0;

while (cin >> val)
{
if (val <= 0)
{
if (dist.size() == 0)
error("no distances");

cout << "The total distance is: " << sum << "\n";
cout << "The smallest distance is: " << min << "\n";
cout << "The greatest distance is: " << max << "\n";
cout << "The average (mean) distance is: " << sum / dist.size() << "\n";

keep_window_open();

return 0;
}

dist.push_back(val);    // stores vector value

// updating the runtime values

sum += val;

if (val > min)
min = val;

if (max < val)
max = val;
}
if (dist.size() == 0)
error("no distances");

cout << "The total distance is: " << sum << "\n";
cout << "The smallest distance is: " << min << "\n";
cout << "The greatest distance is: " << max << "\n";
cout << "The average (mean) distance is: " << sum / dist.size() << "\n";

keep_window_open();
}

Кроме того, я пытался ввести небольшой блок исходного кода в виде чего-то вроде «catch (runtime_error e)», но он ожидает какого-то объявления, и я не знаю, как заставить его скомпилировать без ошибок.

Помочь с удалением реплицированного / повторяющегося блока кода, чтобы уменьшить раздувание, было бы здорово — помимо всего прочего.

-2

Решение

Вместо того, чтобы иметь if заявление внутри while, вы должны объединить два условия, чтобы избежать дублирования этого кода:

while ( (cin >> val) && (val > 0) )

Также вам нужно инициализировать min в наибольшее значение, а не ноль, если вы хотите, чтобы первое сравнение захватывало первое возможное значение в течение мин.

Создание функции из дублированного кода — это решение общего назначения, которое в вашем случае не является хорошим выбором по двум причинам: во-первых, в этом нет необходимости, поскольку проще и лучше объединить поток управления, чтобы не было нужно вызвать этот код в двух местах. Во-вторых, в дублированном коде используется слишком много локальных переменных, поэтому, если бы была причина превратить дублированный код в функцию, хороший дизайн также потребовал бы сбора некоторых или всех этих локальных переменных в объект.

Если бы не было чище и проще объединить два условия, все равно было бы лучше объединить поток управления, чем придумывать функцию для вызова из двух мест. Вы холодно использовали:

if (val <= 0)
{
break;
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]