Форум программистов, компьютерный форум CyberForum.ru

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

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

Найти медиану ряда - C++

03.01.2013, 09:34. Просмотров 1017. Ответов 5
Метки нет (Все метки)

Уважаемые программисты! Помогите исправить код по нахождению медианы ряда (N - длина последовательности). Может, что-то неправильно с qsort - сортировкой? Заранее благодарен.


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
#include <iostream>
#include <cstdio>
#include <cstdlib>
 
using namespace std;
 
int comp(const void *grade, const void *b)
{
 return *(int*)grade - *(int*)b;
}
 
int main()
{
int *grade=new int[250000];
int N, i, a, b;
cin >> N;
for (i=0; i<=N-1; i++)
 cin >> grade[i];
qsort(grade, N, sizeof(int), comp);
 
if (N%2!=0)
 printf("%d", grade[N/2]);
if (N%2==0)
{
a = (N/2)-1;
b = (N/2);
printf("%.1f", (float)(grade[a]+grade[b])/2);
}
 
return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.01.2013, 09:34     Найти медиану ряда
Посмотрите здесь:

C++ Дано множество точек. Найти медиану.
C++ Найти сумму ряда с точностью до члена ряда
C++ В массиве из 19 вещественных чисел найти медиану
Найти сумму ряда с точностью до члена ряда C++
Напишите программу, которая по заданной входной последовательности вычисляет ее медиану C++
Найти сумму ряда C++
Найти высоту и медиану треугольника C++
C++ Найти среднее, моду и медиану по заданному массиву
C++ Найти сумму ряда
Как найти медиану неотсортированного массива (без использования дополнительного массива) C++
Найти 10 членов ряда, абсолютную разность между табличной функцией и суммой ряда C++
C++ Для каждого i от 1 до n найти медиану среди первых i элементов последовательности

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nixy
ComfyMobile
 Аватар для Nixy
400 / 281 / 8
Регистрация: 24.07.2012
Сообщений: 916
03.01.2013, 11:29     Найти медиану ряда #2
C++
1
N/2
если в ряде 7 чисел чему равно будет? скорее всего тут ошибка, потому что для индекса это нормально будет 3 а для порядкового номера нет, нужно 4,а где медиана у четных чисел размеров?
лыс
1 / 1 / 0
Регистрация: 04.11.2012
Сообщений: 50
03.01.2013, 11:35  [ТС]     Найти медиану ряда #3
Nixy, так ведь первый элемент массива имеет индекс 0, поэтому нужно использовать N/2 (N/2=7/2=3 , то есть 4-ый по счету элемент массива)
Nixy
ComfyMobile
 Аватар для Nixy
400 / 281 / 8
Регистрация: 24.07.2012
Сообщений: 916
03.01.2013, 11:39     Найти медиану ряда #4
покапавшись в тырнете нашел определение худо бедное, медиана только у нечетного количества может быть, так что вроде верно у васработает единственное что
C++
1
int *grade=new int[250000];
что вам мешает определять размер массива после опеределения N
лыс
1 / 1 / 0
Регистрация: 04.11.2012
Сообщений: 50
03.01.2013, 14:09  [ТС]     Найти медиану ряда #5
В задаче сказано:
"В случае четного N медианой называется среднее арифметическое двух элементов, которые окажутся на местах N/2 и (N/2)+1, если последовательность отсортировать. "
Nixy
ComfyMobile
 Аватар для Nixy
400 / 281 / 8
Регистрация: 24.07.2012
Сообщений: 916
03.01.2013, 14:45     Найти медиану ряда #6
тогда все нормально работает в чем вопрос то?

Добавлено через 15 минут
результат при 10
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
#include <iostream>
#include <windows.h>
 
using namespace std;
 
 
 
 
int comp(const void *grade, const void *b)
{
 return *(int*)grade - *(int*)b;
}
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    srand(time(0));
    int N, i, a, b;
    cout << "Введите размер массива " <<endl;
    cin >> N ;
    int *grade=new int[N];
    for (i=0; i<=N-1; i++){
     grade[i] = rand()%40;
     cout << grade[i] << " " ;
    }
    qsort(grade, N, sizeof(int), comp);
    cout << endl << "После сортировки " << endl;
    for (i=0; i<=N-1; i++)
       cout << grade[i] << " " ;
    cout << endl << "Медиана равна  " ;
    if (N%2!=0)
    cout << grade[N/2] <<endl;
    if (N%2==0)
    {
        a = (N/2)-1;
        b = (N/2);
        cout << (float)(grade[a]+grade[b])/2 <<endl;;
    }
    system("pause");
    return 0;
}
Yandex
Объявления
03.01.2013, 14:45     Найти медиану ряда
Ответ Создать тему
Опции темы

Текущее время: 01:00. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru