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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.03.2009, 23:48   #21
Grigory
 
Регистрация: 14.03.2009
Сообщений: 4
По умолчанию

спасибо вам
Grigory вне форума Ответить с цитированием
Старый 14.03.2009, 23:48   #22
Grigory
 
Регистрация: 14.03.2009
Сообщений: 4
По умолчанию

лучше б че нить дельное написали
Grigory вне форума Ответить с цитированием
Старый 18.03.2009, 19:42   #23
Павел Я
Пользователь
 
Регистрация: 10.03.2009
Сообщений: 13
По умолчанию

Не знаю даже с чего начать написание программы для этой задачи. Напишите какие-нибудь подсказки. Спасибо!
Написать программу, в которой с помощью метода деления отрезка пополам найти и вывести действительное значение корня на отрезке [a,b] с точностью 0.005. Значение a и b вычисляются перед выполнением программы, причем длина интервала [a,b] не должна быть больше 1. В процессе выполнения программы ввести значения a и b с клавиатуры и предусмотреть вывод промежуточных результатов вычисления корня. f(x) = 2.2x3-7x+2.2
Павел Я вне форума Ответить с цитированием
Старый 18.03.2009, 19:46   #24
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Начни с того, что почитай в интернете что-нибудь про этот метод. Он еще называется бисекция, дихотомия. Почитай математический аспект этой задачи, алгоритм. Там и готовый код на Паскале найдешь. Хватит наверное все спрашивать, пора и самому учиться.
puporev вне форума Ответить с цитированием
Старый 18.03.2009, 20:00   #25
Павел Я
Пользователь
 
Регистрация: 10.03.2009
Сообщений: 13
По умолчанию

Если я буду искать и разбираться с этими темами не здесь, то потеряю кучу времени, но уверяю вас что знаний у меня от этого по программированию не прибавиться. Намекните хоть как начать. С уважением Павел.
Павел Я вне форума Ответить с цитированием
Старый 18.03.2009, 20:05   #26
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Если я буду искать и разбираться с этими темами не здесь, то потеряю кучу времени
Я правильно понимаю, что вы хотите, чтобы это время за вас тратили другие, подбирая необходимый материал? Сдается мне, что да.
Цитата:
Намекните хоть как начать
Как и сказал ув. puporev, почитайте про сам метод. Это и будет началом.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 18.03.2009, 20:11   #27
Павел Я
Пользователь
 
Регистрация: 10.03.2009
Сообщений: 13
По умолчанию

хорошо, я попробую
Павел Я вне форума Ответить с цитированием
Старый 18.03.2009, 20:27   #28
Gonzo
Форумчанин
 
Аватар для Gonzo
 
Регистрация: 07.03.2009
Сообщений: 123
По умолчанию

Вот тебе, писал недавно - разбирайся. Она еще рисует график. Так, что кинь в папку, из которой будешь запускать, файлы Graph.tpu и EGAVGA.bgi.
Функцию свою напишешь. Ну и подправишь как тебе нужно.
Код:
program bisekcia;
uses crt,graph;{podkluchaen moduli}
var a_,b_,eps_,x_:real;
    it_,k_,gd,gm:integer;
    vybor:char; {obiavliaem peremennye}

Function func (arg:real):real;{procedura-funkcia vychisliaiuschaia znachenia funkcii F(x)}
begin
 func:=arg*sqr(arg)-3*arg-2*exp(-arg);{Zdes mozhno zadat liubuiu funkciu}
end;

Function sign(zn:real):integer;
begin
if zn=0 then
 begin
  sign:=0
 end
 else
  if zn>0 then sign:=1 else sign:=-1;
end;

PROCEDURE BISECT (A,B,EPS :REAL; IT:INTEGER;{procedura nahozhdenia korhney}
		VAR X : REAL; VAR K:INTEGER);{a-verniaia granica intervala,}
                                             {b-nizhnaia granica intervala,}
                                             {eps-tochnost}
{it-maksimalnoe kol-vo iteracii,chtoby programma ne zaciklilas,esli interval}
{zadan ne pravilno}
VAR A1, B1: REAL; X1, X2, X3 : INTEGER;{opisanie algoritma v listinge}
BEGIN
	K := 0;
	X1 := SIGN (FUNC(A));
	X2 := SIGN (FUNC(B));
	A1 := A;
	B1 := B;
	REPEAT
 		INC (K);
		X := (A1+B1)*0.5;
		X3 := SIGN (FUNC (X));
		IF X3=0 THEN EXIT;
		IF ABS(B1-A1)<(2*EPS) THEN EXIT;
		IF (X1=X2) AND (X2=X3) THEN EXIT;
		IF X1=X3 THEN
			BEGIN
				A1 := X;
				X1 := X3;
			END
		ELSE
			BEGIN B1 := X;
				X2 := X3;
			END;
	UNTIL K>IT;
