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

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

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

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

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

Rvnikita



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Помогите написать...
Все предыдущие топики просмотрел, ничего путного не нашел!
Это моя семестровая работа, нужно написать...
Жедательно дать ссылки где можно про ето почитать...
И если куски кода, то с коментами!
Спасибо!

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

Всего записей: 304 | Зарегистр. 09-01-2003 | Отправлено: 01:13 18-11-2003
Qx2

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть програмка на ВС3.1 под дос для работы с аналогово-цифровым преобразователем.
Рисует картинку (выводит на экран точки XY, снятые по двум каналам). Архив ~70kb
Пиши адрес, куда слать.

Всего записей: 5 | Зарегистр. 14-10-2003 | Отправлено: 15:26 20-11-2003
Rvnikita



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Qx2
rvnikita@yandex.ru
Тока я не совсем понял, что именно она делает.... объесни плз....

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

Всего записей: 304 | Зарегистр. 09-01-2003 | Отправлено: 20:28 20-11-2003
Sleepwalker



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
единственная реальная проблема - парсинг строки формулы. Остальное - достаточно просто... мы таким в школе на паскале баловались...

----------
...или я ничего не понимаю в этой жизни... или понимаю слишком хорошо...

Всего записей: 1957 | Зарегистр. 19-10-2002 | Отправлено: 12:52 21-11-2003
evilman



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
хм..  
во-1, насколько я понял, ему парсинг не нужен..
во-2, парсинг тоже не проблема.. совсем. 8)

Всего записей: 226 | Зарегистр. 29-01-2003 | Отправлено: 13:47 21-11-2003
Sleepwalker



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
evilman
ну да, можно готовые решения поискать...
но если делать самому с нуля - это проблема...

----------
...или я ничего не понимаю в этой жизни... или понимаю слишком хорошо...

Всего записей: 1957 | Зарегистр. 19-10-2002 | Отправлено: 17:15 21-11-2003
evilman



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
>но если делать самому с нуля - это проблема
кому как. делал когда-то..

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



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
evilman
Да было бы неплохо и готовые решения посмотреть, для инфы....
А если есть исходники, плиз скинь...

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

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



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
2 Sleepwalker
так.. чтоб не быть голословным - исходник.

Код:
 
#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, 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;
    }
  }
 
 
//обработка операторов
// + -
for(i=z;i>=a;i--)
   {
   if(s[i]==')')k++; //считаем скобки
   if(s[i]=='(')k--;
 
   if(s[i]=='+'&&k==0) // + detected
     return calcul(s,err,a,i-1)+calcul(s,err,i+1,z);
 
   if(s[i]=='-'&&k==0) // - detected
     return calcul(s,err,a,i-1)-calcul(s,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,err,a,i-1)*calcul(s,err,i+1,z);
 
   if(s[i]=='/'&&k==0) // / detected
     return calcul(s,err,a,i-1)/calcul(s,err,i+1,z);
   }
 
 
//скобки
if(s[a]=='(' && s[z]==')')
  return calcul(s,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,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,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,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,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,err,a+4,i-1);
       arg2=calcul(s,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;
}
 

имхо, оно просто..
 
2 Rvnikita
с line(x1,y1,x2,y2) - сам разберёшься

Всего записей: 226 | Зарегистр. 29-01-2003 | Отправлено: 07:13 22-11-2003
Sleepwalker



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

Цитата:
так.. чтоб не быть голословным - исходник.  

рабочий исходник? проверял?
 


----------
...или я ничего не понимаю в этой жизни... или понимаю слишком хорошо...

Всего записей: 1957 | Зарегистр. 19-10-2002 | Отправлено: 12:13 24-11-2003
Rvnikita



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Sleepwalker
Да исходник рабочий!
 
