• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Помогите написать программу в турбо делфи

Gagarin614

Новые
Регистрация
17 Окт 2010
Сообщения
43
Реакции
0
Баллы
0
Помогите написать программу в турбо делфи

Вот что у меня получилось но чет ответ какой то нетакой.




При некоторых заданных 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.
 
Вот что у меня получилось но чет ответ какой то нетакой.
Ну почему же - всё так, и ответ такой, как надо. Сейчас я протестировал Вашу программу. Единственное, что необходимо исправить, это исключить переменные ch и zn из перечня формата Integer и в раздел описания переменных добавить строку
ch, zn:Extended;
Дело в том, что с увеличением i значения этих переменных быстро нарастают и они "вылетают" за границу допустимого диапазона Integer.
Кроме того, раз требуют, нужно в самом конце, перед readln, добавить
writeln('tochnoe znach= ',1/sqrt(1-sqr(x)):9:5);
Вот и всё.
 
Только есть неьольшая проблемка, все добавил, ток вот при запуске появляется окно я ввожу переменные нажимаю интер и программа вылетает
 
Получившийся листинг - сюда, будем разбираться.
 
Только есть неьольшая проблемка, все добавил, ток вот при запуске появляется окно я ввожу переменные нажимаю интер и программа вылетает
Попробуйте, путем введения в разные места программы сочетания
Readln; Halt; , локализовать место сбоя.
Дело в том, что поскольку программа написана не столько на Дельфи, сколько на Паскале, то я вчера ее на Паскале и отлаживал. У меня всё идёт и не вылетает.
И да, кстати насчет листинга - AlexZir прав: выложите, посмотрим. Может быть, просто описка где-то.
 
я в этом новичок) листинг эт че скрин?
 
Нет, это текст программы.
 
Да, и еще вопрос - какие значения параметров вводите? Особенно х интересует.
 
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.
 
эта окончательный текст программы но чет вылетает
 
эта окончательный текст программы но чет вылетает
Ну не знаю - под Паскалем работает, как часы:
FP001.webp
И еще раз повторяю вопрос: какие значения переменных Вы вводите?
 
пробовал все и 1, и 2, и 0,01
 
все заработало спасиб, ввел значения с скрина
 
пробовал все и 1, и 2, и 0,01
Если это перечислены значения х, то так: первые два - не годятся. Ведь сказано же в условии R=1, что означает:
-1 < x < +1
причем неравенства, обратите внимание, СТРОГИЕ! Что касается 0.01, то с ним программа выдает значение функции, равное 1, т.е. это слишком маленькое значение х.
Попробуйте такие значения: 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8. Какое-нибудь из этих.
 
Всем большое спасибо разобрался
 
ребят нужна опять помощь по той же задаче, препод сказал что тип задачу можно засчитать правильной но в ней есть баг, какя то незначительная ошибка. Он чет начал говорить про то что первые 2-суммы одинаковые а колличество в них разное и при этом сказал вводить числа x=0.9 e=0.0001 n=33. я чет найти не могу помогите
 
ребят нужна опять помощь по той же задаче, препод сказал что тип задачу можно засчитать правильной но в ней есть баг, какя то незначительная ошибка. Он чет начал говорить про то что первые 2-суммы одинаковые а колличество в них разное и при этом сказал вводить числа x=0.9 e=0.0001 n=33. я чет найти не могу помогите
С трудом, но, кажется, понял.
Видимо, преподавателя смутило вот что.
На первом шаге Вы суммируете 33 слагаемых.
На втором - программа выдает тоже 33, а между тем результат получается чуть-чуть другой.
Чтобы устранить это, поставьте на втором и третьем шаге исходное значение k не 1, а 0. Тогда всё сойдется.
 
ох ох..... чет не то)) я помню он вродь говорил что тип сумма одинаковая получается а вот колличество разное чет К меняю и нефига не одинаковое))
 
ох ох..... чет не то)) я помню он вродь говорил что тип сумма одинаковая получается а вот колличество разное чет К меняю и нефига не одинаковое))
Ну правильно!
Задайте, как сказано выше, исходное k=0 и введите параметр не 33, а 32. Тогда результаты должны совпасть, как, естественно, и количество слагаемых.
 
Назад
Сверху