Доброго времени суток. Вот выношу себе мозг не первый день... А сдача - горит. > > Разработать схему алгоритма, составить Pascal программу: "Вычисления таблицы значений функции ax^2+bx+cos(П*a/b). При заданных значениях аргумента x, xn, xk, dx и параметра а = М-значений a. Параметр b принимает значение, численно равное корню нелинейного уравнения x^2-1,3ln(x+0,5)-2,8x+1,15. Интервал изоляции 0-10. > > Обозначение: > > xn, xk - начальное и конечное значение аргумента x; > > dx - шаг изменения параметра x; > > N - число значений параметра x, изменяемого от значения xn, с шагом dx; > > M - число значений параметра a. > > ^ - степень. Прошу подсказать, хотя бы, как записать а = М-значений a с функцией и как найти корни x^2-1,3ln(x+0,5)-2,8x+1,15. Интервал изоляции 0-10. Буду очень благодарен.
Renn
21.12.2007 8:20
Вот программа, которую сумел состряпать посмотрите пожалуйста и подскажите, что не верно.
program rgr; uses crt; type massive=array[1..100] of real; var e:real; b, b2:real; n:integer; i:integer; j:integer; x:real; xn:real; dx:real; er0,ers:integer; pr1,pr2:real; mx:massive;
function f(g:real):real; begin f:=sqr(g)-1.3*ln(g+0.5)-2.8*g+1.15; end; function trap(pr1,pr2:real;n:integer):real; var s:real; h:real; m:integer; begin h:=(pr2-pr1)/(n-1); s:=(f(pr1)+f(pr2))/2; for m:=1 to n-2 do s:=s+f(pr1+m*h); trap:=s*h; end; function y(x,a,b:real):real; begin y:=a*sqr(x)+b*x+cos(pi*(a/b)); end;
begin clrscr; write('Vvedite predeli integrirovaniya funkcii: '); readln(pr1,pr2); if pr1>pr2 then begin repeat writeln('Nepravilniy vvod'); write('Povtorite vvod predelov funkcii'); readln(pr1,pr2); until pr1<=pr2 end; write('Ukaghite tochnost opredeleniya integrala funcii: '); readln(e); if e=0 then begin repeat writeln('Tochnost integrala zadana ne verno'); write('Povtorite vvod:'); readln(e); until e<>0 end; write('Ukaghite kolichestvo funkcii trebuemih dlya vichisleniya: '); readln(j); if j=0 then begin repeat writeln('Oshibka. Vvedite nenulevoe znachenie'); readln(j); until j<>0 end; write('Vvedite nachalnoe znachenie funcii: '); readln(xn); if xn=0 then begin repeat writeln('Ne nadoelo vvoditnulevie nedopustimie znacheniya?? Povtorite Vvod!'); readln(xn); until xn<>0 end; write('Shag znachenii funkcii: '); readln(dx); begin n:=3; b:=trap(pr1,pr2,n); repeat b2:=b; n:=n+2; b:=trap(pr1,pr2,n); until (abs(b-b2)<E); begin x:=xn; i:=0; repeat mx[i]:=y(x,b);<---- В этой строке выдаёт ошибку. Просит поставить запятую после b. writeln(' x=',x:8:3,' y=',mx[i]:8:3); i:=i+1; x:=x+dx; until i=j; end; end; repeat until keypressed; end.
Буду очень благодарен. =)
klem4
21.12.2007 13:24
эм ... ну смотри:
Цитата
function y(x,a,b:real):real; begin y:=a*sqr(x)+b*x+cos(pi*(a/b)); end;
// ....
mx[i]:=y(x,b);
Renn
21.12.2007 15:16
Ошибок, как я понимаю там немеренная куча, как понимаю... Спасибо, за помощь отыскание одной из них, ищу дальше... Поправил осталась совсем чуть чуть ну, плз.
function f(x1:real):real; begin f:=sqr(x1)-1.3*ln(x1+0.5)-2.8*x1+1.15; end; function trap(pr1,pr2:real;n:integer):real; var s:real; h:real; q:integer; begin h:=(pr2-pr1)/(n-1); s:=(f(pr1)+f(pr2))/2; for q:=1 to n-2 do s:=s+f(pr1+q*h); trap:=s*h; end; function y(x,a,b:real):real; begin y:=a*sqr(x)+b*x+cos(pi*(a/b)); end; begin clrscr; write('Vvedite predeli integrirovaniya funkcii: '); readln(pr1,pr2); if pr1>pr2 then begin repeat writeln('Nepravilniy vvod: '); write('Povtorite vvod predelov funkcii: '); readln(pr1,pr2); until pr1<=pr2 end; write('Ukaghite kolichestvo funkcii trebuemih dlya vichisleniya: '); readln(j); if j=0 then begin repeat writeln('Oshibka. Vvedite nenulevoe znachenie: '); readln(j); until j<>0 end; write('Vvedite nachalnoe znachenie funcii: '); readln(xn); if xn=0 then begin repeat writeln('Ne nadoelo vvoditnulevie nedopustimie znacheniya?? Povtorite Vvod!'); readln(xn); until xn<>0 end; write('Shag znachenii funkcii: '); readln(dx); begin n:=3; b:=trap(pr1,pr2,n); repeat begin x:=xn; i:=0; repeat mx[i]:=y(x, a, b); writeln(' x=',x:8:3,' y=',mx[i]:8:3); i:=i+1; x:=x+dx; until n=j; end; end; <------- Здесь ошибка. Error in statsment. repeat until keypressed; end.
Помогите плз... ну очень очень срочно.
andriano
22.12.2007 2:42
Цитата(Renn @ 21.12.2007 11:16)
repeat begin x:=xn; i:=0; repeat mx[i]:=y(x, a, b); writeln(' x=',x:8:3,' y=',mx[i]:8:3); i:=i+1; x:=x+dx; until n=j; end; end; <------- Здесь ошибка. Error in statsment.
Все правильно: где until к repeat в первой строке отцитированного фрагмента?
PS. Чтобы самому без посторонней помощи искать подобные ошибки, нужно всего-навсего отформатировать текст. Зачем просить делать других то, что вполне можешь сделать сам?
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.