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

История введеных даных в калькуляторе - C++

Восстановить пароль Регистрация
 
ozzy_b
2 / 2 / 0
Регистрация: 02.10.2012
Сообщений: 169
23.11.2012, 13:43     История введеных даных в калькуляторе #1
Я сделал историю в калькуляторе. Все что мы вводим она записывает, а потом в конце все это выводит. Но надо ее немного усовершенствовать, а именно: если мы введем некорректную операцию (ввели неизвестный знак, ввели два раза число, два раза знак операции), то то, что мы ввели в историю писаться не будет, и можно будет продолжить ввод данных от последней корректно введенного числа \ операции. У кого есть идеи как это можно реализовать?
Вот код:
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> 
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);
        float 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 == 'l') res=log(g);
                if (op == '^') res=pow(res,g);  
                op = '\0';
            }
            else res = g;
        }
    }
    cout << history << res; 
    getch();
    return 0;
}
Как работает: вводим число, enter, знак операции, enter, число, enter, "=" - enter - вывод результата. Или с, enter, число, enter, "=" - для поиска синуса, косинуса...
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Rexer
 Аватар для Rexer
151 / 150 / 19
Регистрация: 10.10.2010
Сообщений: 691
23.11.2012, 14:11     История введеных даных в калькуляторе #2
Создать один большой буфер для истории и один маленький для введенного выражения,если выражение неправильное,то не копировать второй буфер в основной,а если верное,то копировать,так вы получите историю правильную
ozzy_b
2 / 2 / 0
Регистрация: 02.10.2012
Сообщений: 169
23.11.2012, 14:16  [ТС]     История введеных даных в калькуляторе #3
Rexer, ну а как сделать так чтоб программа понимала ввел ли я правильно или не правильно?
ithyphallic
 Аватар для ithyphallic
14 / 14 / 1
Регистрация: 27.10.2012
Сообщений: 141
23.11.2012, 14:36     История введеных даных в калькуляторе #4
прописать все возможные варианты неправильного ввода в качестве условия записи в буфер :-) имхо на деле это не так сложно как звучит
Rexer
 Аватар для Rexer
151 / 150 / 19
Регистрация: 10.10.2010
Сообщений: 691
23.11.2012, 16:07     История введеных даных в калькуляторе #5
Цитата Сообщение от ozzy_b Посмотреть сообщение
Rexer, ну а как сделать так чтоб программа понимала ввел ли я правильно или не правильно?
Вы вводите в буфер данные,далее там же вычисляете все,что вам надо.Например
Ввели 2 + 3 = <enter>
в буфере это будет просто строка,проверили,что выражение правильное - т.е сначала число,потом знак,потом число и потом = - значит вы ввели все правильно,вычислили и запилили в историю,а если вы в этой строке наши букву,например, или там ++ встретили,то значит неверно и просто выводите сообщение об ошибки и не пишите это в историю!
ozzy_b
2 / 2 / 0
Регистрация: 02.10.2012
Сообщений: 169
23.11.2012, 18:39  [ТС]     История введеных даных в калькуляторе #6
Rexer, ну так в истории и может быть 2+74-36*sin3-2^2= . к томуже число может занимать 2 и больше елементов масива(история через масив пишеться у меня) и если проверять по елементно то 2+2 защитает правильным(цифра, знак, цифра) а 22+2 видимо не правильно (цифра, цифра, знак, цифра).
Rexer
 Аватар для Rexer
151 / 150 / 19
Регистрация: 10.10.2010
Сообщений: 691
23.11.2012, 19:00     История введеных даных в калькуляторе #7
Ну так ясное дело,вы сделайте проверку то нормальную,а не как я сказал,я сказал для примера же
Сделайте там массив строк,где будут описаны все возможные варианты,например,cos,sin,tg и прочее
Почитайте про всякие atoi(); и прочее
ozzy_b
2 / 2 / 0
Регистрация: 02.10.2012
Сообщений: 169
23.11.2012, 19:03  [ТС]     История введеных даных в калькуляторе #8
Rexer, ну так у меня есть atof в коде.
Rexer
 Аватар для Rexer
151 / 150 / 19
Регистрация: 10.10.2010
Сообщений: 691
23.11.2012, 20:54     История введеных даных в калькуляторе #9
Ну сделайте проверку и все тогда.
Разберите строку вашу введенную,на первом месте может быть либо выражение типа tg или там sin,число и все,но не может быть знака,на втором (после первого выражения) должен быть обязательно оператор и только один,потом снова выражение вот и все.
Вам надо проверку на первое_выражение знак_оператор второе_выражение =
Принцип примерно же ясен?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.11.2012, 21:04     История введеных даных в калькуляторе
Еще ссылки по теме:

Задача на поиск числа среди введеных C++
C++ Написать программу сортировки символов, введеных с клавиатуры
C++ Нахождение количества введеных элементов

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

Или воспользуйтесь поиском по форуму:
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11811 / 6790 / 767
Регистрация: 27.09.2012
Сообщений: 16,840
Записей в блоге: 2
Завершенные тесты: 1
23.11.2012, 21:04     История введеных даных в калькуляторе #10
Ошибка в калькуляторе. Не могу найти
Yandex
Объявления
23.11.2012, 21:04     История введеных даных в калькуляторе
Ответ Создать тему
Опции темы

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