Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 18.05.2013
Сообщений: 31
1

Передача символических имен функций

05.07.2013, 14:26. Показов 1531. Ответов 26
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте,
Чтобы долго не объяснять, прилагаю условие задачи и мой код. Прошу Вашего совета по поводу вставки внутрь созданной функции указания на стандартную. Мне кажется, что моя запись ошибочна, но что именно не так, понять не могу. Вот код, задание ниже:
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
#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <windows.h>
#define Nx  4
#define Ny  5
#define Nz  6
void vvod(float x[ ], int n, char q);
double brackets(float x[ ], int n, double a, double b, char f1, char f2);
{
double series = (f1(a*x[i])+ f2(b*x[i]));
return series;
}
main()
{
char str[50];
textbackground(2);
textcolor(15);
clrscr();
double x[Nx], y[Ny], z[Nz], w, a, b, c, g, r, q;
CharToOem("\nÂâåäèòå ýëåìåíòû ìàññèâîâ x, y, z:\n", str);
printf(str);
vvod(x, Nx, 'x');
vvod(y, Ny, 'y');
vvod(z, Nz, 'z');
CharToOem("\nÂâåäèòå a:\n", str);
printf(str);
scanf("%lf",&x);
CharToOem("\n\nÂâåäèòå b:\n", str);
printf(str);
scanf("%lf",&y);
CharToOem("\n\nÂâåäèòå c:\n", str);
printf(str);
scanf("%lf",&z);
CharToOem("\n\nÂâåäèòå  g:\n", str);
printf(str);
scanf("%lf",&a);
CharToOem("\n\nÂâåäèòå  r:\n", str);
printf(str);
scanf("%lf",&b);
CharToOem("\n\nÂâåäèòå  q:\n", str);
printf(str);
scanf("%lf",&c);
w=sum(x, Nx)/znam+sum(z, Nz);
printf("w=%f\n",w);
{
int i;
float w=0;
for (i=0; i<n; i++)
w+=brackets(x[i]),Nx,a,b,sin(),cos())+brackets(y[i]),Ny,c,g,tan(),abc())+brackets(z[i]),Nz,r,q,cos(), sin());
printf("\nw = %f",w);
 
CharToOem("\nÄëÿ âûõîäà íàæìèòå êëàâèøó Enter", str);
printf(str);
getch();
}
Миниатюры
Передача символических имен функций  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.07.2013, 14:26
Ответы с готовыми решениями:

Передача значений функций в главную программу, вызов функций
Здравствуйте! Скорее всего, неправильно передаю значения функциям и в главную программу. Помогите...

Пересечение имён функций
Например я включаю &lt;math.h&gt;, но при этом у меня у самого ещё определена функция например log. Какая...

Перегрузка имен функций
Благодаря чему в С++ разрешена перегрузка имен функций?

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

26
0 / 0 / 0
Регистрация: 18.05.2013
Сообщений: 31
05.07.2013, 15:14  [ТС] 2
подумала, и слегка подправила код. Ошибка компиляции только одна (соответсвенно прилагаю). Подозреваю что ошибка именно вот тут:
C
1
2
3
4
double brackets(float x[ ], int n, double a, double b, double f1(double), double f2(double));
{
double series = (f1(a*x[i])+ f2(b*x[i]));
return series;
Подправленный код:
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
#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <windows.h>
#define Nx  4
#define Ny  5
#define Nz  6
void vvod(float x[ ], int n, char q);
double brackets(float x[ ], int n, double a, double b, double f1(double), double f2(double));
{
double series = (f1(a*x[i])+ f2(b*x[i]));
return series;
}
main()
{
char str[50];
textbackground(2);
textcolor(15);
clrscr();
double x[Nx], y[Ny], z[Nz], w, a, b, c, g, r, q;
CharToOem("\nВведите элементы массивов x, y, z:\n", str);
printf(str);
vvod(x, Nx, 'x');
vvod(y, Ny, 'y');
vvod(z, Nz, 'z');
CharToOem("\nВведите a:\n", str);
printf(str);
scanf("%lf",&a);
CharToOem("\n\nВведите b:\n", str);
printf(str);
scanf("%lf",&b);
CharToOem("\n\nВведите c:\n", str);
printf(str);
scanf("%lf",&c);
CharToOem("\n\nВведите  g:\n", str);
printf(str);
scanf("%lf",&g);
CharToOem("\n\nВведите  r:\n", str);
printf(str);
scanf("%lf",&r);
CharToOem("\n\nВведите  q:\n", str);
printf(str);
scanf("%lf",&q);
w=sum(x, Nx)/znam+sum(z, Nz);
printf("w=%f\n",w);
{
int i;
float w=0;
for (i=0; i<n; i++)
w+=brackets(x[i]),Nx,a,b,sin,cos)+brackets(y[i]),Ny,c,g,tan,abc)+brackets(z[i]),Nz,r,q,cos,sin);
printf("\nw = %f",w);
 
CharToOem("\nДля выхода нажмите Enter", str);
printf(str);
getch();
}
Миниатюры
Передача символических имен функций  
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
05.07.2013, 19:39 3
Точку с запятой, в 10 строке, уберите.

Добавлено через 3 минуты
В brackets(), i - это что?
C++
1
double series = (f1(a*x[i])+ f2(b*x[i]));
Добавлено через 2 минуты
Если создаёте массивы для double, то и:
C++
1
2
void vvod(double x[ ], int n, char q);
double brackets(double x[ ], int n, double a, double b, double f1(double), double f2(double))
Добавлено через 8 минут
C++
1
2
3
4
5
double brackets(double x, int n, double a, double b, double f1(double), double f2(double))
{
    double series = (f1(a * x)+ f2(b * x));
    return series;
}
C++
1
 w += brackets(x[i], Nx, a, b, sin, cos) + brackets(y[i], Ny, c, g, tan, abs) + brackets(z[i], Nz, r, q, cos, sin);
Добавлено через 2 минуты
Что за sum, znam, и n?
1
0 / 0 / 0
Регистрация: 18.05.2013
Сообщений: 31
05.07.2013, 19:51  [ТС] 4
Что за sum, znam, и n?[/QUOTE]

Убрала, написала по дурости из другой задачи и не увидела. Внесла указанные Вами изменения: при компиляции вместо одной ошибки появилось девять. Вот они:
Миниатюры
Передача символических имен функций  
0
415 / 411 / 95
Регистрация: 06.10.2011
Сообщений: 832
05.07.2013, 19:57 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
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
typedef double (*Func)(double);
 
double sum(double *x,
           int n,
           double a,
           double b,
           Func f1,
           Func f2)
{
    double result = 0.0;
    while (n--)
        result += f1(a * x[n]) + f2(b * x[n]);
    return result;
}
 
double calc(double a,
            double b,
            double c,
            double g,
            double r,
            double q,
            double *x,
            double *y,
            double *z)
{
    double result =
        sum(x, 4, a, b, sin, cos) +
        sum(y, 5, c, g, tan, abs) +
        sum(z, 6, r, q, cos, sin);
    return result;
}
 
int main()
{
    double x[4] = {1, 2, 3, 4},
           y[5] = {5, 6, 7, 8, 9},
           z[6] = {10, 11, 12, 13, 14, 15},
           a = 1.5,
           b = 2.5,
           c = 3.3,
           g = 4.5,
           r = 5.5,
           q = 4.5;
    printf( "%4.2f", calc(a, b, c, g, r, q, x, y, z) );
    return 0;
}
1
0 / 0 / 0
Регистрация: 18.05.2013
Сообщений: 31
05.07.2013, 20:05  [ТС] 6
Все равно не компилируется - есть ошибки. И, если не трудно, поясните, что это (*Func)
0
415 / 411 / 95
Регистрация: 06.10.2011
Сообщений: 832
05.07.2013, 20:07 7
Pendalfik, компилируется в любом компиляторе С - http://ideone.com/aaYanz
Цитата Сообщение от Pendalfik Посмотреть сообщение
И, если не трудно, поясните, что это (*Func)
C
1
typedef double (*Func)(double);
Func - имя типа, который указывает на функцию, которая принимает double и возвращает double
0
89 / 1 / 3
Регистрация: 04.07.2013
Сообщений: 282
05.07.2013, 20:21 8
о боже мой почему ты не про инициализировал функции это же элементарный с++ даже такой чайник как я заметил)
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
05.07.2013, 20:37 9
Цитата Сообщение от Pendalfik Посмотреть сообщение
Внесла указанные Вами изменения:
Какие вы изменения там внесли никому не видно. Код покажите с изменениями, а то вслепую всё...
0
0 / 0 / 0
Регистрация: 18.05.2013
Сообщений: 31
05.07.2013, 20:43  [ТС] 10
Никак. Даже с компиляцией не в Borland результат выдает 0. С такими исходными данными должно быть Rezult w=21733.167969.
Простите, но может можно определить что неверно в моей программе, хотелось бы все-таки понять.....
0
415 / 411 / 95
Регистрация: 06.10.2011
Сообщений: 832
05.07.2013, 20:45 11
Цитата Сообщение от Pendalfik Посмотреть сообщение
С такими исходными данными должно быть Rezult w=21733.167969.
Посчитал руками и получилось 168.78. Мой код выше выдает аналогичный результат. В радианы не переводил.
1
0 / 0 / 0
Регистрация: 18.05.2013
Сообщений: 31
05.07.2013, 20:48  [ТС] 12
Цитата Сообщение от alsav22 Посмотреть сообщение
Какие вы изменения там внесли никому не видно. Код покажите с изменениями, а то вслепую всё...
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
#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <windows.h>
#define Nx  4
#define Ny  5
#define Nz  6
void vvod(double x[ ], int n, char q);
double brackets(double x, int n, double a, double b, double f1(double), double f2(double))
{
    double series = (f1(a * x)+ f2(b * x));
    return series;
}
main()
{
char str[50];
textbackground(2);
textcolor(15);
clrscr();
double x[Nx], y[Ny], z[Nz], w, a, b, c, g, r, q;
CharToOem("\nВведите элементы массивов x, y, z:\n", str);
printf(str);
vvod(x, Nx, 'x');
vvod(y, Ny, 'y');
vvod(z, Nz, 'z');
CharToOem("\nВведите a:\n", str);
printf(str);
scanf("%lf",&a);
CharToOem("\n\nВведите b:\n", str);
printf(str);
scanf("%lf",&b);
CharToOem("\n\nВведите c:\n", str);
printf(str);
scanf("%lf",&c);
CharToOem("\n\nВведите  g:\n", str);
printf(str);
scanf("%lf",&g);
CharToOem("\n\nВведите  r:\n", str);
printf(str);
scanf("%lf",&r);
CharToOem("\n\nВведите  q:\n", str);
printf(str);
scanf("%lf",&q);
{
int i;
float w=0;
for (i=0; i<n; i++)
 w += brackets(x[i], Nx, a, b, sin, cos) + brackets(y[i], Ny, c, g, tan, abs) + brackets(z[i], Nz, r, q, cos, sin);
printf("\nw = %f",w);
 
CharToOem("\nДля выхода нажмите Enter", str);
printf(str);
getch();
}
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
05.07.2013, 20:52 13
Добавлено через 3 минуты
C++
1
int main()
Скобку в 45 строке удалите. И определите, наконец, переменную n.
0
0 / 0 / 0
Регистрация: 18.05.2013
Сообщений: 31
05.07.2013, 20:53  [ТС] 14
Цитата Сообщение от Olivеr Посмотреть сообщение
Посчитал руками и получилось 168.78. Мой код выше выдает аналогичный результат. В радианы не переводил.
Другой компилятор кроме Borland использовать не могу. Ваш код уже просто скопировала и сохранила. При компиляции вот такие ошибки:
Миниатюры
Передача символических имен функций  
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
05.07.2013, 20:55 15
И разберитесь с w, она у вас float или double?
0
415 / 411 / 95
Регистрация: 06.10.2011
Сообщений: 832
05.07.2013, 20:59 16
Pendalfik, похоже что abs для double не перегружена.
Попробуйте так:
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
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
typedef double (*Func)(double);
 
double sum(double *x,
           int n,
           double a,
           double b,
           Func f1,
           Func f2)
{
    double result = 0.0;
    while (n--)
        result += f1(a * x[n]) + f2(b * x[n]);
    return result;
}
 
double myAbs(double x)
{
    if (x < 0.0)
        x *= -1.0;
    return x;
}
 
double calc(double a,
            double b,
            double c,
            double g,
            double r,
            double q,
            double *x,
            double *y,
            double *z)
{
    double result =
        sum(x, 4, a, b, sin, cos) +
        sum(y, 5, c, g, tan, myAbs) +
        sum(z, 6, r, q, cos, sin);
    return result;
}
 
int main()
{
    double x[4] = {1, 2, 3, 4},
           y[5] = {5, 6, 7, 8, 9},
           z[6] = {10, 11, 12, 13, 14, 15},
           a = 1.5,
           b = 2.5,
           c = 3.3,
           g = 4.5,
           r = 5.5,
           q = 4.5;
    printf( "%4.2f", calc(a, b, c, g, r, q, x, y, z) );
    return 0;
}
1
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
05.07.2013, 21:01 17
И где реализация vvod()?

Добавлено через 2 минуты
Pendalfik, вот ваш код, который компилируется без ошибок (в студии). Добавил пустую реализацию vvod() и задал n = 3:
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 <stdio.h>
#include <math.h>
#include <conio.h>
#include <windows.h>
#define Nx  4
#define Ny  5
#define Nz  6
void vvod(double x[ ], int n, char q)
{}
double brackets(double x, int n, double a, double b, double f1(double), double f2(double))
{
    double series = (f1(a * x)+ f2(b * x));
    return series;
}
 
int main()
{
char str[50];
//textbackground(2);
//textcolor(15);
//clrscr();
double x[Nx], y[Ny], z[Nz], w, a, b, c, g, r, q;
CharToOem("\nВведите элементы массивов x, y, z:\n", str);
printf(str);
vvod(x, Nx, 'x');
vvod(y, Ny, 'y');
vvod(z, Nz, 'z');
CharToOem("\nВведите a:\n", str);
printf(str);
scanf("%lf",&a);
CharToOem("\n\nВведите b:\n", str);
printf(str);
scanf("%lf",&b);
CharToOem("\n\nВведите c:\n", str);
printf(str);
scanf("%lf",&c);
CharToOem("\n\nВведите  g:\n", str);
printf(str);
scanf("%lf",&g);
CharToOem("\n\nВведите  r:\n", str);
printf(str);
scanf("%lf",&r);
CharToOem("\n\nВведите  q:\n", str);
printf(str);
scanf("%lf",&q);
 
int i;
int n = 3;
w = 0;
for (i=0; i<n; i++)
 w += brackets(x[i], Nx, a, b, sin, cos) + brackets(y[i], Ny, c, g, tan, abs) + brackets(z[i], Nz, r, q, cos, sin);
printf("\nw = %f",w);
 
CharToOem("\nДля выхода нажмите Enter", str);
printf(str);
getch();
return 0;
}
0
0 / 0 / 0
Регистрация: 18.05.2013
Сообщений: 31
05.07.2013, 21:03  [ТС] 18
Цитата Сообщение от alsav22 Посмотреть сообщение
Добавлено через 3 минуты
C++
1
int main()
Скобку в 45 строке удалите. И определите, наконец, переменную n.
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>
#include <math.h>
#include <conio.h>
#include <windows.h>
#define Nx  4
#define Ny  5
#define Nz  6
void vvod(double x[ ], int n, char q);
double brackets(double x, int n, double a, double b, double f1(double), double f2(double))
{
    double series = (f1(a * x)+ f2(b * x));
    return series;
}
main()
{
char str[50];
textbackground(2);
textcolor(15);
clrscr();
double x[Nx], y[Ny], z[Nz], w, a, b, c, g, r, q, n;
CharToOem("\nÂâåäèòå ýëåìåíòû ìàññèâîâ x, y, z:\n", str);
printf(str);
vvod(x, Nx, 'x');
vvod(y, Ny, 'y');
vvod(z, Nz, 'z');
CharToOem("\nÂâåäèòå a:\n", str);
printf(str);
scanf("%lf",&a);
CharToOem("\n\nÂâåäèòå b:\n", str);
printf(str);
scanf("%lf",&b);
CharToOem("\n\nÂâåäèòå c:\n", str);
printf(str);
scanf("%lf",&c);
CharToOem("\n\nÂâåäèòå  g:\n", str);
printf(str);
scanf("%lf",&g);
CharToOem("\n\nÂâåäèòå  r:\n", str);
printf(str);
scanf("%lf",&r);
CharToOem("\n\nÂâåäèòå  q:\n", str);
printf(str);
scanf("%lf",&q);
int i;
float w=0;
for (i=0; i<n; i++)
 w += brackets(x[i], Nx, a, b, sin, cos) + brackets(y[i], Ny, c, g, tan, abs) + brackets(z[i], Nz, r, q, cos, sin);
printf("\nw = %f",w);
 
CharToOem("\nÄëÿ âûõîäà íàæìèòå Enter", str);
printf(str);
getch();
}
Миниатюры
Передача символических имен функций  
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
05.07.2013, 21:06 19
Насчёт этого всё написано:
Цитата Сообщение от alsav22 Посмотреть сообщение
И определите, наконец, переменную n.
Цитата Сообщение от alsav22 Посмотреть сообщение
И разберитесь с w, она у вас float или double?
Добавлено через 1 минуту
Значение n задайте и сделайте тип int, а не double.
0
0 / 0 / 0
Регистрация: 18.05.2013
Сообщений: 31
05.07.2013, 21:08  [ТС] 20
Простите, не увидела Ваш предыдущий ответ. У меня Ваш код все равно выдает две ошибки
а
C
1
n
я точно задать не могу - у меня три разных массива.
Миниатюры
Передача символических имен функций  
0
05.07.2013, 21:08
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.07.2013, 21:08
Помогаю со студенческими работами здесь

Регистр символов при записи имён функций
#include &lt;iostream&gt; #include &lt;ctime&gt; using namespace std; void Input(int Arr,int size); void...

Листинг MASMa выдает 15 символических имён, хотя в таблице их 11
Имеется вот такой листинг (не смотрите на программу, работать она не должна, главное скомпилить без...

Построить упорядоченную таблицу символических имен в конце первого просмотра
Ув. эксперты, в ассемб полный 0 подскажите , как реализовать(На Tasm). Задание: Для полученной...

Конфликт имен функций
Есть готовый код использующий jquery, в котором объявлена ф-ция autocomplete. После ее объявления и...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru