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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 52, средняя оценка - 5.00
footbaler
1 / 1 / 0
Регистрация: 18.12.2010
Сообщений: 50
#1

Структуры и массивы, сортировка списка. - C++

08.01.2011, 05:56. Просмотров 6668. Ответов 37
Метки нет (Все метки)

Задание звучит так...
Написать программу, в которой необходимо создать структуру, элементами которой являются: имя, фамилия, год рождения студента и оценки по пяти экзаменам. Объявить массив данных о студентах группы типа структуры и ввести значения его элементов. Определить сумму баллов за сессию каждого студента и отсортировать список студентов по баллам в порядке возрастания. Сортировку реализовать в отдельной функции. Предусмотреть меню. Результаты работы программы записать в файл.

Я не прошу писать программу полностью, прошу лишь показать как реализовать сортировку и не могу понять, что значит предусмотреть меню.
Заранее спасибо!
1
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.01.2011, 05:56
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Структуры и массивы, сортировка списка. (C++):

Структуры, массивы, сортировка - C++
Люди Help! Уже второй день сижу над задачей и не могу понять в чём проблема. Задача такая: 1) Описать структуру с именем TRAIN,...

структуры данных. сортировка однонаправленного списка - C++
значит так, есть вот эта программа: #include <stdio.h> #include <conio.h> #include <math.h> struct spisok { int info; ...

Структуры, массивы структур (как можно присваивать(инициализировать) значения полям структуры) - C++
Есть у меня вот такая структура, например struct Subject { int cost; int Volume; }; Потом создаю экземпляр, Subject G; ...

Структуры. Сортировка массива структуры - C++
Здравствуйте! В чем моя ошибка?? Нужно отсортировать массив структуры по возрастанию среднего балла?? Делаю это с помощью...

"Сортировка двусвязного списка путем исключения элемента с минимальным значением и включения его в начало нового списка - C++
Здравствуйте! Возникла проблема с программой. Тема: "Сортировка двусвязного списка путем исключения элемента с минимальным значением и...

структуры и массивы - C++
#include "stdafx.h" #include <iostream> using namespace std; struct Worker{ char fio; signed int date; double salary; ...

37
silent_1991
Эксперт С++
4985 / 3042 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
08.01.2011, 06:53 #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
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
#include <stdio.h>
 
typedef struct _A A;
 
void sort(A *, int);
 
typedef struct _A
{
    int a;
    char c;
} A;
 
#define N 5
 
int main(void)
{
    A arr[N];
    int i;
 
    for (i = 0; i < N; ++i)
    {
        printf("arr[%d].a = ", i);
        scanf("%d", &arr[i].a);
        printf("arr[%d].c = ", i);
        scanf("\n%c", &arr[i].c);
    }
 
    sort(arr, N);
 
    for (i = 0; i < N; ++i)
        printf("arr[%d].a = %d\tarr[%d].c = %c\n", i, arr[i].a, i, arr[i].c);
 
    return 0;
}
 
void sort(A *arr, int n)
{
    A temp;
    int i, j;
 
    for (i = 0; i < n; ++i)
    {
        for (j = n - 1; j > i; --j)
        {
            if (arr[j - 1].a > arr[j].a)
            {
                temp = arr[j];
                arr[j] = arr[j - 1];
                arr[j - 1] = temp;
            }
        }
    }
}
Предусмотреть меню - это значит, что пользователь должен выбирать, какую операцию в данный момент должна совершить программа, ввести значения элементов массива, вывести сумму баллов каждого студента или отсортировать список студентов.

Пример меню:

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
#include <stdio.h>
 
void function1();
void function2();
void function3();
void exit();
 
int main(void)
{
    int v;
 
    do
    {
        printf("\nMain menu:\n");
        printf("1. Item 1\n");
        printf("2. Item 2\n");
        printf("3. Item 3\n");
        printf("4. Exit\n");
        printf("Choise: ");
        scanf("%d", &v);
 
        switch (v)
        {
        case 1:
            function1();
            break;
        case 2:
            function2();
            break;
        case 3:
            function3();
            break;
        case 4:
            exit();
            break;
        default:
            printf("You must enter a number from 1 to 4\nTry again\n\n");
            continue;
        }
    }
    while (v != 4);
 
    return 0;
}
 
void function1()
{
    printf("\nCall function 1...\n");
}
 
void function2()
{
    printf("\nCall function 2...\n");
}
 
void function3()
{
    printf("\nCall function 3...\n");
}
 
void exit()
{
    printf("\nExit...\n");
}
2
footbaler
1 / 1 / 0
Регистрация: 18.12.2010
Сообщений: 50
08.01.2011, 14:29  [ТС] #3
silent_1991, Это примеры на Си, мне надо на С++, они существенно отличаются?
0
ForEveR
В астрале
Эксперт С++
7979 / 4738 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
08.01.2011, 14:30 #4
footbaler, Вводом-выводом. Но можно реализовать и интересные вещи, вроде перегрузки операторов, хотя здесь это по сути не нужно)
0
silent_1991
Эксперт С++
4985 / 3042 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
08.01.2011, 14:39 #5
Да практически ничем. В первом примере изобрёл велосипед и вынес обмен переменных местами в самописный шаблонный swap:

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
#include <iostream>
 
struct A
{
    int a;
    char c;
};
 
void sort(A *, int);
template< typename T > void swap(T &, T &);
 
const int N = 5;
 
int main()
{
    A arr[N];
 
    for (int i = 0; i < N; ++i)
    {
        std::cout << "arr[" << i << "].a = ";
        std::cin >> arr[i].a;
        std::cout << "arr[" << i << "].c = ";
        std::cin >> arr[i].c;
    }
 
    sort(arr, N);
 
    for (int i = 0; i < N; ++i)
        std::cout << "arr[" << i << "].a = " << arr[i].a << "\tarr[" << i << "].c = " << arr[i].c << std::endl;
 
    return 0;
}
 
void sort(A *arr, int n)
{
    for (int i = 0; i < n; ++i)
        for (int j = n - 1; j > i; --j)
            if (arr[j - 1].a > arr[j].a)
                swap(arr[j - 1], arr[j]);
}
 
template< typename T >
void swap(T &left, T &right)
{
    T temp = left;
    left = right;
    right = temp;
}
Второй:

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
#include <iostream>
 
void function1();
void function2();
void function3();
void exit();
 
int main()
{
    int v;
 
    do
    {
        std::cout << std::endl <<
                     "Main menu:" << std::endl <<
                     "1. Item 1"  << std::endl <<
                     "2. Item 2"  << std::endl <<
                     "3. Item 3"  << std::endl <<
                     "4. Exit"    << std::endl <<
                     "Choise: ";
        std::cin >> v;
 
        switch (v)
        {
        case 1:
            function1();
            break;
        case 2:
            function2();
            break;
        case 3:
            function3();
            break;
        case 4:
            exit();
            break;
        default:
            std::cout << "You must enter a number from 1 to 4\nTry again" << std::endl << std::endl;
            continue;
        }
    }
    while (v != 4);
 
    return 0;
}
 
void function1()
{
    std::cout << std::endl << "Call function 1..." << std::endl;
}
 
void function2()
{
    std::cout << std::endl << "Call function 2..." << std::endl;
}
 
void function3()
{
    std::cout << std::endl << "Call function 3..." << std::endl;
}
 
void exit()
{
    std::cout << std::endl << "Exit..." << std::endl;
}
1
ForEveR
В астрале
Эксперт С++
7979 / 4738 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
08.01.2011, 14:40 #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
45
46
47
48
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
 
struct some
{
    some(int a_=0):a(a_)
    {
    }
    int a;
    some& operator =(const some& other)
    {
        if(this == &other)
            return *this;
        a=other.a;
        return *this;
    }
};
 
bool operator <(const some& first, const some& second)
{
    return first.a < second.a;
}
 
std::ostream& operator <<(std::ostream& os, const some& one)
{
    os<<one.a<<'\n';
    return os;
}
 
std::istream& operator >>(std::istream& is, some& one)
{
    std::cout<<"Enter a: ";
    is>>one.a;
    return is;
}
 
