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

Перегружаемые функции - C++

Восстановить пароль Регистрация
 
Iworb
анимешник++
 Аватар для Iworb
93 / 60 / 2
Регистрация: 03.11.2009
Сообщений: 411
05.03.2010, 09:47     Перегружаемые функции #1
Помогите привести в рабочее состояние, а то хз че - не компилиться((( Надо создать 3 перегружаемые функции, которые выделяют память в куче и возвращают указатель на созданный массив. Принимать 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
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
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
 
float perimetr(int x1, int y1, int x2, int y2, int x3, int y3)
{
    float len1, len2, len3;
    len1=sqrt(pow(x2-x1,2.)+pow(y2-y1,2.));
    len2=sqrt(pow(x2-x3,2.)+pow(y2-y3,2.));
    len3=sqrt(pow(x1-x3,2.)+pow(x1-x3,2.));
    return len1+len2+len3;
}
 
float func(float x, int formul)
{
    if(formul==49) return pow(cos(x+0.7),3.);
    if(formul==50) return atan(x-2)*atan(x+0.5)-0.45;
    if(formul==51) return 0.7*(x-1)*log(x+0.001);
    return 0;
}
 
float *crAr(int const m)
{
    float *s=new float[m];
    int scale=100;
    for(int i=0;i<m;i++) *(s+i)=((random(500)*scale)+scale)/(double)scale;
    return s;
}
 
float *crAr(float m)
{
    m=(int)m;
    float *s=new float[m];
    for(int i=0;i<m;i++)
    {
        printf("Set mas[%d] element: ", i+1);
        scanf("%d",&(*(s+i)));
    }
    return s;
}
 
float *crAr(int const m, int formul)
{
    float *s=new float[m];
    for(int i=0;i<m;i++) *(s+i)=func(i,formul);
    return s;
}
 
void printArray(float *s, int m)
{
    for(int i=0; i<m; i++) printf("mas[%d]=%-5d ", *(s+i));
}
 
void main()
{
    int mv, pf, m, da, db, af; //mv - метод ввода; af - выбор функции; m - длинна массива; *s - указатель на массив; da, db - диапазон от a до b
    float *x,*y,xx[3],yy[3];
    float per, perMax;
    clrscr();
    randomize();
    printf("Dlinna massiva:");
    scanf("%d", &m);
    printf("Vyberite metod vvoda:\n\n");
    printf("1 - zapolnenie slu4ainymi 4islami\n2 - vvod s klaviatury\n3 - vy4islit` po formule\n");
    mv=getch();
    if(mv==49)
    {
        *x=crAr((int const)m);//вызываем случайное заполнение
        *y=crAr((int const)m);
    }
    if(mv==50)
    {
        *x=crAr((float)m);
        *y=crAr((float)m); //вызываем ввод с клавиатуры
    }
    if(mv==51)
    {
        do
        {
            printf("\nChoose a function:\n1) (cos(x+0.7))^3+1\n2) arctg(x-2)*arctg(x+0.5)-0.45\n3) 0.7(x-1)*ln(x+0.001)");
            af=getch(); 
            if(af!=49||af!=50||af!=51) printf("\nEROOR FUCTION! RETRY!\n");
        }
        while(af!=49||af!=50||af!=51);
        *x=crAr(m,af); //вызываем ф-цию от 0 до m и передаем ей 'af'
        *y=crAr(m,af);      
    }
    printArray(x,m);
    printArray(y,m);
    printf("\n");
    for(int i=0;i<m-2;i++)
    {
        for(int j=i+1;j<m-1;j++)
        {
            for(int k=j+1;k<m;k++)
            {
                per=perimetr(x[i],y[i],x[j],y[j],x[k],y[k]);
                if(per>perMax)
                {
                    perMax=per;
                    xx[0]=x[i];
                    xx[1]=x[j];
                    xx[2]=x[k];
                    yy[0]=y[i];
                    yy[1]=y[j];
                    yy[2]=y[k];
                }
            }
        }
    }
    printf("\nSamyi bol`shoi treugol`nik imeet perimet %10.2f\nEgo to4ki:\nx[1]=%d\ty[1]=%d\nx[2]=%d\ty[2]=%d\nx[3]=%d\ty[3]=%d\n",perMax,xx[0],yy[0],xx[1],yy[1],xx[2],yy[2]);
    delete x;
    delete y;
    getch();
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
solar_wind
 Аватар для solar_wind
740 / 731 / 39
Регистрация: 06.07.2009
Сообщений: 2,937
Завершенные тесты: 1
05.03.2010, 10:39     Перегружаемые функции #2
float *x - x указатель на float
crAr((int const)m); - возвращает указатель на float;
*x=crAr((int const)m); зачем в первый элемент массива х засовывать указатель....
пиши просто x=crAr((int const)m);

То что не верно определяется сигнатура, возможно преобразование переменных при вызове функции не верно работает, создай еще одну переменную типа float и ее помещай как аргумент функции.
Iworb
анимешник++
 Аватар для Iworb
93 / 60 / 2
Регистрация: 03.11.2009
Сообщений: 411
05.03.2010, 16:30  [ТС]     Перегружаемые функции #3
Цитата Сообщение от vitaly1981 Посмотреть сообщение
float *x - x указатель на float
crAr((int const)m); - возвращает указатель на float;
*x=crAr((int const)m); зачем в первый элемент массива х засовывать указатель....
пиши просто x=crAr((int const)m);

То что не верно определяется сигнатура, возможно преобразование переменных при вызове функции не верно работает, создай еще одну переменную типа float и ее помещай как аргумент функции.
убрал звездочки, но вот что выдает (заполняю случайно)
Dlinna massiva:5
Vyberite metod vvoda:

1 - zapolnenie slu4ainymi 4islami
2 - vvod s klaviatury
3 - vy4islit` po formule
mas[0]=8192 mas[0]=8192 mas[0]=8192 mas[0]=0 mas[0]=0 mas[0]=0 ma
s[0]=0 mas[0]=0 mas[0]=0 mas[0]=0

Samyi bol`shoi treugol`nik imeet perimet 808.72
Ego to4ki:
x[1]=0 y[1]=8192
x[2]=-5243 y[2]=-16273
x[3]=0 y[3]=0
Добавлено через 4 минуты
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
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
 
float perimetr(float x1, float y1, float x2, float y2, float x3, float y3)
{
    float len1, len2, len3;
    len1=sqrt(pow(x2-x1,2.)+pow(y2-y1,2.));
    len2=sqrt(pow(x2-x3,2.)+pow(y2-y3,2.));
    len3=sqrt(pow(x1-x3,2.)+pow(x1-x3,2.));
    return len1+len2+len3;
}
 
float func(float x, int formul)
{
    if(formul==49) return pow(cos(x+0.7),3.);
    if(formul==50) return atan(x-2)*atan(x+0.5)-0.45;
    if(formul==51) return 0.7*(x-1)*log(x+0.001);
    return 0;
}
 
float *crAr(int const m)
{
    float *s=new float[m];
    int scale=100;
    for(int i=0;i<m;i++) *(s+i)=((random(500)*scale)+scale)/(double)scale;
    return s;
}
 
float *crAr(unsigned m)
{
    float *s=new float[m];
    for(int i=0;i<m;i++)
    {
        printf("Set mas[%d] element: ", i+1);
        scanf("%10.2f",&(*(s+i)));
    }
    return s;
}
 
float *crAr(int const m, int formul)
{
    float *s=new float[m];
    for(int i=0;i<m;i++) *(s+i)=func(i,formul);
    return s;
}
 
void printArray(float *s, int m)
{
    for(int i=0; i<m; i++) printf("mas[%d]=%-10.2f ", *(s+i));
}
 
void main()
{
    int mv, pf, m, da, db, af; //mv - метод ввода; af - выбор функции; m - длинна массива; *s - указатель на массив; da, db - диапазон от a до b
    float *x,*y,xx[3],yy[3];
    float per, perMax;
    clrscr();
    randomize();
    printf("Dlinna massiva:");
    scanf("%d", &m);
    printf("Vyberite metod vvoda:\n\n");
    printf("1 - zapolnenie slu4ainymi 4islami\n2 - vvod s klaviatury\n3 - vy4islit` po formule\n");
    mv=getch();
    if(mv==49)
    {
        x=crAr((int const)m);//вызываем случайное заполнение
        y=crAr((int const)m);
    }
    if(mv==50)
    {
        x=crAr((unsigned)m);
        y=crAr((unsigned)m); //вызываем ввод с клавиатуры
    }
    if(mv==51)
    {
        do
        {
            printf("\nChoose a function:\n1) (cos(x+0.7))^3+1\n2) arctg(x-2)*arctg(x+0.5)-0.45\n3) 0.7(x-1)*ln(x+0.001)");
            af=getch(); 
            if(af!=49||af!=50||af!=51) printf("\nEROOR FUCTION! RETRY!\n");
        }
        while(af!=49||af!=50||af!=51);
        x=crAr(m,af); //вызываем ф-цию от 0 до m и передаем ей 'af'
        y=crAr(m,af);       
    }
    printArray(x,m);
    printArray(y,m);
    printf("\n");
    for(int i=0;i<m-2;i++)
    {
        for(int j=i+1;j<m-1;j++)
        {
            for(int k=j+1;k<m;k++)
            {
                per=perimetr(x[i],y[i],x[j],y[j],x[k],y[k]);
                if(per>perMax)
                {
                    perMax=per;
                    xx[0]=x[i];
                    xx[1]=x[j];
                    xx[2]=x[k];
                    yy[0]=y[i];
                    yy[1]=y[j];
                    yy[2]=y[k];
                }
            }
        }
    }
    printf("\nSamyi bol`shoi treugol`nik imeet perimet %10.2f\nEgo to4ki:\nx[1]=%10.2f\ty[1]=%10.2f\nx[2]=%10.2f\ty[2]=%10.2f\nx[3]=%10.2f\ty[3]=%10.2f\n",perMax,xx[0],yy[0],xx[1],yy[1],xx[2],yy[2]);
    delete x;
    delete y;
    getch();
}
kuroiryuu
 Аватар для kuroiryuu
311 / 295 / 23
Регистрация: 05.11.2009
Сообщений: 698
Завершенные тесты: 2
05.03.2010, 16:41     Перегружаемые функции #4
а переменную perMax чем инициализируете?
советую пройтись по варнингам, и довести их число до 0
Iworb
анимешник++
 Аватар для Iworb
93 / 60 / 2
Регистрация: 03.11.2009
Сообщений: 411
05.03.2010, 16:53  [ТС]     Перегружаемые функции #5
вот правильней
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
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
 
 
float perimetr(float x1, float y1, float x2, float y2, float x3, float y3)
{
    float len1, len2, len3;
    len1=sqrt(pow(x2-x1,2.)+pow(y2-y1,2.));
    len2=sqrt(pow(x2-x3,2.)+pow(y2-y3,2.));
    len3=sqrt(pow(x1-x3,2.)+pow(x1-x3,2.));
    return len1+len2+len3;
}
 
float func(float x, int formul)
{
    if(formul==49) return pow(cos(x+0.7),3.);
    if(formul==50) return atan(x-2)*atan(x+0.5)-0.45;
    if(formul==51) return 0.7*(x-1)*log(x+0.001);
    return 0;
}
 
float *crAr(int const m)
{
    float *s=new float[m];
    int scale=100;
    for(int i=0;i<m;i++) *(s+i)=((random(500)*scale)+scale)/(double)scale;
    return s;
}
 
float *crAr(unsigned m)
{
    float *s=new float[m];
    for(int i=0;i<m;i++)
    {
        printf("Set mas[%d] element: ", i+1);
        scanf("%10.2f",&*(s+i));
    }
    return s;
}
 
float *crAr(int const m, int formul)
{
    float *s=new float[m];
    for(int i=0;i<m;i++) *(s+i)=func(i,formul);
    return s;
}
 
void printArray(float *s, int m)
{
    for(int i=0; i<m; i++) printf("mas[%d]=%-10.2f\t",i+1, *(s+i));
}
 
void main()
{
    int mv, pf, m, da, db, af; //mv - метод ввода; af - выбор функции; m - длинна массива; *s - указатель на массив; da, db - диапазон от a до b
    float *x,*y,xx[3],yy[3];
    float per, perMax;
    clrscr();
    randomize();
    printf("Dlinna massiva:");
    scanf("%d", &m);
    printf("Vyberite metod vvoda:\n\n");
    printf("1 - zapolnenie slu4ainymi 4islami\n2 - vvod s klaviatury\n3 - vy4islit` po formule\n");
    mv=getch();
    if(mv==49)
    {
        x=crAr((int const)m);//вызываем случайное заполнение
        y=crAr((int const)m);
    }
    if(mv==50)
    {
        x=crAr((unsigned)m);
        y=crAr((unsigned)m); //вызываем ввод с клавиатуры
    }
    if(mv==51)
    {
        do
        {
            printf("\nChoose a function:\n1) (cos(x+0.7))^3+1\n2) arctg(x-2)*arctg(x+0.5)-0.45\n3) 0.7(x-1)*ln(x+0.001)");
            af=getch(); 
            if(af!=49||af!=50||af!=51) printf("\nEROOR FUCTION! RETRY!\n");
        }
        while((af!=49)||(af!=50)||(af!=51));
        x=crAr(m,af); //вызываем ф-цию от 0 до m и передаем ей 'af'
        y=crAr(m,af);       
    }
    printArray(x,m);
    printArray(y,m);
    printf("\n");
    for(int i=0;i<m-2;i++)
    {
        for(int j=i+1;j<m-1;j++)
        {
            for(int k=j+1;k<m;k++)
            {
                per=perimetr(x[i],y[i],x[j],y[j],x[k],y[k]);
                if(per>perMax)
                {
                    perMax=per;
                    xx[0]=x[i];
                    xx[1]=x[j];
                    xx[2]=x[k];
                    yy[0]=y[i];
                    yy[1]=y[j];
                    yy[2]=y[k];
                }
            }
        }
    }
    printf("\nSamyi bol`shoi treugol`nik imeet perimet %8.2f\nEgo to4ki:\nx[1]=%8.2f\ty[1]=%8.2f\nx[2]=%8.2f\ty[2]=%8.2f\nx[3]=%8.2f\ty[3]=%8.2f\n",perMax,xx[0],yy[0],xx[1],yy[1],xx[2],yy[2]);
    delete x;
    delete y;
    getch();
}
Добавлено через 1 минуту
Цитата Сообщение от kuroiryuu Посмотреть сообщение
а переменную perMax чем инициализируете?
советую пройтись по варнингам, и довести их число до 0
да с этим вроде уже впорядке все (а с perMax у меня проблем и не было)
нужно подравнять ввод с клавиатуры и по формуле, а то он крутит цикл do while (при выборе формулы), хотя он должен из него выходить...
kuroiryuu
 Аватар для kuroiryuu
311 / 295 / 23
Регистрация: 05.11.2009
Сообщений: 698
Завершенные тесты: 2
05.03.2010, 17:13     Перегружаемые функции #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
if(mv == 49)
{
    x = crAr((int const)m);//вызываем случайное заполнение
    y = crAr((int const)m);
}
if(mv == 50)
{
    x = crAr((float)m);
    y = crAr((float)m); //вызываем ввод с клавиатуры
}
if(mv == 51)
{
    do
    {
        printf("\nChoose a function:\n1) (cos(x+0.7))^3+1\n2) arctg(x-2)*arctg(x+0.5)-0.45\n3) 0.7(x-1)*ln(x+0.001)\n");
        af = _getch(); 
        if(af!=49 && af!=50 && af!=51) //здесь должно быть &&, а не ||
            printf("\nEROOR FUCTION! RETRY!\n");
    }
    while(af!=49 && af!=50 && af!=51); //тоже самое что и с if
    x = crAr(m, af); //вызываем ф-цию от 0 до m и передаем ей 'af'
    y = crAr(m, af);          
}
что касается других функций....

вот правильная функция printArray
C++
1
2
3
4
5
void printArray(float *s, int m)
{
    for(int i=0; i<m; i++) 
        printf("mas[%d]=%5f ",i, *(s+i));
}
далее:
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
float perimetr(int x1, int y1, int x2, int y2, int x3, int y3)
{
        float len1, len2, len3;
        len1 = (float)sqrt(pow((double)(x2-x1),2)+pow((double)(y2-y1),2));
        len2 = (float)sqrt(pow((double)(x2-x3),2)+pow((double)(y2-y3),2));
        len3 = (float)sqrt(pow((double)(x1-x3),2)+pow((double)(x1-x3),2));
        return len1 + len2 + len3;
}
 
float func(float x, int formul)
{
        if(formul==49) return (float)pow(cos(x+0.7),3.);
        if(formul==50) return (float)(atan(x-2)*atan(x+0.5)-0.45);
        if(formul==51) return (float)(0.7*(x-1)*log(x+0.001));
        return 0;
}
 
float* crAr(int const m)
{
    srand(500);// у меня нет borland c++
    float *s=new float[m];
    int scale=100;
    for(int i=0;i<m;i++) 
        *(s+i)= (float)(((rand() * scale) + scale)/(double)scale);
    return s;
}
 
float* crAr(float m)
{
    float *s = new float[(int)m];
    for(int i = 0; i < (int)m; i++)
    {
        printf("Set mas[%d] element: ", i+1);
        scanf_s("%f",&s[i]);
    }
    return s;
}
 
float* crAr(int const m, int formul)
{
    float *s = new float[m];
    for(int i=0;i<m;i++) 
        *(s+i) = func((float)i, formul);
    return s;
}
а вот этот мистический кусок вообще не представляю что делает:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
for(int i=0;i<m-2;i++)
{
    for(int j=i+1;j<m-1;j++)
    {
        for(int k=j+1;k<m;k++)
        {
            per = perimetr((int)x[i],(int)y[i],(int)x[j],(int)y[j],(int)x[k],(int)y[k]);
            if(per > perMax)
            {
                perMax = per;
                xx[0]=x[i];
                xx[1]=x[j];
                xx[2]=x[k];
                yy[0]=y[i];
                yy[1]=y[j];
                yy[2]=y[k];
            }
        }
    }
}
Добавлено через 4 минуты
Цитата Сообщение от Iworb Посмотреть сообщение
да с этим вроде уже впорядке все (а с perMax у меня проблем и не было)
а чему тогда он равен, когда проверка начинается?

кстати delete x; не правильно, правильно delete[] x;
Iworb
анимешник++
 Аватар для Iworb
93 / 60 / 2
Регистрация: 03.11.2009
Сообщений: 411
05.03.2010, 17:16  [ТС]     Перегружаемые функции #7
этот блок работает нормально
не сказал бы - do while крутит все время, даже когда значения равны 49 или 50 или 51
а вот этот мистический кусок вообще не представляю что делает:
берет три точки и считает периметр треугольника, построенных на них, если он больше максимального - запоминает точки и периметр

Добавлено через 43 секунды
а чему тогда он равен, когда проверка начинается?
спс, тепь нулю))
kuroiryuu
 Аватар для kuroiryuu
311 / 295 / 23
Регистрация: 05.11.2009
Сообщений: 698
Завершенные тесты: 2
05.03.2010, 17:20     Перегружаемые функции #8
Цитата Сообщение от Iworb Посмотреть сообщение
не сказал бы - do while крутит все время, даже когда значения равны 49 или 50 или 51
вы внимательно смотрели код?
советую внимательно на него посмотреть, и сравнить со своим
Iworb
анимешник++
 Аватар для Iworb
93 / 60 / 2
Регистрация: 03.11.2009
Сообщений: 411
05.03.2010, 17:32  [ТС]     Перегружаемые функции #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
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
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
 
 
float perimetr(float x1, float y1, float x2, float y2, float x3, float y3)
{
    float len1, len2, len3;
    len1=(float)sqrt(pow((double)(x2-x1),2)+pow((double)(y2-y1),2));
    len2=(float)sqrt(pow((double)(x2-x3),2)+pow((double)(y2-y3),2));
    len3=(float)sqrt(pow((double)(x1-x3),2)+pow((double)(x1-x3),2));
    return len1+len2+len3;
}
 
float func(float x, int formul)
{
    if(formul==49) return (float)pow(cos(x+0.7),3.);
    if(formul==50) return (float)atan(x-2)*atan(x+0.5)-0.45;
    if(formul==51) return (float)0.7*(x-1)*log(x+0.001);
    return 0;
}
 
float *crAr(int const m)
{
    float *s=new float[m];
    int scale=100;
    for(int i=0;i<m;i++) *(s+i)=((random(500)*scale)+scale)/(double)scale;
    return s;
}
 
float *crAr(unsigned m)
{
    float *s=new float[m];
    for(int i=0;i<m;i++)
    {
        printf("Set mas[%d] element: ", i+1);
        scanf("%10.2f",&s[i]);
    }
    return s;
}
 
float *crAr(int const m, int formul)
{
    float *s=new float[m];
    for(int i=0;i<m;i++) *(s+i)=func((float)i,formul);
    return s;
}
 
void printArray(float *s, int m)
{
    for(int i=0; i<m; i++) printf("mas[%d]=%-10.2f\t",i+1, *(s+i));
}
 
void main()
{
    int mv, pf, m, da, db, af; //mv - метод ввода; af - выбор функции; m - длинна массива; *s - указатель на массив; da, db - диапазон от a до b
    float *x,*y,xx[3],yy[3];
    float per, perMax=0;
    clrscr();
    randomize();
    printf("Dlinna massiva:");
    scanf("%d", &m);
    printf("Vyberite metod vvoda:\n\n");
    printf("1 - zapolnenie slu4ainymi 4islami\n2 - vvod s klaviatury\n3 - vy4islit` po formule\n");
    mv=getch();
    if(mv==49)
    {
        x=crAr((int const)m);//вызываем случайное заполнение
        y=crAr((int const)m);
    }
    if(mv==50)
    {
        x=crAr((unsigned)m);
        y=crAr((unsigned)m); //вызываем ввод с клавиатуры
    }
    if(mv==51)
    {
        do
        {
            printf("\nChoose a function:\n1) (cos(x+0.7))^3+1\n2) arctg(x-2)*arctg(x+0.5)-0.45\n3) 0.7(x-1)*ln(x+0.001)");
            af=getch();
            if((af!=49)||(af!=50)||(af!=51)) printf("\nERROR FUNCTION!!! RETRY!!!\n\n");
        }
        while((af!=49)||(af!=50)||(af!=51));
        x=crAr(m,af); //вызываем ф-цию от 0 до m и передаем ей 'af'
        y=crAr(m,af);       
    }
    printArray(x,m);
    printArray(y,m);
    printf("\n");
    for(int i=0;i<m-2;i++)
    {
        for(int j=i+1;j<m-1;j++)
        {
            for(int k=j+1;k<m;k++)
            {
                per=perimetr(x[i],y[i],x[j],y[j],x[k],y[k]);
                if(per>perMax)
                {
                    perMax=per;
                    xx[0]=x[i];
                    xx[1]=x[j];
                    xx[2]=x[k];
                    yy[0]=y[i];
                    yy[1]=y[j];
                    yy[2]=y[k];
                }
            }
        }
    }
    printf("\nSamyi bol`shoi treugol`nik imeet perimet %8.2f\nEgo to4ki:\nx[1]=%8.2f\ty[1]=%8.2f\nx[2]=%8.2f\ty[2]=%8.2f\nx[3]=%8.2f\ty[3]=%8.2f\n",perMax,xx[0],yy[0],xx[1],yy[1],xx[2],yy[2]);
    delete[] x;
    delete[] y;
    getch();
}
Осталось 2 проблемы: ввод с клавиатуры и этот грёбаный цикл do while
P.S. при вводе с клавиатуры дает такое чудо
Dlinna massiva:3
Vyberite metod vvoda:

1 - zapolnenie slu4ainymi 4islami
2 - vvod s klaviatury
3 - vy4islit` po formule
Set mas[1] element: Set mas[2] element: Set mas[3] element: Set mas[1] element:
Set mas[2] element: Set mas[3] element: mas[1]=0.00 mas[2]=-183.92
mas[3]=0.00 mas[1]=0.00 mas[2]=-1551765199052387
73000000000.00 mas[3]=0.00

Samyi bol`shoi treugol`nik imeet perimet 310353039810477545000000000.00
Ego to4ki:
x[1]= 0.00 y[1]= 0.00
x[2]= -183.92 y[2]=-155176519905238773000000000.00
x[3]= 0.00 y[3]= 0.00
Причем, после того как я выбрал ввод (нажал 2) программа выдает это и завершается (я фактически ничего не ввожу)

Добавлено через 1 минуту
с do while отбой, спасибо))

Добавлено через 8 минут
все, разобрался что было

Добавлено через 48 секунд
сравнив с вашим кодом))
Так, спасибки вроде проставил, еще раз огромное спасибо, вроде все исправно работает))
kuroiryuu
 Аватар для kuroiryuu
311 / 295 / 23
Регистрация: 05.11.2009
Сообщений: 698
Завершенные тесты: 2
05.03.2010, 17:34     Перегружаемые функции #10
у вас там не нормально работает при выборе "заполнять массивы через формулы"
там загвостка в том, что если программа ни разу не зайдет в тот мега-if, то массивы yy и xx будут содержать мусор
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.03.2010, 18:00     Перегружаемые функции
Еще ссылки по теме:

Написать перегружаемые функции умножения разного количества параметров C++
C++ Создать перегружаемые функции и шаблоны для типов int и double
C++ можно ли делать виртуальными перегружаемые операторы?

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

Или воспользуйтесь поиском по форуму:
Iworb
анимешник++
 Аватар для Iworb
93 / 60 / 2
Регистрация: 03.11.2009
Сообщений: 411
05.03.2010, 18:00  [ТС]     Перегружаемые функции #11
Цитата Сообщение от kuroiryuu Посмотреть сообщение
у вас там не нормально работает при выборе "заполнять массивы через формулы"
там загвостка в том, что если программа ни разу не зайдет в тот мега-if, то массивы yy и xx будут содержать мусор
Она по-любому туда зайдет. perMax я поставил 0, а любой периметр больше нуля, поэтому он в xx и уу запишет нужные значения
Yandex
Объявления
05.03.2010, 18:00     Перегружаемые функции
Ответ Создать тему
Опции темы

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