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

Калькулятор на Си. Как реализовать триногометрические ф-ции и функцию логарифм? - C++

Восстановить пароль Регистрация
 
ozzy_b
2 / 2 / 0
Регистрация: 02.10.2012
Сообщений: 169
15.11.2012, 00:33     Калькулятор на Си. Как реализовать триногометрические ф-ции и функцию логарифм? #1
Написал код в котором надо вводить каждый елемент(первое число, знак операции, второе число, знак операции, 3... знак "=") по отдельности. + - * / работают, а вот sin... не работают. Во первых как сделать чтоб в програма могла проверить есть ли знаком операции не только символ но и строку? во вторых, если я введу sin то функция бралась от следущей введеной строки?
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
#include <iostream>
#include <conio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
using namespace std;
int main ()
{
    float g, res=0;
    bool EXIT = false;
    char str[100],op='\0',history[255];
    history[0]='\0';
    while (EXIT == false)
    {
        cout << "Input string: ";
        cin >> str;
        strcat(history,str);
        if (str[0] == '=') EXIT = true;
        g = atoi(str);
        if (g==0) op = str[0];
        else
        {  
            if  (op!='\0')
            {
                if (op == '+') res+=g;
                if (op == '-') res-=g;
                if (op == '*') res*=g;
                if (op == '/') res/=g;
                if (op == "sin") res=sin(g);
                if (op == "cos") res=cos(g);
                if (op == "tan") res=tan(g);
                if (op == "cot") res=cot(g);
                if (op == "log") res=log(g);
                op = '\0';
            }
            else res = g;
        }
    }
    cout << history << res; 
    getch();
    return 0;
}
Добавлено через 16 минут
и как правильно вызвать функцию котангенса?

Добавлено через 10 минут
сделал проверку операции через strcmp, но что дальше делать не знаю.
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
#include <iostream>
#include <conio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
#define c cos; 
using namespace std;
int main ()
{
    float g, res=0;
    bool EXIT = false;
    char str[100],op='\0',history[255];
    history[0]='\0';
    while (EXIT == false)
    {
        cout << "Input string: ";
        cin >> str;
        strcat(history,str);
        if (str[0] == '=') EXIT = true;
        g = atoi(str);
        if (g==0) op = str[0];
        else
        {  
            if  (op!='\0')
            {
                if (op == '+') res+=g;
                if (op == '-') res-=g;
                if (op == '*') res*=g;
                if (op == '/') res/=g;
                if (strcmp(&op, "sin")==0) res=sin(g);
                if (strcmp(&op, "cos")==0) res=cos(g);
                if (strcmp(&op, "tg")==0) res=tan(g);
                if (strcmp(&op, "log")==0) res=log(g);
                op = '\0';
            }
            else res = g;
        }
    }
    cout << history << res; 
    getch();
    return 0;
}

Добавлено через 50 минут
ну, кто нибуть, кто знает как ето сделать??

Добавлено через 1 час 50 минут
АААУУУ, та помогите кто нибуть с етим калькулятором, пожалуста
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.11.2012, 00:33     Калькулятор на Си. Как реализовать триногометрические ф-ции и функцию логарифм?
Посмотрите здесь:

Реализовать программный калькулятор C++
найти факториал всех чисел от 1 до 10 с шагом 2. Вычисление факториала реализовать как функцию C++
Передача ф-ции как параметра другой ф-ции C++
C++ Как в С++ реализовать(записать) LN (натуральный логарифм по основанию е)?
Создать функцию, вычисляющую логарифм заданного числа по заданному основанию. C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Байт
 Аватар для Байт
13941 / 8772 / 1220
Регистрация: 24.12.2010
Сообщений: 15,872
15.11.2012, 00:36     Калькулятор на Си. Как реализовать триногометрические ф-ции и функцию логарифм? #2
Цитата Сообщение от ozzy_b Посмотреть сообщение
функцию котангенса
1/tan(g)
Но проверить, не на нуль ли делишь.
ozzy_b
2 / 2 / 0
Регистрация: 02.10.2012
Сообщений: 169
15.11.2012, 00:57  [ТС]     Калькулятор на Си. Как реализовать триногометрические ф-ции и функцию логарифм? #3
Байт, ну а как тогда все ето "связать в одну кучу" чтоб оно работало, а то как я не ввожу числа и sin, tg... в разных последовательностях програма не считает ничего(выводит 0)?
ValeryS
Модератор
6373 / 4839 / 440
Регистрация: 14.02.2011
Сообщений: 16,038
15.11.2012, 01:06     Калькулятор на Си. Как реализовать триногометрические ф-ции и функцию логарифм? #4
Цитата Сообщение от ozzy_b Посмотреть сообщение
char str[100],op='\0'
Цитата Сообщение от ozzy_b Посмотреть сообщение
if (g==0) op = str[0];
Цитата Сообщение от ozzy_b Посмотреть сообщение
(strcmp(&op, "sin")==0)
ну и откуда в op слово sin возьмется ?
во первых это единичный символ
во вторых сивол ты туда и копируешь
а сравниваешь со строкой
ozzy_b
2 / 2 / 0
Регистрация: 02.10.2012
Сообщений: 169
15.11.2012, 17:00  [ТС]     Калькулятор на Си. Как реализовать триногометрические ф-ции и функцию логарифм? #5
ValeryS, все, вот так работает. А можно както сделать чтоб можно было вводить как строку а не символ, а то както не красиво оно в истории выводит.
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
#include <iostream>
#include <conio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
#define c cos; 
using namespace std;
int main ()
{
    float g, res=0;
    bool EXIT = false;
    char str[100],op='\0',history[255];
    history[0]='\0';
    while (EXIT == false)
    {
        cout << "Input string: ";
        cin >> str;
        strcat(history,str);
        if (str[0] == '=') EXIT = true;
        g = atof(str);
        if (g==0) op = str[0];
        else
        {  
            if  (op!='\0')
            {
                if (op == '+') res+=g;
                if (op == '-') res-=g;
                if (op == '*') res*=g;
                if (op == '/') res/=g;
                if (op == 's') res=(sin(g));
                if (op == 'c') res=cos(g);
                if (op == 't') res=tan(g);
                if ((op == 'С')&& (g!=0)) res=1/(tan(g));
                if (op == 'l') res=log(g);
                op = '\0';
            }
            else res = g;
        }
    }
    cout << history << res; 
    getch();
    return 0;
}
Добавлено через 14 минут
и как сделать чтоб в истории(то что выводиться в конце, все операнты, знаки операции, =, результат) выводилось к примеру не с30="что то там", а соs(30)="что то там".
ValeryS
Модератор
6373 / 4839 / 440
Регистрация: 14.02.2011
Сообщений: 16,038
15.11.2012, 17:38     Калькулятор на Си. Как реализовать триногометрические ф-ции и функцию логарифм? #6
сравнивай не символы а строки strcmp
http://lord-n.narod.ru/download/book.../14/strcmp.htm
или вообще открой для себя тип string там есть и поиск символа в строке поиск подстроки и еще много вкусостей
Yandex
Объявления
15.11.2012, 17:38     Калькулятор на Си. Как реализовать триногометрические ф-ции и функцию логарифм?
Ответ Создать тему
Опции темы

Текущее время: 06:41. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru