Показать полную графическую версию : Калькулятор на С++
PRaetorian
21-05-2004, 20:50
Задали на курсовую написать калькулятор на С++. может кто кинет исходники, плиз, а то и кроме этого запарка... или хоть ссылки, где искать. помогите!!!
BrutalBit
21-05-2004, 22:02
http://algolist.manual.ru/syntax/index.php
Стандартная задача.
В книге Страуструпа есть законченный пример программируемого калькулятора.
Задали на курсовую написать калькулятор на С++ »
блин, мне бы такие курсовые. неделю назад, на лабе делали. в чем конкретно проблема?
Задали на курсовую написать калькулятор на С++ чтоби считал arctg(x)
Delirium
12-04-2011, 01:02
Vaniok, тебе последнее предупреждение за дублирование постов. В след. раз будет бан.
Vaniok, дали задание - делай. Есть проблемы - спрашивай в отдельно созданной теме. За тебя её никто делать не будет здесь.
ну может у кого то уже ест готов код...или какието ссилки...
тут же тебе приводили код калькулятора. Допиши для него вычисление функции arctg и все. Это быстрее чем за тебя готовое решение искать.
ясн...спасибо...думал тут кто то знает ето решение...а то я б сюда не совался калькулятор с стандартними функцмиями я могу начеркать....а вот посложнене...как то не получается....
А в чем проблема? существует ф-я
T atan(T)
Вам надо то только добавить обработчик события по нажатию кнопки ?
Vaniok, C++ арктангенс (http://www.google.ru/search?hl=ru&newwindow=1&q=c%2B%2B+%D0%B0%D1%80%D0%BA%D1%82%D0%B0%D0%BD%D0%B3%D0%B5%D0%BD%D1%81&aq=0&aqi=g2&aql=f&oq=C%2B%2B+%D0%B0%D1%80%D0%BA),
c++ arctan (http://www.google.ru/search?hl=ru&newwindow=1&q=c%2B%2B+arctan&aq=5&aqi=g8&aql=f&oq=c%2B%2B+arc)
Раз (http://www.cplusplus.com/reference/clibrary/cmath/atan/) два (http://valera.asf.ru/cpp/help/name.php?name=atan)
Дальше сам справишься?
да. и прописать ету функцию в програме...
о спасибо за полезную инфу.)
Вот моя проблема: мне нужно написать калькулятор, который щитает выражения в скобках (с ОПН или ОПЗ это одно и то же)
так вот я нашёл калькулятор, который щитает сарзу переведённую запись в ОПЗ, но мне нужно сделать что бы это переводило автоматом в ОПЗ и щитало...
тоесть выражение 34 + ( 45*3+5)
это выражение выглядит в ОПН как 34 45 3 * 5 ++
вот мой код
#include "stdafx.h"
#include <stdio.h>
int _tmain(int argc, _TCHAR* argv[])
{
int stack[1000];
// sp = индекс ячейки, куда будет push-иться очередное число
int sp =0; // (sp-1) = индекс ячейки, являющейся вершиной стека
while ( !feof(stdin) )
{
int c = getchar() ;
int x ;
switch ( c )
{
case ' ' :
case '\n' :
break ;
case '=' :
printf( "Result = %d\n", stack[sp - 1] ) ; sp-- ;
break ;
case '+' :
stack[sp-2] = stack[sp-2] + stack[sp-1] ; sp-- ;
break ;
case '-' :
stack[sp-2] = stack[sp-2] - stack[sp-1] ; sp-- ;
break ;
case '*' :
stack[sp-2] = stack[sp-1] * stack[sp-2] ; sp-- ;
break ;
case '/' :
stack[sp-2] = stack[sp-2] / stack[sp-1] ; sp-- ;
break ;
default :
ungetc (c, stdin); // вернуть символ обратно в поток
if ( scanf( "%d" , &x ) != 1 )
{
fprintf( stderr , "Can't read integer\n" ) ;
return -1 ;
}
else
{
stack[sp] = x ;
sp++ ;
}
}
}
printf( "Result = %d\n" , stack[sp-1] ) ;
return 0 ;
}
Выматался, дальше запроса в гугл сейчас искать ничего не буду.
алгоритмы перевода выражения в ОПЗ (http://www.google.ru/search?hl=ru&q=%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D1%8B+%D0%BF%D0%B5%D1%80%D0%B5%D0%B2%D0%BE%D0%B4% D0%B0+%D0%B2%D1%8B%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F+%D0%B2+%D0%9E%D0%9F%D0%97) Даже если написано на Pascal, понять логику работы и перевести на С++ не составит труда.
Логика понятна, но "перевести на С++ не составит труда." с этим проблемы....Как из char строки введёной с клавиатуры задать цикл
который , бы загонял число,стоящее до определённого символа в строке, в стек, а знак, в другой стек?? тока не отправляйте в гугл.. это элементарно , знаю но или у меня мозги уже закипели.. или я найти не могу...
значит чарку вина пропусти и будь проще.
А вообще, приложи исходник. Вариантов помещения символа в стек много (по смыслу одинаковые, но варианты вызова функции будут отличаться)
цикл от 0(или текущего значения) до заданного с анализом( if .... ; case ... и т.п.) полученного символа.
В принципе и схем получения ОПЗ много, есть однопроходные, есть не очень, с применением стека , ссылочных типов данных (типа списков) и т.п.
В общем нужен код обрамленный тегом #
кратко его прокомментируй, чтобы было понятно что и зачем, и выдели проблемный кусок, так всем будет проще.
вот, допустим вводим строку типа char назвали её переменной допустим vvod[1000] , объявили стек
stack <int> s1 ;
1206+(13*3)=
как , число 1206 загнать в стек , не зная какой размерности это число?..
s1.push( vvod[ 0 тирэ 3 ] ) ; вот что я имею в виду..или как преобразовать кусок чаровской строки в инт и загнать его в стек...
во первых ты летишь вперед паровоза.
Первое что тебе надо сделать - провести синтаксический анализ строки. Т.е. есть так называемая Форма Бэкуса-Наура (http://ru.wikipedia.org/wiki/%D0%A4%D0%BE%D1%80%D0%BC%D0%B0_%D0%91%D1%8D%D0%BA%D1%83%D1%81%D0%B0_%E2%80%94_%D0%9D%D0%B0%D1%83%D1% 80%D0%B0), описывающая синтаксис.
Вводи вспомогательные функции определения подстроки числа / знака в строке.
s1.push (vvod[1-3]) тебе выполнить не дадут.
Не совместимость типов. Либо устранять не совместимость переводом в число [через поиск подстроки и т.д.], либо менять тип стека.
Я , сдался, нашёл пару исходников с готовыми калькуляторами...
Buchik, жаль что сдался, ну да ладно. Попробуем воскресить бренное тело :) С готовыми исходниками разобрался? Принцип их работы понятен?
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.