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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.12.2009, 00:26   #11
MR_Andrew
Форумчанин
 
Регистрация: 05.10.2009
Сообщений: 100
По умолчанию

еще немного поправил. Проверил каждый метод отдельно. Завал...
Новый код:
Код:
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int main()
{
int  n, k, a=0, b=0.85, eps=0.00005;
float  x, d, u, q, w, x0, x1, x2;

printf ("Programa dl9 znahodzhenn9 koren9 rivn9nn9 4-ma metodami\n");
printf ("Metod 1: metod polovinnogo dilenn9\n");
printf ("Metod 2: metod hord\n");
printf ("Metod 3: metod doti4nih (metod Newton'a\n");
printf ("Metod 4: metod poslidovnih nablizhen'\n");

for (;;)

//---------------------------------------------------------------------------
	       void f1()
	       {
		 q=a;
                 w=b;
		 k=0;
                 do
               {
                 x=(q+w)/2;
		 u=x-(1/(3+sin(3.6*x)));
		 if(x-(1/(3+sin(3.6*x)))*u<0)
                 w=x;
                 else  q=x;
		 k=k+1;
                 d=fabs(w-q);
               }
		while(d>eps);
		printf("korin'=%f\n",x);
		printf("k=%i",k);
	       }

//---------------------------------------------------------------------------

	       void f2()
	       {
   		x0=a;
  		x1=b;
  		k=0;
  		do
   	       {
x2=x1-(x1-(1/(3+sin(3.6*x1))))*(x1-x0)/(x1-(1/(3+sin(3.6*x1))))-(x0-(1/(3+sin(3.6*x0))));
                d=fabs(x0-x1);
                if(d>eps)
               {
                x0=x1;
                x1=x2;
               }
                k=k+1;
               }
                while(d>eps);
                printf("korin'=%f\n",x2);
                printf("k=%i",k);
	       }

//---------------------------------------------------------------------------

	  void f3()
	 {
	  k=0;
	  x1=(a+b)/2;
	  do
	 {
	  k=k+1;
	 x2=x1-(x1-(1/(3+sin(3.6*x1))))/(1+(cos(3.6*x1)))/((3+sin(3.6*x1)*(3+sin(3.6*x1))));
	  d=fabs(x2-x1);
	  if(d>eps)
	  x1=x2;
	 }
	  while(d>eps);
	  printf("korin'=%f\n",x2);
	  printf("k=%i",k);
	 }

//---------------------------------------------------------------------------

	       void f4()
              {
               k=0;
               x0=(a+b)/2;
               do
              {
               x1=x0-(1/(3+sin(3.6*x0)));
               k=k+1;
               d=fabs(x1-x0);
               x0=x1;
              }
               while(d>eps);
               printf("korin'=%f\n",x1);
               printf("k=%i\n",k);

//---------------------------------------------------------------------------

     printf ("Viberite metod\n");
     {
     scanf ("%d", &n);
     switch(n);
     {
     case 1: f1();
     break;
     case 2: f2();
     break;
     case 3: f3();
     break;
     case 4: f4();
     break;
     case 0: break;


     }
     }
     }
getchar();
return 0;
}
Правильно работает только метод 3. 1 и 2 не правильно считают, 4 вообще такое выдает....
Еще раз описание:
1. методом половинного деления;
2. методом хорд;
3. методом касательных (методом Ньютона);
4. методом последовательных приближений.

Очень прошу помочь... А то просто завал, пол дня просидел. У кого будкт немного свободного времени - подправьте... Пожалуйста!!!
MR_Andrew вне форума Ответить с цитированием
Старый 06.12.2009, 15:39   #12
MR_Andrew
Форумчанин
 
Регистрация: 05.10.2009
Сообщений: 100
По умолчанию

Ну неужели никто помочь не хочет/не может??? Я ж не прошу сделать за меня, ошибку б найти...
MR_Andrew вне форума Ответить с цитированием
Старый 06.12.2009, 16:31   #13
Sweta
Форумчанин
 
Регистрация: 22.11.2007
Сообщений: 664
По умолчанию

Формулу для метода 4 написать можете?
Неприятности приходят и уходят, а жизнь продолжается!
Sweta вне форума Ответить с цитированием
Старый 06.12.2009, 16:56   #14
MR_Andrew
Форумчанин
 
Регистрация: 05.10.2009
Сообщений: 100
По умолчанию

Цитата:
Сообщение от Sweta Посмотреть сообщение
Формулу для метода 4 написать можете?
К сожалению, нет. Я брал готовое, только уравнение свое подставил. И ничего не вышло.

Да оно в первом методе придирается, что-то не так. Хотя в самом методе тоже что-то не то.

Вот то, откуда брал:
Код:
#include<stdio.h>
#include<math.h>
int main()
{
  float const a=1.2,b=2,EPS=0.0001;
  float x0,x1,d;
  int n;
  n=0;
  x0=(a+b)/2;
  do
    {
      x1=x0-2+sin(1/x0);
      n=n+1;
     d=fabs(x1-x0);
     x0=x1;
    }
 while(DELTA>EPS);
 printf("korin=%f\n",x1);
 printf("n=%i\n",n);
 getchar();
 return 0;
}
Что такое "дельта" я так и не понял, а уравнение свое подставил.
MR_Andrew вне форума Ответить с цитированием
Старый 06.12.2009, 17:20   #15
Sweta
Форумчанин
 
Регистрация: 22.11.2007
Сообщений: 664
По умолчанию

Какая у Вас функция?
Неприятности приходят и уходят, а жизнь продолжается!
Sweta вне форума Ответить с цитированием
Старый 06.12.2009, 17:32   #16
MR_Andrew
Форумчанин
 
Регистрация: 05.10.2009
Сообщений: 100
По умолчанию

Цитата:
Сообщение от Sweta Посмотреть сообщение
Какая у Вас функция?
x-(1/(3+sin(3.6*x)))=0
MR_Andrew вне форума Ответить с цитированием
Старый 07.12.2009, 14:31   #17
Sweta
Форумчанин
 
Регистрация: 22.11.2007
Сообщений: 664
По умолчанию

Вот работающие методы.
Код:
#include <stdio.h>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <conio.h>


int main()
{
int  n, k, a=0;
float  x, d, u, q, w, x0, x1, x2, u1, u2, b=0.85, eps=0.00005;
char pr='Y';


printf ("Programa dl9 znahodzhenn9 koren9 rivn9nn9 4-ma metodami\n");
printf ("Metod 1: metod polovinnogo dilenn9\n");
printf ("Metod 2: metod hord\n");
printf ("Metod 3: metod doti4nih (metod Newton'a\n");
printf ("Metod 4: metod poslidovnih nablizhen'\n");
while (pr!='N')
{printf ("Viberite metod\n");
   scanf ("%d", &n);
     switch(n)
     {
     case 1: x1=a;
             x2=b;
             {
              k=0;
              do
                {
                u1=x1-(1/(3+sin(3.6*x1))); //Вычисляем значение ф-ции для х1
                x=(x1+x2)/2;		        //Делим новый отрезок на 2
                u2=x-(1/(3+sin(3.6*x))); //Вычисляем значение ф-ции для нового значения х
                if(u2*u1<0)		//Если значение ф-ций имеют разные знаки, то корень х1 и х
                x2=x;			//Задаем новую координату  х2 отрезка
                else //Если значение ф-ций имеют одинаковые знаки знаки, то корень между х и х2
                x1=x; 		//Задаем новую координату  х1 отрезка
                k=k+1;
                d=fabs(x1-x2);
                }
                while(d>eps);
                printf("korin'=%f\n",x);
                printf("k=%i\n",k);
                }
                break;
     case 2: x0=a;
  		x1=b;
  		k=0;
  		do
   	       {
x2=x1-(x1-(1/(3+sin(3.6*x1))))*(x1-x0)/((x1-(1/(3+sin(3.6*x1))))-(x0-(1/(3+sin(3.6*x0)))));
                d=fabs(x0-x1);
                if(d>eps)
               {
                x0=x1;
                x1=x2;
               }
                k=k+1;
               }
                while(d>eps);
                printf("korin'=%f\n",x2);
                printf("k=%i\n",k);
     break;
     case 3: k=0;
	  x1=(a+b)/2;
	  do
	 {
	  k=k+1;
	 x2=x1-(x1-(1/(3+sin(3.6*x1))))/(1+(cos(3.6*x1)))/((3+sin(3.6*x1)*(3+sin(3.6*x1))));
	  d=fabs(x2-x1);
	  if(d>eps)
	  x1=x2;
	 }
	  while(d>eps);
	  printf("korin'=%f\n",x2);
	  printf("k=%i\n",k);
     break;
     case 4:  k=0;
               x0=(a+b)/2;
               do
              {

               x1=x0-(x0-1/(3+sin(3.6*x0)));
               k=k+1;
               d=fabs(x1-x0);
               x0=x1;
              }
               while(d>eps);
               printf("korin'=%f\n",x1);
               printf("k=%i\n",k);
     break;
     default: break;
     }
scanf("%c",&pr);
printf("IF END PRESS N ELSE ANY KEY\n");
scanf("%c",&pr);
}
return 0;
}
Неприятности приходят и уходят, а жизнь продолжается!

Последний раз редактировалось Sweta; 07.12.2009 в 16:52.
Sweta вне форума Ответить с цитированием
Старый 07.12.2009, 19:22   #18
MR_Andrew
Форумчанин
 
Регистрация: 05.10.2009
Сообщений: 100
По умолчанию

Sweta
Огромнейшее Вам спасибо!!! Вы меня спасли!!! Все просто отлично, буду заканчивать и сдавать
УРА!!! Вот это подарок мне на день рождения!!! Спасибо!!!
MR_Andrew вне форума Ответить с цитированием
Старый 07.12.2009, 20:19   #19
MR_Andrew
Форумчанин
 
Регистрация: 05.10.2009
Сообщений: 100
По умолчанию

Еще интересует:
Цитата:
Функция fabs возвращает абсолютное значение своего аргумен-
та с плавающей точкой.
А в программе как это указать? Возвращение начального значения х?
MR_Andrew вне форума Ответить с цитированием
Старый 07.12.2009, 23:32   #20
Sweta
Форумчанин
 
Регистрация: 22.11.2007
Сообщений: 664
По умолчанию

Вычисление абсолютного значения погрешности вещественного числа.
Неприятности приходят и уходят, а жизнь продолжается!
Sweta вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание MediaPlayer методами DirectShow AlexFAst Мультимедиа в Delphi 1 29.09.2009 01:16
Работа со строками и методами в Java PavelZet Помощь студентам 1 02.06.2009 05:36
Пишу *.dll помогите с методами mdbm Общие вопросы Delphi 11 28.05.2008 14:19
Автоматизация обработки изображений и их оцифровки методами делфи helpme32 Мультимедиа в Delphi 1 14.12.2007 13:03