Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Estale
0 / 0 / 0
Регистрация: 12.10.2009
Сообщений: 20
#1

Поиск ближайшего среднего арифметического (на C++) - C++

01.11.2009, 12:38. Просмотров 1098. Ответов 7
Метки нет (Все метки)

Люди добрые, помогите написать код программы на С++
Видел код этой программы на Pascal'е но не пойму как перевести его в Си++

Поиск ближайшего среднего арифметического.
Даны натуральное число n и действительные числа x, y1, ... , yn. В последовательности y1, ... , yn найти два члена, среднее арифметическое которых ближе всего к x.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.11.2009, 12:38
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Поиск ближайшего среднего арифметического (на C++) (C++):

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

Поиск среднего арифметического массива - C++
Дано массив чисел,написать програму какая находит среднее арифметическое число.

Поиск среднего арифметического и наибольшего элементов матрицы - C++
Дана вещественная матрица A(n, n). Найти среднее арифметическое элементов, расположенных на и выше главной диагонали и наибольший среди...

Вычисление среднего арифметического и среднего геометрического двух чисел - C++
Даны два действительных положительных числа. Записать алгоритм вычисления среднего арифметического и среднего геометрического этих чисел.

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

Нахождение среднего арифметического - C++
Всем добрый день, я только начал изучать c++, столкнулся с проблемой: нужно вычислить вреднее арифметическое N величин. предисловие:...

7
Monte-Cristo
2794 / 1380 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
01.11.2009, 13:00 #2
Ну вот как-то так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <iostream>
#include <cmath>
using namespace std;
 
int main()
{
    const int n=5;
    double x;
    double y[n];
    int  y1=0, y2=1; 
    double ya;
    
    cout << "Please, input x = ";
    cin >> x;
    
    for (int i=0; i<n; i++)
    {
        cout << "Please, input y[" << i+1 << "] = ";
        cin >> y[i];
    }
    
    ya = fabs((y[y1]+y[y2])/2 - x);
    for (int i=0; i<n-1; i++)
    {
        for (int j=i+1; j<n; j++)
        {
            double aY = fabs(((y[i]+y[j])/2 - x));
            if (aY < ya)
            {
                y1 = i;
                y2 = j;
                ya = aY;
            }
        }
    }
    
    cout << "\nY1 = " << y[y1] << endl;
    cout << "Y2 = " << y[y2] << endl;
    
    return 0;
}
Не компилировал... Проверь..
1
alibaba314
19 / 19 / 1
Регистрация: 22.03.2009
Сообщений: 58
01.11.2009, 13:37 #3
можно объяснить алгоритм !
0
Estale
0 / 0 / 0
Регистрация: 12.10.2009
Сообщений: 20
01.11.2009, 17:18  [ТС] #4
Цитата Сообщение от Monte-Cristo Посмотреть сообщение
Ну вот как-то так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <iostream>
#include <cmath>
using namespace std;
 
int main()
{
    const int n=5;
    double x;
    double y[n];
    int  y1=0, y2=1; 
    double ya;
    
    cout << "Please, input x = ";
    cin >> x;
    
    for (int i=0; i<n; i++)
    {
        cout << "Please, input y[" << i+1 << "] = ";
        cin >> y[i];
    }
    
    ya = fabs((y[y1]+y[y2])/2 - x);
    for (int i=0; i<n-1; i++)
    {
        for (int j=i+1; j<n; j++)
        {
            double aY = fabs(((y[i]+y[j])/2 - x));
            if (aY < ya)
            {
                y1 = i;
                y2 = j;
                ya = aY;
            }
        }
    }
    
    cout << "\nY1 = " << y[y1] << endl;
    cout << "Y2 = " << y[y2] << endl;
    
    return 0;
}
Не компилировал... Проверь..
Вроде вот так запускается:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <iostream.h>
#include <math.h>
#include <stdio.h>
 
int main()
{
    const int n=5;
    double x;
    double y[n];
    int  y1=0, y2=1; 
    double ya;
    
    cout << "Please, input x = ";
    cin >> x;
    
    for (int i=0; i<n; i++)
    {
        cout << "Please, input y[" << i+1 << "] = ";
        cin >> y[i];
    }
    
    ya = fabs((y[y1]+y[y2])/2 - x);
    for (int i=0; i<n-1; i++)
    {
        for (int j=i+1; j<n; j++)
        {
            double aY = fabs(((y[i]+y[j])/2 - x));
            if (aY < ya)
            {
                y1 = i;
                y2 = j;
                ya = aY;
            }
        }
    }
    
    cout << "\nY1 = " << y[y1] << endl;
    cout << "Y2 = " << y[y2] << endl;
    
    return 0;
}
Почему n=5? Если не сложно- объясните алгоритм, чтоб разобраться...
0
Monte-Cristo
2794 / 1380 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
01.11.2009, 17:53 #5
Цитата Сообщение от Estale Посмотреть сообщение
Почему n=5?
ну это я взял для установления кол-во y. То есть мы вводим 5 игриков.

