Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.11.2010, 00:09   #1
SmallUser
 
Регистрация: 10.06.2010
Сообщений: 8
Смущение Программа численного решения алгебраических уравнений, заданных в виде полинома.

Большое спасибо всем, кто откликнулся!)
Недавно я столкнулся с такой задачей: надо написать прогу для решения
уравнений и уточнения корней несколькими методами. Но поскольку в смысл слова "полином" я врубился не сразу, то прогу писал под уравнения с множеством переменных. Получилось как всегда - куча лишних строк и туча логических ошибок. + отсутствие комментов(( (Пжл, не ругайте бранным словом)) В общем, не работает функция вычисления значения уравнения. Помогите пожалуйста найти и устранить ошибки в этой функции, чтоб комп хотя б выдавал что-нибудь. Компилятор: Turbo C++ 3.0 Прога, и исходник лежат в архиве.

Вот код:

Код:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
//********************************************************
const MB_NONE=0,MB_LEFT=1,MB_RIGHT=2,MB_LAR=3,MB_MIDDLE=4;
struct tPoint{ int x; int y; };
struct tMouseState{ tPoint loc; int buf; };
struct per{ char n; int zn; };
enum {cher, t_sin, t_zel, birjuz, t_kras, fiol, zhel, t_bel, ser, sin, s_zel, gol, kras, s_fiol, s_zhel, bel };
int alph=4,digit=5,sum=6,mult=7,rav=8;

//********************************************************
int sch_poly(int matrix[],int k[],char ch[],per pr) // Ф-я подсчета полинома
{int j=0,buf=0,p=0,g=0,m=0,s=0;                      
 int rez=0,a,n=0;
 char bf;
 while(matrix[buf]!=rav)    // В матрице полином в закодированном виде.
   {while(matrix[j]!=sum)
     j++;                         //scitaem kol-vo bukv
     n=j-buf;
    int *slag=new int[n];
    for(int lk=0;lk<j;lk++)
     slag[lk]=0;
    s=buf;                      //'s' -prisvaevaem znachen. nachala slagaemogo
    while(s<j)
     {slag[g]=matrix[s];    //Здесь ошибка - но о ней потом.) 
      s++;
      g++;
     }
    n=1;   g=0;
    while(g<(j-buf))                   //проверка содержимого slag[] 
     {  if(slag[g]==digit&&j==1)    //вычисление значения slag и   
	 {rez+=k[m];              //суммирование в rez.
	  m++;
	  g++;
	 }
	if(slag[g]==digit&&j>1)
	 {a=k[m];
	  m++;
	  g++;
	 }
	if(slag[g]==alph&&j>1)
	 {a=1;
	  g++;
	 }
	if(slag[g]==alph&&slag[g+1]==mult)
	 {bf=ch[p];
	  p++;
	  n*=a*pr.zn;
	  g++;
	 }
	if(slag[g]==mult)
	  g++;
     }
     buf=j;
     rez+=n;
     j++;
   }
return rez;           \\результат вычисления пол-ма.
}
//********************************************************
void znachn(int us, per pr, int sch)
{int i;
 if(us==0)
 {
   pr.zn=pr.zn*0.5;
 }
 else
 {
  pr.zn=pr.zn*2;
 }
}
//********************************************************void main()
{  char buf,*b,*ch;
  per pr;
  FILE *f0,*f1,*f2;
  f0=fopen("matr.bin","wb+");
  f1=fopen("k.bin","wb+");
  f2=fopen("ch.bin","wb+");
  cout<<"Vvedite polinom: ";
  while(cin.peek()!='\n')
  { cin.get(buf);
  if(isalpha(buf))
   { fwrite(&buf,sizeof(buf),1,f2);
     fwrite(&alph,sizeof(int),1,f0);
   }
  if(isdigit(buf))
   { fwrite(&buf,sizeof(buf),1,f1);
     fwrite(&digit,sizeof(int),1,f0);
   }
  if(buf=='+')
    fwrite(&sum,sizeof(int),1,f0);
  if(buf=='*')
    fwrite(&mult,sizeof(int),1,f0);
  if(buf=='=')
    fwrite(&rav,sizeof(int),1,f0);
   }
  fseek(f0,0,SEEK_SET);
  fseek(f1,0,SEEK_SET);
  fseek(f2,0,SEEK_SET);
  while(!feof(f0))
  { fread(&b,sizeof(int),1,f0);
    i++;
  };
  while(!feof(f1))
  { fread(&b,sizeof(int),1,f1);
    g++;
  };
  while(!feof(f2))
  { fread(&b,sizeof(char),1,f2);
    j++;
  };
  int *matrix=new int[i];
  int *k=new int[g];
  for(r=0;r<i;r++)
   matrix[r]=0;
  for(r=0;r<g;r++)
   k[r]=0;
   ch=0;
  fseek(f0,0,SEEK_SET);
  fseek(f1,0,SEEK_SET);
  fseek(f2,0,SEEK_SET);
  i=0; g=0; j=0;
  while(!feof(f0))
  { fread(&matrix[i],sizeof(int),1,f0);
    i++;
  };
  while(!feof(f1))
  { fread(&k[g],sizeof(int),1,f1);
    g++;
  };
  while(!feof(f2))
  { fread(&ch,sizeof(char),1,f2);
    j++;
  };
 for(y=0;y<i;y++)
 printf("%d",matrix[y]);
  getch();
  fclose(f0);
  fclose(f1);
  fclose(f2);
  pr.n=*ch;
   znachen(0,pr,sch);
   rz=sch_poly(matrix,k,ch,pr);
   if(rz>ch[j])
     while(rz>ch[j])
     {znachn(0,pr,sch);
      rz=sch_poly(matrix,k,ch,pr);
     }
   znachn(1,pr,sch);
    np=pr.zn;
   znachn(0,pr,sch);
   printf("\n Root here:\n");
   printf(" %d ",pr.zn);
   printf("\n to: \n");
   printf(" %d ",np);
   built_gr(np,matrix,k,ch,pr,g);
     }
}
Вложения
Тип файла: rar KW.rar (46.6 Кб, 6 просмотров)

Последний раз редактировалось SkyM@n; 15.11.2010 в 12:25.
SmallUser вне форума Ответить с цитированием
Старый 15.11.2010, 11:59   #2
Z1000000
Форумчанин
 
Регистрация: 04.05.2010
Сообщений: 495
По умолчанию

Цитата:
о поскольку в смысл слова "полином" я врубился не сразу, то прогу писал под уравнения с множеством переменных.
Имеет ли вообще смысл дорабатывать программу, если она делает не то что нужно. Полином и уравнение от нескольких переменных вещи принципиально разные.

Цитата:
и уточнения корней несколькими методами
ты напиши какими методами решал.
Нажми на весы, поставь +
Для благодарностей : WebMoney WMR R252732729948
Z1000000 вне форума Ответить с цитированием
Старый 15.11.2010, 20:51   #3
SmallUser
 
Регистрация: 10.06.2010
Сообщений: 8
По умолчанию

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


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
решение системы линейных алгебраических уравнений LediDashuta Помощь студентам 0 23.05.2010 18:40
Qu 1.0 - программа для решения квадратных уравнений DM_bite Софт 5 20.03.2010 22:37
Программа решения системы уравнений на мобильном телефоне _Dmitry Софт 21 28.01.2010 00:40
Программа для решения ситем нелинейных уравнений Appolinaria Помощь студентам 1 09.03.2009 18:53
помогите пожалуйста! нужна программа для решения уравнений. MatrixN2 Помощь студентам 1 06.03.2009 12:29