Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Программа под ДОС строящая графики

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2

Открыть новую тему     Написать ответ в эту тему

Rvnikita



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Цитата:
Цитата:полюбому придется пхать 3 значные числа вместо Х  
 
нафиг?  
 
блн!!! я же в прошлом посте дал код!!  
втавить 2 строки и сделать по телу функции замену 's,err' на 's,x,err' - сложно?  

Блин, я не понимаю =(

----------
блог про горячие клавиши

Всего записей: 304 | Зарегистр. 09-01-2003 | Отправлено: 12:12 07-12-2003
evilman



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Код:
 
#include <math.h>
#include <string.h>
 
// errorcodes for calcul()
#define OK 0
#define ERR_UNKNOWN   1 // хз
#define ERR_BREAKETS 2 // незакрытые скобки
#define NO_ARG 3 // нет аргумента функции
#define NOT_A_NUMBER 4 // невозможно преобразовать в число
 
/*
вычисляет значение заданного выражения s
записывает код ошибки в err
в случае ошибки возвращает 0
a и z - служебные параметры.
*/
float calcul(char *s, float x,int &err, int a=0, int z=-1)
{
char tmp[64]="0";
int i=0,k=0;
float arg1=0, arg2=0;
 
if(z==-1)                       //начало вычислений
  {
  z=strlen(s)-1;     //определяем длину строки
 
//проверка скобок
  for(i=z;i>=a;i--)
     {
     if(s[i]==')')k++; //считаем скобки
     if(s[i]=='(')k--;
     }
  if(k!=0) //незакрытые скобки
    {
    err=ERR_BREAKETS;
    return 0;
    }
  }
 
// X
if(s[a]=='x'&& a==z)return x;
 
//обработка операторов
// + -
for(i=z;i>=a;i--)
   {
   if(s[i]==')')k++; //считаем скобки
   if(s[i]=='(')k--;
 
   if(s[i]=='+'&&k==0) // + detected
     return calcul(s,x,err,a,i-1)+calcul(s,x,err,i+1,z);
 
   if(s[i]=='-'&&k==0) // - detected
     return calcul(s,x,err,a,i-1)-calcul(s,x,err,i+1,z);
   }
 
// * /
for(i=z;i>=a;i--)
   {
   if(s[i]==')')k++; //считаем скобки
   if(s[i]=='(')k--;
 
   if(s[i]=='*'&&k==0) // * detected
     return calcul(s,x,err,a,i-1)*calcul(s,x,err,i+1,z);
 
   if(s[i]=='/'&&k==0) // / detected
     return calcul(s,x,err,a,i-1)/calcul(s,x,err,i+1,z);
   }
 
 
//скобки
if(s[a]=='(' && s[z]==')')
  return calcul(s,x,err,a+1,z-1);
 
//обработка функций
//sqrt
if(s[a]=='s'&&s[a+1]=='q'&&s[a+2]=='r'&&s[a+3]=='t'&&s[a+4]=='('&&s[z]==')')
  {
  arg1=calcul(s,x,err,a+5,z-1);
  return sqrt(arg1);
  }
 
//sin
if(s[a]=='s'&&s[a+1]=='i'&&s[a+2]=='n'&&s[a+3]=='('&&s[z]==')')
  {
  arg1=calcul(s,x,err,a+4,z-1);
  return sin(arg1);
  }
 
//cos
if(s[a]=='c'&&s[a+1]=='o'&&s[a+2]=='s'&&s[a+3]=='('&&s[z]==')')
  {
  arg1=calcul(s,x,err,a+4,z-1);
  return cos(arg1);
  }
 
//tan
if(s[a]=='t'&&s[a+1]=='a'&&s[a+2]=='n'&&s[a+3]=='('&&s[z]==')')
  {
  arg1=calcul(s,x,err,a+4,z-1);
  return tan(arg1);
  }
 
 
//pow
if(s[a]=='p'&&s[a+1]=='o'&&s[a+2]=='w'&&s[a+3]=='('&&s[z]==')')
  {
  k=0;                  // ищем аргументы
  for(i=z-1;i>=a+4;i--)
     {
     if(s[i]==')')k++; //считаем скобки
     if(s[i]=='(')k--;
 
     if(s[i]==','&&k==0) // , detected
       {
       arg1=calcul(s,x,err,a+4,i-1);
       arg2=calcul(s,x,err,i+1,z-1);
       return pow(arg1,arg2);
       }
     }
  err=NO_ARG; // , так и не нашли
  }
 
//обработка чисел
for (i=0;i<=z-a;i++)
{
tmp[i]=s[a+i];
//проверка, число ли это
if(!( tmp[i]=='1'||
tmp[i]=='2'||
tmp[i]=='3'||
tmp[i]=='4'||
tmp[i]=='5'||
tmp[i]=='6'||
tmp[i]=='7'||
tmp[i]=='8'||
tmp[i]=='9'||
tmp[i]=='0'||
tmp[i]=='.'||
tmp[i]=='-'||
tmp[i]=='E'||
tmp[i]=='e'||
tmp[i]==' '  ) )
  { //не число
  err=NOT_A_NUMBER;
  return 0;
  }
}
tmp[z-a+1]='\0';
return atof(tmp);
 
// баг
err=ERR_UNKNOWN;
return 0;
}
 
 

 
 

Цитата:
Блин, я не понимаю =(

а теперь??

Всего записей: 226 | Зарегистр. 29-01-2003 | Отправлено: 20:58 11-12-2003
VektoR



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Цитата:
Юлин понимаешь, полюбому придется пхать 3 значные числа вместо Х, ведь у нас пикселы экрана от 1 до 800... и каждую точку просчитываем...  
Вот в этом и проблемса!

можно попробовать перевести в двоичную систему и там все перепахать, хотя...

Всего записей: 17 | Зарегистр. 23-11-2003 | Отправлено: 14:07 15-12-2003
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Программа под ДОС строящая графики


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2025

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru