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

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

Восстановить пароль Регистрация
 
лыс
1 / 1 / 0
Регистрация: 04.11.2012
Сообщений: 50
03.01.2013, 09:34     Найти медиану ряда #1
Уважаемые программисты! Помогите исправить код по нахождению медианы ряда (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;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nixy
ComfyMobile
 Аватар для Nixy
399 / 280 / 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
399 / 280 / 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
399 / 280 / 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     Найти медиану ряда
Ответ Создать тему
Опции темы

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