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

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

Войти
Регистрация
Восстановить пароль
 
 
Pendalfik
0 / 0 / 0
Регистрация: 18.05.2013
Сообщений: 31
#1

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

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

Здравствуйте,
Чтобы долго не объяснять, прилагаю условие задачи и мой код. Прошу Вашего совета по поводу вставки внутрь созданной функции указания на стандартную. Мне кажется, что моя запись ошибочна, но что именно не так, понять не могу. Вот код, задание ниже:
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();
}
Миниатюры
Передача символических имен функций  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.07.2013, 14:26     Передача символических имен функций
Посмотрите здесь:

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

Пространства имен и перегрузка функций - C++
описание: есть библиотека. Пространство имен namespace1, в нем есть несколько перегруженных функций func(). // header.h #ifndef...

"Автозаполнение" имен типов/функций/переменных - C++
Собственно вопрос в названии. Чтобы понимать, что за &quot;автозаполнение&quot; : когда вписываешь экземпляр класса/структуры, выдается окошко выбора...

Передача в "свойской" функции флагов и имен контейнеров - C++
Добрый день! Пишу значит функцию, что она конкретно делает не важно в данном контексте: void GetDIR(const char *Target, ??????? )...

Задачи из книги Прата (представить значения с помощью символических констант) - C++
Только начал изучать книгу Прата &quot;Язык программирования С++&quot;,столкнулся с такой задачей: Напишите программу, которая запрашивает широту в...

Передача значений функций - C++
извините конечно за дурацкий вопрос, не нашёл, думаю, может вы поможете... задача такова: мне надо например сделать 3 разных функции...

Передача параметров указателями при написании функций - C++
Как написать вот такую программу : Вычислить и запомнить суммы положительных элементов каждой строки матрицы a(10,20), b(15,10)....

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Pendalfik
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();
}
Миниатюры
Передача символических имен функций  
alsav22
5416 / 4812 / 442
Регистрация: 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?
Pendalfik
0 / 0 / 0
Регистрация: 18.05.2013
Сообщений: 31
05.07.2013, 19:51  [ТС]     Передача символических имен функций #4
Что за sum, znam, и n?[/QUOTE]

Убрала, написала по дурости из другой задачи и не увидела. Внесла указанные Вами изменения: при компиляции вместо одной ошибки появилось девять. Вот они:
Миниатюры
Передача символических имен функций  
Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
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;
}
Pendalfik
0 / 0 / 0
Регистрация: 18.05.2013
Сообщений: 31
05.07.2013, 20:05  [ТС]     Передача символических имен функций #6
Все равно не компилируется - есть ошибки. И, если не трудно, поясните, что это (*Func)
Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
05.07.2013, 20:07     Передача символических имен функций #7
Pendalfik, компилируется в любом компиляторе С - http://ideone.com/aaYanz
Цитата Сообщение от Pendalfik Посмотреть сообщение
И, если не трудно, поясните, что это (*Func)
C
1
typedef double (*Func)(double);
Func - имя типа, который указывает на функцию, которая принимает double и возвращает double
svk2140
-8 / 0 / 1
Регистрация: 04.07.2013
Сообщений: 262
05.07.2013, 20:21     Передача символических имен функций #8
о боже мой почему ты не про инициализировал функции это же элементарный с++ даже такой чайник как я заметил)
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.07.2013, 20:37     Передача символических имен функций #9
Цитата Сообщение от Pendalfik Посмотреть сообщение
Внесла указанные Вами изменения:
Какие вы изменения там внесли никому не видно. Код покажите с изменениями, а то вслепую всё...
Pendalfik
0 / 0 / 0
Регистрация: 18.05.2013
Сообщений: 31
05.07.2013, 20:43  [ТС]     Передача символических имен функций #10
Никак. Даже с компиляцией не в Borland результат выдает 0. С такими исходными данными должно быть Rezult w=21733.167969.
Простите, но может можно определить что неверно в моей программе, хотелось бы все-таки понять.....
Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
05.07.2013, 20:45     Передача символических имен функций #11
Цитата Сообщение от Pendalfik Посмотреть сообщение
С такими исходными данными должно быть Rezult w=21733.167969.
Посчитал руками и получилось 168.78. Мой код выше выдает аналогичный результат. В радианы не переводил.
Pendalfik
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();
}
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.07.2013, 20:52     Передача символических имен функций #13
Добавлено через 3 минуты
C++
1
int main()
Скобку в 45 строке удалите. И определите, наконец, переменную n.
Pendalfik
0 / 0 / 0
Регистрация: 18.05.2013
Сообщений: 31
05.07.2013, 20:53  [ТС]     Передача символических имен функций #14
Цитата Сообщение от Olivеr Посмотреть сообщение
Посчитал руками и получилось 168.78. Мой код выше выдает аналогичный результат. В радианы не переводил.
Другой компилятор кроме Borland использовать не могу. Ваш код уже просто скопировала и сохранила. При компиляции вот такие ошибки:
Миниатюры
Передача символических имен функций  
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.07.2013, 20:55     Передача символических имен функций #15
И разберитесь с w, она у вас float или double?
Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
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;
}
alsav22
5416 / 4812 / 442
Регистрация: 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;
}
Pendalfik
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();
}
Миниатюры
Передача символических имен функций  
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.07.2013, 21:06     Передача символических имен функций #19
Насчёт этого всё написано:
Цитата Сообщение от alsav22 Посмотреть сообщение
И определите, наконец, переменную n.
Цитата Сообщение от alsav22 Посмотреть сообщение
И разберитесь с w, она у вас float или double?
Добавлено через 1 минуту
Значение n задайте и сделайте тип int, а не double.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.07.2013, 21:08     Передача символических имен функций
Еще ссылки по теме:

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

Указатели, адресная арифметика и передача аргументов функций по значению и по ссылке - C++
Подскажите, пожалуйста, как решить такую задачу вручную. На экзамене предложат задание такого типа НА БУМАГЕ, и надо будет написать, что...

Передача массива в несколько функций, чтобы исходный массив не изменялся - C++
Привет! Возник такой вопрос: Как передать исходный массив в несколько функции, так, чтобы исходный массив не изменялся ?

Объясните, пожалуйста, как работает передача переменных при вызове функций? - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; void z(int *a,int lenght){ int *p; for...

Шаблоны имен - C++
Добрый вечер! Пожалуйста помогите разобраться с этими шаблонами имен, а то дело дальше не движется. В указанной директории (видимость...


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

Или воспользуйтесь поиском по форуму:
Pendalfik
0 / 0 / 0
Регистрация: 18.05.2013
Сообщений: 31
05.07.2013, 21:08  [ТС]     Передача символических имен функций #20
Простите, не увидела Ваш предыдущий ответ. У меня Ваш код все равно выдает две ошибки
а
C
1
n
я точно задать не могу - у меня три разных массива.
Миниатюры
Передача символических имен функций  
Yandex
Объявления
05.07.2013, 21:08     Передача символических имен функций
Ответ Создать тему
Опции темы

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