Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.07.2013, 23:04   #1
s4egol
Пользователь
 
Регистрация: 05.09.2012
Сообщений: 56
По умолчанию калькулятор на с#

Ребятки выручайте. Пишу первую свою прогу с использованием этого языка программирования. Пишу калькулятор и мне нужно небольшое пояснение . Короче ввожу в строку элементарный пример (5-2*4) . Как разбить этот пртмер на части чтоб каждое число и знак были в отдельной переменной.
s4egol вне форума Ответить с цитированием
Старый 27.07.2013, 23:58   #2
VIK_aka_TOR
Участник клуба
 
Аватар для VIK_aka_TOR
 
Регистрация: 30.01.2011
Сообщений: 1,578
По умолчанию

до этого языки какие-либо использовали программирования? если да то в какой степени владеете?
попросту данное задание весьма емко и муторно будет для вообще первой программы...
тут же не только по переменным загнать нужно, но и приоритет между действиями распознать и тому подобное...
пример на си:
Код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <ctype.h>
#include <assert.h>
# include <conio.h>
 
int tok;
double tokval;
 
int next() {
    for (;;) {
        int c = getchar();
        if (c == EOF || strchr("+-*/^()ksct\n", c) != NULL ) return tok = c;
        if (isspace(c)) continue;
        if (isdigit(c) || c == '.') {
            ungetc(c, stdin);
            scanf(" %lf", &tokval);
            return tok = 'n';
        }
        fprintf(stderr, "Bad character: %c\n", c); //abort();
    }
} 
void skip(int t) { assert(tok == t); next(); }

double expr();

// numpar ::= number | '(' expr ')'
double numpar() {
    if (tok == 'n') { double x = tokval; skip('n'); return x; }
    skip('('); double x = expr(); skip(')'); return x;
}
 
// factor ::= numpar | numpar '^' factor
double factor() {
    double x = numpar();
    if (tok == '^') { skip('^'); x = pow(x, factor()); }
    else if (tok == 'k') {skip('k'); x = sqrt(x); }
    else if (tok == 'c') {skip('c'); x =  sqrt( 1 - pow(sin( x * M_PI/(180 * 1.0 )),2)  )   ;}
    else if (tok == 's') {skip('s'); x = sin( x * M_PI/(180 * 1.0 )); }
    else if (tok == 't') {skip('t'); x = tan( x * M_PI/(180 * 1.0 )); }
    return x;
} 
// term ::= factor | term '*' factor | term '/' factor
double term() {
    double x = factor();
    for (;;) {
        if (tok == '*') { skip('*'); x *= factor(); }
        else if (tok == '/') { skip('/'); x /= factor(); }
        else return x;
    }
} 
// expr ::= term | expr '+' term | expr '-' term
double expr() {
    double x = term();
    for (;;) {
        if (tok == '+') { skip('+'); x += term(); }
        else if (tok == '-') { skip('-'); x -= term(); }
        else return x;
    }
} 
int main() {
    int n;
   printf("\tProgramma calculator\n\n");
  do{ 
   printf("\t************************\n");                        
   printf("\t* 1 - prosmotr funkcij *\n");
   printf("\t* 2 - calculator       *\n");
   printf("\t* 3 - exit             *\n");
   printf("\t************************\n"); 
   scanf("%d", &n); 
   if (n == 2)
      {     system("cls");
            printf("\tProgramma calculator\n");
            
            next();
            while (tok != EOF) 
            {
                  if (tok == '\n') { skip('\n'); continue; }
                  printf("%.9g\n", expr());
            }
            return 0;
      }
   else if (n == 1)
   {   system("cls");
      printf("\tProgramma calculator\n");
       printf("\n\tFunction \n\n");
       printf(" +  : slozenie   : 8 + 4\n");
       printf(" -  : vychitanie : 8 - 4\n");
       printf(" *  : umnozenie  : 8 * 4\n");
       printf(" /  : delenie    : 5 / 2\n");
       printf(" ^  : stepen     : 5 ^ 2\n");
       printf(" () : skobki     : (5 + 2) * 3\n");
       printf(" k  : sqrt       : 4k\n");
       printf(" s  : sin        : 90s\n");
       printf(" c  : cos        : 0c\n");
       printf(" t  : tang       : 45t\n");
       printf("\n\tpress any key... \n");
       getch();        
   }
   else if (n != 3) {printf("\nNevernyj vvod\n");}        
}          
 while (n != 3);
 return 0;  
}
код был найден на просторах инета и по подобию были добавлены тригонометрические функции и корень...
собственно выше то что получилось... работает хорошо... приоритеты работают...
пишу код не только за печеньки

Последний раз редактировалось VIK_aka_TOR; 28.07.2013 в 00:01.
VIK_aka_TOR вне форума Ответить с цитированием
Старый 28.07.2013, 14:43   #3
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Это у вас не калькулятор, а парсер математических формул. Правильно сказал VIK_aka_TOR задача не сколько сложная сколько громоздкая в описании.
В принципе пример VIK_aka_TOR можно перевести на шарп но наверное если пораскинуть мозгами можно придумать более изящное решение.
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 28.07.2013, 19:21   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

кстати, возможно, полезны будут ссылки:


C# парсинг математических функций

Парсер математических выражений (внимание! важно! Мой пример в данной теме на Паскаль!!!)

поиск на гугле
Serge_Bliznykov вне форума Ответить с цитированием
Старый 30.07.2013, 01:57   #5
s4egol
Пользователь
 
Регистрация: 05.09.2012
Сообщений: 56
По умолчанию

Всем спасибо! вроде всё получилось) хотя и правда для первой программы сложновато, но такое вот задания дали после первого занятия на курсах)
s4egol вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Калькулятор megostudent Общие вопросы Delphi 5 03.05.2012 14:46
Калькулятор seregan1993 Общие вопросы C/C++ 3 23.05.2010 17:41
Калькулятор Ekaterina90 Помощь студентам 0 18.05.2010 11:02
C++ калькулятор napanin Общие вопросы C/C++ 0 09.05.2010 16:32
калькулятор Hilda Помощь студентам 2 28.04.2010 22:50