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

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

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

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

03.01.2013, 09:34. Просмотров 1158. Ответов 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++
Треугольник задан координатами вершин А(0;0) В(2;2-1) C(2,2+1) Обчислить высоту hb и медиану mc.

В массиве из 19 вещественных чисел найти медиану - C++
В массиве из 19 вещественных чисел найти медиану (средний элемент) и поменять его местами с последним элементом. ПОдскажите please,...

Дано множество точек. Найти медиану. - C++
Учусь на первом курсе. Получил вот такое задание:&quot;Медианой множества, состоящего из четного числа точек на плоскости, называется прямая,...

Найти медиану массива без сортировок - C++
В массиве A (считать его из файла) (m нечетно), не содержащем одинаковых элементов, найти его медиану, т.е. такой элемент b, для которого в...

Найти среднее, моду и медиану по заданному массиву - C++
программа считает среднее, моду и медиану по заданному массиву выдает ошибку в bubbleSort #include &lt;cstdlib&gt; #include &lt;iostream&gt; ...

Для каждого i от 1 до n найти медиану среди первых i элементов последовательности - C++
Здравствуйте, не могу сообразить с задачей: Дана последовательность X. для каждого i от 1 до n нужно найти медиану среди первых i...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Nixy
ComfyMobile
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
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
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;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.01.2013, 14:45
Привет! Вот еще темы с ответами:

Как найти медиану неотсортированного массива (без использования дополнительного массива) - C++
как найти медиану неотсортированного массива, при этом не используя дополнительных массивов и не сортируя его.

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

Найти сумму ряда с заданной точностью, если дан общий член ряда - C++
Найти сумму ряда с точностью Е=-4 (0.0001) общий член которого n=n*-n2 (n kvadrat)... Надо написать программу, т.е текст..на языке Си...

Найти сумму ряда с точностью до члена ряда - C++
Помогите пожалуйста с задачей , вот условие Найти сумму ряда с точностью до члена ряда, меньшего ε(0.0001) для заданного значения и...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
03.01.2013, 14:45
Ответ Создать тему
Опции темы

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