Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.12.2012, 08:40   #1
tp7
Пользователь
 
Регистрация: 06.12.2012
Сообщений: 16
По умолчанию Вычисление функции

Всем доброе утро!Помогите пожалуйста найти ошибку в коде!Спасибо Mad_Cat помог с вычислением x[j] http://www.programmersforum.ru/showthread.php?t=220660 Но дело в том, что элементам массива a[i] присваивается не случайные числа ,а вычисленные по формуле.Со случайными числами всё работает , ещё раз спасибо Mad_Cat , но почему у меня выдаёт только последние значения x[j] и y[j] , а остальные значения по нулям?Заранее благодарю.
Код HTML:
program funccia;
uses crt;
const

      b=1.6;

var    a,x,y: array[1..100] of real;
           j:integer;
  factorial : longint;
    m,s,i,n : byte;
          z : real;

     begin
      clrscr  ;

writeln('vvedite i,m  (1-8)');
readln(i,m);

      begin

    factorial:= 1;
    for n:=2 to i do
        factorial:= factorial*n;
a[i]:=b/factorial ;
for j:=1 to i do
writeln('a[i]',a[i]:5:5);
end;

begin
z:=1;
for s:=1 to m do
z:=z*a[i] ;
writeln('z=',z:5:10);
end;

 For j:=1 to i do
 begin
x[j]:=0;
for i:=1 to j do
 x[j]:=x[j]+a[i]/100;
 writeln('x[j]',x[j]:10:10);
  end;
if abs(z)<0.9 then
 y[j]:=((arctan((2*x[j])/sqrt(1-2*x[j]*2*x[j])))/b*cos(x[j]))+j
 else y[j]:=3.9+5*z+j;
 for j:=1 to j do
 writeln('y[j]',y[j]:10:10);

 readln;
end.
tp7 вне форума Ответить с цитированием
Старый 07.12.2012, 08:56   #2
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

a[i]:=b/factorial ; - где i меняется? или только при вводе
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Старый 07.12.2012, 09:03   #3
tp7
Пользователь
 
Регистрация: 06.12.2012
Сообщений: 16
По умолчанию

Цитата:
Сообщение от Slym Посмотреть сообщение
a[i]:=b/factorial ; - где i меняется? или только при вводе
i меняется от 1 до вводимого значения i.
tp7 вне форума Ответить с цитированием
Старый 07.12.2012, 09:07   #4
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Код:
writeln('vvedite i,m  (1-8)');
readln(count,m);
for i:=1 to count do     
 begin
    factorial:= 1;
    for n:=2 to i do
        factorial:= factorial*n;
a[i]:=b/factorial ;
for j:=1 to i do
writeln('a[i]',a[i]:5:5);
z:=1;
for s:=1 to m do
z:=z*a[i] ;
writeln('z=',z:5:10);

 For j:=1 to i do
x[j]:=0;
for xz:=1 to j do
 x[j]:=x[j]+a[xz]/100;
 writeln('x[j]',x[j]:10:10);
if abs(z)<0.9 then
 y[j]:=((arctan((2*x[j])/sqrt(1-2*x[j]*2*x[j])))/b*cos(x[j]))+j
 else y[j]:=3.9+5*z+j;
 for j:=1 to j do
 writeln('y[j]',y[j]:10:10);
end;
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"

Последний раз редактировалось Mad_Cat; 07.12.2012 в 09:27.
Mad_Cat вне форума Ответить с цитированием
Старый 07.12.2012, 09:08   #5
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

Код:
  clrscr;
  writeln('vvedite i,m  (1-8)');
  readln(i,m);
  begin
    factorial:= 1;
    for n:=2 to i do
      factorial:= factorial*n;
  a[i]:=b/factorial ;
  for j:=1 to i do
    writeln('a[i]',a[i]:5:5);
  end;
и где меняется? a[i] заполняется только 1 раз
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Старый 07.12.2012, 09:23   #6
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

Код:
for i:=1 to j do
 x[j]:=x[j]+a[i]/100;
и ведь научится... этот код не оптимален
1. деление выполняется j раз хотя достаточно 1
2. запись в память массива x[j] j раз, хотя достаточно 1 раза, а сумму копить в локальной переменной которая скорее всего будет быстрым регистром
а вот этот
Код:
c:=0;
for i:=1 to j do
 c:=c+a[i];
x[j]:=c/100;
Не стесняемся, плюсуем!

Последний раз редактировалось Slym; 07.12.2012 в 09:28.
Slym вне форума Ответить с цитированием
Старый 07.12.2012, 10:05   #7
tp7
Пользователь
 
Регистрация: 06.12.2012
Сообщений: 16
По умолчанию

Цитата:
Сообщение от Slym Посмотреть сообщение
Код:
for i:=1 to j do
 x[j]:=x[j]+a[i]/100;
и ведь научится... этот код не оптимален
1. деление выполняется j раз хотя достаточно 1
2. запись в память массива x[j] j раз, хотя достаточно 1 раза, а сумму копить в локальной переменной которая скорее всего будет быстрым регистром
а вот этот
Код:
c:=0;
for i:=1 to j do
 c:=c+a[i];
x[j]:=c/100;
Просто я думаю что у меня ошибка в расчёте x[j] и y[j] .
Вот попробовал по предыдущему коду, но всё равно выводится только одно значение x[j] и y[j] (остальные y[j] выдаёт нули).Но ведь ф-ия это когда кождому значению x определённое значение y.Иль я вновь ошибся в коде?
Код HTML:
program fg;
uses crt;
const

      b=1.6;

var    a,x,y: array[1..100] of real;
         i,  j:integer;
  factorial : longint;
   count, m,s,n : byte;
          z : real;

     begin
      clrscr  ;
writeln('vvedite i,m  (1-8)');
readln(count,m);
for i:=1 to count do
 begin
    factorial:= 1;
    for n:=2 to i do
        factorial:= factorial*n;
a[i]:=b/factorial ;
for j:=1 to i do
writeln('a[i]',a[i]:5:5);
z:=1;
for s:=1 to m do
z:=z*a[i] ;
writeln('z=',z:5:10);
 end;
 For j:=1 to i do
x[j]:=0;
for i:=1 to j do
 x[j]:=x[j]+a[i]/100;
 writeln('x[j]',x[j]:10:10);
if abs(z)<0.9 then
 y[j]:=((arctan((2*x[j])/sqrt(1-2*x[j]*2*x[j])))/b*cos(x[j]))+j
 else y[j]:=3.9+5*z+j;
 for j:=1 to j do
 writeln('y[j]',y[j]:10:10);
 readln;
end.
tp7 вне форума Ответить с цитированием
Старый 07.12.2012, 11:02   #8
tp7
Пользователь
 
Регистрация: 06.12.2012
Сообщений: 16
По умолчанию

может я просто не точно объяснил.Вот результат кода
tp7 вне форума Ответить с цитированием
Старый 07.12.2012, 11:44   #9
tp7
Пользователь
 
Регистрация: 06.12.2012
Сообщений: 16
По умолчанию

Попробовал по рекомендации Slym , получилось немног лучше всем элементам массива х присваивается одно и то же значение:
Код HTML:
program fg;
uses crt;
const

      b=1.6;

var    a,x,y: array[1..100] of real;
         i,  j:integer;
  factorial : longint;
   count, m,s,n : byte;
        c,  z : real;

     begin
      clrscr  ;
writeln('vvedite i,m  (1-8)');
readln(count,m);
for i:=1 to count do
 begin
    factorial:= 1;
    for n:=2 to i do
        factorial:= factorial*n;
a[i]:=b/factorial ;
for j:=1 to i do
writeln('a[i]',a[i]:5:5);
z:=1;
for s:=1 to m do
z:=z*a[i] ;
writeln('z=',z:5:10);
 end;
 For j:=1 to i do
x[j]:=0;
c:=0;
 for i:=1 to j do
 c:=c+a[i];
 x[j]:=c/100;
 for i:=1 to j do
 writeln('x[j]',x[j]:10:10);
if abs(z)<0.9 then
 y[j]:=((arctan((2*x[j])/sqrt(1-2*x[j]*2*x[j])))/b*cos(x[j]))+j
 else y[j]:=3.9+5*z+j;
 for j:=1 to j do
 writeln('y[j]',y[j]:10:10);
 readln;
end.
, но самое неприятное ,что элементы массива х должны быть разными,думаю с этого и нужно начать,ну а потом и с масивом у можно будет разобраться.

Вот результат
tp7 вне форума Ответить с цитированием
Старый 07.12.2012, 11:52   #10
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Может задание лучше скинешь
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вычисление значения функции и переменных, вычисление площади треугольника, определение расстояния между точками на турбо паскале _4Alex4_ Помощь студентам 2 14.12.2011 01:43
Вычисление функции Lion8990 Помощь студентам 3 16.12.2010 00:57
вычисление функции Roker Помощь студентам 0 19.12.2009 00:07
Вычисление функции XSGRAFF Общие вопросы C/C++ 4 25.05.2009 22:56