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

найти ошибки в коде - C++

Восстановить пароль Регистрация
 
Lers
12 / 12 / 3
Регистрация: 27.05.2012
Сообщений: 202
14.12.2012, 00:23     найти ошибки в коде #1
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
# include <stdio.h>
# include <conio.h>
 
int menu(int kp, char*NAZ[]);
void main(void);
 
int zadacha3 (int n, float *a, float *s);
int zadacha3(int n, int *a, int*s);
int zadacha3(int n, double *a, double*s);
 
 
 
int menu(int kp, char*NAZ[])
 {
  int k, i;
  clrscr();
  for (i=0; i<kp; i++)
  printf("\n %d %s", i+1, NAZ[i]);
  printf("\n\n Выберите пункт ->");
  scanf("%d",&k);
  return k;
 }
 
void main(void)
{
 int n;
 int kol=4, nom,pr;
 char*nazv[]={
"Максимальная сумма соседних элементов(тип float)",
"Максимальная сумма соседних элементов(тип int)",
"Максимальная сумма соседних элементов(тип double)",
 "Выход";}
  while(1)
  {
   nom=menu(kol, nazv);
   switch(nom)
  {
 case 1:
{
  float *a=0;
  clrscr( );
  printf("Выберите пункт -> ");
  scanf("%d", &n);
  *a=new float [n];
  for (int i=0; i<n; i++)
  {
   printf(" A[%d]= ", i);
   scanf("%f", &a[i]);
  }
 
  float w;
  int rt=zadacha3(n,a,&w);
   if (rt==2) printf("\nМаксимум и минимум слишком близко");
    else
      if (rt==3) printf("\n Min pravee max");
     else
    printf("\n Cpednee arifm= %f",w);
      getch();
      delete []a;
     break;
 }
 
case 2:
  {
     int *B=0;
     clrscr( );
     printf(Выберите пункт-> ");
     scanf("%d", &n);
     *B=new int [n];
       for (int i=0; i<n; i++)
     {
       printf(" A[%d]= ", i);
       scanf("%d", &B[i]);
     }
 int sum;
  int rt=zadacha3(n,B,&sum);
  if (rt==2)
    printf("\n Максимум и минимум слишком близко");
   else
    if (rt==3) printf("\n Min pravee max");
     else
      printf("\n Cpednee arifm= %d",sum);
   getch();
    delete []B;
    break;
    }
 
 
case 3:
 {
   double *C=0;
    clrscr( );
   printf("Выберите пункт -> ");
   scanf("%d", &n);
    *C=new double [n];
   for (int i=0; i<n; i++)
   {
   printf(" A[%d]= ", i);
   scanf("%fl", &C[i]);
   }
 double s1;
  int rt=zadacha3(n, C, &s1);
 if (rt==2)
   printf("\n Максимум и минимум слишком близко");
   else
    if (rt==3) printf("\n Min pravee max");
     else
      printf("\n Cpednee arifm= %fl",s1);
   getch();
   delete []C;
   break;
  }
 
 case 4: return;
}
}
}
 
int zadacha3(int n, float *a,float *w)
{
int i,n1=0,n2=0,max,min;
float sr;
 
 
 
max=a[0];
min=a[0];
for (i=0;i<n;i++)
{
 if (a[i]>max)
  {
   max=a[i];
   n1=i;
  }
if (a[i]<min)
{
 min=a[i];
 n2=i;
}
}
 
if (n2<n1)
{
 sr=0;
 for (i=n2+1;i<n1;i++)
 sr+=a[i];
  if (n1-n2>1)
 {
   *w=sr/(n1-n2-1);
  return 1;
  }
      else
      return 2;
  
}
else  return 3;
 
}
 
int zadacha3(int n, int *a,int *w)
{
int i,n1=0,n2=0,max,min;
float sr;
 
 
 
max=a[0];
min=a[0];
for (i=0;i<n;i++)
{
 if (a[i]>max)
  {
   max=a[i];
   n1=i;
  }
if (a[i]<min)
{
 min=a[i];
 n2=i;
}
}
if (n2<n1)
{
 sr=0;
 for (i=n2+1;i<n1;i++)
 sr+=a[i];
  if (n1-n2>1)
 {
   *w=sr/(n1-n2-1);
  return 1;
  }
      else
      return 2;
 
}
else  return 3;
 
}
 
int zadacha3(int n, double *a,double *w)
{
int i,n1=0,n2=0,max,min;
float sr;
 
 
 
max=a[0];
min=a[0];
for (i=0;i<n;i++)
{
 if (a[i]>max)
  {
   max=a[i];
   n1=i;
  }
if (a[i]<min)
{
 min=a[i];
 n2=i;
}
}
 
if (n2<n1)
{
 sr=0;
 for (i=n2+1;i<n1;i++)
 sr+=a[i];
  if (n1-n2>1)
 {
   *w=sr/(n1-n2-1);
  return 1;
  }
      else
      return 2;
  
}
else  return 3;
 
}
В чем собственно проблема: *C=new double [n]; - тут пишет Illegal use of floating point
*B=new int [n]; - Cannot convert 'int *' to 'int'
*a=new float [n]; - аналогично первой ошибке

Сама задача(zadacha3) написана правильно и проверена, просто нужно написать эту программу во float,int,double. (Перегрузка функций)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.12.2012, 00:23     найти ошибки в коде
Посмотрите здесь:

C++ Программа С++ (найти ошибки в коде)
C++ Программа С++ (найти ошибки в коде)
C++ Найти ошибки в коде
C++ Сортировка, найти ошибки в коде
LU-разложение - найти ошибки в коде C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NoMasters
Псевдослучайный
1737 / 1080 / 69
Регистрация: 13.09.2011
Сообщений: 3,094
14.12.2012, 00:37     найти ошибки в коде #2
Там не нужно разыменование, new возвращает указатель же.
Lers
12 / 12 / 3
Регистрация: 27.05.2012
Сообщений: 202
14.12.2012, 00:45  [ТС]     найти ошибки в коде #3
Цитата Сообщение от NoMasters Посмотреть сообщение
Там не нужно разыменование, new возвращает указатель же.
но мне нужно 3 варианта сделать, float, int, double. Как их сделать не подскажите?
v.a.l.i.d
 Аватар для v.a.l.i.d
412 / 377 / 10
Регистрация: 21.09.2012
Сообщений: 913
14.12.2012, 12:51     найти ошибки в коде #4
Цитата Сообщение от Lers Посмотреть сообщение
но мне нужно 3 варианта сделать, float, int, double. Как их сделать не подскажите?
Для каждого типа выделять память:
C++
1
2
3
float *ptr_float = new float[n];
int *ptr_int = new int[n];
double *ptr_double = new double[n];
Lers
12 / 12 / 3
Регистрация: 27.05.2012
Сообщений: 202
14.12.2012, 13:10  [ТС]     найти ошибки в коде #5
Всем спасибо, все работает!
PsyPerception
0 / 0 / 0
Регистрация: 26.11.2016
Сообщений: 3
26.11.2016, 10:09     найти ошибки в коде #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
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
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Main.h"
#include "Passw.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm2 *Form2;
 __int8 All_Us[100][32];
 HANDLE hFile1;
 TMainMenu *MainMenu1;
//--------------------------------------------------------------------------
void __fastcall elemForm(TMainMenu *MainMenu){MainMenu1 = MainMenu;}
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner) : TForm(Owner) {}
//---------------------------------------------------------------------------
void __fastcall TForm2::onDuble(TObject *Sender)
{
 if (CheckBox1->Checked == true)
     { Edit2->Visible = false;
       Edit1->PasswordChar = 0;
       CheckBox1->Caption = "             Отображать пароль при вводе";
       Button1->Enabled = true;
     }
 else { Edit2->Visible = true;
        Edit1->PasswordChar = '*';
        CheckBox1->Caption = "          Повторите пароль для надёжности";
        Button1->Enabled = false;
       }      
}
//--------------------------------------------------------------------------
int __fastcall New_User()
{
if (hFile1) { CloseHandle(hFile1); hFile1=0;}
 hFile1 = CreateFile( "All_Users.usr", GENERIC_READ | GENERIC_WRITE,
             FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL );
 LARGE_INTEGER FSize;
 DWORD z;
 GetFileSizeEx(hFile1,&FSize);
 return FSize.QuadPart;
}
//--------------------------------------------------------
void __fastcall TForm2::FormCreate(TObject *Sender)
{
 onDuble(NULL);
 DWORD z;
 int j = New_User();
 if (j != 0) {
     j = GetFileSize(hFile1,NULL)/32;
     for (int i = 0; i != (j+1); i++)
         { ReadFile(hFile1,All_Us[i],32,&z,NULL);
           ComboBox1->Items->Add(All_Us[i]);
     }
 }
 ComboBox1->Text = ComboBox1->Items->Strings[0];
 if (hFile1) {
 CloseHandle(hFile1);
 hFile1 = 0;}
}
//-------------------------------------------
void __fastcall TForm2::onProbe(TObject *Sender)
{
 if (CheckBox1->Checked == true) Abort();
   if (Edit1->Text == Edit2->Text) Button1->Enabled = true;
     else Button1->Enabled = false;
}
//-------------------------------------------------
int __fastcall Hesh_Users(AnsiString Astr)
{
 __int8 _Usr[32];
   strcpy(_Usr,(Form2->ComboBox1->Text).c_str());
     int Hesh_User=0;
       int i=0;
         while(_Usr[i]) {
           Hesh_User += _Usr[i];
            i++;
         }
 return Hesh_User;
}
//-------------------------------------------------
int __fastcall UserCreate(unsigned __int64* buf)
{
  DWORD i;
  __int8 Usr[32];
  strcpy(Usr,(Form2->ComboBox1->Text).c_str());
  *(unsigned __int64*) &Usr[20] = buf[0];
  *(unsigned int*) &Usr[28] = buf[1];
  New_User();
  SetFilePointer(hFile1,0,NULL,FILE_END);
  WriteFile(hFile1,&Usr,32,&i,NULL);
return i = GetLastError();
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Simv(TObject *Sender, char &Key)
{if ((isgraph(Key)) && (!isalnum(Key))) {Key = *"";}}
//---------------------------------------------------------------------------
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
//---------------------------------------------------------------------------
#include <vcl.h>
#include <stdio.h>
#include "Main.h"
#include "Passw.cpp"
#include "RSA.cpp"
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
 unsigned int Hesh_Sms_buf[5000];
 unsigned __int64 MP_hesh[4];
 unsigned __int8 Sms_buf[4000];
 unsigned __int64 PswdHesh;
 __int8 Pswd_[16];
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner): TForm(Owner) {}
//---------------------------------------------------------------------------
void __fastcall TForm1::N12Click(TObject *Sender)
{ int z; int Ph;
    Form2->ShowModal();
  if (matr[0]>>2) {
       Ph = Form2->ModalResult;
        prst_ch(Ph);
     if ((Ph>>1) == mbNo) {
           Form2->Close();
            Abort();
    }
  }
       z= Form2->ModalResult;
         z*= !(!strlen((Form2->ComboBox1->Text).c_str()));
           z*= !(!strlen((Form2->Edit1->Text).c_str()));
   if (z!=1) {
        GroupBox1->Enabled = !Ph;
         Form2->Close();
       Abort();
   }
     z =0;
 N12->Enabled = false;
 N9->Enabled = true;
 GroupBox1->Enabled = 1;
 __int8 taim_buf[32];
 int* P1 = (int*)&taim_buf;
 int* P2 = (int*)&MP_hesh;
       z = 2;
 for (int i= 0; i < Form2->ComboBox1->Items->Count; i++) {
      if (Form2->ComboBox1->Text == All_Us[i]) {
          Hesh(MP_hesh);
          if (!(GroupBox1->Caption == "")) {
             if (hFile1) {
                  CloseHandle(hFile1);
                  hFile1=0;}
          }
          New_User();
          SetFilePointer(hFile1,((i+1)*32-32),NULL,0);
          ReadFile(hFile1,&taim_buf,32,(unsigned long*)&z,NULL);
            z = 1;
        for (int i=0; i < 3; i++) {
             if (P1[5+i] != P2[i]) {
               MessageBoxA(NULL,"Пароль не верен!!!" ,"Внимание!!!",MB_OK);
               z--;
               break;
             }
        }
        break;
      }
 }
    if (z == 2) {
       Hesh(MP_hesh);
       UserCreate(MP_hesh);
       MessageBoxA(NULL,"Перезапустите программу." ,"Добавлен новый пользователь!",MB_OK);
       Close();
    }
   if (z) {
      Memo1->Enabled = true;
        Memo1->Clear();
         Memo1->Color = clWindow;
          N1->Enabled = true;
         GroupBox1->Caption = Form2->ComboBox1->Text;
       Form2->Edit1->Text = "";
     Form2->Edit2->Text = "";
   }
}        
//---------------------------------------------------------------
void __fastcall TForm1::N9Click(TObject *Sender)
{
 FormCreate(NULL);
 N12->Enabled = true;
 N9->Enabled = false;
 Pswd[0]=0;
}
//---------------------------------------------------------------
void __fastcall TForm1::N3Click(TObject *Sender)
{
 for (int i = 0; ComboBox1->Items->Count < Form2->ComboBox1->Items->Count-1; i++) {
   ComboBox1->Items->Add(All_Us[i]);
 }
   ComboBox1->Top = 8;
   ComboBox1->Left = 32;
   ComboBox1->Text = ComboBox1->Items->Strings[0];
   ComboBox1->Visible = true;
}
//---------------------------------------------------------------
void __fastcall TForm1::oNUbran(TObject *Sender) {
  ComboBox1->Visible = false;
   __int8 taim_buf[32];
   DWORD z;
   if (hFile1) {
    CloseHandle(hFile1);
     hFile1=0;}
      New_User();
       SetFilePointer(hFile1,ComboBox1->ItemIndex*32,NULL,0);
        ReadFile(hFile1,&taim_buf,32,&z,NULL);
         unsigned __int64 Var_Sms_buf[4];
           MP_hesh[0] = *(unsigned __int64*)&taim_buf[20];
             MP_hesh[1] = *(unsigned int*)&taim_buf[28];
              Var_Sms_buf[3] = (MP_hesh[0]>>32);
             Var_Sms_buf[3] ^=((Var_Sms_buf[3]^(matr[matr[738]^matr[5]]^0xf))<<16);
            Var_Sms_buf[3] = ((Var_Sms_buf[3]>>16)^1)&0xffff;
           Var_Sms_buf[3] *= ((MP_hesh[1]/(Var_Sms_buf[3]^1))^1);
         MP_hesh[2] =(Prop(MP_hesh[0],Var_Sms_buf[3]));
     if (!MP_hesh[2]) { MP_hesh[0]^matr[738];
                        MP_hesh[1]^matr[738];
     }    
        SaveDialog1->FileName = "Для_"+ComboBox1->Text+"_от_"+GroupBox1->Caption+".sms";
    if (SaveDialog1->Execute()) {
    int k  = 1;
    int _siz = 0;
    prst_ch(true);
    for (int j=0; j < Memo1->Lines->Count; j++) {
         _siz += StrLen(StrPCopy(Sms_buf,Memo1->Lines->Strings[j]));
    }
        _siz += (Memo1->Lines->Count<<1)+1;
    if (_siz<4000) {
        Memo1->GetTextBuf(Sms_buf,_siz);
    for (int j= 0; j < _siz ; j+=3) {
         Var_Sms_buf[0] = (*(unsigned int*) &Sms_buf[j]&0xffffff);
          Var_Sms_buf[1] = MP_hesh[0];
           Var_Sms_buf[2] = MP_hesh[1];
          ch_m(Var_Sms_buf);
         Hesh_Sms_buf[k] = Var_Sms_buf[3];
        k++;
    }
        Hesh_Sms_buf[0] = ((unsigned int)MP_hesh[1]^(unsigned int)MP_hesh[0]);
         ComboBox1->Visible = false;
          Hesh(MP_hesh);
     if (hFile1) {
          CloseHandle(hFile1);
         hFile1 = 0;
     }
    char *_ch = StrPCopy(Sms_buf,SaveDialog1->FileName);
         hFile1 = CreateFile(_ch, GENERIC_READ | GENERIC_WRITE,
             FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL );
         DWORD z;
         WriteFile(hFile1,&Hesh_Sms_buf,4*k,&z,NULL);
      if (hFile1) {
          CloseHandle(hFile1);
           hFile1 = 0;}
          MessageBoxA(NULL,"Ок!" ,"Ok!!!",MB_OK);
      }
       else {MessageBoxA(NULL,"Сократите послание!!!" ,"Внимание!!!",MB_OK);Hesh(MP_hesh);}
     }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::oNZone(TObject *Sender, TShiftState Shift, int X,int Y)
{ComboBox1->Visible = false;}
//---------------------------------------------------------------------------
void __fastcall TForm1::N2Click(TObject *Sender)
{
   unsigned __int64 Var_Sms_buf[4];
              FILE* _file;
               char *P_ch;
               char *P_Hesh_Sms_buf;
        if (OpenDialog1->Execute()) {
        P_ch = StrPCopy(Sms_buf,OpenDialog1->FileName);
        int k = 4;
         if (hFile1) {
         CloseHandle(hFile1);
         hFile1 = 0;}
    hFile1 = CreateFile(P_ch, GENERIC_READ | GENERIC_WRITE,
             FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );
   DWORD z;
         ReadFile(hFile1,&Hesh_Sms_buf,GetFileSize(hFile1,NULL),&z,NULL);
     if (hFile1) {
         CloseHandle(hFile1);
         hFile1 = 0;}
     int prv=2;
         while (prv) {
          Var_Sms_buf[0] = matr[738];
           Var_Sms_buf[1] = MP_hesh[2];
            Var_Sms_buf[2] = MP_hesh[1];
             ch_m(Var_Sms_buf);
              Var_Sms_buf[0] = Var_Sms_buf[3];
               Var_Sms_buf[1] = MP_hesh[0];
                ch_m(Var_Sms_buf);
             if (Var_Sms_buf[3] != matr[738]) {Hesh(MP_hesh);
                  prv--;
             }
             else {break;}
         }
      if ((Var_Sms_buf[3] == matr[738])&((unsigned int)MP_hesh[1]^
         (unsigned int)MP_hesh[0]) == Hesh_Sms_buf[0]) {
     for (int i= 1, k=0; i < z; i++, k+=4) {
         Var_Sms_buf[0] = Hesh_Sms_buf[i];
          Var_Sms_buf[1] = MP_hesh[2];
           Var_Sms_buf[2] = MP_hesh[1];
            ch_m(Var_Sms_buf);
            *(unsigned int*) &Sms_buf[k] = Var_Sms_buf[3];
         k--;
    }
         Memo1->Lines->SetText(Sms_buf);
         prst_ch(true);
         Hesh(MP_hesh);
      }
      else { N9Click(this);
             prst_ch(true);
             Hesh(MP_hesh);
             MessageBoxA(NULL,"Это послание не для Вас!!!" ,"Внимание!!!",MB_OK);}
 }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N8Click(TObject *Sender) {Memo1->Clear();Hesh(MP_hesh);}
//---------------------------------------------------------------------------
void __fastcall inicial(int i) {elemForm(MainMenu1);}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
 Memo1->Clear();
  Memo1->Color = clGrayText;
   Memo1->Lines->Add("");
    Memo1->Lines->Add("      Для начала работы зарегистрируйтесь!");
     Memo1->Enabled = false;
      N1->Enabled = false;
       GroupBox1->Caption = "";
        MP_hesh[0]=(int)&inicial;
         MP_hesh[1]=176;
          MP_hesh[2]=MP_hesh[0]+4;
           ch_m(MP_hesh);
      if (MP_hesh[3]-4){prst_ch(1);}
      else {prst_ch(4);
  }
}
//---------------------------------------------------------------------------
char __fastcall ChitS(TObject *Sender)
{
  for (int i=0; !Form2->Edit1->Text[i]; i++) {
    Sms_buf[i]= Form2->Edit1->Text[i];
  }
  for (int i=1; !Sms_buf[i]; i++) {
    Sms_buf[0]^= Sms_buf[i];
  }
   return (__int8)Sms_buf[0];  
}
//---------------------------------------------------------------------------
Yandex
Объявления
26.11.2016, 10:09     найти ошибки в коде
Ответ Создать тему
Опции темы

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