Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Программирование разветвляющихся алгоритмов (http://www.tehnari.ru/f41/t79137/)

Sandra 2000 08.10.2012 09:16

Программирование разветвляющихся алгоритмов
 
Вложений: 1
Нужно составить программу вычисления функции(смотрите вложение) и проверить на контрольном примере(можете помочь составить программу и подобрать числа которые нужно подставлять).tehno035

Vladimir_S 08.10.2012 12:22

Цитата:

Сообщение от Sandra 2000 (Сообщение 802159)
можете помочь составить программу

С удовольствием. Но именно "помочь" а не "написать за меня, чтобы я могла бездумно скатать и сдать". Сандра, поймите - сейчас задания начнут усложняться, и что? Вы вознамерились до конца обучения "выезжать" на форумах, т.е. каждый раз, получая задание, тупо вываливать его сюда и в аналогичные места? Не пойдет. Чужим умом не проживешь. Потому искренне советую - пока не поздно и задания идут детские, беритесь за ум. Потом не догоните.
Так что попробуйте написать хоть что-нибудь самостоятельно, а мы посмотрим, подскажем, исправим. Учитесь - это нужно Вам, а не нам.
Цитата:

Сообщение от Sandra 2000 (Сообщение 802159)
подобрать числа которые нужно подставлять

А вот в этом попробую помочь, ибо действительно непросто.
Начнем со второго уравнения. Там под корнем стоит Sin(ab), и это означает, что должно выполняться условие
1. Sin(ab) ≥ 0.
Далее, обратимся к третьему уравнению. Там предполагается возведение х в степень (2+b). Поскольку b может быть любым, в том числе дробным, корректное осуществление этой операции требует выполнения условия
2. x > 0 (обратите внимание: неравенство строгое!).
Наконец, в уравнениях 1 и 3 показатели степени не должны быть слишком большими, иначе произойдет ошибка переполнения разрядной сетки.

Исходя из всего вышеперечисленного, я бы предложил такие диапазоны:

Во всех случаях
-12 ≤ b ≤ 8 - этим мы ограничим показатель степени в третьем уравнении до ±10.

0 ≤ a ≤ π, тогда
0 < b ≤ min(π/a, 8) (при a = 0 b - любое в диапазоне -12 ≤ b ≤ 8 )
или
0 > a ≥ -π, тогда
0 > b ≥ max(π/a, -12)

x > 0.

Sandra 2000 08.10.2012 16:52

Вы правы
 
Вложений: 1
Я конечно согласна с вами,но не думайте что я тупая и все "скатываю".В конечном счете я не собираюсь оправдываться!
И знаете я не сижу без дела и не жду готовенького.Я задала этот вопрос лишь потому что у меня не работает правильно программа либо я подставляю не те величины.Если я вас не утруждаю, можете указать мои ошибки?
программа представлена внизу.

Vladimir_S 08.10.2012 17:38

Сандра, не злитесь. Я всегда предпочитаю именно помогать, а не писать программы под аккомпанемент "Я не шарю". Но... если не трудно - дайте в текстовом режиме, а то перенабивать с рисунка как-то скучно. Я, конечно, попробую дома FineReader'ом переконвертировать, но не знаю, что из этого выйдет...

Sandra 2000 08.10.2012 18:59

Хорошо
 
Вот в текстовом
Код:

Program pr1;
Var
 a,b,x,z:real;
Begin
 Write('введите х');
 ReadLn(x);
 Write('введите а');
 ReadLn(a);
 Write('введите b');
 ReadLn(b);
 If x<a then
  Begin
  z:=exp(a*x)+sqr(cos(a+x));
  WriteLn('z=',z:6:3);
  end;
 if (sin(a*b)>0) and (sin(a*b)<1) then writeln('нет корней')
 else
  begin
  If x=a then z:=sqrt(sin(a*b));
  writeln('z=',z:6:3);
  end;
 If x>a then
  If (a+x)=0 then WriteLn('нет корней')
  else z:=(3*exp((2+b)*ln(x)))+((x+b)/(a+x));
end.


Vladimir_S 08.10.2012 20:06

Спасибо, но зачем так сложно, через файл? Исправил.
Да, ошибок очень много. Но ничего, "добьем".

Vladimir_S 08.10.2012 22:02

Вот... нарисовал. Громоздко, правда, несколько получилось. Но попробуйте так:
Код:

Program pr1;
Var
 a,b,x,b1:real;

Function Z(y:real):real;
begin
 If x<a then
  Z:=exp(a*x)+sqr(cos(a+x))
 else
 If x=a then
  Z:=sqrt(sin(a*b))
 else
  Z:=(3*exp((2+b)*ln(x)))+((x+b)/(a+x));
end;

Function Max(m1,m2:real):real;
begin
 If m1>m2 then Max:=m1 else Max:=m2;
end;

Function Min(m1,m2:real):real;
begin
 If m1<m2 then Min:=m1 else Min:=m2;
end;

Begin
 Repeat
  repeat
  Write('Enter a ((a>=0 and a<=Pi) or (a<0 and a>-Pi); a=100 to quit): ');
  ReadLn(a);
  until ((a>=0) and (a<=Pi)) or ((a<0) and (a>-Pi)) or (a=100);
  If a<>100 then
  begin
    If a=0 then
    repeat
      Write('Enter b (b>=-12 and b<=8): ');
      Readln(b);
    until ((b>=-12) and (b<=8))
    else
    If a>0 then
    begin
      b1:=Min(Pi/a,8.0);
      repeat
      Write('Enter b (b>0 and b<=',b1:0:3,'): ');
      Readln(b);
      until ((b>=0) and (b<=b1));
    end
    else
    begin
      b1:=Max(Pi/a,-12.0);
      repeat
      Write('Enter b (b<0 and b>=',b1:0:3,'): ');
      Readln(b);
      until ((b<0) and (b>=b1));
    end;
    Writeln('a= ',a:0:5);
    Writeln('b= ',b:0:5);
    Repeat
    Write('Next x (x>0; x<=0 to quit): ');
    Readln(x);
    If x=-a then
      Writeln('Thes value is forbidden! Try other.');
    If (x>0) and (x<>-a) then
      Writeln('Z= ',Z(x):0:5);
    Until x<=0;
  end;
 Until a=100;
End.

Извините за английские надписи - с кириллицей мне большая морока возиться.

Sandra 2000 09.10.2012 18:18

К сожалению
 
Здесь нужно программу попроще т.е. нельзя использовать операторы с циклом,только с помощью операторов выбора(IF).

Vladimir_S 09.10.2012 20:50

Цитата:

Сообщение от Sandra 2000 (Сообщение 802920)
Здесь нужно программу попроще т.е. нельзя использовать операторы с циклом,только с помощью операторов выбора(IF).

Да можно и попроще...
Код:

Program pr1;
Var
 a,b,x:real;

Function Z(a1,b1,x1:real):real;
begin
 If x1<a1 then
  Z:=exp(a1*x1)+sqr(cos(a1+x1))
 else
 If x1=a1 then
  Z:=sqrt(sin(a1*b1))
 else
  Z:=3*exp((2+b1)*ln(x1))+(x1+b1)/(a1+x1);
end;

Begin
 Write('a= ');
 ReadLn(a);
 Write('b= ');
 ReadLn(b);
 Write('x= ');
 ReadLn(x);
 If ((x<a) and ((a*x>10) or (a*x<-10))) or
    ((x=a) and (Sin(a*b)<0)) or
    ((x>a) and ((2+b>10) or (2+b<-10) or (a+x=0))) then
  begin
  Writeln('Parameters out of range!');
  Readln;
  Halt;
  end
 else
  Writeln('Z= ',Z(a,b,x):0:5);
 Readln
End.


Sandra 2000 09.10.2012 20:52

Спасибо большущее!tehno042


Часовой пояс GMT +4, время: 07:13.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.