END;

{procedura risovaniia grafika funkcii}
procedure drawgrafik(a,b:real); { a,b - nachalnoe i konechnoe znachenie x }
var x,dx,max,min,koef,h,g:real;
k,x0,y0:integer; { x0,y0 - polozhenie osey koordinat }
begin
h:=a;
g:=b;
clearviewport;
dx:=(b-a)/639; { opredelily shag izmenenia x
(640 tochek na grafike,intervalov 639) }
x:=a; max:=func(a); min:=func(a);
for k:=1 to 640 do { opredeliaem oblast znacheniy f(x) }
 begin
if func(x)>max then max:=func(x);
if func(x)<min then min:=func(x);
x:=x+dx;
end;
koef:=479/(max-min); { koefficient po osi y }
x:=a;{ nachalnoe znachenie x }
moveto(0,round(479-koef*(func(a)-min)));{ nachalnoe znachenie ukazatelia }
for k:=1 to 639 do { stroim grafik }
begin
x:=x+dx;
setbkcolor(black);
setcolor(green);
lineto(k,round(479-koef*(func(x)-min)));
end;
x0:=round(639*a/(a-b)); { a/(a-b)=(0-a)/(b-a) }
line(x0,0,x0,479); { os y }
y0:=round(479-479*(min/(min-max)));
line(0,y0,639,y0); { os x }
PutPixel(x0,y0,red);
setcolor(white);

OutTextXY(x0+3,y0+4,'0');{podpis nachala koordinat}
OutTextXY(x0-10,6,'y'); {podpisi po osiam}
OutTextXY(615,y0+3,'x');
end;

{osnovnaia programma}
begin
clrscr;
writeln('_____________________________________________');
writeln('***Programma nahozhdenia kornei uravneniia***');
writeln('F(x)=x*sqr(x)-3*x-2*exp(-x) metodom bisekcii.');
writeln('---------------------------------------------');
write('Zadaite nizhniuu granicu: ');
readln(a_);
write('Zadaite verhniuu granicu: ');
readln(b_);
write('Zadaite maksimalnoe kolichestvo iteracii: ');
readln(it_);
writeln;
write('Hotite zadat druguiuu tochnost (po umolchaniuu 0,001)? [y/n] ');
readln(vybor);
if (vybor='y') or (vybor='Y') then
 begin
  write('-> ');
  readln(eps_);
 end
 else eps_:=0.001;
bisect(a_,b_,eps_,it_,x_,k_);
clrscr;
writeln('Otrezok [',a_:6:2,' ..',b_:6:2,']');
writeln('Tochnost ',eps_:8:5);
writeln;
writeln('Koren:',x_:8:5);
writeln('Kolichestvo iteracii:',k_:3);
writeln('Znachenie funkcii v etoi tochke:',func(x_):12:5);
writeln;
write('Pokazat graficheski? [y/n] ');
readln(vybor);
if (vybor='y') or (vybor='Y') then
 begin
  clrscr;
  writeln('Rekomenduemyi interval: ',(x_-2.5):8:5,'..',(x_+1):8:5);
  write('Zadat drugoi interval? [y/n] ');
  readln(vybor);
  if (vybor='y') or (vybor='Y') then
   begin
    writeln;
    write('Zadaite nizhniuu granicu: ');
    readln(a_);
    write('Zadaite verhniuu granicu: ');
    readln(b_);
   end
   else
    begin
     a_:=x_-2.5;
     b_:=x_+1;
    end;
  gd:=detect; {inicializiruem graficheskii rezhim}
  initgraph(gd, gm, '');
  if graphresult <> grok then
   begin
    writeln('Oshibka pri zapuske graficheskogo rezhima!');{vyvodim soobschenie pri oshibke}
    readln;
    halt;
   end
   else
    begin
     DrawGrafik(a_,b_);{risuem grafik}
     readln;
     closegraph;{zakryvaem graficheskii rezhim}
    end;
 end
 else halt;{esli grafik ne nuzhen vyhodim iz programmy}
end.
Не говорите что мне делать, и я не скажу куда Вам идти.
Пишу программы на заказ на Delphi и Pascal
Форум разработчиков Pascal и Delphi
Gonzo вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задачи по Паскалю! profi Помощь студентам 39 15.10.2009 09:29
Задачи по Паскалю koshkarjov Помощь студентам 2 02.02.2009 18:06
Задачи по паскалю. Lavron Паскаль, Turbo Pascal, PascalABC.NET 20 05.01.2009 15:34
Задачи по паскалю Agent[PNZ] Помощь студентам 10 22.11.2007 21:45
Задачи по Паскалю MissLove Помощь студентам 15 24.07.2007 11:20