int main()
{
    typedef std::vector<some> T_vec;
    T_vec vec((std::istream_iterator<some>(std::cin)), std::istream_iterator<some>());
    std::copy(vec.begin(), vec.end(), std::ostream_iterator<some>(std::cout));
    std::sort(vec.begin(), vec.end());
    std::cout<<"After sort\n";
    std::copy(vec.begin(), vec.end(), std::ostream_iterator<some>(std::cout));
    return 0;
}
3
silent_1991
Эксперт С++
4985 / 3042 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
08.01.2011, 14:44 #7
ForEveR, эх, началось))) Когда уже у меня руки до STL дойдут?)))
0
footbaler
1 / 1 / 0
Регистрация: 18.12.2010
Сообщений: 50
08.01.2011, 19:25  [ТС] #8
silent_1991, ForEveR, спасибо вам за примеры, но что то мне тяжело пока это все собрать вместе.

Добавлено через 3 часа 19 минут
Помогите пожалуйста еще чем-нибудь, натолкните, что в начале надо писать, а то я уже потерялся, со вчерашнего дня сижу спал 4 часа.
0
footbaler
1 / 1 / 0
Регистрация: 18.12.2010
Сообщений: 50
09.01.2011, 13:21  [ТС] #9
Вот скромный кусочек текста, что смог на данный момент. Последние несколько строк не в счет.
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
#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
 
struct STUDENT
{
   char name[15];
   char surname[15];
   int god_r;
   int ocenki;
};
 
int main()
{
  int n, i, j;
  cout<<"Ââåäèòå êîëè÷åñòâî ñòóäåГ*òîâ: ";
  cin>>n;
  STUDENT *students;
  students = new STUDENT[n]; 
  for(i=0;i<n;i++)
  {
    cout<<"ÑòóäåГ*ГІ В№ "<<i+1<<"\n";
    cout<<"Ââåäèòå ГґГ*ìèëèþ ñòóäåГ*ГІГ*: \n";
    cin>>students[i].surname;
    cout<<"Ââåäèòå èìÿ ñòóäåГ*ГІГ*: \n";
    cin>>students[i].name;
    cout<<"Ââåäèòå ãîä ðîæäåГ*ГЁГї: \n";      
    cin>>students[i].god_r;
    for(j=0; j<5; j++)
    {
      cout<<"Ââåäèòå îöåГ*ГЄГЁ ГЇГ® ГЅГЄГ§Г*ìåГ*Гі "<<j+1<<" \n";
      cin>>students[i].ocenki;
    }
  }
  for(i=0;i<n;i++)
  {    
    cout<<"| "<<students[i].surname<<" "<<students[i].name<<" "<<students[i].god_r
    <<" "<<students[i].ocenki<<endl;
  }
  getch(); 
  return 0;
}
Кто что может добавить? Буду благодарен любой помощи!

Добавлено через 13 часов 4 минуты
Все еще актуально.
0
silent_1991
Эксперт С++
4985 / 3042 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
09.01.2011, 18:07 #10
Хм... А что тут добавить? Теперь сортировку пишите и меню - и будет вам счастье)))
1
footbaler
1 / 1 / 0
Регистрация: 18.12.2010
Сообщений: 50
09.01.2011, 18:12  [ТС] #11
silent_1991, так вот я и пока не понимаю как правильно написать сортировку и меню, хоть и примеры приведены.
А еще как мне посчитать сумму оценок каждого студента, точнее я понимаю как ее найти, но вот куда мне это вписать?
0
silent_1991
Эксперт С++
4985 / 3042 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
09.01.2011, 18:55 #12
footbaler, делаете на каждую возможность вашей программы функцию. Например надо отсортировать - пишите функцию сортировки. Надо удалить элемент - пишите функцию удаления. Надо посчитать какую-нибудь сумму - пишите такую функцию. Потом на каждую же возможность делаете пункт меню. И когда пользователь выберет желаемый пункт меню - запускаете соответствующую функцию. Простенький пример:

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
#include <stdio.h>
 
int sum(int, int);
int subtract(int, int);
int multiply(int, int);
int divide(int, int);
 
