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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.02.2009, 01:07   #21
XeN0N
Форумчанин
 
Аватар для XeN0N
 
Регистрация: 18.01.2009
Сообщений: 118
По умолчанию

вот оно
XeN0N вне форума Ответить с цитированием
Старый 14.02.2009, 02:05   #22
BarT(48rus)
Пользователь
 
Регистрация: 01.02.2009
Сообщений: 28
По умолчанию

нет, спасибо канечно, но нето....ладно, что нибудь придумаем)
BarT(48rus) вне форума Ответить с цитированием
Старый 15.02.2009, 14:55   #23
XeN0N
Форумчанин
 
Аватар для XeN0N
 
Регистрация: 18.01.2009
Сообщений: 118
По умолчанию

табулирование функции для вычисление отрезков изоляции:

Общая идея в том, что если на концах отрезка функция имеет разные значения, значит в нем она проходит через 0 и там нужно искать корень
Код:
	for (i = a; i < b; i+=h) {
		n=d=0;
		if(f(i)==0&&i==a) out <<i<<endl; // если начало промежутка - решение, то вывести его
		if((f(i)>0&&f(i+h)<0) || (f(i)<0&&f(i+h)>0)) // если на концах промежутка функция имеет разные знаки, то найти в нем корень и вывести в файл
		{
			out <<solve(i,i+h,e,&n,&d);
			out <<" n="<<n<<" d="<<d<<endl;
		}
		if (i+h)
			if(f(i+h)==0) out <<i<<endl; // если узловая точка или конец промежутка - решение, то вывести его
	}
Это кусок программы, которая решает гибридным методом ньютона-половинных делений.
функция solve - найти корень на данном промежутке, n и d - переменные показывающие сколько было ньютоновских операций и сколько из них не попали в отрезок изоляции
a - начало промежутка
b - конец
h - шаг
f(x) - заданная функция
out <<n; - вывести в файл out переменную n

Последний раз редактировалось XeN0N; 15.02.2009 в 14:59.
XeN0N вне форума Ответить с цитированием
Старый 16.02.2009, 00:56   #24
BarT(48rus)
Пользователь
 
Регистрация: 01.02.2009
Сообщений: 28
По умолчанию

Друзья, не подскажете команду, которая обрывает цикл в паскале, а то чо то не найду никак))))заранее спасибо)))
BarT(48rus) вне форума Ответить с цитированием
Старый 16.02.2009, 01:13   #25
XeN0N
Форумчанин
 
Аватар для XeN0N
 
Регистрация: 18.01.2009
Сообщений: 118
По умолчанию

break .
XeN0N вне форума Ответить с цитированием
Старый 16.02.2009, 03:27   #26
BarT(48rus)
Пользователь
 
Регистрация: 01.02.2009
Сообщений: 28
По умолчанию

что то походу он и внутренний repeat и внешний вайл рвет)))что то не то))))может еще варианты есть?
BarT(48rus) вне форума Ответить с цитированием
Старый 16.02.2009, 03:37   #27
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от BarT(48rus)
что то походу он и внутренний repeat и внешний вайл рвет)))
break выходит только из внутреннего цикла (из которого он был вызван)
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 16.02.2009, 03:42   #28
BarT(48rus)
Пользователь
 
Регистрация: 01.02.2009
Сообщений: 28
По умолчанию

хм))))ну может тогда глянете код???может что то не правильно???
Код:
writeln('xmax=',xmax);
  while (xmin<=xmax) do
  begin
   n:=0;
    repeat
     xc:=xmin;
     xn:=8*sin(xc)/p[i];
     dx:=abs(xn-xc);
     n:=n+1;
     if (n>10000) then break
    until dx<e;
  xmin:=xmin+1;
  end;
 writeln ('xn=', xn:12:5);
 writeln('dx=', dx:12:7);
 writeln('N=', n);
 writeln('p[',i,']=', p[i]);
 end;
end.
а выходит он когда первое только более 10000, а дальше не хочет сравнивать(
BarT(48rus) вне форума Ответить с цитированием
Старый 16.02.2009, 03:58   #29
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Сложно искать ошибки, когда код нельзя скомпилировать. Где остальная часть? И что она должна делать? (приведенное задание в первом посте врядли подойдет, т.к. не в курсе что такое интервал изоляции). А также: что не работает?

То, что break выходит только из внутреннего цикла может проиллюстрировать следующая программа:
Код:
uses crt;
var
a,b : integer;
begin
clrscr;
b:=0;
while b<3 do
 begin
 writeln('b= ',b);
 a:=0;
 repeat
 inc(a);
 if a=2 then break;
 until a=3;
 inc(b);
 end;
readln;
end.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 16.02.2009, 04:07   #30
BarT(48rus)
Пользователь
 
Регистрация: 01.02.2009
Сообщений: 28
По умолчанию

хм, странно, ну тогда глянь всю прогу, она вот)
Код:
program laba2;
type
Massiv=array[1..4] of real;
var
p:massiv;
n, i:integer;
x0, e, xc, xn, dx, xmin, xmax:real;
begin
write ('e=');
readln (e);
for i:=1 to 4 do
 begin
  write('p[',i,']=');
  readln(p[i]);
  xmin:=-8/p[i];
  writeln('xmin=',xmin);
  xmax:=8/p[i];
  writeln('xmax=',xmax);
  while (xmin<=xmax) do
  begin
   n:=0;
    repeat
     xc:=xmin;
     xn:=8*sin(xc)/p[i];
     dx:=abs(xn-xc);
     n:=n+1;
     if (n>10000) then break
    until dx<e;
  xmin:=xmin+1;
  end;
 writeln ('xn=', xn:12:5);
 writeln('dx=', dx:12:7);
 writeln('N=', n);
 writeln('p[',i,']=', p[i]);
 end;
end.
она компилится, но рабит не так, как задумано, она должна выходить из внутреннего цикла при условии n>10000, а она похоже выходит из всей, ды не похоже, а точно)
BarT(48rus) вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вычисления корней квадратного уравнения Наталья111 Общие вопросы Delphi 4 25.12.2008 11:06
Помогите разработать программу для вычисления корней алгебраического уравнения вида f(x)=0 BIS88 Помощь студентам 2 16.11.2008 08:11
Численные методы в Дельфи UserOK Общие вопросы Delphi 3 26.06.2008 12:05
Численные метода на паскале Колян Помощь студентам 7 27.03.2008 20:08
Методы нахождения корней уравнения werser Помощь студентам 8 20.02.2008 22:41