Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
анимешник++
95 / 62 / 7
Регистрация: 03.11.2009
Сообщений: 426
1

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

05.03.2010, 09:47. Просмотров 862. Ответов 10
Метки нет (Все метки)

Помогите привести в рабочее состояние, а то хз че - не компилиться((( Надо создать 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();
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.03.2010, 09:47
Ответы с готовыми решениями:

Перегружаемые функции
помогите с программой, и если с можете поясните сами функции, а то совсем в них запуталась, сколько...

перегружаемые функции
Есть задание для массивов типа int и double: 1. найти сумму положительных элементов массива 2....

Написать перегружаемые функции умножения разного количества параметров
Помогите пожалуйста с задачей ничего не понимаю: Написать перегружаемые функции умножения...

Создать перегружаемые функции и шаблоны для типов int и double
Создать перегружаемые функции и шаблоны для типов int и double. Передачу параметров в функцию...

10
769 / 759 / 59
Регистрация: 06.07.2009
Сообщений: 3,016
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 и ее помещай как аргумент функции.
1
анимешник++
95 / 62 / 7
Регистрация: 03.11.2009
Сообщений: 426
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();
}
0
324 / 308 / 68
Регистрация: 05.11.2009
Сообщений: 712
05.03.2010, 16:41 4
а переменную perMax чем инициализируете?
советую пройтись по варнингам, и довести их число до 0
0
анимешник++
95 / 62 / 7
Регистрация: 03.11.2009
Сообщений: 426
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 (при выборе формулы), хотя он должен из него выходить...
0
324 / 308 / 68
Регистрация: 05.11.2009
Сообщений: 712
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;
1
анимешник++
95 / 62 / 7
Регистрация: 03.11.2009
Сообщений: 426
05.03.2010, 17:16  [ТС] 7
этот блок работает нормально
не сказал бы - do while крутит все время, даже когда значения равны 49 или 50 или 51
а вот этот мистический кусок вообще не представляю что делает:
берет три точки и считает периметр треугольника, построенных на них, если он больше максимального - запоминает точки и периметр

Добавлено через 43 секунды
а чему тогда он равен, когда проверка начинается?
спс, тепь нулю))
0
324 / 308 / 68
Регистрация: 05.11.2009
Сообщений: 712
05.03.2010, 17:20 8
Цитата Сообщение от Iworb Посмотреть сообщение
не сказал бы - do while крутит все время, даже когда значения равны 49 или 50 или 51
вы внимательно смотрели код?
советую внимательно на него посмотреть, и сравнить со своим
1
анимешник++
95 / 62 / 7
Регистрация: 03.11.2009
Сообщений: 426
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 секунд
сравнив с вашим кодом))
Так, спасибки вроде проставил, еще раз огромное спасибо, вроде все исправно работает))
0
324 / 308 / 68
Регистрация: 05.11.2009
Сообщений: 712
05.03.2010, 17:34 10
у вас там не нормально работает при выборе "заполнять массивы через формулы"
там загвостка в том, что если программа ни разу не зайдет в тот мега-if, то массивы yy и xx будут содержать мусор
1
анимешник++
95 / 62 / 7
Регистрация: 03.11.2009
Сообщений: 426
05.03.2010, 18:00  [ТС] 11
Цитата Сообщение от kuroiryuu Посмотреть сообщение
у вас там не нормально работает при выборе "заполнять массивы через формулы"
там загвостка в том, что если программа ни разу не зайдет в тот мега-if, то массивы yy и xx будут содержать мусор
Она по-любому туда зайдет. perMax я поставил 0, а любой периметр больше нуля, поэтому он в xx и уу запишет нужные значения
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.03.2010, 18:00

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Написать перегружаемые функции, которые считают среднее значение массива чисел
Написать перегружаемые функции, которые считают среднее значение массива чисел типа float или double

можно ли делать виртуальными перегружаемые операторы?
например так: virtual a&amp; a::operator=(a&amp; b);

Как совместить код, реализующий методы и перегружаемые операции
Есть такое задание::::) Разработать класс «Вектор» – Vektor размерности n . Определить несколько...

Перегружаемые и виртуальные методы (ошибка)
Ребята, выручайте! Программа должна выводить рандомные числа. Возникает ошибка при запуске. ...


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

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

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