Другие языки программирования и технологии
Как создать функцию в с++ которая бы возвращала моду?
напиши, пожалуйста, эту программу.. . никак не могу додуматься (
#include <iostream>
double GetMedian(double daArray[], int iSize) {
// Allocate an array of the same size and sort it.
double* dpSorted = new double[iSize];
for (int i = 0; i < iSize; ++i) {
dpSorted[i] = daArray[i];
}
for (int i = iSize - 1; i > 0; --i) {
for (int j = 0; j < i; ++j) {
if (dpSorted[j] > dpSorted[j+1]) {
double dTemp = dpSorted[j];
dpSorted[j] = dpSorted[j+1];
dpSorted[j+1] = dTemp;
}
}
}
// Middle or average of middle values in the sorted array.
double dMedian = 0.0;
if ((iSize % 2) == 0) {
dMedian = (dpSorted[iSize/2] + dpSorted[(iSize/2) - 1])/2.0;
} else {
dMedian = dpSorted[iSize/2];
}
delete [] dpSorted;
return dMedian;
}
double GetMode(double daArray[], int iSize) {
// Allocate an int array of the same size to hold the
// repetition count
int* ipRepetition = new int[iSize];
for (int i = 0; i < iSize; ++i) {
ipRepetition[i] = 0;
int j = 0;
bool bFound = false;
while ((j < i) && (daArray[i] != daArray[j])) {
if (daArray[i] != daArray[j]) {
++j;
}
}
++(ipRepetition[j]);
}
int iMaxRepeat = 0;
for (int i = 1; i < iSize; ++i) {
if (ipRepetition[i] > ipRepetition[iMaxRepeat]) {
iMaxRepeat = i;
}
}
delete [] ipRepetition;
return daArray[iMaxRepeat];
}
double GetMean(double daArray[], int iSize) {
double dSum = daArray[0];
for (int i = 1; i < iSize; ++i) {
dSum += daArray[i];
}
return dSum/iSize;
}
int main()
{
double dValues[] = {3.4, 4.8, 8.4, 9.6, 2.3, 9.6, 5.6, 9.6, 4.8, 2.2};
int iArraySize = 10;
std::cout << "Median = " << GetMedian(dValues, iArraySize) << std::endl;
std::cout << "Mode = " << GetMode(dValues, iArraySize) << std::endl;
std::cout << "Mean = " << GetMean(dValues, iArraySize) << std::endl;
return 0;
}
double GetMedian(double daArray[], int iSize) {
// Allocate an array of the same size and sort it.
double* dpSorted = new double[iSize];
for (int i = 0; i < iSize; ++i) {
dpSorted[i] = daArray[i];
}
for (int i = iSize - 1; i > 0; --i) {
for (int j = 0; j < i; ++j) {
if (dpSorted[j] > dpSorted[j+1]) {
double dTemp = dpSorted[j];
dpSorted[j] = dpSorted[j+1];
dpSorted[j+1] = dTemp;
}
}
}
// Middle or average of middle values in the sorted array.
double dMedian = 0.0;
if ((iSize % 2) == 0) {
dMedian = (dpSorted[iSize/2] + dpSorted[(iSize/2) - 1])/2.0;
} else {
dMedian = dpSorted[iSize/2];
}
delete [] dpSorted;
return dMedian;
}
double GetMode(double daArray[], int iSize) {
// Allocate an int array of the same size to hold the
// repetition count
int* ipRepetition = new int[iSize];
for (int i = 0; i < iSize; ++i) {
ipRepetition[i] = 0;
int j = 0;
bool bFound = false;
while ((j < i) && (daArray[i] != daArray[j])) {
if (daArray[i] != daArray[j]) {
++j;
}
}
++(ipRepetition[j]);
}
int iMaxRepeat = 0;
for (int i = 1; i < iSize; ++i) {
if (ipRepetition[i] > ipRepetition[iMaxRepeat]) {
iMaxRepeat = i;
}
}
delete [] ipRepetition;
return daArray[iMaxRepeat];
}
double GetMean(double daArray[], int iSize) {
double dSum = daArray[0];
for (int i = 1; i < iSize; ++i) {
dSum += daArray[i];
}
return dSum/iSize;
}
int main()
{
double dValues[] = {3.4, 4.8, 8.4, 9.6, 2.3, 9.6, 5.6, 9.6, 4.8, 2.2};
int iArraySize = 10;
std::cout << "Median = " << GetMedian(dValues, iArraySize) << std::endl;
std::cout << "Mode = " << GetMode(dValues, iArraySize) << std::endl;
std::cout << "Mean = " << GetMean(dValues, iArraySize) << std::endl;
return 0;
}
Данил Власов
хм... странно. он не запускается
// C++11
#include <iostream>
#include <iomanip>
#include <vector>
#include <algorithm>
#include <utility>
#include <functional>
template<typename T> std::vector<T> mode(std::vector<T>&);
int main() {
std::vector<int> test = { 6, 2, 6, 6, 8, 9, 9, 9, 10 };
std::streamsize w = 3;
for (auto i : test) std::cout << std::setw(w) << i;
std::cout << std::endl;
std::vector<int> md = mode(test);
for (auto i : md) std::cout << std::setw(w) << i;
std::cout << std::endl;
std::cin.get();
}
template<typename T> std::vector<T> mode(std::vector<T>& observation) {
std::sort(observation.begin(), observation.end());
std::size_t size = observation.size();
std::vector<T> unique(size);
std::vector<T>::iterator it = std::unique_copy(observation.begin(), observation.begin() + size, unique.begin());
unique.resize(std::distance(unique.begin(), it));
size = unique.size();
typedef std::pair<unsigned, T> pair;
std::vector<pair> statistic(size);
for (std::size_t i = 0; i < size; ++i) statistic.at(i) = std::make_pair(std::count(observation.begin(), observation.end(), unique.at(i)), unique.at(i));
std::vector<pair>::iterator max = std::max_element(statistic.begin(), statistic.end(), std::less<pair>());
std::vector<T> result;
for (std::size_t i = 0; i < size; ++i) if (statistic.at(i).first == max->first) result.push_back(statistic.at(i).second);
return result;
}
#include <iostream>
#include <iomanip>
#include <vector>
#include <algorithm>
#include <utility>
#include <functional>
template<typename T> std::vector<T> mode(std::vector<T>&);
int main() {
std::vector<int> test = { 6, 2, 6, 6, 8, 9, 9, 9, 10 };
std::streamsize w = 3;
for (auto i : test) std::cout << std::setw(w) << i;
std::cout << std::endl;
std::vector<int> md = mode(test);
for (auto i : md) std::cout << std::setw(w) << i;
std::cout << std::endl;
std::cin.get();
}
template<typename T> std::vector<T> mode(std::vector<T>& observation) {
std::sort(observation.begin(), observation.end());
std::size_t size = observation.size();
std::vector<T> unique(size);
std::vector<T>::iterator it = std::unique_copy(observation.begin(), observation.begin() + size, unique.begin());
unique.resize(std::distance(unique.begin(), it));
size = unique.size();
typedef std::pair<unsigned, T> pair;
std::vector<pair> statistic(size);
for (std::size_t i = 0; i < size; ++i) statistic.at(i) = std::make_pair(std::count(observation.begin(), observation.end(), unique.at(i)), unique.at(i));
std::vector<pair>::iterator max = std::max_element(statistic.begin(), statistic.end(), std::less<pair>());
std::vector<T> result;
for (std::size_t i = 0; i < size; ++i) if (statistic.at(i).first == max->first) result.push_back(statistic.at(i).second);
return result;
}
Какую моду? Французскую? Или модуль? Если модуль, то чего? Вещественного числа?
Так есть стандартная функция abs...
Так есть стандартная функция abs...
Данил Власов
https://ru.wikipedia.org/wiki/Мода_(%D1%81%D1%82%D0%B0%D1%82%D0%B8%D1%81%D1%82%D0%B8%D0%BA%D0%B0)
Ануар Ермишов
повеселил :)
Михаил Здановский
http://ru.wikipedia.org/wiki/Мода_(статистика)
Андрей Камозин
Так бы и написала - моду вариационного ряда :) Хотя, конечно, я сам виноват, не догадался :(
Похожие вопросы
- Помогите с Си. Вопрос по заданию (насчет типизированной функции, которая должна возвращать массив)
- В чем разница между функциями, которые возвращают значения и которые не возвращают? Не вникаю в смысл слова "возвращает"
- Создать функцию которая находит одинаковЫе єлементы в 2 массивах та использовать их для обработки рядов матрици
- Создать функцию которая находит одинаковЫе єлементы в 2 массивах та использовать их для обработки рядов матрици.
- Нужна функция на php которая будет считывать текст из файла и выводить слова которые начинаются и заканчиваются на "а"
- Описать функцию в c++, которая находит среднее арифметическое значение всех элементов сформированного непустого списка
- Нужна помощь! Необходимо создать программу на С++, которая решает квадратное уравнение. Выдает ошибку после }
- Как создать красивый хороший сайт который будет приносить доход? С минимальными вложениями.
- нужно создать на паскале программу которая будет находить повторяющиеся слова в массиве
- Вопрос про возвращаемое значение из функции в С++.