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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.75
ByHbKa
0 / 0 / 0
Регистрация: 27.10.2009
Сообщений: 29
#1

Сортировка и еще - C++

05.11.2009, 23:23. Просмотров 1544. Ответов 22
Метки нет (Все метки)

Отсортировать по убыванию, возрастанию, найти максимальный и минимальный элементы. В конце вывести среднее арифметическое элементов массива.
И вот что уже имею:
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
#include <iostream.h>
#include <stdio.h>
#include <string.h>
#include <vector.h>
#include <ctype.h>
 
int proverka (char ch);
int vichislenie (int p);
int preobrazovanie (char ch);
int sum (char mas[10], int size);
 
void main (void) {
        char *c1 = "Welcome to the 123s, I 548s, we nada peredet 17s that his balance is 100";
        int i, j, c, h = 0, lengh = strlen(c1);
        int index[300];
        char mas[300];
        int answer[300];
        for ( i = 0; i < lengh; i++ ) {
                if ( proverka(c1[i]) == false )
                        continue;
                else {
                        j = 0;
                        while ( proverka(c1[i]) == true ) {
                                index[j] = i;
                                j++;
                                i++;
                        }
                        for ( c = 0; c < j; c++ )
                                mas[c] = c1[index[c]];
                        answer[h] = sum(mas,j);
                        h++;
                }
        }
        for ( i = 0; i < h; i++ )
             cout << answer[i] << endl;
 
system("PAUSE");
 
}
int proverka (char ch) {
        char mas[10] = {"1234567890"};
        int i;
        for ( i = 0; i < 10; i++ )
                if ( ch == mas[i] )
                   return true;
        return false;
}
 
int vichislenie (int p) {
        int i, j = 1;
        for ( i = 0; i < p; i++ )
                j *= 10;
        return j;
}
 
int preobrazovanie (char ch) {
        char mas[10] = {"0123456789"};
        for ( int i = 0; i < 10; i++ )
                if ( ch == mas[i] )
                        return i;
}
 
 
int sum (char mas[10], int size) {
        int sum = 0, i;
        for ( i = 0; i < size; i++ )
                sum += preobrazovanie(mas[i]) * vichislenie(size-i-1);
        return sum;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.11.2009, 23:23
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сортировка и еще (C++):

Сортировка по алфавиту и еще несколько вопросов по С++ - C++
Срочно нужна помощь. 1) Нужно отсортировать по алфавиту массив из n элементов класса string. 2) Как вывести число с определенным...

Сортировка Шелла. Написал программу, не могу понять, почему сортировка не выполняется - C++
Программа создает динамический массив с рандомным заполнением. Дальше выбор сортировок, пузырьком или сортировка Шелла. Вот она то и не...

Сортировка слиянием. В каком куске кода происходит сортировка и каким именно образом? - C++
Помогите, пожалуйста, разобраться. Подскажите в каком куске кода происходит сортировка и каким именно образом? #include &lt;iostream&gt; ...

Быстрая сортировка (сортировка Хоара) для связных списков - C++
есть у кого готовый алгоритм? или подскажите как реализовать

Быстрая сортировка(сортировка Хоара). Отсортировать фрагмент массива - C++
Мне нужно отсортировать фрагмент массива, расположенный между первым и последним отрицательным элементом. Немогу понять как устоновить...

\n\r\0 а еще? - C++
Собственно кроме \r\n\0 есть ли какие-то обозначения, как в регекспах? Например те же \w \d? Простенькая задачка по парсингу строку,...

22
audiophile
9 / 9 / 0
Регистрация: 01.11.2009
Сообщений: 67
06.11.2009, 20:39 #16
Англо-русский словарь открой и сразу узнаешь, что такое define. Без шуток.
0
outoftime
║XLR8║
511 / 433 / 33
Регистрация: 25.07.2009
Сообщений: 2,295
06.11.2009, 20:41 #17
гуглите тему: #define c++

если что не понятно спрашивайте, если вовсе ниче не поймете, или не найдете я в кратце раскажу, но потом, времени нет, а пока щитайте что FOR(x,y,z) это for(int x = y; x < z; ++x)
1
ByHbKa
0 / 0 / 0
Регистрация: 27.10.2009
Сообщений: 29
06.11.2009, 20:53  [ТС] #18
благодарю ты сильно мне помог
0
ByHbKa
0 / 0 / 0
Регистрация: 27.10.2009
Сообщений: 29
06.11.2009, 23:46  [ТС] #19
А теперь кто поможет вставить в код сортировку??) У меня что то не выходит
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
#include <iostream.h>
#include <stdio.h>
#include <string.h>
#include <vector.h>
#include <ctype.h>
#include <numeric.h>
 
int proverka (char ch);
void cleaner (char  mas[], int n);
 
int main () {
        char *c1 = "Welcome to the 123s, I 548s, we nada peredet 17s that his balance is 100";
        int i, c = 0, flag, h = 0, lengh = strlen(c1);
        char * mas = new char[lengh];
        int answer[300];
        for ( i = 0; i < lengh; i++ ) {
                if ( proverka(c1[i]) == true ) {
                        flag = 1;
                        mas[c] = c1[i];
                        c++;
                }
                if ( i == lengh-1 || proverka(c1[i]) == false ) {
                        if ( flag == 1 ) {
                                answer[h] = atoi(mas);
                                h++;
                                flag = 0;
                                cleaner(mas,c);
                                c = 0;
                        }
                }
        }
        delete mas;
        cout << "The output of numbers with strings:" << endl;
        for ( i = 0; i < h; i++ )
                cout << answer[i] << endl;
 
        system("PAUSE");
}
 
