тяжёлая математическая задача

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

somebody_now
Сообщения: 35
Зарегистрирован: 02 окт 2007, 14:43

11 окт 2007, 12:30

tm2007, исчерпывающе)
вот и выходит что вчера в назначенный час x на бумажке посчитал всё сразу а вот с программой вышел облом(
теперь по тексту второй проги:
что наз-ся прокрутил всё это через себя, результат должен совпадать с результатом первой, НО: паскаль выдаёт несколько runtime error'ов (причём выдавал...теперь уже без них - немерено раз жму ентер и жду звукового сигнала об этом самом рантайме). при повторной компиляции вижу результат предыдущей =
1.0961708567E+01,что никак не соответствует действительности и результату первой...
Аватара пользователя
somewhere
Сообщения: 1837
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

11 окт 2007, 12:43

somebody_now, все там работает, и результат 2.333. Ищите косяки в настройках компилятора паскаля, никаких рантаймов там нет. Ответ 1.0961708567E+01 в принципе не может быть, т.к. стоит форматирование S:3:3
It's a long way to the top if you wanna rock'n'roll
somebody_now
Сообщения: 35
Зарегистрирован: 02 окт 2007, 14:43

11 окт 2007, 13:11

somewhere, когда увидел что он фигачит единицу с лишним, спец. убрал форматирование чтоб взглянуть на этот ответ целиком.. а в компиляторе..там настроек-то штук10 по рантаймам - всего 4 и те - показать/не показать сведения о них..
чётко доходит до просчёта 1го цикла, а конкретно до строчки 'R:=R*2*I;'
прерывается и выдаёт
Runtime error 215 at 0000:00A5..
Аватара пользователя
somewhere
Сообщения: 1837
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

11 окт 2007, 13:21

Берешь в разделе описания переменных меняешь

Код: Выделить всё

var
........ B : Longint;

на

B : Extended;
27! в третьем проходе число слижком большое, чтобы уместится в 0..2^32. Посему программа ошибочна и делает неверный расчет, однако в третьем проходе a(3) настолько мало, что на результат не влияет.
It's a long way to the top if you wanna rock'n'roll
somebody_now
Сообщения: 35
Зарегистрирован: 02 окт 2007, 14:43

11 окт 2007, 19:27

всё равно косячит по-чёрному...((
ну да неважно, текст то есть; вот только последняя опция безжалостно забыта: нужен последний член ряда..это видимо an и я так понимаю равен 0.333...если ошибаюсь поправьте)) да и нужен скрин экрана вычислений, а если он выдаёт 1 с лишним и вообще нормально не грузится, то откуда его взять?!
tm2007
Сообщения: 9
Зарегистрирован: 05 окт 2007, 01:43

11 окт 2007, 21:15

Поменяйте тип не только у B, но у всех переменных, ранее объявленных как Real.

Код: Выделить всё

var
 N, R, Z, I: LongInt;
 B, An, S, E: Extended;

Последний найденный член ряда должен быть меньше 0,001 :)
Если хотите, чтобы выводились на экран значения членов ряда, то введите такую строку после строки, в которой вычисляется An:

Код: Выделить всё

......
An:=R/B; 
writeln('A', N, '=', An:3:4);
......
27! - это очень большое число.
Аватара пользователя
somewhere
Сообщения: 1837
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

12 окт 2007, 10:43

&quot писал(а):всё равно косячит по-чёрному...((
Настройки компилятора здесь напиши
It's a long way to the top if you wanna rock'n'roll
somebody_now
Сообщения: 35
Зарегистрирован: 02 окт 2007, 14:43

12 окт 2007, 18:36

Code generation:
[] Force for calls
[] Overlays allowed
[X] Word align data
[] 286 instructions
Runtime errors:
[] Range checking
[X] Stack checking
[X] I/O checking
[] Overflow checking
Debugging:
[X] Debug information
[X] Local Symbols
Syntax options:
[X] Strict var-strings
[] Complete boolean eval
[X] Extended syntax
[] Typed @ operator
[] Open parameters
Numeric processing:
[] 8087/80287
[X] Emulation
всё вроде...
Serge_Bliznykov
Сообщения: 366
Зарегистрирован: 31 авг 2007, 03:06

14 окт 2007, 19:03

похоже, что настройки тут не при чём... ещё раз, попробуйте создать новый файл DDPROJ1.PAS,
вставить туда нижеприведённый код и выполнить..

Код: Выделить всё

{$A+,B-,D+,E+,F-,G-,I+,L+,N-,O-,P-,Q-,R-,S+,T-,V+,X+}
{$M 16384,0,655360}
program ddProj1;

var
 An, S, E: Real;
 N, R, Z, B, I: LongInt;

begin
 E:=0.001;
 N:=1;
 S:=0;
 repeat
   R:=1;
  for I:=1 to N do
   R:=R*2*I;
   Z:=1;
   for I:=1 to N do
   Z:=Z*N;
  B:=1;
   for I:=1 to Z do
    B:=B*I;
  An:=R/B; 
  S:=S+An; 
  N:=N+1;
 until An<E;
 writeln('Summa ryada S=', S:3:3);
 writeln('Kol-vo iteratsii: ', N-1);
 readln;
end.
TurboPascal 7.0 (впрочем и на Delphi 5.0)
у меня эта программа выдаёт:
C:\TP\PAS>DDPROJ1.EXE
Summa ryada S=2.333
Kol-vo iteratsii: 3
Аватара пользователя
somewhere
Сообщения: 1837
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

15 окт 2007, 13:38

Попробуй включить 80287 Numeric processing и 80286 Instructions
It's a long way to the top if you wanna rock'n'roll
Ответить