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

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

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

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

05.11.2009, 23:23. Просмотров 1497. Ответов 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;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Андрейка
419 / 223 / 27
Регистрация: 25.03.2009
Сообщений: 744
06.11.2009, 00:01     Сортировка и еще #2
ByHbKa, раз ты на C++ пишешь используй алгорит std::sort;
Neonjke
18 / 18 / 1
Регистрация: 08.10.2009
Сообщений: 94
06.11.2009, 01:25     Сортировка и еще #3
Цитата Сообщение от ByHbKa Посмотреть сообщение
Отсортировать по убыванию, возрастанию, найти максимальный и минимальный элементы. В конце вывести среднее арифметическое элементов массива.
И вот что уже имею:
Пишешь на C++?
Или прога нужна на C?

P.S. как то чрезвычайно мудрено у тебя все там, делается проще...
accept
4819 / 3239 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
06.11.2009, 04:21     Сортировка и еще #4
сначала лучше вытащить цифры из строки

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

C
1
int proverka (char ch)
это тоже
ByHbKa
0 / 0 / 0
Регистрация: 27.10.2009
Сообщений: 29
06.11.2009, 15:32  [ТС]     Сортировка и еще #5
А если не затруднит измените код по запросу в теме) буду благодарен
audiophile
9 / 9 / 0
Регистрация: 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;
}
outoftime
║XLR8║
506 / 428 / 33
Регистрация: 25.07.2009
Сообщений: 2,295
06.11.2009, 18:23     Сортировка и еще #7
уточните условие... масив чего сортировать, сколько элементов, мне очень не охота разбираться в громадном коде..
ByHbKa
0 / 0 / 0
Регистрация: 27.10.2009
Сообщений: 29
06.11.2009, 18:35  [ТС]     Сортировка и еще #8
Отсортировать по убыванию, возрастанию, найти максимальный и минимальный элементы. В конце вывести среднее арифметическое элементов массива.
Это получается 4 числа(123, 548,17, 100)
audiophile
9 / 9 / 0
Регистрация: 01.11.2009
Сообщений: 67
06.11.2009, 18:35     Сортировка и еще #9
ему массив int answer нужно сортировать
outoftime
║XLR8║
506 / 428 / 33
Регистрация: 25.07.2009
Сообщений: 2,295
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-us/library/bb385954.aspx
учи STL и вообще си++...
ByHbKa
0 / 0 / 0
Регистрация: 27.10.2009
Сообщений: 29
06.11.2009, 19:40  [ТС]     Сортировка и еще #11
А по проще никак?)
outoftime
║XLR8║
506 / 428 / 33
Регистрация: 25.07.2009
Сообщений: 2,295
06.11.2009, 19:49     Сортировка и еще #12
проще? какой у вас критерий простоты?
ByHbKa
0 / 0 / 0
Регистрация: 27.10.2009
Сообщений: 29
06.11.2009, 20:05  [ТС]     Сортировка и еще #13
Можно сделать сортировку массива через цикл for
outoftime
║XLR8║
506 / 428 / 33
Регистрация: 25.07.2009
Сообщений: 2,295
06.11.2009, 20:20     Сортировка и еще #14
а это что?
C++
1
#define FOR(x,y,z) for (int (x) = (y); (x) < (z); ++(x) )
Это и есть for гуглите тему: #define c++
ByHbKa
0 / 0 / 0
Регистрация: 27.10.2009
Сообщений: 29
06.11.2009, 20:34  [ТС]     Сортировка и еще #15
я еще про #define ничего не читал, потому как бы хотелось бы увидеть код который я бы понял)
audiophile
9 / 9 / 0
Регистрация: 01.11.2009
Сообщений: 67
06.11.2009, 20:39     Сортировка и еще #16
Англо-русский словарь открой и сразу узнаешь, что такое define. Без шуток.
outoftime
║XLR8║
506 / 428 / 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)
ByHbKa
0 / 0 / 0
Регистрация: 27.10.2009
Сообщений: 29
06.11.2009, 20:53  [ТС]     Сортировка и еще #18
благодарю ты сильно мне помог
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;
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.11.2009, 00:29     Сортировка и еще
Еще ссылки по теме:

C++ Еще раз об операции new
Можно ли еще сократить код? C++
\n\r\0 а еще? C++
C++ If vs. If else - миф или что-то еще?
C++ Добавить еще одно значение if

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

Или воспользуйтесь поиском по форуму:
outoftime
║XLR8║
506 / 428 / 33
Регистрация: 25.07.2009
Сообщений: 2,295
07.11.2009, 00:29     Сортировка и еще #20
почему ты не любишь си++?
Yandex
Объявления
07.11.2009, 00:29     Сортировка и еще
Ответ Создать тему
Опции темы

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