ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Помогите разобраться в ошибке кода
  #1  
Старый 02.07.2007, 16:18
Аватар для VERte][
VERte][
Moderator - Level 7
Регистрация: 17.05.2007
Сообщений: 220
Провел на форуме:
3013539

Репутация: 441
По умолчанию Помогите разобраться в ошибке кода

Решил ввиде тренировки написать калькулятор (т.к. только начал самостоятельно изучать С++), но на последних страничках компилятор на меня начал ругаться...

Вот код:
Код:
//калькулятор
#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;
}
строчка
Код:
 } while (ex=='r');
помечена, в ней ошибка, вот что пишет компилятор:
Цитата:
main.cpp:66: error: `ex' undeclared (first use this function)
main.cpp:66: error: (Each undeclared identifier is reported only once for each function it appears in.)
Process terminated with status 1 (0 minutes, 2 seconds)
В чём может быть ошибка, я ведь вроде обозначил переменную ex в char???
 
Ответить с цитированием

  #2  
Старый 02.07.2007, 16:27
Аватар для NetMan
NetMan
Участник форума
Регистрация: 09.02.2004
Сообщений: 122
Провел на форуме:
1089794

Репутация: 134
По умолчанию

Ошибка из-за области действия идентификатора ex.
Сделай вот так:
Код:
.......................................
int main()
{
   char ex;   // вот так
   do
  {
    double x,y,z;
    char vibor,znak,func;
.......................................
 
Ответить с цитированием

  #3  
Старый 02.07.2007, 16:30
Аватар для VERte][
VERte][
Moderator - Level 7
Регистрация: 17.05.2007
Сообщений: 220
Провел на форуме:
3013539

Репутация: 441
По умолчанию

ААа всё понял) спасибо большое, действительно, я же его обозначил какбы после использования (цикл как раз его и использует), а надо до)
+1)

Осталось математичускую часть доработать в функциях)))

Последний раз редактировалось Vertexe; 02.07.2007 в 16:34..
 
Ответить с цитированием

  #4  
Старый 02.07.2007, 19:46
Аватар для da_ff
da_ff
Участник форума
Регистрация: 11.07.2006
Сообщений: 125
Провел на форуме:
413927

Репутация: 71
Отправить сообщение для da_ff с помощью ICQ
По умолчанию

еще у тебя должны быть проблемы с этим с подобным местом if (func=='atg') здесь ты сравниваешь char со строкой но сравниваются только в итоге сравниваются только переменная func и первый элемент 'atg' т е 'a' тебе нужно хранить использовать массив char типа char func[4] и сравнивать if(!strcmp(func,"atg") и тд
 
Ответить с цитированием

  #5  
Старый 02.07.2007, 21:22
Аватар для VERte][
VERte][
Moderator - Level 7
Регистрация: 17.05.2007
Сообщений: 220
Провел на форуме:
3013539

Репутация: 441
По умолчанию

О спасибо, но пока я наверно лучше сделаю с одной буковкой, т.к. до этого места в учебнике я ещё пока е дошёл, а оно наверно будет (учебник Уолтера Савича)
 
Ответить с цитированием

  #6  
Старый 03.07.2007, 17:45
Аватар для VERte][
VERte][
Moderator - Level 7
Регистрация: 17.05.2007
Сообщений: 220
Провел на форуме:
3013539

Репутация: 441
По умолчанию

Ещё такой вопросик к знающим: для тригонометрических функций какая размерность углов? градусы, радианы или ещё какая мера??? (а то что-то ни в градусах ни в радианах не получается правильно)
 
Ответить с цитированием

  #7  
Старый 03.07.2007, 18:12
Аватар для VERte][
VERte][
Moderator - Level 7
Регистрация: 17.05.2007
Сообщений: 220
Провел на форуме:
3013539

Репутация: 441
По умолчанию

Всё разобрался там действительно радианы
перевод из градусов в радианы: радиан=градус*pi/180, где Pi=3.14159
 
Ответить с цитированием

  #8  
Старый 03.07.2007, 18:28
Аватар для VERte][
VERte][
Moderator - Level 7
Регистрация: 17.05.2007
Сообщений: 220
Провел на форуме:
3013539

Репутация: 441
По умолчанию

Вот вроде закончил:
Код:
#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 для удобства, кто-нибудь может написать подробно параметры для записи строки в переменную?
 
Ответить с цитированием

  #9  
Старый 03.07.2007, 18:35
Аватар для VERte][
VERte][
Moderator - Level 7
Регистрация: 17.05.2007
Сообщений: 220
Провел на форуме:
3013539

Репутация: 441
По умолчанию

т.е в моей проге (где максимальная длина строки arccos тобишь 6 символов) надо написать
char func[6] ?
 
Ответить с цитированием

  #10  
Старый 03.07.2007, 18:41
Аватар для VERte][
VERte][
Moderator - Level 7
Регистрация: 17.05.2007
Сообщений: 220
Провел на форуме:
3013539

Репутация: 441
По умолчанию

Цитата:
Сообщение от invlose  
char func[]

если нравится парсить- можно было и без калькулятора обойтись
если хочешь одними if обойтись вообще не вижу смысла учитЬся си на таких программах..
Ну я ж ток начал изучать, вот щас придумываю прогу чтоб функции использовать (самое главное: мне надо привыкнуть к синтаксису, поэтому и приходится писать проги, т.к. изучаю сам и нет учителей которые давали бы задания на уроках, чтоб запоминалось лучше)
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ПомогитЕ !!! подалуста найти кряк гейлордфакерЪ Болталка 2 30.08.2007 14:48
ПоМоГиТе! ПЛЗ!!! farik.aka E-Mail 1 17.09.2006 13:00
Внедрение Sql кода с завязанными глазами k00p3r Чужие Статьи 0 12.06.2005 20:48
помогите разобраться svans Чаты 2 23.12.2002 21:28



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