evilman
Спасибо огромное... вот переделываю тут эту прогу под мои нужды...
Сам начинающий, поэтому есть проблемсы.... =(
Но ничего, справимся!
 
Ещеб найти исходник проги, перущей производную..
Например как реализованно в Agrapher'e
 
 
Добавлено
А вот и проблеммы:
Вроде написал, но не пашет...
Более того при компиляции и запуске, все ок, но в самом конце, программа вылетает...
ХЗ почему.... причем дебагил, именно в конце!
Есть небольшие проблемсы с вычислением для Х больше 100 иль меньше 10 т.е не для двухзначных чисел! Но это устраним, а вот че делать  с проблемсой не знаю =(((
Может обращаюсь кудато туда, куда не стоит???
 
Вот пока что у меня получилось:
 

Код:
 
 
 
#include <graphics.h>
#include <ctype.h>
#include <conio.h>
#include <iostream.h>
#include <string.h>
#include <dos.h>
#include <stdlib.h>
#include <math.h>
int sizenum(int a);
int a=0; double z;
char *temp;
char *temp2;
 
char charnum(int x,int num)
{
num=sizenum(x)-num;
int res=x,ost;
 for(int i=1;i<=num+1;i++)
 {
 ost=res%10;
 res=res/10;
 }
return (char)(ost+48);
}
 
int sizenum(int a)
{
int i;
for(i=0;;i++)
{
if(!(a/(pow(10,i))>=1)) {break;}
}
return (i);
}
 
 
 
// 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(int abs,char *s, int &err, int a=0, int z=-1)
{
 
strlwr(s);   //Meniaet regist vsei stroki v nignii
int m=sizenum(abs);
for(int n=0;n<strlen(s);n++)
{
if(s[n]=='x')                             //Zameniaem vse x na 1
 {
 s=(char*)realloc(s,sizeof(char)*(strlen(s)+m));
 
  int c=(strlen(s)+m-1);
  s[c]=0;
  for(;c>=n+2;c--)
  {
  s[c-1]=s[c-2];  }
 
 for(int k=n,i=1;i<=m;k++,i++)
 {
 s[k]=charnum(abs,i);
 }
 
// cout<<"!!"<<strlen(s)<<"!!";
 
 
//  for(int b=0;b<m;b++)
//  {s[n+b]=(char)(abs+48);                     }
//  cout<<"\n\n l"<<s[n+b]<<" d"<<n<<" \n\n";}
  }
}
 
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;
    }
  }
 
 
//обработка операторов
// + - ^
for(i=z;i>=a;i--)
   {
   if(s[i]==')')k++; //считаем скобки
   if(s[i]=='(')k--;
 
   if(s[i]=='+'&&k==0) // + detected
     return calcul(abs,s,err,a,i-1)+calcul(abs,s,err,i+1,z);
 
   if(s[i]=='-'&&k==0) // - detected
     return calcul(abs,s,err,a,i-1)-calcul(abs,s,err,i+1,z);
 
   if(s[i]=='^'&&k==0) // - detected
     return pow(calcul(abs,s,err,a,i-1),calcul(abs,s,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(abs,s,err,a,i-1)*calcul(abs,s,err,i+1,z);
 
   if(s[i]=='/'&&k==0) // / detected
     return calcul(abs,s,err,a,i-1)/calcul(abs,s,err,i+1,z);
   }
 
 
//скобки
if(s[a]=='(' && s[z]==')')
  return calcul(abs,s,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(abs,s,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(abs,s,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(abs,s,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(abs,s,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(abs,s,err,a+4,i-1);
       arg2=calcul(abs,s,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;
}
 
void main()
{
int driver, mode;
driver=DETECT;
//mode=0;
initgraph(&driver, &mode, "c:\\work\\tc\\bgi\\");
 
char *f;
cin>>f;
//cout<<calcul(f,0);
 
/*for(int x=0;x<10;x++)
{
char t[155];
strcpy(t,f);
for(int n=0;n<strlen(f);n++) //
{                            //Zameniaem vse x na 1
if(f[n]=='x') {f[n]=char(x+48); t[n]=char(x+48);} //
}
line(x,(int)calcul(f,0)*110+250,x+1,(int)calcul(t,0)*110+250);
}   */
//cout<<calcul(1,f,0,0,-1);
for(int x=10;x<99;x++)
{
//cout<<x<<" ";
//char temp[155],temp2[155];
  if(a==0) {temp=(char*)malloc((strlen(f)+1)*sizeof(char));
    temp2=(char*)malloc((strlen(f)+1)*sizeof(char)); a=1;}
temp=(char*)realloc(temp,(strlen(f)+1)*sizeof(char));
temp2=(char*)realloc(temp2,(strlen(f)+1)*sizeof(char));
 
strcpy(temp,f);
strcpy(temp2,f);
//cout<<strlen(f);
//cout<<calcul(x,temp,0,0,-1);
line(x,-calcul(x,temp,0,0,-1)*3+250,x+1,-calcul(x+1,temp2,0,0,-1)*3+250);
z=calcul(x,temp,0,0,-1);
//cout<<calcul(x,temp,0,0,-1);
delay(80);
}
 
getch();
}
 


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

Всего записей: 304 | Зарегистр. 09-01-2003 | Отправлено: 22:44 24-11-2003 | Исправлено: Rvnikita, 01:17 25-11-2003
evilman



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sleepwalker
да, рабочий. в чём трабл?
 
Rvnikita

Цитата:
производную..  

ёпть..
по определению:
 
return ( f(x)-f(x+delta) )/delta ;
 
где f(x) - то, от чего берём производную, delta - малая величина.
или тебе символьно производную взять надо?

Всего записей: 226 | Зарегистр. 29-01-2003 | Отправлено: 03:48 28-11-2003
Rvnikita



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
evilman
Вообщето символьно нужно... чтоб выражение получать... =((
Да кстати следующая бета проги, все вроде ок, все пашет, НО! При выходе из main'a выдает ошибку, вылетает или еще что нить... помогите плз...
 
 

Код:
#include <graphics.h>
#include <ctype.h>
#include <conio.h>
#include <iostream.h>
#include <string.h>
#include <dos.h>
#include <stdlib.h>
#include <math.h>
int sizenum(int a);
int a=0; double z;
char *temp;
char *temp2;
 
char charnum(int x,int num)
{
num=sizenum(x)-num;
int res=x,ost;
 for(int i=1;i<=num+1;i++)
 {
 ost=res%10;
 res=res/10;
 }
return (char)(ost+48);
}
 
int sizenum(int a)
{
int i;
for(i=0;;i++)
{
if(!(a/(pow(10,i))>=1)) {break;}
}
return (i);
}
 
 
 
// 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(int abs,char *s, int &err, int a=0, int z=-1)
{
 
strlwr(s);   //Meniaet regist vsei stroki v nignii
int m=sizenum(abs);
for(int n=0;n<strlen(s);n++)
{
if(s[n]=='x')                             //Zameniaem vse x na 1
 {
 s=(char*)realloc(s,sizeof(char)*(strlen(s)+m));
 
 
 
 for(int d=1;d<m;d++)
 {
  int c=(strlen(s)+m-1);
  s[c]=0;
  c--;
  for(;c>=n+2;c--)   {   s[c]=s[c-1];  } //Dvigaem konec stroki
 }
 
 for(int k=n,i=1;i<=m;k++,i++)
{
 s[k]=charnum(abs,i);
 }
 
// cout<<"!!"<<strlen(s)<<"!!";
 
 
//  for(int b=0;b<m;b++)
//  {s[n+b]=(char)(abs+48);                     }
//  cout<<"\n\n l"<<s[n+b]<<" d"<<n<<" \n\n";}
  }
}
 
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;
    }
  }
 
 
//обработка операторов
// + - ^
for(i=z;i>=a;i--)
   {
   if(s[i]==')')k++; //считаем скобки
   if(s[i]=='(')k--;
 
   if(s[i]=='+'&&k==0) // + detected
     return calcul(abs,s,err,a,i-1)+calcul(abs,s,err,i+1,z);
 
   if(s[i]=='-'&&k==0) // - detected
     return calcul(abs,s,err,a,i-1)-calcul(abs,s,err,i+1,z);
 
   if(s[i]=='^'&&k==0) // - detected
     return pow(calcul(abs,s,err,a,i-1),calcul(abs,s,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(abs,s,err,a,i-1)*calcul(abs,s,err,i+1,z);
 
   if(s[i]=='/'&&k==0) // / detected
     return calcul(abs,s,err,a,i-1)/calcul(abs,s,err,i+1,z);
   }
 
 
//скобки
if(s[a]=='(' && s[z]==')')
  return calcul(abs,s,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(abs,s,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(abs,s,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(abs,s,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(abs,s,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(abs,s,err,a+4,i-1);
       arg2=calcul(abs,s,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;
}
 
void main()
{
int driver, mode;
driver=DETECT;
//mode=0;
initgraph(&driver, &mode, "c:\\borlandc\\bgi\\");
 
char *f;
cin>>f;
//cout<<calcul(f,0);
 
/*for(int x=0;x<10;x++)
{
char t[155];
strcpy(t,f);
for(int n=0;n<strlen(f);n++) //
{                            //Zameniaem vse x na 1
if(f[n]=='x') {f[n]=char(x+48); t[n]=char(x+48);} //
}
line(x,(int)calcul(f,0)*110+250,x+1,(int)calcul(t,0)*110+250);
}   */
//cout<<calcul(1,f,0,0,-1);
for(int x=0;x<getmaxx();x++)
{
//cout<<x<<" ";
//char temp[155],temp2[155];
  if(a==0) {temp=(char*)malloc((strlen(f)+1)*sizeof(char));
   temp2=(char*)malloc((strlen(f)+1)*sizeof(char)); a=1;}
int m=sizenum(x);
temp=(char*)realloc(temp,(strlen(f)+1+m)*sizeof(char));
temp2=(char*)realloc(temp2,(strlen(f)+1+m)*sizeof(char));
 
strcpy(temp,f);
strcpy(temp2,f);
//cout<<strlen(f);
//cout<<calcul(x,temp,0,0,-1);
line(x,-calcul(x,temp,0,0,-1)*30+250,x+1,-calcul(x+1,temp2,0,0,-1)*30+250);
z=calcul(x,temp,0,0,-1);
//cout<<calcul(x,temp,0,0,-1);
delay(80);
}
getch();
closegraph();
free(temp); free(temp2); free(f);
getch();
}



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

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



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

Цитата:
Вообщето символьно нужно... чтоб выражение получать... =((  

не.. такого у меня нет..  

Цитата:
НО! При выходе из main'a выдает ошибку,  

а точнее локализовать?
неужели падает на самом выходе, а не на free, getch и т д, что там в конце?
1) попробуй без динамического выделения памяти.. пользы от него там всё равно чуть.
2) вроде бы, когда BC3 пользовался, getch() иногда глюкал..  
ЗЫ извини, но обработку X ты делаешь через (_!_).  
не проще перед обработкой чисел проверить, не является ли подстрока именем переменной, если является - возвратить значение переменной.. ?

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



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

Цитата:
1) попробуй без динамического выделения памяти.. пользы от него там всё равно чуть.  

Там все на этом построено... т.е. место то потом все равно перевыделяем!!!
 
Да и еще,
 

Цитата:
неужели падает на самом выходе, а не на free, getch и т д, что там в конце?  

Именно в конце, при дебаге все пошагово смотрел, все переменные нормуль... все ок.... и именно при выходе вылетает ошибка =(((
 
 
 

Цитата:
Цитата:Вообщето символьно нужно... чтоб выражение получать... =((  
 
не.. такого у меня нет..  

Agrapher эта прога получает аналитическую производную из выражения =((( Но автроы конечно же не поделяться куском кода, т.к. проект комерческий =((

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

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



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

Цитата:
Там все на этом построено

толи меня глючит, толи там просто создаются временные строки для вставки цифры на место Х..
 
сделай обработку Х как я выше писал..
 

Цитата:
Именно в конце, при дебаге все пошагово смотрел,

убери временно все вычисления/преобразования..
откомпили..
убери графику..
откомпили..
и т д.
 

Цитата:
 

Цитата:
s=(char*)realloc(s,sizeof(char)*(strlen(s)+m));  

//скипано
s=s[c-1];

 
а вот в этом ты уверен??
указатель на чар к чару не приведётся имхо..

Всего записей: 226 | Зарегистр. 29-01-2003 | Отправлено: 22:45 04-12-2003
Rvnikita



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

Цитата:
Цитата:  

Цитата:
s=(char*)realloc(s,sizeof(char)*(strlen(s)+m));  
 
//скипано  
s=s[c-1];
 
 
а вот в этом ты уверен??  
указатель на чар к чару не приведётся имхо..  

А в чем проблемса??? Так перевыделяется память...
 

Цитата:
толи меня глючит, толи там просто создаются временные строки для вставки цифры на место Х..  
 
сделай обработку Х как я выше писал..  

Понимаешь, когда ты создаешь строку, вместо Х ставляешь числа, причем числа не обязаетльно однозначные, т.е. если ты в строку вместо Х запихнешь трехзначные числа, то места тебе сто пудово не хватит... Вот для этого так все я и сделал....
Если ты знаешь как тоже самое реализовать получше... Напиши плиз кодом...
 
 

Цитата:
убери временно все вычисления/преобразования..  
откомпили..  
убери графику..  
откомпили..  
и т д.  

Блин так и делаю, нифига не выходит =(((

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

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



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

Цитата:
А в чем проблемса??? Так перевыделяется память...  

в том, что когда я попробовал прикола ради компильнуть это - компилер ругнулся.
говорит, не приводятся.
компилер правда - tc, т е он древний..
но лучше всё же так не извращаться.
 

Цитата:
если ты в строку вместо Х запихнешь трехзначные числа, то места тебе сто пудово не хватит...  

угу.. поэтому стопудово не надо их туда пихать.
 

Цитата:
Напиши плиз кодом...  


Код:
 
float calcul(char *s, float x, int &err, int a=0, int z=-1)  
{  
//skip
 
//возвращаем значение x
if(s[a]=='x' && a==z)return x;
//обработка операторов  
//skip
 

any Qs?
PS кстати, символьное дифф. можно сделать.. половина решения - разбор строки на блоки, как у меня.. рекурсивно формируем производную для этих блоков..
надо как-нить замутить это будет..
но всё это потом, так что поиметь семестровую работу на халяву тебе не судьба

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



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
evilman
Юлин понимаешь, полюбому придется пхать 3 значные числа вместо Х, ведь у нас пикселы экрана от 1 до 800... и каждую точку просчитываем...
Вот в этом и проблемса!

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

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



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

Цитата:
полюбому придется пхать 3 значные числа вместо Х

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

Цитата:
ведь у нас пикселы экрана от 1 до 800

да? у меня напр, 1024x768.. и нумерация идёт с 0 8)

Всего записей: 226 | Зарегистр. 29-01-2003 | Отправлено: 14:39 06-12-2003
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2

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


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

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

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru