Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 27.10.2009
Сообщений: 29
1

Сортировка и еще

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

Author24 — интернет-сервис помощи студентам
Отсортировать по убыванию, возрастанию, найти максимальный и минимальный элементы. В конце вывести среднее арифметическое элементов массива.
И вот что уже имею:
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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.11.2009, 23:23
Ответы с готовыми решениями:

И ещё одна сортировка :)
День добрый, форумчане. Работаю со списком (помнится, просил в своё время даже совета по работе...

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

Какими ещё способами можно ещё сделать?
Задание: Известно, что: 1 в третей степени будет=1 2 в третей степени будет=3+5 3 в третей...

Сортировка выбором, сортировка вставкой, сортировка заменой, сортировка обменом ("пузырьковая" сортировка)
Создать класс, содержащий массив и реализующий алгоритмы сортировки и бинарного поиска в этом...

22
425 / 229 / 87
Регистрация: 25.03.2009
Сообщений: 744
06.11.2009, 00:01 2
ByHbKa, раз ты на C++ пишешь используй алгорит std::sort;
0
18 / 18 / 5
Регистрация: 08.10.2009
Сообщений: 94
06.11.2009, 01:25 3
Цитата Сообщение от ByHbKa Посмотреть сообщение
Отсортировать по убыванию, возрастанию, найти максимальный и минимальный элементы. В конце вывести среднее арифметическое элементов массива.
И вот что уже имею:
Пишешь на C++?
Или прога нужна на C?

P.S. как то чрезвычайно мудрено у тебя все там, делается проще...
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
06.11.2009, 04:21 4
сначала лучше вытащить цифры из строки

C
1
lengh = strlen(c1);
это станет не нужно

C
1
int proverka (char ch)
это тоже
0
0 / 0 / 0
Регистрация: 27.10.2009
Сообщений: 29
06.11.2009, 15:32  [ТС] 5
А если не затруднит измените код по запросу в теме) буду благодарен
0
10 / 10 / 2
Регистрация: 01.11.2009
Сообщений: 67
06.11.2009, 17:22 6
Можно от половины функций вообще избавиться:
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 <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
 
int proverka (char ch);
 
int main () {
    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] = atoi(mas);
            h++;
        }
    }
    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;
}
Добавлено через 23 минуты
Ну или вообще вот так:
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 <stdio.h>
#include <string.h>
using namespace std;
 
int proverka (char ch);
 
void cleaner (char  mas[], int n) {
    for ( int i = 0; i < n; i++ )
        mas[i] = '\0';
}
 
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;
    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;
}
0
║XLR8║
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,361
Записей в блоге: 5
06.11.2009, 18:23 7
уточните условие... масив чего сортировать, сколько элементов, мне очень не охота разбираться в громадном коде..
0
0 / 0 / 0
Регистрация: 27.10.2009
Сообщений: 29
06.11.2009, 18:35  [ТС] 8
Отсортировать по убыванию, возрастанию, найти максимальный и минимальный элементы. В конце вывести среднее арифметическое элементов массива.
Это получается 4 числа(123, 548,17, 100)
0
10 / 10 / 2
Регистрация: 01.11.2009
Сообщений: 67
06.11.2009, 18:35 9
ему массив int answer нужно сортировать
0
║XLR8║
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,361
Записей в блоге: 5
06.11.2009, 19:32 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
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;
Добавлено через 1 минуту
http://msdn.microsoft.com/en-u... 85954.aspx
учи STL и вообще си++...
1
0 / 0 / 0
Регистрация: 27.10.2009
Сообщений: 29
06.11.2009, 19:40  [ТС] 11
А по проще никак?)
0
║XLR8║
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,361
Записей в блоге: 5
06.11.2009, 19:49 12
проще? какой у вас критерий простоты?
0
0 / 0 / 0
Регистрация: 27.10.2009
Сообщений: 29
06.11.2009, 20:05  [ТС] 13
Можно сделать сортировку массива через цикл for
0
║XLR8║
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,361
Записей в блоге: 5
06.11.2009, 20:20 14
а это что?
C++
1
#define FOR(x,y,z) for (int (x) = (y); (x) < (z); ++(x) )
Это и есть for гуглите тему: #define c++
0
0 / 0 / 0
Регистрация: 27.10.2009
Сообщений: 29
06.11.2009, 20:34  [ТС] 15
я еще про #define ничего не читал, потому как бы хотелось бы увидеть код который я бы понял)
0
10 / 10 / 2
Регистрация: 01.11.2009
Сообщений: 67
06.11.2009, 20:39 16
Англо-русский словарь открой и сразу узнаешь, что такое define. Без шуток.
0
║XLR8║
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,361
Записей в блоге: 5
06.11.2009, 20:41 17
гуглите тему: #define c++

если что не понятно спрашивайте, если вовсе ниче не поймете, или не найдете я в кратце раскажу, но потом, времени нет, а пока щитайте что FOR(x,y,z) это for(int x = y; x < z; ++x)
1
0 / 0 / 0
Регистрация: 27.10.2009
Сообщений: 29
06.11.2009, 20:53  [ТС] 18
благодарю ты сильно мне помог
0
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
║XLR8║
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,361
Записей в блоге: 5
07.11.2009, 00:29 20
почему ты не любишь си++?
0
07.11.2009, 00:29
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.11.2009, 00:29
Помогаю со студенческими работами здесь

Блок схема.Сортировка «Пузырьком», Сортировка методом «Последовательных перестановок», Сортировка «Вставками»
Помогите, нужны блок схемы Сортировка «Вставками» Program Vstavka; uses dos; Type mass=array ...

Разработать программу сортировки: сортировка перестановкой, сортировка вставкой, быстрая сортировка
Задание: Разработать программу сортировки: - сортировка перестановкой - сортировка...

1)Бинарный поиск 2)Сортировка включением 3)Шейкерная сортировка 4)Сортировка разделением
1)В заданном массиве К(N) найти индексы элементов, которые кратны минимальному значению элемента...

Как из input сделать <div>показать еще</div> или <a>показать еще</a>?
Таким скриптом я подгружаю данные. &lt;script&gt; $(document).ready(function(){ ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru