Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Задача на табл. знач. функций... оч. срочно. плз =(

Автор: Renn 21.12.2007 4:25

Доброго времени суток. Вот выношу себе мозг не первый день... А сдача - горит.
> > Разработать схему алгоритма, составить 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

Ошибок, как я понимаю там немеренная куча, как понимаю...
Спасибо, за помощь отыскание одной из них, ищу дальше...
Поправил осталась совсем чуть чуть ну, плз.

program rgr;
uses crt;
type massive=array[1..100] of real;
var
e:real;
a:real; { ’®з­®бвм ўлзЁб«Ґ­Ёп Ё­вҐЈа «  }
b:real; { ЏаҐ¤л¤г饥 Ё ⥪г饥 ЇаЁЎ«Ё¦Ґ­­лҐ §­ зҐ­Ёп Ё­вҐЈа «  }
n:integer; { ‘зҐвзЁЄ ЇаЁ ўлзЁб«Ґ­ЁЁ Ё­вҐЈа «  }
i:integer; { Љ®«ЁзҐбвў® ўлзЁб«пҐ¬ле §­ зҐ­Ё© дг­ЄжЁЁ }
j:integer; { ‘зҐвзЁЄ ЇаЁ ўлзЁб«Ґ­ЁЁ дг­ЄжЁЁ }
x:real; { ЂаЈг¬Ґ­в Ё §­ зҐ­ЁҐ дг­ЄжЁЁ }
xn:real; { Ќ з «м­®Ґ §­ зҐ­ЁҐ дг­ЄжЁЁ }
dx:real; { ? Ј ўлзЁб«Ґ­Ёп дг­ЄжЁЁ }
er0,ers:integer; { “б«®ўЁҐ ўлў®¤  б®®ЎйҐ­Ёп ®Ў ®иЁЎЄҐ }
pr1,pr2:real; { ЏаҐ¤Ґ«л Ё­вҐЈаЁа®ў ­Ёп }
mx:massive; { ‡ ¤ Ґ¬ ¬ ббЁўл }

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. Чтобы самому без посторонней помощи искать подобные ошибки, нужно всего-навсего отформатировать текст.
Зачем просить делать других то, что вполне можешь сделать сам?