Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Синтаксический анализатор, int main (int argc,char *argv[]) 
V
    Опции темы
kkkggg
Дата 28.4.2006, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 28.4.2006

Репутация: нет
Всего: нет



int main (int argc,char *argv[])

Нужна элементарная прогграма калькулятор,  выражения должны вводиться в виде аргументов, т.е
#my-prog-calc 25+66
в своё время программа должна узнать, что 25 и 66 это числа и их нужно сложить!!!
Напишите элементарный пример по анализу и вычислению подобных выражений (25+66). При условии, что выражения идут в виде оптимуса. Под словом оптимус я понимаю: 
НАЗВАНИЕ_ПРОГРАММЫ <ОПТИМУС>    дальше жмём Enter и видим результат.

 
PM MAIL   Вверх
LPBOY
Дата 28.4.2006, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 228
Регистрация: 12.7.2005

Репутация: 20
Всего: 20



А приоритет операторов, скобки должны обрабатываться? 
--------------------
Каждый человек по-своему прав, а по-моему нет...
PM MAIL   Вверх
MAKCim
Дата 28.4.2006, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



# my-prog-calc 25+16 или # my-prog-calc 25 + 16? 


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
kkkggg
Дата 28.4.2006, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 28.4.2006

Репутация: нет
Всего: нет



LPBOY Не приоритет операторов не важет.
MAKCim Не важно.
 
PM MAIL   Вверх
DeadSoul
Дата 28.4.2006, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1217
Регистрация: 25.9.2005
Где: Москва

Репутация: 2
Всего: 11





--------------------
 Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". 

Бьем спамеров их же оружием. Пусть весь спам сыпется им
[email protected] 
PM   Вверх
Знак
Дата 29.4.2006, 01:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 135
Регистрация: 29.4.2005

Репутация: -5
Всего: нет



# - это знак для прекомпиллера..
после него обычно идут дерективы
и только потом имена с присваивываемым
значением.. 
а программа 
типа без  применения переменных среды

Код

int sum=argv[1]+argv[2];
cout<<"sum=a+b res="<<sum<<endl;



Это так типа делалось
но эту программу надо несколько модифицировать 
и кое что усложнить.. в плане 
добавления нескольких функцийй

 
--------------------
Ищу 2 файлаowl.tchwindows.tch 
PM MAIL   Вверх
MAKCim
Дата 29.4.2006, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Цитата

# - это знак для прекомпиллера..

в данном случае это приглашение к вводу команд в командном интерпретаторе (скорее всего в *ix bash/sh/ksh/csh/sh... для root)
Цитата

MAKCim Не важно.

как раз важно
в случае 25 + 16
Код

argv[1]="25"
argv[2]="+"
argv[3]="16"
argc=4

а в случае 25+16
Код

argv[1]="25+16"
argc=2

  

Это сообщение отредактировал(а) MAKCim - 29.4.2006, 11:01


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
kkkggg
Дата 29.4.2006, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 28.4.2006

Репутация: нет
Всего: нет



Нужно 25+16, хочется сделать что-то наподобие программы calc. calc линуксячая прога. 
PM MAIL   Вверх
MAKCim
Дата 29.4.2006, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Цитата

Код

int sum=argv[1]+argv[2];


 smile  smile 
Цитата

Нужно 25+16, хочется сделать что-то наподобие программы calc. calc линуксячая прога.  

можно написать ф-ию для выделения из const char* числа
Код

bool find(const char* str, unsigned int& index, int& number)
{
    number=0;
    bool flag=false;
    while (str[index] && (str[index]<48 || str[index]>57)) ++index;
    while (str[index] && (str[index]>47 && str[index]<58))
    {
        flag=true;
        int s=number, p=10;
        number=0;
        while (s)
        {
            number+=(s%10)*p;
            p*=10;
            s/=10;
        }
        number+=str[index]-48;
        ++index;
    }
    return flag;
}

 


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Знак
Дата 30.4.2006, 00:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 135
Регистрация: 29.4.2005

Репутация: -5
Всего: нет



Цитата

можно написать ф-ию для выделения из const char* числа

а можно еще можно использовать atoi();
из библ. от 1994г. smile 
Код

//а потом 
if(argv[1][2]=='+') //так и оставить
res=argv[1][1]+argv[1][3]; // а вт эти две переменные изменить
// из строковых в числовые при помощи atoi();


вообще-то перевод строковых не очень хорошё
определен иной раз в типа попутаться можно
но если у тя 5.0 BCPP то соответственно все ОК.

ну и на последок есть
та функция isdigit() - так кажись кличат
она проверяет char на пренадлежность
к диапозону 0-99 
 
--------------------
Ищу 2 файлаowl.tchwindows.tch 
PM MAIL   Вверх
kkkggg
Дата 30.4.2006, 01:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 28.4.2006

Репутация: нет
Всего: нет



Спосибо большое за ответы, то что мне нужно было мы с вами порвали. К сожалению не могу повысить репутацию из за недостатка постов, if могбы добавил MAKCim-у, он написал как раз то, что мне было нужно. Поэтому придётся ограничется отдельным ПАСИБА!!  smile  
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0804 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.