Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/55: Рейтинг темы: голосов - 55, средняя оценка - 4.62
 Аватар для krigan
1 / 1 / 3
Регистрация: 31.10.2012
Сообщений: 93

Реализовать 4 функции на простейшие арифметические операции (+,-, *, /)

18.09.2014, 20:39. Показов 10457. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Начал изучать указатели. Вошёл туго. Очень хочу разобраться самостоятельно, но задачи сдавать тоже нужно. Прошу помощи в решении задачи.

Условие:
Реализовать 4 функции на простейшие арифметические операции (+,-,*,/).
Каждая функция должна принимать два вещественных числа и возвращать результат операции в виде вещественного числа. В главной функции создайте массив из 4-х указателей на эти функции. Добавьте меню, в котором пользователь может выбрать желаемую операцию. Напишите программу без использования операторов if и switch.

А это то, где я застрял:
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 <math.h>
#include <stdlib.h>
#include <iostream>
 
using namespace std;
 
int * slozh( int a, int b ) { 
    int result;
        cin>>a;        
        cin>>b;       
        a+b=result;
        cout<<a <<  "+" <<b<< "=" <<result;
        return result;
    cout<<" \n ";
}
 
int * vichet( int a, int b ) { 
    int result;
        a-b=result;
        if(a>b);
        cout<<a <<  "-" <<b<< "=" <<result;
        return result;
    cout<<" \n ";
}
 
int * umnozh( int a, int b ) { 
    int result;
        cin>>a;
        if(a>0);
        cin>>b;
        if(b>0);
        a*b=result;
        cout<<a <<  "*" <<b<< "=" <<result;
        return result;
    cout<<" \n ";
}
 
