Перейти к содержанию
СофтФорум - всё о компьютерах и не только

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


Рекомендуемые сообщения

Помогите составить алгоритм, что то я совсем не попал в эту тему (

Задание: aV3odp0.jpg

не нашел кнопку редактировать сообщение

aV3odp0.jpg

Ссылка на комментарий
Поделиться на другие сайты

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. Надо было попадать в тему Заказы "Сделайте все за меня". Там все такие задачки.

Изменено пользователем Тролль
Ссылка на комментарий
Поделиться на другие сайты

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

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

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

спасибо

Ссылка на комментарий
Поделиться на другие сайты

Паскаль и есть язык для записи алгоритмов. Он возник как некоторое расширение (в основном средствами ввода и вывода) из Алгола (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;}
Ссылка на комментарий
Поделиться на другие сайты

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

#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();

}

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

Ссылка на комментарий
Поделиться на другие сайты

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

Ссылка на комментарий
Поделиться на другие сайты

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

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

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

Ссылка на комментарий
Поделиться на другие сайты

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

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

Ссылка на комментарий
Поделиться на другие сайты

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);

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

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

Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...