int main()
{
    int a, b;
    int v;
 
    printf("Enter two numbers: ");
    scanf("%d%d", &a, &b);
 
    do
    {
        printf("Enter action:\n");
        printf("1. Sum\n");
        printf("2. Subtract\n");
        printf("3. Multiply\n");
        printf("4. Divide\n");
        printf("5. Exit\n");
        printf("Your choise: ");
        scanf("%d", &v);
 
        switch (v)
        {
        case 1:
            printf("\n%d + %d = %d\n\n", a, b, sum(a, b));
            break;
        case 2:
            printf("\n%d - %d = %d\n\n", a, b, subtract(a, b));
            break;
        case 3:
            printf("\n%d * %d = %d\n\n", a, b, multiply(a, b));
            break;
        case 4:
            printf("\n%d / %d = %d\n\n", a, b, divide(a, b));
            break;
        case 5:
            break;
        default:
            printf("\nUnknown action!\nTry again\n\n");
            continue;
        }
    }
    while (v != 5);
 
    return 0;
}
 
int sum(int a, int b)
{
    return a + b;
}
 
int subtract(int a, int b)
{
    return a - b;
}
 
int multiply(int a, int b)
{
    return a * b;
}
 
int divide(int a, int b)
{
    return a / b;
}
Добавлено через 1 минуту
Сортировку я вам написал, просто вставляйте в свою программу и тип массива, который сортируется, и временного элемента temp измените (у меня был A, замените на STUDENT).
1
footbaler
1 / 1 / 0
Регистрация: 18.12.2010
Сообщений: 50
09.01.2011, 20:26  [ТС] #13
Дополненный кусок текста, получилось что то непонятное, скажите я на правильном пути или получилась чушь?
Ошибок не выдает...
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
#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
 
struct STUDENT
{
  char name[15];
  char surname[15];
  int god_r;
  int ocenki;
  int a;
  char c;
 };
void sort(STUDENT *, int);
void swap(STUDENT &, STUDENT &);
const int N = 5;
int main()
{
  STUDENT st[15];
  int n;
  cout<<"Ââåäèòå êîëè÷åñòâî ñòóäåГ*òîâ: ";
  cin>>n;
  for(int i=0;i<n;i++)
  {
    cout<<"ÑòóäåГ*ГІ В№ "<<i+1<<"\n";
    cout<<"Ââåäèòå ГґГ*ìèëèþ ñòóäåГ*ГІГ*: \n";
    cin>>st[i].surname;
    cout<<"Ââåäèòå èìÿ ñòóäåГ*ГІГ*: \n";
    cin>>st[i].name;
    cout<<"Ââåäèòå ãîä ðîæäåГ*ГЁГї: \n";      
    cin>>st[i].god_r;
    for(int j=0; j<5; j++)
    {
      cout<<"Ââåäèòå îöåГ*ГЄГЁ ГЇГ® ГЅГЄГ§Г*ìåГ*Гі "<<j+1<<" \n";
      cin>>st[i].ocenki;
     } 
   }
 
  sort(st, N);
  for (i = 0; i < N; ++i)
  cout << "st[" << i << "].a = " << st[i].a << "\tarr[" << i << "].c = "<<st[i].c<<endl;
  return 0;
}
 
void sort(STUDENT *st, int n)
{
    for (int i = 0; i < n; ++i)
        for (int j = n - 1; j > i; --j)
            if (st[j - 1].a > st[j].a)
                swap(st[j - 1], st[j]);
}
 
void swap(STUDENT &left, STUDENT &right)
{
    STUDENT temp = left;
    left = right;
    right = temp;
}
0
silent_1991
Эксперт С++
4985 / 3042 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
09.01.2011, 20:32 #14
Вообще-то не поле a в структуру надо было добавить, а в коде сортировки изменить поле, по которому будете сортировать... Да и с вы тоже туда зачем-то добавили...
1
footbaler
1 / 1 / 0
Регистрация: 18.12.2010
Сообщений: 50
10.01.2011, 05:26  [ТС] #15
silent_1991, все, я похоже понял, скоро отпишу...

Добавлено через 8 часов 14 минут
Похоже все таки не понял.
Вот что получилось. Меню появляется, данные, о студенте, дает ввести, не находит сумму баллов (никак не могу понять как это реализовать), т.к. нет суммы баллов, не сортирует, но сортировка по моему правильно сделана... Скажите, я хоть что то правильно написал или меня не туда понесло?
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
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
 
