BearKing

Pascal / Delphi

В теме 110 сообщений

Спасибо, очень помогли.

Как то подозрительно точно паскаль синусы считает, если учесть, что из себя представляет число Пи =)

Поделиться сообщением


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

В данный момент изучаю циклы и натолкнулся на небольшую проблему, объясните пожалуйста, где моя ошибка?

Задача - посчитать (2^n)!

program faktorial;
var n,s,k: real;
begin
write('Ввод n ');
readln(n);
s:=1; k:=1; 
n:=(exp(n*ln(2))); {считаем выражение в скобках}
while k<n do
begin
k:=k+1;
s:=s*k;
end;
writeln(n);
writeln('Ответ ',s:0:1);
end.

при вводе n = 2 ответ получается 120, хотя должне быть равен 24.

Поделиться сообщением


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

Кажется тут все верно - ошибок не нашел. При запуске с 2йкой дает 24(Free Pascal Compiler version 2.0.4 [2007/02/02] for i386,Linux tapu-desktop 2.6.22-16-generic #1 SMP Mon Jan 26 00:07:52 GMT 2009 i686 GNU/Linux).

Поделиться сообщением


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

То есть дело в самом компиляторе? Очень-очень странно... У меня Borland Pascal 7.0...

Сейчас попробовал другой дистрибутив - тоже самое. Черт.

P.S. А в Turbo Pascal 7.0 все работает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Может где исходить не такой?

Ммм... Не понял вопроса :-)

Поделиться сообщением


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

xct

спасибо

Еще 1 проблема =( Подскажите, где на этот раз скосячил? Вот код программы, выводящей на экран значения 2-х функций chisl и znam. (chisl:=n! znam:=(2^n)!)

program faktorial;
var n,x: real;
function znam (var n:real):real;
var s1,k1 :real;
begin
 s1:=1; k1:=1;
 while k1<n do
 begin
 k1:=k1+1;
 s1:=s1*k1;
  end;
 znam:=s1;
end;
function chisl (var n:real):real;
var s, k: real;
begin
	s:=1; k:=1; n:=(exp(n*ln(2)));
	while k<n do
	begin
	k:=k+1;
	s:=s*k;
	end;
chisl:=s;
end;
begin
write('Введите n ');
readln(n);
writeln(chisl(n):0:0);
writeln(znam(n):0:0);
end.

у меня chisl и znam при любых значениях n равны n!, хотя chisl должен быть (2^n)! Где косяк?

Ошибка, chisl и znam при любых вводимых n принимают значения (2^n)! Хотя znam должен быть равен n!

Поделиться сообщением


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

А теперь собственно, конечная цель моих мучений :)

Найти сумму ряда с точностью e=10^(-3), общий член которого:

b558ed407dbd.gif

В матане я полный профан, поытался освоить ряды, конечно ничего не вышло :)

Как мне обьяснили добрые люди, мне нужно найти сумму всех слагаемых ряда, не превышающих e=10^(-3).

Правильно ли я понимаю, что сумма ряда

b558ed407dbd.gif

это

1/(1*2) + (1*2)/(1*2*3*4) + (1*2*3)/(1*2..*8)?

Поделиться сообщением


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

ExER

у меня и ста рублей на данный момент не наберется :)

xct

Спасибо, что помогаете.

Поделиться сообщением


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

xct

Программа ругается на несоответствие типа n, оно не может быть integer, так как из него высчитывается натуральный логарифм, и real оно тоже быть не может, поскольку в счетчике используются только значения порядкового типа. Никак не соображу, как это обойти. Не подскажете?

P.S. Разобрался :) .

Поделиться сообщением


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

Regnar

var ch, zn, s:real;
		 n:integer;
begin
n:=1;
ch:=1;
zn:=2;
while ch/zn > 0.001 do
begin
s:=s+ch/zn;
inc(n);
ch:=ch*n;
zn:=zn*exp(n*ln(2));
end;
writeln('Result: ', s);
end.

Поделиться сообщением


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

AmericaMustDie

я примерно так и делаю.

только вопрос назрел. Почему Вы zn приравниваете к единице?

Поделиться сообщением


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

Вот мой код:

program faktorial;
uses crt;
var x,y,a,e,s: real;
n: integer;
function chisl (var n:integer):real;
var s1,k1,n1 :real;
begin
 s1:=1; k1:=1; n1:=n;
 while k1<n1 do
 begin
 k1:=k1+1;
 s1:=s1*k1;
  end;
 chisl:=s1;
end;
function znam
(var n:integer):real;
var s,k,n2: real;
begin
	s:=1; k:=1;n2:=n; n2:=(exp(n2*ln(2)));
	while k<n2 do
	begin
	k:=k+1;
	s:=s*k;
	end;
znam:=s;
end;
begin
clrscr;
n:=1; e:=0.001;
x:=chisl(n);
y:=znam(n);
a:=x/y; s:=0+a;
while a>e do
begin
n:=n+1;
a:=x/y;
s:=s+a;
end;
writeln(s:0:5);
readln(x);
end.

Только что то в нем неправильно, программа не выходит из последнего цикла. Опять я где-то накосячил =). Не подскажете, где именно?

AmericaMustDie

Кстати, я ни ch ни zn не могу приравнять к какому либо значению, паскаль ругается :"Ошибочная ссылка на переменную"

П.С. Проблема решена.

Поделиться сообщением


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

Это магическое шаманство - без него работать не будет :)

Поделиться сообщением


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

Кстати, еще вопрос. Препод задал написать программу на Turbo C, выводящую на экран капли дождя. (Количество капель):= (случайное число), капли должны падать под углом, заданным с клавиатуры. Возможно ли реализовать ее на паскале?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Кстати, еще вопрос. Препод задал написать программу на Turbo C, выводящую на экран капли дождя. (Количество капель):= (случайное число), капли должны падать под углом, заданным с клавиатуры. Возможно ли реализовать ее на паскале?

Возможно

Поделиться сообщением


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

А ведь я догадывался, что эта программа пишется в "пару строк" :lol:

Препод упадет, когда увидит мой код :lol:

Поделиться сообщением


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

xct

Зря реализацию раскладываешь, он так ничему не научится ИМХО

Поделиться сообщением


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

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

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

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

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

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

Войти

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

Войти