Технический форум

Технический форум (http://www.tehnari.ru/index.php)
-   Помощь студентам (http://www.tehnari.ru/forumdisplay.php?f=41)
-   -   Помогите написать программу в турбо делфи (http://www.tehnari.ru/showthread.php?t=41031)

Gagarin614 17.10.2010 18:31

Помогите написать программу в турбо делфи
 
Вот что у меня получилось но чет ответ какой то нетакой.




При некоторых заданных x, N и E, определяемых вводом, вычислить:
a) сумму N слагаемых заданного вида;
b) сумму тех слагаемых, которые по абсолютной величине больше Е.
Для случая b выполнить суммирование для двух значений Е, отличающихся на
порядок, и при этом определить количество слагаемых, включенных в сумму.
Сравнить результаты с точным значением функции, для которой данная сумма
определяет приближенное значение при x, лежащем в интервале (-R, R).
1/sqrt(1-sqrX)=1+1/2*sqrX+1*3/2*4*sqrX-1*3*5/2*4*6*x^6+...(R=1)}

program project1;
{$APPTYPE CONSOLE}
//const n=3;
var
x,s,p,stx,e:real;
i,j,k,zn,n,ch:integer;
begin
writeln('wwedite x');
readln(x);
writeln('wwedite e');
readln(e);
writeln('wwedite n');
readln(n);
s:=1;
p:=1;
for i:=1 to n do
begin
p:=p*(2*i-1)*sqr(x)/(2*i);
s:=s+p;
end;
writeln('summa= ',s:9:5);
s:=1;
stx:=sqr(x);
k:=1;
ch:=1;
zn:=2;
i:=2;
while ch*stx/zn>e do
begin
s:=s+ch*stx/zn;
k:=k+1;
inc(i,2);
zn:=zn*i;
ch:=ch*(i-1);
stx:=stx*sqr(x);
end;
writeln('summa= ',s:9:5);
writeln('kol-vo slag= ',k);
e:=e/10;
s:=1;
stx:=sqr(x);
k:=1;
ch:=1;
zn:=2;
i:=2;
while ch*stx/zn>e do
begin
s:=s+ch*stx/zn;
k:=k+1;
inc(i,2);
zn:=zn*i;
ch:=ch*(i-1);
stx:=stx*sqr(x);
end;
writeln('summa= ',s:9:5);
writeln('kol-vo slag= ',k);
readln;
end.

Vladimir_S 17.10.2010 22:06

Цитата:

Сообщение от Gagarin614 (Сообщение 406105)
Вот что у меня получилось но чет ответ какой то нетакой.

Ну почему же - всё так, и ответ такой, как надо. Сейчас я протестировал Вашу программу. Единственное, что необходимо исправить, это исключить переменные ch и zn из перечня формата Integer и в раздел описания переменных добавить строку
ch, zn:Extended;
Дело в том, что с увеличением i значения этих переменных быстро нарастают и они "вылетают" за границу допустимого диапазона Integer.
Кроме того, раз требуют, нужно в самом конце, перед readln, добавить
writeln('tochnoe znach= ',1/sqrt(1-sqr(x)):9:5);
Вот и всё.

Gagarin614 18.10.2010 11:39

Большое спасибо

Gagarin614 18.10.2010 12:05

Только есть неьольшая проблемка, все добавил, ток вот при запуске появляется окно я ввожу переменные нажимаю интер и программа вылетает

AlexZir 18.10.2010 12:30

Получившийся листинг - сюда, будем разбираться.

Vladimir_S 18.10.2010 12:31

Цитата:

Сообщение от Gagarin614 (Сообщение 406489)
Только есть неьольшая проблемка, все добавил, ток вот при запуске появляется окно я ввожу переменные нажимаю интер и программа вылетает

Попробуйте, путем введения в разные места программы сочетания
Readln; Halt; , локализовать место сбоя.
Дело в том, что поскольку программа написана не столько на Дельфи, сколько на Паскале, то я вчера ее на Паскале и отлаживал. У меня всё идёт и не вылетает.
И да, кстати насчет листинга - AlexZir прав: выложите, посмотрим. Может быть, просто описка где-то.

Gagarin614 18.10.2010 12:43

я в этом новичок) листинг эт че скрин?

AlexZir 18.10.2010 12:47

Нет, это текст программы.

Vladimir_S 18.10.2010 12:53

Да, и еще вопрос - какие значения параметров вводите? Особенно х интересует.

Gagarin614 18.10.2010 13:16

program project1;
{$APPTYPE CONSOLE}
//const n=3;
var
x,s,p,stx,e:real;
i,k,n:integer;
ch,zn:Extended;
begin
writeln('wwedite x');
readln(x);
writeln('wwedite e');
readln(e);
writeln('wwedite n');
readln(n);
s:=1;
p:=1;
for i:=1 to n do
begin
p:=p*(2*i-1)*sqr(x)/(2*i);
s:=s+p;
end;
writeln('summa= ',s:9:5);
s:=1;
stx:=sqr(x);
k:=1;
ch:=1;
zn:=2;
i:=2;
while ch*stx/zn>e do
begin
s:=s+ch*stx/zn;
k:=k+1;
inc(i,2);
zn:=zn*i;
ch:=ch*(i-1);
stx:=stx*sqr(x);
end;
writeln('summa= ',s:9:5);
writeln('kol-vo slag= ',k);
e:=e/10;
s:=1;
stx:=sqr(x);
k:=1;
ch:=1;
zn:=2;
i:=2;
while ch*stx/zn>e do
begin
s:=s+ch*stx/zn;
k:=k+1;
inc(i,2);
zn:=zn*i;
ch:=ch*(i-1);
stx:=stx*sqr(x);
end;
writeln('summa= ',s:9:5);
writeln('kol-vo slag= ',k);
writeln('tochnoe znach= ',1/sqrt(1-sqr(x)):9:5);
readln;
end.


Часовой пояс GMT +4, время: 21:55.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.