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

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

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

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

05.11.2009, 23:23. Просмотров 1493. Ответов 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;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ByHbKa
0 / 0 / 0
Регистрация: 27.10.2009
Сообщений: 29
07.11.2009, 00:36  [ТС]     Сортировка и еще #21
я не говорил что его не люблю) Просто хотел сегодня увидеть полный код, а на выходных его разобрать, что б понять.
outoftime
║XLR8║
506 / 428 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
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 все понял? очень хороший прием, уменьзает затраты времени на кодинг..
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.11.2009, 01:47     Сортировка и еще
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
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() );
}
Yandex
Объявления
07.11.2009, 01:47     Сортировка и еще
Ответ Создать тему
Опции темы

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