int proverka (char ch) {
        char mas[11] = {"1234567890"};
        int i;
        for ( i = 0; i < 10; i++ )
                if ( ch == mas[i] )
                        return true;
        return false;
}
void cleaner (char  mas[], int n) {
        for ( int i = 0; i < n; i++ )
                mas[i] = '\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
42
43
44
//сначала нужно подключить
        #include <vector>
        #include <algorithm>
 
        #define FOR(x,y,z) for (int (x) = (y); (x) < (z); ++(x))
        #define FORB(x,y,z) for (int (x) = (y); (x) > (z); --(x))
 
        //инициализация (дальнейший код идет в мейн)
        vector<int> answer(300), povozrostaniu(300), poubibaniu(300);
        int max_elem;
        double srednee, sum;
 
        FOR(i,0,300)
                answer[i] = 300 - i;
 
        answer[10] = answer[0] = 152;
        answer[156] = 51;
 
        //сортировка по возростанию (не совсем удачная..)
        FOR(i,1,300)
                if (a[i] < a[i-1])
                        FORB(j,i,0)
                                if (a[j] < a[j-1])
                                        swap(a[j], a[j-1]);
        FOR(i,0,300)
                povozrostaniu[i] = a[i];
 
        //сортировка по убыванию
        FOR(i,1,300)
                if (a[i] > a[i-1])
                        FORB(j,i,0)
                                if (a[j] > a[j-1])
                                        swap(a[j], a[j-1]);
        FOR(i,0,300)
                poubibaniu[i] = a[i];
        
        //максимум
        max_elem = max_element(answer.begin(),answer.end());
        
        //среднее
        sum = 0;
        FOR(i,0,300)
                sum += v[i];
        srednee = sum / 300;
0
outoftime
║XLR8║
511 / 433 / 33
Регистрация: 25.07.2009
Сообщений: 2,295
07.11.2009, 00:29 #20
почему ты не любишь си++?
0
ByHbKa
0 / 0 / 0
Регистрация: 27.10.2009
Сообщений: 29
07.11.2009, 00:36  [ТС] #21
я не говорил что его не люблю) Просто хотел сегодня увидеть полный код, а на выходных его разобрать, что б понять.
0
outoftime
║XLR8║
511 / 433 / 33
Регистрация: 25.07.2009
Сообщений: 2,295
07.11.2009, 01:07 #22
Вот
код
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
#include <iostream>
#include <vector>
#include <algorithm>
 
using namespace std;
 
#define FOR(x,y,z) for (int (x) = (y); (x) < (z); ++(x))
#define ALL(a) (a).begin(), (a).end()
 
int main()
{
    vector<int> a;          // твой исходный масив
    vector<int> b, c;
    int j = 10; double s = 0;       //размер масива и среднее значения
 
    FOR(i, 0, j)
        a.push_back(rand()/1000);   //делим на 1000, что-бы наглядно было
 
    FOR(i, 0, j)
        cout << a[i] << " ";
    cout << endl;
 
    FOR(i, 0, j){
        b.push_back(a[i]);
        c.push_back(a[i]);
    }
 
    sort(ALL(b));       //прямая сортировка (по-возростанию)
 
    FOR(i, 0, j)
        cout << b[i] << " ";    
    cout << endl;
 
    sort(ALL(c));       //обратная сортирока (задаем дополнительно c.reserve())
    reverse(ALL(c));
 
    FOR(i, 0, j)
        cout << c[i] << " ";        
    cout << endl;   
 
    FOR(i, 0, j)
        s += a[i];
    s /= j;
    printf("%.4f",s);
 
    return 0;
}
оптимизуруй его по максимуму..
вот еще ссылка на него и результат работы: http://codepad.org/UKBVCLMP
поставь себе в закладки следующую ссылку: http://msdn.microsoft.com/en-us/library/bb385954.aspx - я юзал отсюда вектора, почитай что они значут, поэксперементируй с ними, они тебя еще не раз выручат..
ты касательно #define все понял? очень хороший прием, уменьзает затраты времени на кодинг..
0
SONNY
8 / 8 / 0
Регистрация: 30.05.2009
Сообщений: 47
07.11.2009, 01:47 #23
еще вариант
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <algorithm>
#include <numeric>
 
 
class User_s
{
public:
    enum Sort { normal, reverse };
    User_s( Sort s = normal ): s_( s ) {}
    template<typename _Ty>
    bool operator () ( const _Ty& v_1, const _Ty& v_2 ) const { return s_ == normal ? (v_1 < v_2) : (v_1 > v_2); }
private:
    Sort s_;
};
 
int _tmain( int argc, _TCHAR* argv[] )
{
    int coll_arr[] = { 1, 20, 8, 35, 49, 54, 69, 0, 7, -5, -3 };
    const size_t size = sizeof(coll_arr)/sizeof(int);
    std::sort( coll_arr, coll_arr + size, User_s( User_s::reverse ) );
    std::sort( coll_arr, coll_arr + size, User_s() );
}
0
07.11.2009, 01:47
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.11.2009, 01:47
Привет! Вот еще темы с ответами:

Сортировка Шелла и пирамидальная сортировка для символов - C++
Здраствуйте, можете пожалуйста привести пример сортировок шелла и пиромидальной сортировки для символов, а то ничего не могу ...

И еще одна задача по С++... - C++
Проверить: Можно ли коробку размером a x b x c упаковать в посылку размером r x s x t? «Углом» укладывать нельзя.. Углом, это как?! И...

Еще матрицы (все на С) - C++
Дана действительная матрица размера n*m все элементы которой различны. В каждой строке выбирается элемент с наименьшим значением, затем...

Еще немного по теории - C++
Автоматы в программировании. Виртуальная ф-ция Что такое template, pattern? Разница Запуск исключений? до сих пор не пойму разнице...


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

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

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