Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Словесный калькулятор


Автор: Code Magister 23.4.2005, 21:25
Короче у меня задание:
Зделать свой интерпретатор примитивных команд калькулятора, которые работают в жестко фиксированном режиме, например:
"ПУСТЬ а = 12.123"
"ПОДЕЛИТЬ a, b, c" // a=b/с
"ВЫВЕСТИ a"

Я сделал ввод, вывод и плюсование...
Но! Когда идет плюсование с записью резльтата в переменную с (ДОБАВИТь с a b например), так этот результат какого-то хрена умножается на 2. С остальными переменными вроде нормально.
Писал на С++ 3.1
Вот код:
Код

#include <string.h>
#include <conio.h>
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>

char str[100];
char* znaki=" ,=\/<>!@#$%^&*()_+-?!|";
char* comand;
char* param;
char* param1;
char* param2;
int key;
double a,b,c;
char *strto;

void main()
{
while(key!=27)
{
    clrscr();

    cin.getline(str,49);

    comand=strtok(str, znaki);

    param = strtok(NULL, znaki);

    param1 = strtok(NULL, znaki);

    param2 = strtok(NULL, znaki);
    //короче до этого момента идет считывание слов до пробела(или другого знака препинания)  слов в переменные comand, param, param1, param2. Считивает правильно... 

    if (!(stricmp(comand, "ПУСТЬ")))
    {
        if (!(stricmp(param, "a")))
            a=strtod(param1, &strto);

        if (!(stricmp(param, "b")))
            b=strtod(param1, &strto);

        if (!(stricmp(param, "c")))
            c=strtod(param1, &strto);

    }
    if (!(stricmp(comand, "ВЫВЕСТИ")))
    {
        if (!(stricmp(param, "a")))
            printf("\na=%lf\n",a);

        if (!(stricmp(param, "b")))
            printf("\nb=%lf\n",b);

        if (!(stricmp(param, "c")))
            printf("\nc=%lf\n",c);

    }
    if (!(stricmp(comand, "ДОБАВИТЬ")))
    {
        if (( (!stricmp(param1,"a")) && (!stricmp(param2,"b") ) || ( (!stricmp(param1, "b")) && (!stricmp(param2, "a" )))))
            if ( !stricmp(param, "a") ) a=a+b;
            if ( !stricmp(param, "b") ) b=a+b;
            if ( !stricmp(param, "c") ) c=a+b;

        if (( (!stricmp(param1,"b")) && (!stricmp(param2,"c") ) || ( (!stricmp(param1, "c")) && (!stricmp(param2, "b" )))))
            if ( !stricmp(param, "a") ) a=c+b;
            if ( !stricmp(param, "b") ) b=c+b;
            if ( !stricmp(param, "c") ) c=c+b;

        if (( (!stricmp(param1,"a")) && (!stricmp(param2,"c") ) || ( (!stricmp(param1, "c")) && (!stricmp(param2, "a" )))))
            if ( !stricmp(param, "a") ) a=a+c;
            if ( !stricmp(param, "b") ) b=a+c;
            if ( !stricmp(param, "c") ) c=a+c;



    }

       key=getch();
}
}

Я вобще все слова(добавить, вывести) англ. писал. Это я чтоб вам легче понять было.
Вобщем жду помощи, самому не разобраться...

Автор: SMiX 23.4.2005, 21:29
У меня в свое время были проблемы в таких прогах с русской 8-битной кодировкойю.
Исправляется легко - юзаньем английских фраз.

Автор: Code Magister 23.4.2005, 21:40
Цитата(_Slipknot @ 23.4.2005, 21:25)
Я вобще все слова(добавить, вывести) англ. писал. Это я чтоб вам легче понять было.

я же написал..

Автор: Leksey 23.4.2005, 22:21
Помоему в твоей программе недостаточно фигурных скобок.Попробуй так:
Код

   if (!(stricmp(comand, "ДОБАВИТЬ")))    
    {    
        if (( (!stricmp(param1,"a")) && (!stricmp(param2,"b") ) || ( (!stricmp(param1, "b")) && (!stricmp(param2, "a" )))))
{
            if ( !stricmp(param, "a") ) a=a+b;    
            if ( !stricmp(param, "b") ) b=a+b;    
            if ( !stricmp(param, "c") ) c=a+b;
}
        if (( (!stricmp(param1,"b")) && (!stricmp(param2,"c") ) || ( (!stricmp(param1, "c")) && (!stricmp(param2, "b" )))))    
        {   
           if ( !stricmp(param, "a") ) a=c+b;    
            if ( !stricmp(param, "b") ) b=c+b;    
            if ( !stricmp(param, "c") ) c=c+b;    
         }
        if (( (!stricmp(param1,"a")) && (!stricmp(param2,"c") ) || ( (!stricmp(param1, "c")) && (!stricmp(param2, "a" )))))    
          {
            if ( !stricmp(param, "a") ) a=a+c;    
            if ( !stricmp(param, "b") ) b=a+c;    
            if ( !stricmp(param, "c") ) c=a+c;    
         }
    }

Автор: Code Magister 23.4.2005, 22:38
О, вроде работает! Спасибо Leksey smile
Если что снова напишу...
Добавлено @ 22:40
Тю, как я сам не додумался?! Просто целый день писал и голова не соображает.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)