Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
4 / 4 / 0
Регистрация: 03.12.2018
Сообщений: 74
1

Возврат функции

20.06.2019, 17:47. Показов 1635. Ответов 21
Метки нет (Все метки)

Не могу сообразить как в этом коде Страуструпа
указать возврат функции return, чтобы выполнились все вычисления и вывод результатов на экран.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int f(int x, int y, int z)
{
    cout << "x=" << x << "; y=" << y << "; z=" << z << endl;
 
    int area1 = area(x,y);
    if (area1<=0) error("non-positive area");
    int area2 = framed_area(1,z);
    int area3 = framed_area(y,z);
    double ratio = double(area1)/area3;
    // ...
 
    cout << "area1=" << area1 << endl
         << "area2=" << area2 << endl
         << "area3=" << area3 << endl;
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.06.2019, 17:47
Ответы с готовыми решениями:

Возврат 2 значений из функции с одним вызовом этой же функции
Вообщем где то в какой то игре была хукнута одна функция int function(int arg1,int arg2,int...

Возврат массива из функции
Здравствуйте! Нужно решить задачу, но для её решения я не могу понять как правильно вывести...

Возврат строки из функции
//char perfomers; //char _perfomers; char GetPerfomers(){strcpy(_perfomers,perfomers);return...

Возврат массива из функции
В объекте есть массив int state;, который мне нужно из него вытащить. Вижуал показывал ошибку,...

21
4693 / 2519 / 1047
Регистрация: 07.02.2019
Сообщений: 6,565
20.06.2019, 17:54 2
Цитата Сообщение от Platov Посмотреть сообщение
указать возврат функции return,
А что именно нужно вернуть?
0
4 / 4 / 0
Регистрация: 03.12.2018
Сообщений: 74
20.06.2019, 17:57  [ТС] 3
Цитата Сообщение от zayats80888 Посмотреть сообщение
А что именно нужно вернуть?
Вывести на экран результаты вычисления этой функции
C++
1
2
3
    cout << "area1=" << area1 << endl
         << "area2=" << area2 << endl
         << "area3=" << area3 << endl;
0
4693 / 2519 / 1047
Регистрация: 07.02.2019
Сообщений: 6,565
20.06.2019, 17:59 4
Цитата Сообщение от Platov Посмотреть сообщение
Вывести на экран результаты вычисления этой функции
так она же их и выводит
0
4 / 4 / 0
Регистрация: 03.12.2018
Сообщений: 74
20.06.2019, 18:02  [ТС] 5
Цитата Сообщение от zayats80888 Посмотреть сообщение
так она же их и выводит
При компиляции, компилятор выдает ошибку, указывая,что функция должна возвращать значение.
0
4693 / 2519 / 1047
Регистрация: 07.02.2019
Сообщений: 6,565
20.06.2019, 18:04 6
void f(int x, int y, int z)
0
4 / 4 / 0
Регистрация: 03.12.2018
Сообщений: 74
20.06.2019, 18:12  [ТС] 7
Цитата Сообщение от zayats80888 Посмотреть сообщение
void f(int x, int y, int z)
После компиляции и запуска программы выскакивает окошко "Debug error!".
0
zayats80888
20.06.2019, 18:13
  #8

Не по теме:

Цитата Сообщение от Platov Посмотреть сообщение
После компиляции и запуска программы выскакивает окошко "Debug error!".
Мои поздравления!

0
10 / 32 / 15
Регистрация: 29.04.2014
Сообщений: 223
20.06.2019, 18:37 9
C++
1
2
3
4
5
6
7
int f(int x, int y, int z)
{
.......
.......
.......
return 1;
}
0
4 / 4 / 0
Регистрация: 03.12.2018
Сообщений: 74
21.06.2019, 08:43  [ТС] 10
MasteRX,
К сожалению выдает туже ошибку "Debug error".
0
391 / 64 / 11
Регистрация: 06.08.2018
Сообщений: 202
21.06.2019, 14:33 11
а что именно представляют из себя функции area() и framed_area()?

Добавлено через 3 минуты
и все же что именно надо вам вернуть? Где вы используете эту функцию f() - там что ожидается? Может одно из значений are1, area2 или area3? (я смотрю они int, так что может одно из них должно возвращаться?)
П.С. Не знаю задачу в целом...
1
Эксперт С++
8614 / 4177 / 927
Регистрация: 15.11.2014
Сообщений: 9,472
21.06.2019, 14:41 12
ошибка в 7й строке
0
4 / 4 / 0
Регистрация: 03.12.2018
Сообщений: 74
21.06.2019, 15:45  [ТС] 13
Цитата Сообщение от Крашеная Посмотреть сообщение
и все же что именно надо вам вернуть? Где вы используете эту функцию f() - там что ожидается? Может одно из значений are1, area2 или area3? (я смотрю они int, так что может одно из них должно возвращаться?)
П.С. Не знаю задачу в целом...
Привожу весь код программы
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 "../std_lib_facilities.h"
 
//------------------------------------------------------------------------------
 
 
 
int area(int length, int width);    // calculate area of a rectangle
 
int framed_area(int x, int y)       // calculate area within frame
{
    const int frame_width = 2;
    if (x - frame_width <= 0 || y - frame_width <= 0)
        error("non-positive argument for area() called by framed_area()");
    return area(x - frame_width, y - frame_width);
}
 
//------------------------------------------------------------------------------
 
// calculate area of a rectangle;
// return -1 to indicate a bad argument
int area(int length, int width)
{
    if (length <= 0 || width <= 0) return -1;
    return length * width;
}
 
//------------------------------------------------------------------------------
 
int f(int x, int y, int z)
{
    cout << "x=" << x << "; y=" << y << "; z=" << z << endl;
 
    int area1 = area(x, y);
    if (area1 <= 0) error("неположительная площадь");
    int area2 = framed_area(1, z);
    int area3 = framed_area(y, z);
    double ratio = double(area1) / area3;
 
    // ...
    cout << "area1=" << area1 << endl
        << "area2=" << area2 << endl
        << "area3=" << area3 << endl;
 
}
 
//------------------------------------------------------------------------------
 
int main()
{
    f(3, 5, 3);
 
 
}
Добавлено через 2 минуты
Насчет этого кода
C++
1
2
3
4
5
6
7
8
9
int f(int x, int y, int z)
{
    cout << "x=" << x << "; y=" << y << "; z=" << z << endl;
 
    int area1 = area(x, y);
    if (area1 <= 0) error("неположительная площадь");
    int area2 = framed_area(1, z);
    int area3 = framed_area(y, z);
    double ratio = double(area1) / area3;
Страуструп пишет: "Вы заметили ошибку? Такие ошибки трудно выявить, так как в исходном
тексте нет очевидного "неверного кода": ошибка заключается в отсутствии
некоторого исходного текста."
Компилятор выдает ошибку на этот код, указывая, что функция f должна возвращать значение.
0
15361 / 8308 / 2015
Регистрация: 30.01.2014
Сообщений: 14,185
21.06.2019, 16:13 14
Platov, а пост #9 чего проигнорировали?
0
391 / 64 / 11
Регистрация: 06.08.2018
Сообщений: 202
21.06.2019, 16:14 15
я бы попробовала первым делом в строчке 43 написать например:
C++
1
return area3;
а в main:
C++
1
2
3
4
5
int main()
{
   int result = f(3, 5, 3);
   std::cout<<"area3 = "<<result<<std::endl; 
}
ну и посмотрела бычто получится.

Или можно еще так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int f(int x, int y, int z)
{
    cout << "x=" << x << "; y=" << y << "; z=" << z << endl;
 
    int area1 = area(x, y);
    if (area1 <= 0) {
      error("неположительная площадь");
      return 0;  // если не получилось посчитать возвращаем 0
    } 
    int area2 = framed_area(1, z);
    int area3 = framed_area(y, z);
    double ratio = double(area1) / area3;
 
    // ...
    cout << "area1=" << area1 << endl
        << "area2=" << area2 << endl
        << "area3=" << area3 << endl;
    return 1; // если все получилось посчитать вернем 1
}

C++
1
2
3
4
5
6
int main()
{
   int result = f(3, 5, 3);
   if(!result)
   std::cout<<"невозможно подсчитать площадь "<<std::endl; 
}
Но во втором варианте вроде как int и нет необходимость возвращать, достаточно bool
1
4 / 4 / 0
Регистрация: 03.12.2018
Сообщений: 74
21.06.2019, 16:54  [ТС] 16
Цитата Сообщение от DrOffset Посмотреть сообщение
Platov, а пост #9 чего проигнорировали?
Я же следующим постом ответил
Цитата Сообщение от Platov Посмотреть сообщение
MasteRX,
К сожалению выдает туже ошибку "Debug error".
0
15361 / 8308 / 2015
Регистрация: 30.01.2014
Сообщений: 14,185
21.06.2019, 16:59 17
Цитата Сообщение от Platov Посмотреть сообщение
Я же следующим постом ответил
Ну и что?
Вам надо было показать как вы исправили код с учетом этого. Никто же не может угадать правильно вы применили совет или нет.

В любом случае, помогло это или нет, исправить как вам советовали выше - нужно. Затем искать следующую ошибку. Вы исправляете - выкладываете исправленный код, остальные ищут следующую ошибку. Только так.
1
4 / 4 / 0
Регистрация: 03.12.2018
Сообщений: 74
21.06.2019, 17:13  [ТС] 18
Цитата Сообщение от Крашеная Посмотреть сообщение
ну и посмотрела бы что получится
Спасибо, Красивая за подробный совет, но и в-первом и во-втором варианте программа при запуске выдает ошибку-:"Debug error". Я подозреваю может в книге ошибка и надо было функцию int f включить в основной блок программы main, но с другой стороны в коде Страуструпа, она прописана как функция.
0
4693 / 2519 / 1047
Регистрация: 07.02.2019
Сообщений: 6,565
21.06.2019, 17:24 19
Лучший ответ Сообщение было отмечено Platov как решение

Решение

Platov, смотрите, так работает:
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 <iostream>
 
using namespace std;
//------------------------------------------------------------------------------
 
void error(const char* err)
{
    cerr << err;
    exit(-1);
}
 
int area(int length, int width);    // calculate area of a rectangle
 
int framed_area(int x, int y)       // calculate area within frame
{
    const int frame_width = 2;
    if (x - frame_width <= 0 || y - frame_width <= 0)
        error("non-positive argument for area() called by framed_area()");
    return area(x - frame_width, y - frame_width);
}
 
//------------------------------------------------------------------------------
 
// calculate area of a rectangle;
// return -1 to indicate a bad argument
int area(int length, int width)
{
    if (length <= 0 || width <= 0) return -1;
    return length * width;
}
 
//------------------------------------------------------------------------------
 
int f(int x, int y, int z)
{
    cout << "x=" << x << "; y=" << y << "; z=" << z << endl;
 
    int area1 = area(x, y);
    if (area1 <= 0) error("неположительная площадь");
    int area2 = framed_area(1, z);
    int area3 = framed_area(y, z);
    double ratio = double(area1) / area3;
 
    // ...
    cout << "area1=" << area1 << endl
        << "area2=" << area2 << endl
        << "area3=" << area3 << endl;
    return 1;
}
 
//------------------------------------------------------------------------------
 
int main()
{
    f(3, 5, 3);
}
судя по всему ошибка в функции error() в std_lib_facilities.h

Добавлено через 5 минут
если мне не изменяет память, то она у Страуструпа исключение выбрасывает, а вы его не отлавливаете, попробуйте так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int main()
{
    try
    {
        f(3, 5, 3);
    }
    catch (const exception& err)
    {
        cerr << err.what();
        return -1;
    }
    catch (...)// посмотрите как у страуструпа класс исключения называется в том же заголовке
    {
        cerr << "oops";
        return -2;
    }
}
1
4 / 4 / 0
Регистрация: 03.12.2018
Сообщений: 74
21.06.2019, 17:25  [ТС] 20
Цитата Сообщение от zayats80888 Посмотреть сообщение
смотрите, так работает:
Спасибо большое, zayats80888, действительно работает!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.06.2019, 17:25

Возврат объекта из функции
Здравствуйте. Написал в Code.Blocks на C++ вот такой код (привожу только часть кода, остальное на...

Возврат вектора из функции
Как вывести вектор из функции через адреса или указатели? Можно и внутри вектор создать, его...

Возврат матрицы из функции
В программе возникает ошибка. Вероятно из-за того,что матрицы не запоминаются в первой функции. Не...

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


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

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

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