Решил ввиде тренировки написать калькулятор (т.к. только начал самостоятельно изучать С++), но на последних страничках компилятор на меня начал ругаться... Вот код: Code: //калькулятор #include<iostream> #include<cmath> using namespace std; const double PI(3.14159); int main() { do { double x,y,z; char vibor,znak,func,ex; cout<<"Чтобы произвести стандартные действия(+,-,/,*) с двумя числами введите 'a'"<<endl<<"Чтобы вычислить тригонометрические выражения или корень из числа введите 'b'"<<endl; cin >>vibor; cout <<endl; if (vibor=='a') { cout <<"Введите выражение с двумя числами используя (+,-,/,*): "<<endl; cin >>x,znak,y; if (znak=='+') cout <<x<<"+"<<y<<"="<<x+y; if (znak=='-') cout <<x<<"-"<<y<<"="<<x-y; if (znak=='*') cout <<x<<"*"<<y<<"="<<x*y; if ((znak=='/') && (y!=0)) cout <<x<<"*"<<y<<"="<<x*y; if ((znak=='/') && (y==0)) cout<<"Деление на 0 - недопустимая операция"; } if (vibor=='b') { cout <<"Введите тригонометрическое выражение (sin,cos,tg,ctg,asin,acos,atg) или выражение с корнем (sqr): "<<endl; cin >>func,z; cout <<endl; if (func=='sin') { z=PI*z/180; cout<<"sin"<<z<<"="<<sin(z); } if (func=='cos') { z=PI*z/180; cout<<"cos"<<z<<"="<<cos(z); } if (func=='tg') { z=PI*z/180; cout<<"tg"<<z<<"="<<tan(z); } if (func=='ctg') { z=PI*z/180; cout<<"ctg"<<z<<"="<<1/tan(z); } if (func=='asin') cout<<"arcsin"<<z<<"="<<asin(z)*180/PI; if (func=='acos') cout<<"arccos"<<z<<"="<<acos(z)*180/PI; if (func=='atg') cout<<"arctg"<<z<<"="<<atan(z)*180/PI; //if ((f=='tg') && (n==) } cout<<endl<<"Чтобы повторить вычисления нажмите 'r' или любую другую клавишу чтобы выйти (reset нажимать не надо): "; cin>>ex; } while (ex=='r'); return 0; } строчка Code: } while (ex=='r'); помечена, в ней ошибка, вот что пишет компилятор: В чём может быть ошибка, я ведь вроде обозначил переменную ex в char???
Ошибка из-за области действия идентификатора ex. Сделай вот так: Code: ....................................... int main() { char ex; // вот так do { double x,y,z; char vibor,znak,func; .......................................
ААа всё понял) спасибо большое, действительно, я же его обозначил какбы после использования (цикл как раз его и использует), а надо до) +1) Осталось математичускую часть доработать в функциях)))
еще у тебя должны быть проблемы с этим с подобным местом if (func=='atg') здесь ты сравниваешь char со строкой но сравниваются только в итоге сравниваются только переменная func и первый элемент 'atg' т е 'a' тебе нужно хранить использовать массив char типа char func[4] и сравнивать if(!strcmp(func,"atg") и тд
О спасибо, но пока я наверно лучше сделаю с одной буковкой, т.к. до этого места в учебнике я ещё пока е дошёл, а оно наверно будет (учебник Уолтера Савича)
Ещё такой вопросик к знающим: для тригонометрических функций какая размерность углов? градусы, радианы или ещё какая мера??? (а то что-то ни в градусах ни в радианах не получается правильно)
Всё разобрался там действительно радианы перевод из градусов в радианы: радиан=градус*pi/180, где Pi=3.14159
Вот вроде закончил: Code: #include<iostream> #include<cmath> using namespace std; const double PI(3.14159); int main() { double x,y; char vibor, znak, ex; do { cout <<"Viberite 'a' ili 'b': "; cin >>vibor; cout <<endl; if (vibor=='a') { cout <<"Vvedite dva 4isla i (+,-,/,*,^): "; cin >>x; cin >>znak; cin>>y; cout <<endl; if (znak=='+') cout <<x<<"+"<<y<<"="<<x+y; if (znak=='^') cout <<x<<"^"<<y<<"="<<pow(x,y); if (znak=='-') cout <<x<<"-"<<y<<"="<<x-y; if (znak=='*') cout <<x<<"*"<<y<<"="<<x*y; if ((znak=='/') && (y!=0)) cout <<x<<"*"<<y<<"="<<x/y; if ((znak=='/') && (y==0)) cout <<"Delenie na 0 - jopa"; } if (vibor=='b') { cout.setf(ios::fixed); cout.setf(ios::showpoint); cout.precision(2); cout <<"(s-(sin),c-(cos),t-(tg),g-(ctg),a-(arcsin),o-(arccos),r-(arctg)) i (q-(sqrt)): "; cin >>znak; cin>>x; cout <<endl; if (znak=='s') { x=PI*x/180; cout<<"sin"<<x<<"="<<sin(x); } if (znak=='c') { x=PI*x/180; cout<<"cos"<<x<<"="<<cos(x); } if (znak=='t') { x=PI*x/180; cout<<"tg"<<x<<"="<<tan(x); } if (znak=='g') { x=PI*x/180; cout<<"ctg"<<x<<"="<<1/tan(x); } if (znak=='a') cout<<"arcsin"<<x<<"="<<asin(x)*180/PI; if (znak=='o') cout<<"arccos"<<x<<"="<<acos(x)*180/PI; if (znak=='r') cout<<"arctg"<<x<<"="<<atan(x)*180/PI; if ((znak=='q') && (x>=0)) cout<<"sqrt"<<x<<"="<<sqrt(x); if ((znak=='q') && (x<0)) cout<<"Jopa"; } cout<<endl<<"Povtorit' - 'k', vixod - any key: "; cin>> ex; } while (ex=='k'); return 0; } но всё же надо сделать как говорил da_ff для удобства, кто-нибудь может написать подробно параметры для записи строки в переменную?
т.е в моей проге (где максимальная длина строки arccos тобишь 6 символов) надо написать char func[6] ?
Ну я ж ток начал изучать, вот щас придумываю прогу чтоб функции использовать (самое главное: мне надо привыкнуть к синтаксису, поэтому и приходится писать проги, т.к. изучаю сам и нет учителей которые давали бы задания на уроках, чтоб запоминалось лучше)
У меня есть отличная книга: программиравание на С++, Уолтер Савич, ток она очень большая, пока читаю всё по порядку)