Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Вычесление последовательности(Pascal)

15K
12 октября 2006 года
AUMaster
9 / / 10.10.2006
Найти y=1-1/2+1/4-1/6+...+-1/n
Напишите решение пожалуста.
3.0K
13 октября 2006 года
Мerlin
267 / / 25.07.2006
[QUOTE=AUMaster]Найти y=1-1/2+1/4-1/6+...+-1/n
Напишите решение пожалуста.[/QUOTE]Такой простой код, будущий кул хакер должен уметь сам написать
Код:
program Pr;
var
  i, n : Integer;
  y : real;
begin
  Write('Введите число n : ');
  ReadLn(n);
  y := 1.0;
  i := 2;
  while i <= n do begin
    y := y + 1.0/i;
    i := i + 2;
  end;
  WriteLn('y равна ', y);  
end.
257
13 октября 2006 года
kosfiz
1.6K / / 18.09.2005
[quote=Merlin ]Такой простой код, будущий кул хакер должен уметь сам написать[/quote]
а сам-то. ну, а где y=1-1/2+1/4-1/6 и т.д. у тебя ведь получилось следующее y=1+1/2+1/4+1/6+1/8, так что код надо подправить.
3.0K
13 октября 2006 года
Мerlin
267 / / 25.07.2006
Мда...Но я не утверждал, что я кул хакер...
Код:
program Pr;
var
  i, n: Integer;
  y : real;
  fl: Boolean;
begin
  Write('Введите число n : ');
  ReadLn(n);
  y := 1.0;
  i := 2;
  fl := true;
  while i <= n do begin
    if fl = true then
      y := y - 1.0/i
    else
      y := y + 1.0/i;
    i := i + 2;
    fl := not fl;
  end;
  WriteLn('y равна ', y);  
end.
3
13 октября 2006 года
Green
4.8K / / 20.01.2000
А можно и без условий (проще и быстрее):
fl := -1;
.......
y := y + 1.0/i*fl;
fl := fl * (-1);
257
13 октября 2006 года
kosfiz
1.6K / / 18.09.2005
в таком случае добавлю, что можно и так поступить:
 
Код:
fuction pow(a,b:integer):real;
begin
pow:=exp(a*ln(b));
end;
//теперь считаем y
  y := 1.0;
  for i:=1 to n do
    y:=y+pow(i,-1)/2*i;

одну задачу можно много как решить.
3.0K
13 октября 2006 года
Мerlin
267 / / 25.07.2006
[QUOTE=Green]А можно и без условий (проще и быстрее):
fl := -1;
.......
y := y + 1.0/i*fl;
fl := fl * (-1);[/QUOTE]Можно конечно. Ну если если уж оптимизировать, то почему

fl := fl * (-1);

вместо

fl := -fl; ???
3.0K
13 октября 2006 года
Мerlin
267 / / 25.07.2006
[QUOTE=kosfiz]в таком случае добавлю, что можно и так поступить:
 
Код:
fuction pow(a,b:integer):real;
begin
pow:=exp(a*ln(b));
end;
//теперь считаем y
  y := 1.0;
  for i:=1 to n do
    y:=y+pow(i,-1)/2*i;

одну задачу можно много как решить.[/QUOTE]Если я правильно понял, pow(i, -1) == exp(i*ln(-1));

ln(-1) - сработает?

Кроме этого, если уж так организовать цикл, то нужно
for i:=1 to n/2 do
3
13 октября 2006 года
Green
4.8K / / 20.01.2000
[QUOTE=Мerlin]Можно конечно. Ну если если уж оптимизировать, то почему

fl := fl * (-1);

вместо

fl := -fl; ???[/QUOTE]

да я просто не очень знаю паскаль
257
13 октября 2006 года
kosfiz
1.6K / / 18.09.2005
[QUOTE=Мerlin]Если я правильно понял, pow(i, -1) == exp(i*ln(-1));
ln(-1) - сработает?
[/quote]
нет конечно, но очень бы хотелось - забыл про математику.
[quote=Merlin ]
Кроме этого, если уж так организовать цикл, то нужно
for i:=1 to n/2 do[/QUOTE]
а да точно - склероз - страшная штука.

признаю лопухнулся

[quote= Merlin ]почему
fl := fl * (-1);
вместо
fl := -fl; ???[/quote]
может конечно снова ошибаюсь, но по-моему fl:=-fl все равно преобразуется в fl:=fl*(-1), так что разницы не вижу.
3.0K
13 октября 2006 года
Мerlin
267 / / 25.07.2006
[QUOTE=kosfiz]может конечно снова ошибаюсь, но по-моему fl:=-fl все равно преобразуется в fl:=fl*(-1), так что разницы не вижу.[/QUOTE]Не преобразуется. Если все нормально, то будет переведена в ассемблерную команду NEG.
257
13 октября 2006 года
kosfiz
1.6K / / 18.09.2005
да, кстати, что-то мне кажется что в y=1-1/2+1/4-1/6+...+-1/n,
1/n - н-й член последовательности(а не просто число до которого надо по 2 прибавлять в каждом проходе), который определяется так 1/(2*i), где i-номер элемента. т.е. в условии предполагается, что пользователь вводит количество этих элементов и соответственно считается сумма. к тому же если учесть, что прибавляемое к 1 имеет общий вид (-1)^n/(2*i) и преобразовать это к cos(i*pi)/(2*i), то получаем следующий код:
 
Код:
y:=1;
for i:=1 to n do
 y:=y+cos(i*pi)/(2*i);
writeln(y);

все работает.
[quote=Merlin ]Не преобразуется. Если все нормально, то будет переведена в ассемблерную команду NEG.[/quote]
в асме я не очень силен.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог