Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
vet
175 / 176 / 55
Регистрация: 08.04.2009
Сообщений: 1,309
1

Сортировка массива с числами типа double

08.04.2009, 13:55. Просмотров 829. Ответов 1
Метки нет (Все метки)

Привет.
Написал прогу подчитывающую кол-во одинаковых символов в тексте. И посчитал вероятность их появления. А упорядочить вероятности в массиве по убыванию не получается. Пытался и 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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <cmath>
#include <string>
#include <algorithm>
#include <cstdio>
using namespace std;
 
int *h;
long m = 160000;
 
 
/*int compare (const void * a1, const void * b1)
{
  return ( *(double*)b1-*(double*)a1 );
}
 
*/
 
void Prob()
{
     
     ifstream ifs("file.txt");
     ofstream out("out.txt"); 
     char *a=new char[m];
     int *b=new int[m];
    // double p[m];
     double *pp=new double[m];
     long mm;
     h=b;
     int i = 0;
     bool flag;
     for(int n = 0; n < m; n++)
     b[n] = 0;
     char ch;
     int count = 0;
    
    
     while(ifs)
     {
               ifs >> ch;
     for(int j = 0; j < i; j++)
     {
             if(ch == a[j])
             {
               // cout << a[j];      
                  b[j]++;
                  flag = true;
                  break;
            }
     }
       if(!flag)
        {
            a[i] = ch;
           // cout << a[i];
            b[i++]++;
        }
        flag = false;
        count++; 
    }
      cout << count-2 << "\n";
    if(i<m)
        a[i] = '#';
        i = 0;
        int count1=0;
      while(a[i]!='#'&& a[i]<m)
    {          
        out << a[i] << " - " << b[i]<< endl;
        pp[m] = (double) *h/(count-2);//массив вероятностей не упорядоченный
        
        *(h++);
        i++;
        count1++;
    }
   
    
    
        /*qsort (pp, count1, sizeof(double), compare);
        for (int n1=0; n1<count1; n1++)
        printf ("%f ",pp[n1]);*/
 
 
 
    /*for (int i = 0; i<count1-1; ++i){
        double tmp = 0;
        for (int j=(i+1); j<count1; ++j)
            if (pp[i]<pp[j]) {
                tmp = pp[i];
                pp[i] = pp[j];
                pp[j] = tmp;        
                }
    }
    for (int i = 0; i < count1; ++i) cout << pp[i] << endl;
*/
        
     cout << count1; 
 
}
 
 
 
main(void)
{
      Prob();
 
cin.get();
cin.get();
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.04.2009, 13:55
Ответы с готовыми решениями:

Создание массива со случайными числами типа long и double
нужно создать и наполнить массив определенных размеров типа лонг и дабл, наполнив случайными...

Перегрузка типа int и double и сортировка
Дано задание: В одномерном массиве состоящем из n элементов вычислить: 1 номер минимального по...

Аргумент типа double несовместим с параметром типа double*
Функция function должна возвращать количество элементов массива, значение которые превышает...

Аргумент типа double несовместим с параметром типа double
#include &lt;iostream&gt; #include &lt;cmath&gt; #include &lt;math.h&gt; using namespace std; #define c 40...

Найти чётные элементы массива типа double
или чем заменить операцию %

1
Monte-Cristo
2796 / 1384 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
08.04.2009, 18:46 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
// Метод Шелла
void  Shell(int *A, int n)
{
        int h = n/2;
 
        while (h>0)
        {
                for (int i=0; i<n-h; i++)
                {
                        int j = i;
                
                        while (j>=0)
                        {
                                if (A[j] > A[j+h])
                                {
                                        int tmp = A[j];
                                        A[j] = A[j+h];
                                        A[j+h] = tmp;
                                        j = j-h;
                                } 
                                else j--;
                        }
 
                }
                h = h/2;
        }
}
A - массив который отсортировать, n - кол-во элементов в массиве
т.е. как я понял, ты должен написать
C++
1
Shell(pp,m);
а вообще вот тут посмотри методы сортировки, хоть и рекомендую этот, он работает быстрее пузыкрька...
http://www.cyberforum.ru/algorithms/thread28269.html
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.04.2009, 18:46

Создание массива случайных чисел типа double
Доброго времени суток. В задании требует создать массив случайных чисел типа double. Пока что для...

Сортировка double массива из файла
Доброго времени суток. Сортировки элементов одномерного массива. Алгоритм сортировки любой не...

Выводит неверное значение элемента массива типа double
Есть текстовый файл типа: INLINE : 233 XLINE : 202 668417,50000 565878,00000 ...


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

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

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