Jump to content

Помогите решать задачу


Recommended Posts

Students:

var n:integer; z,e,p,s:real;beginWrite('z='); Readln(z); Write('e='); ReadLn(e); WriteLn('  n   p		 s');n:=0; p:=z; s:=p;repeat Writeln(n:3,p:10:5,s:10:5); n:=n+1; p:=-p*z*z/(2*n)/(2*n+1); s:=s+p until abs(p)<=e;ReadLnend.

P.S. Надо было попадать в тему Заказы "Сделайте все за меня". Там все такие задачки.

Edited by Тролль
Link to comment
Share on other sites

Извиняюсь, не заметил тему.

я в паскале не очень силен :D

мне бы алгоритм, как и что мы делаем, что бы просчитать все это, или хотябы код проги на Си.

спасибо

Link to comment
Share on other sites

Паскаль и есть язык для записи алгоритмов. Он возник как некоторое расширение (в основном средствами ввода и вывода) из Алгола (algorithmic language), который был разработан специально для публикации алгоритмов. Переписать текст на C, естественно, несложно, но C - как раз язык, более близкий к машинному, чем к записи алгоритмов.

#include <stdio.h>#include <math.h>int main(){int n; float z,e,p,s;printf("z="); scanf("%f",&z); printf("e="); scanf("%f",&e); printf("\n  n	p		  s\n"); n=0; s=p=z;do {printf("%3i %10.5f %10.5f\n",n,p,s); n++; s+=p=-p*z*z/(2*n)/(2*n+1);} while (fabs(p)>e);getchar(); getchar(); return 0;}
Link to comment
Share on other sites

мне в рограмме надо использовать цикл с предусловием а не с постуслоувием вот я переделал

#include <stdio.h>

#include <math.h>

#include <conio.h>

main ()

{

int n=0;

float eps,z,p,s;

printf("z= e=");

scanf("%f%f",&z,&eps);

s=p=z;

while(fabs(p)>e)

{

p=-p*z*z/(2*n)/(2*n+1);

s+=p;

n++;

}

printf("s=%8.5f n=%3i; eps=%8.4f",s,n,eps);

getch();

}

но прога не работает, просто виснет и все (

Link to comment
Share on other sites

Ну, во-первых, подозреваю, что ты привел неточный текст проги. Эта прога зависнуть не может :dontgetit:, поскольку не запустится, пока ты e не переименуешь в eps. Во вторых, когда она запустится, первое, что ты делаешь в цикле, это делишь p на 0, поскольку при первом выполнении цикла n равно 0. Соответственно ничего хорошего ожидать не приходится...

Link to comment
Share on other sites

ну во первых я просто опечатался хотел написать eps а написал е, просто у меня на форуме нет кнопки редактировать во вторых, пробовал присовит н константу1 без результатно нткак не пойму в чом дело вроде все должно выполнятся а не выполняеся (

короче все разобрался в чом проблема все решил, Троль спасибо за помощь =)

наконецто разобрался в циклах с итерационным методом вычесляния

Link to comment
Share on other sites

тут возник такой вопрос...

например при большом значении Z выводится неправельный результат например если Z>20 то функция Sin(z) находится неправельно, скажите что нужно сделать что бы sin(z) находился верно при больших значения Z. :blink:

Link to comment
Share on other sites

Students:

У каждой программы свои ограничения по точности результатов и диапазону вводимых данных, в данном случае ты выходишь за эти ограничения. Конкретно, для вычисления суммы ряда при аргументе 20 не хватает точности float, промежуточные члены ряда слишком велики. Если заменить в программе тип представления чисел с float на double (при этом также надо заменить в scanf и printf формат ввода-вывода с f на lf), то при 20 или даже при 30 получится правильный результат. Однако уже при sin(40), к примеру, точности double тоже нехватит.

А чтобы правильный результат получался практически в любом диапазоне значений аргумента синуса, следует предварительно привести аргумент к более ограниченному диапазону, для чего нужно в исходной (можно и в откорректированной на double программе тоже) заменить оператор s=p=z; на s=p=z=fmod(z,2*M_PI);

На самом деле в условии должно было быть, для каких значений аргумента и с какой точностью должен считаться синус.

Компьютер работает не с числами, а с моделями чисел с ограниченными точностью и диапазоном, и если этого не учитывать, то часто получится чепуха. Чтобы программировать математические вычисления на компьютере, надо знать не только математику и язык программирования, но и вычислительную математику и соответствующие алгоритмы, обходящие эти проблемы.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...