int * delen( int a, int b) {
    int result;
        cin>>a;
        if(a>0);
        cin>>b;
        if(b>0);
        a/b=result;
        cout<<a <<  "/" <<b<< "=" <<result;
        return result;
    cout<<" \n ";
}
 
 
function_t functions[ 4 ] = { slozh, vichet, umnozh, delen };
 
 
    cout <<endl;
}
 
 
int main()
    
 
{
    for ( int i = 0; i < COUNT; i++ ) {
        array[ i ] = 1+ rand() % 10;
    }
 
    setlocale(LC_ALL, "rus");
 
    cout<< "\t\tВВОД И ВЫВОД ЭЛЕМЕНТОВ ПРИ ПОМОЩИ УКАЗАТЕЛЕЙ\n ";
    cout<< "\t\t-----------------------------------------------------\n\n ";
 
   
    unsigned int code;
 
    do {
        cout << " \n";
        cout << " МЕНЮ ПРОГРАММЫ:\n ";
        cout << "--------------\n ";
 
        cout << "Нажмите-0 для вызова операции сложения\n ";
        cout << "Нажмите-1 для вызова операции вычитания\n ";
        cout << "Нажмите-2 для вызова операции умножения\n ";
                cout << "Нажмите-4 для вызова операции деления\n ";
        cout << "Нажмите-5 для выхода \n\n ";
        cin >> code;
        cout << " \n ";
 
        if ( code < 5 ) {
            int outCount;
           
            
           
        }
 
    } while( code != 5 );
 
    cout<< endl;
    cout << " ДО СВИДАНИЯ! \n\n ";
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.09.2014, 20:39
Ответы с готовыми решениями:

Реализовать ввод, вывод и простейшие операции с матрицами
дана такая задача: Реализовать ввод, вывод и простейшие операции с матрицами (сложение, вычитание, умножение на число, умножение,...

Реализовать простейшие операции над списком: вставка, удаление, вывод на экран
Народ спасайте! Помогите реализовать простейшие операции над списком: вставка, удаление, вывод на экран. Я уже столько книг перечитал на...

Реализовать арифметические операции с комплексными числами
Создайте структуру, описывающую комплексное число. Реализуйте арифметические операции с комплексными числами: сумму, разность, умножение,...

14
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
18.09.2014, 21:16
krigan, сделал для операций сложения и умножения. Дальше думаю сам доделаешь
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
#include <stdio.h>
 
double add(double a, double b) {
    return a + b;
}
 
double mult(double a, double b) {
    return a*b;
}
 
typedef double (*func)(double, double);
 
int main() {
    func functions[] = { add, mult };
    int i;
    printf("1 - add\n2 - multuply\n");
    scanf("%d", &i);
    if (i > 0 && i < 3) {
        double a, b;
        scanf("%lf", &a);
        scanf("%lf", &b);
        printf("%lf\n", functions[i-1](a, b));
        return 0;
    } else {
        printf("error");
        return 1;
    }
}
1
 Аватар для krigan
1 / 1 / 3
Регистрация: 31.10.2012
Сообщений: 93
19.09.2014, 11:26  [ТС]
При компиляции ругается на 19 строку - 1>c:\users\documents\visual studio 2012\projects\1_12\1_12\1_12.cpp(19): error C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> c:\program files\microsoft visual studio 11.0\vc\include\stdio.h(290) : see declaration of 'scanf'
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
19.09.2014, 11:36
Лучший ответ Сообщение было отмечено krigan как решение

Решение

Опять этот мелкософт со своими предложениями..
Можете переписать код на C++, раз все равно запускаете в cpp.
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
#include <iostream>
 
double add(double a, double b) {
    return a + b;
}
 
double mult(double a, double b) {
    return a*b;
}
 
typedef double (*func)(double, double);
 
int main() {
    func functions[] = { add, mult };
    int i;
    std::cout << "1 - add\n2 - multuply\n";
    std::cin >> i;
    if (i > 0 && i < 3) {
        double a, b;
        std::cin >> a;
        std::cin >> b;
        std::cout << functions[i-1](a, b) << std::endl;
        return 0;
    } else {
        std::cout << "error" << std::endl;
        return 1;
    }
}
1
 Аватар для krigan
1 / 1 / 3
Регистрация: 31.10.2012
Сообщений: 93
19.09.2014, 11:40  [ТС]
Спасибо! Всё работает. Окончательный вариант выложу на обозрение.
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
19.09.2014, 12:08
krigan, в самой первой строчке до include напиши
C++
1
#define _CRT_SECURE_NO_WARNINGS
1
 Аватар для krigan
1 / 1 / 3
Регистрация: 31.10.2012
Сообщений: 93
19.09.2014, 12:15  [ТС]
Вот что получилось:

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
#include <iostream>
using namespace std;
 
double add(double a, double b) {
    return a + b;
}
 
double ded(double a, double b) {
    return a - b;
}
 
double mult(double a, double b) {
    return a*b;
}
 
double div(double a, double b) {
    return a / b;
}
 
typedef double (*func)(double, double);
 
int main() {
    setlocale(LC_ALL,"rus");
    func functions[] = { add, ded, mult, div };
    int code;
 
do {
        cout << " \n";
        cout << " МЕНЮ ПРОГРАММЫ:\n ";
        cout << "--------------\n ";
 
        cout << "Нажмите 1 - для вызова операции сложения\n ";
        cout << "Нажмите 2 - для вызова операции вычетания\n ";
        cout << "Нажмите 3 - для вызова операции умножения\n ";
        cout << "Нажмите 4 - для вызова операции деления\n ";
        cout << "Нажмите 5 - для выхода из программы \n\n ";
        cin >> code;
        cout << " \n ";
 
        if ( code < 5 ) {
           double a, b;
 
        cout<<"Введите значение числа a: ";
        cin >> a;       
 
        cout<<" Введите значение числа b: ";
        cin >> b;
 
        cout<<"\n ";
 
        cout<< "Результат: ";
 
        cout << functions[code-1](a, b) << endl;
        
        }
 
    } while( code != 5 );
 
    cout<< endl;
    cout << " ДО СВИДАНИЯ! \n\n ";
}
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
19.09.2014, 12:17
Цитата Сообщение от krigan Посмотреть сообщение
if ( code < 5 ) {
она у вас объявлена как int, т.е. знаковый тип, следовательно, можно ввести число меньше нуля и получить ошибку при попытке вызова функции с неизвестным адресом..
Надо проверять именно чтобы число было от 1 до 5
1
 Аватар для krigan
1 / 1 / 3
Регистрация: 31.10.2012
Сообщений: 93
19.09.2014, 12:21  [ТС]
Исправил. Правда я не понимаю как читается functions[code-1](a, b)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
if ( code > 0 && code < 5 ) {
           double a, b;
 
        cout<<"Введите значение числа a: ";
        cin >> a;       
 
        cout<<" Введите значение числа b: ";
        cin >> b;
 
        cout<<"\n ";
 
        cout<< "Результат: ";
 
        cout << functions[code-1](a, b) << endl;
        
        }
 
    } while( code != 5 );
 
    cout<< endl;
    cout << " ДО СВИДАНИЯ! \n\n ";
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
19.09.2014, 12:27
krigan, functions - это, в общем-то обычный массив указателей.
functions[0] == add
functions[1] == ded
functions[2] == mult
functions[3] == div

Соответственно, при code == 1 мы получаем code - 1 == 1 - 1 == 0, т.е. вызывается functions[0] - add. При code == 4 мы получаем code - 1 == 4 - 1 == 3, т.е. вызывается functions[3] - это последний элемент, div. А дальше просто вызываем эту функцию..
1
 Аватар для krigan
1 / 1 / 3
Регистрация: 31.10.2012
Сообщений: 93
19.09.2014, 12:47  [ТС]
Теперь понял. Спасибо
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
22.09.2014, 17:09
А выход за диапазон значений не проверяете?
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
22.09.2014, 17:23
Цитата Сообщение от _stanislav Посмотреть сообщение
А выход за диапазон значений не проверяете?
Этого недостаточно?
Цитата Сообщение от krigan Посмотреть сообщение
C++
1
if ( code > 0 && code < 5 ) {
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
22.09.2014, 18:28
Я имел ввиду что бы результат не вышел из диапазона.
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
22.09.2014, 18:47
Для учебной задачи, коей программа и является, это лишнее. А вот проверку на то, что второе число может быть нулем, а на ноль делить нельзя - это да, стоило бы добавить..
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.09.2014, 18:47
Помогаю со студенческими работами здесь

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

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

Реализовать арифметические операции в различных системах счисления
uses CRT; const a: string = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'; {задаём строку для поиска в ней символов} var n,...

Реализовать все арифметические операции, используя только операцию сложения
Помогите пожалуйста. Требуется реализовать на паскале все арифметические операции, используя только операцию сложения. Пример 21*2=21+2,...

Простейшие арифметические действия
надо вычислить вот это: y=a+b-c*d/e вот моя попытка, компилирует, но считает не правильно :( подскажите как исправить пожалуйста ...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru