0 / 0 / 0
Регистрация: 27.11.2014
Сообщений: 27
1

Написать функцию выбора числа по формуле

02.12.2014, 08:14. Показов 3355. Ответов 12
Метки нет (Все метки)

Где ошибка?
1. Написать подпрограмму в соответствии со своим вариантом индивидуального задания. Реализовать вызов функции из главной программы и вывод результатов вычисления на экран. Отладить и протестировать программу. В процессе отладки пользоваться средствами пошаговой трассировки кода и окнами просмотра текущих значений переменных (Watch и Locals).
2. Написать прототип функции. Передачу параметров в функцию реализовать тремя изученными методами: по значению, по ссылке и по указателю. Вывести в окно Watch адреса указателей, ссылок и значений переменных, используемых для обращения к параметрам функции.
3. Продемонстрировать в работе использование оператора return, использование прототипа фукции и перегрузку функций.
4. В отчете отразить процесс трассировки кода, результаты работы программы, листинг программного кода с комментариями, блок-схему программы.

11. Напишите функцию double f(double x, double y, double z), которая возвращает m*n/k, где k есть меньшее из чисел x, y, z, а m и 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
Код C++
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <math.h>
 
using namespace std;
 
double f(double x, double y, double z);
int _tmain(int argc, _TCHAR* argv[])
{
 float x,y,z;
 int *Xptr=&x;
 int *Yptr=&y;
 int *Zptr=&z;
 printf("x=%d, Xptr=%p, y=%d, Yptr=%p, z=%d, Zptr=%p" x,Xptr,y,Yptr,z,Zptr );
 if (x <= 0 || y <= 0 || z <= 0) {
  printf ("Ошибка, значения должны быть больше 0!");
 }
 cout «f(x,y,z);
 getch();
 return 0;
}
 
double f(double m, double n, double k)
{
 double max, mid, min ;
 
 if (k < m && k < n) {min = k;}
 if (n < m && n < k) {min = n;}
 if (m < n && m < k) {min = m;}
 
 if (k > m && k > n) {max = k;}
 if (n > m && n > k) {max = n;}
 if (m > n && m > k) {max = m;}
 
 if (m <= n && n <= k) {mid = n;}
 else {mid = n;}
 if (m <= k && k <= n) {mid = k;}
 else {mid = n;}
 k = min;
 m = mid;
 n = max;
 return m*n/k;
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.12.2014, 08:14
Ответы с готовыми решениями:

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

Написать функцию, которая, в зависимости от выбора пользователя вызывает функцию сложения, произведения
Кто знает как можно решить эту задачу на С++? Написать функцию, которая, в зависимости от выбора...

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

Написать функцию вычисления f(x) по формуле
6. Написать функцию вычисления f(x) по формуле: f(x)= x^2 при -2&lt;=x&lt;2; x^2+4x+5 при x&gt;=2; 4 при...

12
Модератор
Эксперт С++
12079 / 9758 / 5902
Регистрация: 18.12.2011
Сообщений: 26,195
02.12.2014, 10:21 2
Цитата Сообщение от fedorov19952010 Посмотреть сообщение
float x,y,z;
Это объявление переменных.
А где Вы им что-нибудь присваиваете?
0
0 / 0 / 0
Регистрация: 27.11.2014
Сообщений: 27
11.12.2014, 12:00  [ТС] 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
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <math.h>
#include <time.h>
 
#define rndm(a,b) ((double)(rand()%1000)/999*((b)-(a))+(a))
using namespace std;
double f(double x, double y, double z);
int _tmain(int argc, _TCHAR* argv[])
{
srand(time_t(NULL));
double x=rndm(1,10);
double y=rndm(1,10);
double z=rndm(1,10);
double *Xptr=&x;
double *Yptr=&y;
double *Zptr=&z;
printf("x=%d, Xptr=%p, y=%d, Yptr=%p, z=%d, Zptr=%p\n",x,Xptr,y,Yptr,z,Zptr);
if (x <= 0 || y <= 0 || z <= 0) {
printf ("The error value must be greater than 0!");
}
cout <<f(x,y,z);
return 0;
}
 
double f(double m, double n, double k)
{
double max, mid, min ;
 
if (k < m && k < n) {min = k;}
if (n < m && n < k) {min = n;}
if (m < n && m < k) {min = m;}
 
if (k > m && k > n) {max = k;}
if (n > m && n > k) {max = n;}
if (m > n && m > k) {max = m;}
 
if (m <= n && n <= k) {mid = n;}
else {mid = n;}
if (m <= k && k <= n) {mid = k;}
else {mid = n;}
k = min;
m = mid;
n = max;
return m*n/k;
}
0
Эксперт PHP
3101 / 2586 / 1219
Регистрация: 14.05.2014
Сообщений: 7,231
Записей в блоге: 1
11.12.2014, 12:13 4
Цитата Сообщение от fedorov19952010 Посмотреть сообщение
Передачу параметров в функцию реализовать тремя изученными методами:
Цитата Сообщение от fedorov19952010 Посмотреть сообщение
C++
1
double f(double x, double y, double z);
Прототип и реализация
C++
1
double f(double x, double& y, double* z)
Вызов
C++
1
cout << f(x, y, &z);
0
0 / 0 / 0
Регистрация: 27.11.2014
Сообщений: 27
11.12.2014, 13:12  [ТС] 5
Не совсем понял
0
0 / 0 / 0
Регистрация: 27.11.2014
Сообщений: 27
16.12.2014, 09:01  [ТС] 6
Kerry_Jr, не совсем понял, объясни
0
Эксперт PHP
3101 / 2586 / 1219
Регистрация: 14.05.2014
Сообщений: 7,231
Записей в блоге: 1
16.12.2014, 10:33 7
fedorov19952010,
C++
1
double f(double x, double& y, double* z)
double x - по значению
double& y - по ссылке
double* z - по указателю
0
0 / 0 / 0
Регистрация: 27.11.2014
Сообщений: 27
16.12.2014, 15:45  [ТС] 8
Kerry_Jr,
В написанной программе осталось только по указателю и я не могу найти ошибку
0
Эксперт PHP
3101 / 2586 / 1219
Регистрация: 14.05.2014
Сообщений: 7,231
Записей в блоге: 1
16.12.2014, 16:00 9
Цитата Сообщение от fedorov19952010 Посмотреть сообщение
Передачу параметров в функцию реализовать тремя изученными методами:
Параметр - это переменная, которая используется при описании функции. А Вы пытаетесь передать аргументы по значению, ссылке и указателю, что на самом деле - глупость.
Цитата Сообщение от fedorov19952010 Посмотреть сообщение
double f(double x, double y, double z);
Цитата Сообщение от fedorov19952010 Посмотреть сообщение
double f(double m, double n, double k)
Очень некрасиво в прототипе указывать одни имена переменных, а при описании функции - другие.
0
0 / 0 / 0
Регистрация: 27.11.2014
Сообщений: 27
16.12.2014, 16:10  [ТС] 10
Kerry_Jr,
У меня было задание, написать программу тремя "изученными" методами. Двумя я уже сделал. Осталось 3 это по указателю. То есть должно получиться 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
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <math.h>
 
using namespace std;
 
double f(double x, double y, double z);
int _tmain(int argc, _TCHAR* argv[])
{
setlocale (LC_ALL, "RUS");
float x, y, z;
cout « "Введите x: "; 
cin » x;
cout « "Введите y: ";
cin » y;
cout « "Введите z: ";
cin » z;
if (x <= 0 || y <= 0 || z <= 0) {
printf ("Ошибка, значения должны быть больше 0!");
}
cout «f(x,y,z);
getch();
return 0;
}
 
double f(double m, double n, double k)
{
double max, mid, min ;
 
if (k < m && k < n) {min = k;}
if (n < m && n < k) {min = n;}
if (m < n && m < k) {min = m;}
 
if (k > m && k > n) {max = k;}
if (n > m && n > k) {max = n;}
if (m > n && m > k) {max = m;}
 
if (m <= n && n <= k) {mid = n;}
else {mid = n;}
if (m <= k && k <= n) {mid = k;}
else {mid = n;}
k = min;
m = mid;
n = max;
return m*n/k;
}
Добавлено через 33 секунды
Kerry_Jr,
Вот вторая
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
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <math.h>
 
using namespace std;
 
double f(double x, double y, double z);
int _tmain(int argc, _TCHAR* argv[])
{
double x,y,z;
x = 1; y = 2; z = 4;
cout «f(x,y,z);
getch();
return 0;
}
double f(double m, double n, double k)
{
double max, mid, min ;
 
if (k < m && k < n) {min = k;}
if (n < m && n < k) {min = n;}
if (m < n && m < k) {min = m;}
 
if (k > m && k > n) {max = k;}
if (n > m && n > k) {max = n;}
if (m > n && m > k) {max = m;}
 
if (m <= n && n <= k) {mid = n;}
else {mid = n;}
if (m <= k && k <= n) {mid = k;}
else {mid = n;}
k = min;
m = mid;
n = max;
return m*n/k;
}
0
Эксперт PHP
3101 / 2586 / 1219
Регистрация: 14.05.2014
Сообщений: 7,231
Записей в блоге: 1
16.12.2014, 16:40 11
Цитата Сообщение от fedorov19952010 Посмотреть сообщение
Я так и не понял, что у меня не правильно.
Проблема в том, что во всех твоих программах параметры передаются по значению. Если ты не знаешь, что такое параметры и какими способами они могут передаваться, то сначала изучи этот вопрос.
0
0 / 0 / 0
Регистрация: 27.11.2014
Сообщений: 27
16.12.2014, 16:51  [ТС] 12
Kerry_Jr,
Думаю твой способ будет легче, теперь у меня здесь проблема
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
#include "stdafx.h"
#include <conio.h>
#include <time.h>
#include <stdlib.h>
#include "math.h"
#include <iostream>
using namespace std;
 
 
double f(double x, double y, double z);// передача параметров по значению
double f(double *x, double *y, double *z);// передача параметров по указателю (*)
double f1(double &x, double &y, double &z);// передача параметров по ссылке (&)
 
int _tmain(int argc, _TCHAR* argv[])
{
 
    double x, y, z; // Инициализация переменных
    cout << "x= ";// Диалоговый интерфейс для запроса переменной
    cin >> x; // Ввод переменной с клавиатуры
    cout << "y= ";// Диалоговый интерфейс для запроса переменной
    cin >> y; // Ввод переменной с клавиатуры
    cout << "z= ";// Диалоговый интерфейс для запроса переменной
    cin >> z; // Ввод переменной с клавиатуры
    cout << f(x, y, z) << endl; // Вызов функции
    cout << f1(x, y, z) << endl; // Вызов функции
    cout << f(&x, &y, &z) << endl; // Вызов функции
 
    _getch();
    return 0;
}
 
 
double f(double m, double n, double k) // по значению
{
    {
        double max, mid, min;
 
        if (k < m && k < n) { min = k; }
        if (n < m && n < k) { min = n; }
        if (m < n && m < k) { min = m; }
 
        if (k > m && k > n) { max = k; }
        if (n > m && n > k) { max = n; }
        if (m > n && m > k) { max = m; }
 
        if (m <= n && n <= k) { mid = n; }
        else { mid = n; }
        if (m <= k && k <= n) { mid = k; }
        else { mid = n; }
        k = min;
        m = mid;
        n = max;
        return m*n / k;
    }
 
    double f1(double &m, double &n, double &k)// по ссылке
        {
            {
            double max, mid, min;
 
            if (k < m && k < n) { min = k; }
            if (n < m && n < k) { min = n; }
            if (m < n && m < k) { min = m; }
 
            if (k > m && k > n) { max = k; }
            if (n > m && n > k) { max = n; }
            if (m > n && m > k) { max = m; }
 
            if (m <= n && n <= k) { mid = n; }
            else { mid = n; }
            if (m <= k && k <= n) { mid = k; }
            else { mid = n; }
            k = min;
            m = mid;
            n = max;
            return m*n / k;
        }
 
        double f(double *m, double *n, double *k) // по указателю
        {
            {
                double max, mid, min;
 
                if (k < m && k < n) { min = k; }
                if (n < m && n < k) { min = n; }
                if (m < n && m < k) { min = m; }
 
                if (k > m && k > n) { max = k; }
                if (n > m && n > k) { max = n; }
                if (m > n && m > k) { max = m; }
 
                if (m <= n && n <= k) { mid = n; }
                else { mid = n; }
                if (m <= k && k <= n) { mid = k; }
                else { mid = n; }
                k = min;
                m = mid;
                n = max;
                return m*n / k;
            }
Добавлено через 9 минут
Kerry_Jr,
Вот исправил, но по указателю он мне выдает неверное число
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
#include "stdafx.h"
#include <conio.h>
#include <time.h>
#include <stdlib.h>
#include "math.h"
#include <iostream>
using namespace std;
 
 
double f(double x, double y, double z);// передача параметров по значению
double f(double *x, double *y, double *z);// передача параметров по указателю (*)
double f1(double &x, double &y, double &z);// передача параметров по ссылке (&)
 
int _tmain(int argc, _TCHAR* argv[])
{
 
    double x, y, z; // Инициализация переменных
    cout << "x= ";// Диалоговый интерфейс для запроса переменной
    cin >> x; // Ввод переменной с клавиатуры
    cout << "y= ";// Диалоговый интерфейс для запроса переменной
    cin >> y; // Ввод переменной с клавиатуры
    cout << "z= ";// Диалоговый интерфейс для запроса переменной
    cin >> z; // Ввод переменной с клавиатуры
    cout << f(x, y, z) << endl; // Вызов функции
    cout << f1(x, y, z) << endl; // Вызов функции
    cout << f(&x, &y, &z) << endl; // Вызов функции
 
    _getch();
    return 0;
}
 
 
double f(double m, double n, double k) // по значению
{
    
        double max, mid, min;
 
        if (k < m && k < n) { min = k; }
        if (n < m && n < k) { min = n; }
        if (m < n && m < k) { min = m; }
 
        if (k > m && k > n) { max = k; }
        if (n > m && n > k) { max = n; }
        if (m > n && m > k) { max = m; }
 
        if (m <= n && n <= k) { mid = n; }
        else { mid = n; }
        if (m <= k && k <= n) { mid = k; }
        else { mid = n; }
        k = min;
        m = mid;
        n = max;
        return m*n / k;
    }
 
    double f1(double &m, double &n, double &k) // по ссылке
            {
            double max, mid, min;
 
            if (k < m && k < n) { min = k; }
            if (n < m && n < k) { min = n; }
            if (m < n && m < k) { min = m; }
 
            if (k > m && k > n) { max = k; }
            if (n > m && n > k) { max = n; }
            if (m > n && m > k) { max = m; }
 
            if (m <= n && n <= k) { mid = n; }
            else { mid = n; }
            if (m <= k && k <= n) { mid = k; }
            else { mid = n; }
            k = min;
            m = mid;
            n = max;
            return m*n / k;
        }
 
        double f(double *m, double *n, double *k) // по указателю
        {
                double max, mid, min;
 
                if (*k < *m && *k < *n) { min = *k; }
                if (*n < *m && *n < *k) { min = *n; }
                if (*m < *n && *m < *k) { min = *m; }
 
                if (*k > *m && *k > *n) { max = *k; }
                if (*n > *m && *n > *k) { max = *n; }
                if (*m > *n && *m > *k) { max = *m; }
 
                if (*m <= *n && *n <= *k) { mid = *n; }
                else { mid = *n; }
                if (*m <= *k && *k <= *n) { mid = *k; }
                else { mid = *n; }
                *k = min;
                *m = mid;
                *n = max;
                return *m**n / *k;
            }
0
Эксперт PHP
3101 / 2586 / 1219
Регистрация: 14.05.2014
Сообщений: 7,231
Записей в блоге: 1
16.12.2014, 17:04 13
Лучший ответ Сообщение было отмечено fedorov19952010 как решение

Решение

fedorov19952010, Так попробуй
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
//#include "stdafx.h"
#include <iostream>
#include <conio.h>
 
using namespace std;
 
double f(double x, double y, double z);
void f(double& x, double& y, double& z, double& res);
void f(double* x, double* y, double* z, double* res);
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "Russian");
    double x, y, z, result;
    cout << "Введите x, y, z через пробел: ";
    cin >> x >> y >> z;
    if (x <= 0 || y <= 0 || z <= 0)
    {
        cout << "Ошибка, значения должны быть больше 0!";
        return 0;
    }
    cout << f(x,y,z) << endl;
    cout << "Введите x, y, z через пробел: ";
    cin >> x >> y >> z;
    f(x, y, z, result);
    cout << result << endl;
    cout << "Введите x, y, z через пробел: ";
    cin >> x >> y >> z;
    f(&x, &y, &z, &result);
    cout << result << endl;
    getch();
    return 0;
}
 
double f(double m, double n, double k)
{
    double arr[3];
    arr[0] = k;
    arr[1] = m;
    arr[2] = n;
    for (int i = 0; i < 2; ++i)
        for (int j = i+1; j < 3; ++j)
            if (arr[i] > arr[j])
            {
                double buf = arr[i];
                arr[i] = arr[j];
                arr[j] = buf;
            }
    k = arr[0];
    m = arr[1];
    n = arr[2];
    
    return m*n/k;
}
 
void  f(double& m, double& n, double& k, double& res)
{
    double arr[3];
    arr[0] = k;
    arr[1] = m;
    arr[2] = n;
    for (int i = 0; i < 2; ++i)
        for (int j = i+1; j < 3; ++j)
            if (arr[i] > arr[j])
            {
                double buf = arr[i];
                arr[i] = arr[j];
                arr[j] = buf;
            }
    k = arr[0];
    m = arr[1];
    n = arr[2];
    
    res = m*n/k;
}
 
void  f(double* m, double* n, double* k, double* res)
{
    double arr[3];
    arr[0] = *k;
    arr[1] = *m;
    arr[2] = *n;
    for (int i = 0; i < 2; ++i)
        for (int j = i+1; j < 3; ++j)
            if (arr[i] > arr[j])
            {
                double buf = arr[i];
                arr[i] = arr[j];
                arr[j] = buf;
            }
    *k = arr[0];
    *m = arr[1];
    *n = arr[2];
    
    *res = (*m)*(*n)/(*k);
}
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.12.2014, 17:04
Помогаю со студенческими работами здесь

Написать функцию вычисляющую значение по заданной формуле
Собственно сама формула: a=\frac{\sqrt{\left|x+1 \right|}}{\frac{1}{2}+\frac{x^4}{6}}

Написать функцию сортировки списка методом прямого выбора
задание 1. написать функцию сортировки списка методом прямого выбора. встроенные функции MAX и MIN...

Написать функцию сортировки списка методом прямого выбора
написать функцию сортировки списка методом прямого выбора. встроенные функции MAX и MIN не...

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru