Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Object Pascal: кроссплатформенные технологии > Помогите доделать программу


Автор: [Lexx] 1.11.2005, 17:43
Вычислить:
Система:
z:=..., При x>y*y-1
z:=///, при x<y*y-1
где Y=0.2*x-2*exp(x), а Х изменяется от XN до XK с шагом N. Результат запомнить в определённый массив. Определить среднее геометрическое результатов, попадающих в интервал от [A,B].
XN=-2; XK=2, N=0.2, C=0.2, A=0, B=4.

Я начал писать программу и не знаю что делать дальше.

programm lr3;
Uses Crt;
label m1;
var G:array [1..20] of real;
i,x,y,xn,xk,n,c,a,b,z:real;
begin
xn:=-2; xk:=2; n:=0.2; c:=0.2; a:=0; b:=4;
writeln('Ввудите х');
realdln(x);
y:=0.2*x-2*exp(x);
x:=xn;
m1: if x>y*y-1 then do begin z:=... end;
if x<y*y-1 then do begin z:=/// end;
x:=x+n;
if x<xk then goto m1;


Что делать дальше?

Автор: Rencom 1.11.2005, 18:57
Зачем просить ввести х, когда оно дано уже?

и что такое С?

Автор: Guest 1.11.2005, 19:36
Цитата(Rencom @ 1.11.2005, 18:57)
Зачем просить ввести х, когда оно дано уже?

и что такое С?

Ты наверно прав, Х можно не вводить.

Дана система
z:=... и z:=/// уто два уравнения системы

С это число входящее в уравнения

Автор: Guest 1.11.2005, 19:49
Вот сама система
z:=(5/6)*(sqrt(sin(y)*sin(y)+c*c*x*x), При x>y*y-1
z:=(2.5*(sqrt(y*y*ln(1+y*y))/(0.2*y*y+sin(x)*sin(x)), при x<y*y-1

Автор: Rencom 1.11.2005, 23:11
Какие-то отрывистые данные ты даешь. Можешь написать ПОЛНОЕ нормальное условие задачи? без всяких комментариев по середине "от себя". Тогда я смогу помочь в решение твоей задачи.

Автор: Rencom 2.11.2005, 00:59
Вот тебе программа:

Код

Const
  left=-2;  (* левая граница значений х *)
  right=2;  (* правая граница значений х *)
  step=0.2; (* шаг *)
  c=0.2;    (* константа формулы вычисления z *)

  a=0;      (* левый конец отрезка [a;b], следить за тем, чтобы a<b *)
  b=4;      (* правый конец отрезка [a;b] *)

Var
  result: array[1..20] of real;
  x,y,y2,z,r: real; (* рабочие переменные, r - окончательный результат вычислений *)
  i,k: integer; (* счетчик в массиве result *)
  t:boolean;

Begin
  x:=left; k:=0;
  while x<=right do
    begin
          y:=c*x-2*exp(x);
          y2:=y*y;
          if x>(y2-1) then
           begin
                  inc(k);
                  z:=(5/6)*sqrt(sin(y)*sin(y)+c*c*x*x);
                  result[k]:=z
                end
             else
               if x<(y2-1) then
                  begin
                    inc(k);
                    z:=2.5*sqrt(y2*ln(1+y2))/(c*y2+sin(x)*sin(x));
                    result[k]:=z
                  end;
          x:=x+step
        end;
  t:=false;
  for i:=1 to k do
      if (result[i]>a) AND (result[i]<b) then
        begin
           if not t then
              begin
                t:=true;
                r:=1
              end;
       r:=r*result[i]
         end;
  if t then write('Результат вычисления:', sqrt(r))
       else write('Нет результатов, попадающих в [',a,';',b,'].')
End.

Автор: volvo877 2.11.2005, 01:08
Rencom, скобки нужно добавить:
Код
if (result[i]>a) AND (result[i]<b) then
иначе будет ошибка...

И второе: среднее геометрическое - это корень N-ой степени из произведения N элементов, а не квадратный корень, как у тебя...

Автор: Rencom 2.11.2005, 01:22
volvo877: скобки добавил при отладке, а скопировал старый вариант(( Что касается среднего геометрического, скажу честно - не знал) Как корень n-ой степени извлечь? Полагаю, что делать это так кривовато: p^1/n=exp(1/n*ln(p))

Автор: volvo877 2.11.2005, 01:37
Цитата(Rencom @ 2.11.2005, 00:22)
Полагаю, что делать это так кривовато: r^1/n=exp(1/n*ln( R ))

Почему кривовато, как раз нормально... Хорошо, что A не меньше 0, иначе нельзя было бы этот способ использовать smile

Автор: Rencom 2.11.2005, 02:15
Почему нельзя? Степерь выносится, был бы минус, если кол-во отрицательных элементов нечетное, а если четное, то вообще все хорошо. Или не в минусе дело?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)