Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Калькулятор на С++

Ответить
Настройки темы
C/C++ - Калькулятор на С++

Новый участник


Сообщения: 19
Благодарности: 0

Профиль | Отправить PM | Цитировать


Задали на курсовую написать калькулятор на С++. может кто кинет исходники, плиз, а то и кроме этого запарка... или хоть ссылки, где искать. помогите!!!

Отправлено: 20:50, 21-05-2004

 

Аватара для Buchik

Новый участник


Сообщения: 27
Благодарности: 0

Профиль | Отправить PM | Цитировать


Просто я позно спахватился,думал, что легко написать... а в эту пятницу уже курсач сдавать(( завтра буду разгребать, чуть что задам вопросиков..)

Отправлено: 19:02, 23-05-2011 | #21



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Buchik

Новый участник


Сообщения: 27
Благодарности: 0

Профиль | Отправить PM | Цитировать


Вот, пишу спросить немного по программе
у меня 3 файла, начальный, объявление класса и его компонентов, и деструкторы и конструкторы.

я буду помечать в коде, что хотел бы узнать, что обозначает. помогите пожалуйста.А то я отчёт по курсовой написал, а его ещё и защитить надо....

файл calc1.cpp
Код: Выделить весь код
#include "stdafx.h"
#include "calc.h"
#include <iostream>
#include <locale>
using namespace std;
int main(int argc, char* argv[])
{
	wcout.imbue(locale("rus_rus.866"));
	char line [80];
	calc_var calculator;// что это обозначает?
	wcout << L"Доступные операции : +-*/ \n" ;
	wcout<< L"Введите 'z' для выхода.\n";
	while(true)
	{
		wcout << L"Введите выражение: \n";
		cin.getline(line,79);
		if(*line=='z')break;
		try// этот оператор что обозначает, опишите, как он работает
		{
		calculator.SetFunction(line);
		wcout << L"Ответ : "<< calculator.proceed() <<"\n" ;
		}
		catch(calc_var::SyntaxError e)
		{
			wcout << L"Синтаксическая ошибка :" <<e.p<<"\n" ;
		}
		catch (calc_var::divzero)
		{
			wcout << L"Ошибка.Деление на ноль!(Или равно бесконесность!)\n" ;
		};
			
	}
	return 0;
}
файл calc.h
Код: Выделить весь код
#include <string.h>
#include <ctype.h>
#include <math.h>
class calc_var  
{
public:
	double proceed();
	void SetFunction(char* lpszCommand);
	calc_var(char* lpszCommand);
	calc_var();
	struct divzero{};
	struct SyntaxError
	{
		const char* p;
		SyntaxError(const char* q){p=q;}
	};

	virtual ~calc_var();//что обозначает виртуал??
private:
	virtual	void GetToken();
	double mul_div();
	enum Tok_Type {UNDEF, NUMBER, OPERATOR, END};
	Tok_Type CurrTok;
protected://чем протектед от привайт отличается??? при чём ниже объявляются функции, а почему потом они вызываются , как конструкторы?
	char* pCurrPos;
	char TokenValue[16];
	double add_sub();
	char Function[255];
	virtual double prim();
};
файл calc.cpp
Код: Выделить весь код
#include "stdafx.h"
#include "calc.h"
#include <string>
#include "ctype.h"
#include <math.h>
//////////////////////////////////////////////////////////////////////
// конструкторы/деструкторы
//////////////////////////////////////////////////////////////////////

calc_var::calc_var()//что это делает, и где оно вызывается??
{
 memset(Function,0,256);
 pCurrPos=Function;
}
calc_var::~calc_var() 
{

}
calc_var::calc_var(char* lpszCommand)// что это? и где вызывается??
{
	SetFunction(lpszCommand);
}
void calc_var::SetFunction(char* lpszCommand)// что этот конструктор делает?
{
	strncpy_s(Function,lpszCommand,255);//strncpy_s(); что это обозначает??
	Function[255]=0;
	pCurrPos=Function;
}

double calc_var::proceed()
{
	if (strlen(Function)<1) throw(SyntaxError("No Expression"));//strlen(Function) - это что-то вроди если символов в ведённой линии маньше 1-цы то выыодит синтаксическую ошибку?
	return add_sub();
}

double calc_var::add_sub()
{
	double left=mul_div();
	while(true)
	{
		switch (*TokenValue) 
		{
		case '+':  left+=mul_div(); break;
		case '-': left-=mul_div();break;
		default: return left;
		}
		
	}

}

double calc_var::mul_div()
{
	double left=prim();
	while (true) 
	{
		switch(*TokenValue)
		{
		case '(': if(pCurrPos-Function)pCurrPos--;
				//предоставлена возможность не ставиь знак * перед и после скобки.
			//уменьшаем текущую разбираемую позицию на 1 и далее вызывается стандартное умножение
		case '*': left*=prim();break;
		case '/': { double d=prim();
					if(d==0) throw(divzero());
					left/=d; 
					break;}
		default:return left;
		}

	}
}

double calc_var::prim()// что делает этот конструктор???, шде он вызывается я вижу , но что он именно делает?
{
	GetToken();
	switch(CurrTok)
	{
	case NUMBER://что делает ,если кейс попадает на это условие???
		{
			double temp=atof(TokenValue);
			GetToken();
			return temp;
		}
	case OPERATOR:
		{
			switch(*TokenValue)
			{
				case '-':return -prim();
				case '+':return prim();
				case '(':
					{
						double temp=add_sub();
						if(*TokenValue!=')') throw(SyntaxError(") expected"));
						GetToken();
						return temp;
					}
			}
			throw(SyntaxError("Incorrect operator"));
		}
	default:throw(SyntaxError("No Expression"));
	}

}

void calc_var::GetToken()//это отсортировывает операции в отдельную переменную??
{
	if(!pCurrPos){ CurrTok=END; *TokenValue=0; return;}//конец выражения
	while(*pCurrPos==' ')pCurrPos++;//Пропускаем пробелы в начале

	
	char* temp=TokenValue;
	if(isdigit(*pCurrPos))
	{
		CurrTok=NUMBER;
		while(isdigit(*pCurrPos)||(*pCurrPos=='.'))*temp++=*pCurrPos++;

	}
	else if(strchr("+-*/()",*pCurrPos))//strchr("+-*/()",*pCurrPos) что за условие проверяет этот иф???strchr что обозначает??
	{
		CurrTok=OPERATOR;
		//перейти к следующему символу
		*temp++=*pCurrPos++;//занесли в TokenValue оператор
	}
	else CurrTok=END;
	*temp=0;
}


Тока пожалуйста не посылайте читать книжки.....и если можно объясните попонятней) и всё , что я закоментил, это важно для меня....

Отправлено: 22:19, 29-05-2011 | #22


Аватара для lxa85

Необычный


Contributor


Сообщения: 4463
Благодарности: 994

Профиль | Сайт | Отправить PM | Цитировать


Цитата Buchik:
calc_var calculator; »
Вон у тебя calc.cpp реализует тип 'calc_var'. Соотв этой строкой ты создаешь переменную "calculator" типа calc_var, реализация которой написана в calc.cpp.
Цитата Buchik:
try// этот оператор что обозначает, опишите, как он работает »
Операторы try... catch. Нужны, чтобы "ловить" ошибки и программировать действия программы в том или ином случае. Что собственно и делается в программе.
Что касается отличий virtual, protected и т.п. - все таки придется тебе прочесть главу по объектам. Хотя бы "по диагонали".
...
calc.cpp завтра распишу. Говорил тебе - пиши сам, проще будет. Вечно не послушаются...

-------
- Я не разрешаю тебе быть плохой! Потому что плохие люди совершают плохие поступки. А это нехорошо!
(Из наставлений 5 летней девочки своей младшей сестре)

Это сообщение посчитали полезным следующие участники:

Отправлено: 00:03, 30-05-2011 | #23


Аватара для Buchik

Новый участник


Сообщения: 27
Благодарности: 0

Профиль | Отправить PM | Цитировать


Всё, уже ненада, защитил курсовую и так) большое спасибо.

Отправлено: 12:26, 31-05-2011 | #24



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Калькулятор на С++

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Калькулятор трупа Greyman Юмор 78 04-06-2012 18:52
C/C++ - Калькулятор hhh8486 Программирование и базы данных 5 11-04-2011 01:18
Калькулятор WinStyle prokazzza Проект WinStyle 47 19-02-2011 22:45
VBA - Калькулятор с одним textbox..... ProgrammerPC Программирование и базы данных 6 20-07-2010 08:40
C/C++ - [решено] Римский калькулятор на C++ slavutych Программирование и базы данных 6 23-05-2009 21:47




 
Переход