struct STUDENT
{                
  char name[15];  
  char surname[15];
  int god_r;
  int ocenka;
  int summa;
 };
 
void vvod(STUDENT *, int);
void summa(STUDENT *, int);
void sort(STUDENT *, int);
void exit();
void swap(STUDENT &, STUDENT &);
 
int main()
{
  STUDENT st[30];
  int v, n;
  do
  {
    cout<<
    "Ââåäèòå 1-3"<<endl<<
    "1. Ââåñòè Г¤Г*Г*Г*ûå Г® ñòóäåГ*ГІГ*Гµ"<<endl<<
    "2. Ïîñ÷èòГ*ГІГј ñóììó ГЎГ*ëîâ"<<endl<<
    "3. ÎòñîðòèðîâГ*ГІГј ñïèñîê ñòóäåГ*òîâ"<<endl<<
    "4. Âûõîä"<<endl<<
    "Choise: ";
    cin >> v;
    switch (v)
    {
      case 1:
    vvod(st, n);
    break;
      case 2:
        summa(st, n);
      case 3:
    sort(st, n);
    for (int i = 0; i < n; ++i)
  cout <<st[i].surname<<"  "<<st[i].name<<" "<<st[i].god_r<<" "<<st[i].summa<<endl;
        break;
      case 4:
        exit();
        break;
      default:
    cout << "You must enter a number from 1 to 4\nTry again" << endl << endl;
        continue;
     }
   }
  while (v != 4);
  return 0;
}
 
void vvod(STUDENT *st, int n)
{
  cout<<"Ââåäèòå êîëè÷åñòâî ñòóäåГ*òîâ: ";
  cin>>n;
  for(int i=0; i<n; i++)
  {
    cout<<"ÑòóäåГ*ГІ В№ "<<i+1<<"\n";
    cout<<"Ââåäèòå ГґГ*ìèëèþ ñòóäåГ*ГІГ*: \n";
    cin>>st[i].surname;
    cout<<"Ââåäèòå èìÿ ñòóäåГ*ГІГ*: \n";
    cin>>st[i].name;
    cout<<"Ââåäèòå ãîä ðîæäåГ*ГЁГї ñòóäåГ*ГІГ*: \n";      
    cin>>st[i].god_r;
    for(int j=0; j<5; j++)
    {
      cout<<"Ââåäèòå îöåГ*ГЄГі ГЇГ® ГЅГЄГ§Г*ìåГ*Гі "<<j+1<<" \n";
      cin>>st[i].ocenka;
      }
   }
}
 
void summa(STUDENT *st, int n)
{
for(int i=0; i<n; i++)
      for(i=0; i<5; i++)
       st[i].summa+=st[i].ocenka;
     cout<<"ÑóììГ* ГЎГ*ëëîâ="<<st[i].summa<<"\n";
 }
void sort(STUDENT *st, int n)
{
    for (int i = 0; i < n; ++i)
        for (int j = n - 1; j > i; --j)
       if (st[j - 1].summa > st[j].summa)
        swap(st[j - 1], st[j]);
}
void swap(STUDENT &left, STUDENT &right)
{
    STUDENT temp = left;
    left = right;
    right = temp;
}
 
void exit()
{
    cout << endl << "Âûõîä..." << endl;
}
0
10.01.2011, 05:26
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.01.2011, 05:26
Привет! Вот еще темы с ответами:

Массивы, структуры, на С++ - C++
Уже второй день думаю как сделать задачку по программированию, но пока что-то безуспешно. Лекции по этой теме нам еще не читали(дана для...

Массивы структуры - C++
Как найти среднюю температуру заданого месяца, а потом определить в какие дни этого месяца температура превышала среднии показатели?

Структуры и массивы - C++
Задание следующее: Написать программу, в которой необходимо создать структуру, элементами которой являются фамилия автора книги и ее...

Структуры, массивы, функции - C++
Написать программу, определяющую дату, которая наступит через m дней на с++ желательно с использованием Структур и функций...очень надо


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

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

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