Алгоритм следующий.

1. За начальное ближнее среднее арифметическое, мы берем среднее арифметическое первого и второго элемента.
2. Сравнение на близкость проводиться следующим образом:
Среднее арифметическое двух элементов - x. Берем это по модулю (так как близкость может определяться как за x так и до x ... другими словами, чтобы разность не была отрицательной).
3. Пункт два повторяем для всех комбинаций y, и ищем самую минимальную разность между средним арифметическим и x.
4. Среднее арифметического давшее самую минимальную разность и будет искомым.
1
Estale
0 / 0 / 0
Регистрация: 12.10.2009
Сообщений: 20
01.11.2009, 18:52  [ТС] #6
Цитата Сообщение от Monte-Cristo Посмотреть сообщение
ну это я взял для установления кол-во y. То есть мы вводим 5 игриков.

Алгоритм следующий.

1. За начальное ближнее среднее арифметическое, мы берем среднее арифметическое первого и второго элемента.
2. Сравнение на близкость проводиться следующим образом:
Среднее арифметическое двух элементов - x. Берем это по модулю (так как близкость может определяться как за x так и до x ... другими словами, чтобы разность не была отрицательной).
3. Пункт два повторяем для всех комбинаций y, и ищем самую минимальную разность между средним арифметическим и x.
4. Среднее арифметического давшее самую минимальную разность и будет искомым.
Наверное ещё стоит тогда добавить в код возможность ввода числа n, вместо того чтоб делать его константой в коде...


Вот я ввожу х=10
y[1]=1
y[2]=6
y[3]=7
y[4]=3
y[5]=15

Мне выдаёт Y1=1, Y2=6
Но ведь самое подходящее это числа 15 и 3...


И кстати, код выдаёт в 23ей строке ошибку... В условии i=0
0
Monte-Cristo
2794 / 1380 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
01.11.2009, 19:47 #7
Estale,
1. Программу я даже не компилировал. Я дал общий алгоритм. Набирать в редакторе код - мне не очень нравиться.. но набрал..

2. У меня выводит 6 и 15, что, честно говоря, и есть правильным результатом.

3. Мне что, еще писать за вас работу с динамическим распределнием памяти? Будьте добры, в следующий раз указывайте пожелания...

Код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <iostream>
#include <cmath>
using namespace std;
 
int main()
{
    int n=0;
    double x;
    double *y;
    int  y1=0, y2=1; 
    double ya;
    
    cout << "Please, input x = ";
    cin >> x;
    
    cout << "Please, input n = ";
    cin >> n;  
 
    y = new double[n];
    
    for (int i=0; i<n; i++)
    {
        cout << "Please, input y[" << i+1 << "] = ";
        cin >> y[i];
    }
    
    ya = fabs((y[y1]+y[y2])/2 - x);
    for (int i=0; i<n-1; i++)
    {
        for (int j=i+1; j<n; j++)
        {
            double aY = fabs(((y[i]+y[j])/2 - x));
            if (aY < ya)
            {
                y1 = i;
                y2 = j;
                ya = aY;
            }
        }
    }
    
    cout << "\nY1 = " << y[y1] << endl;
    cout << "Y2 = " << y[y2] << endl;
    
    delete[] y;
    
    return 0;
}
1
Estale
0 / 0 / 0
Регистрация: 12.10.2009
Сообщений: 20
01.11.2009, 20:12  [ТС] #8
Цитата Сообщение от Monte-Cristo Посмотреть сообщение
Estale,
1. Программу я даже не компилировал. Я дал общий алгоритм. Набирать в редакторе код - мне не очень нравиться.. но набрал..

2. У меня выводит 6 и 15, что, честно говоря, и есть правильным результатом.

3. Мне что, еще писать за вас работу с динамическим распределнием памяти? Будьте добры, в следующий раз указывайте пожелания...
Чуть подправил, теперь всё работает.
Огромное человеческое спасибо! Теперь хоть разобрался в идее ))
0
01.11.2009, 20:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.11.2009, 20:12
Привет! Вот еще темы с ответами:

Вычисление среднего арифметического - C++
Программа вылетает при вводе контрольного значения. причем если в вычислении переменной rez деление заменить сложением, все работает...

Нахождение среднего арифметического - C++
Здравствуйте, помогите реализовать функцию среднего арифметического. Сама задача: Программа запрашивает у пользователя 10 результатов...

Нахождение среднего арифметического - C++
Здравствуйте! Такая задача:вводится последовательность из n целых чисел (это задание необходимо сделать без использования массива). ...

найти меньшее среднего арифметического - C++
не знаю как вывести среднее арифметическое в таком виде: average = 7.60. и меньшее среднего арифметического тоже. и главное разрешается...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru