Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 08.12.2011, 19:46   #21 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Ну и собственно программа:
Код:
Const
 b=31.39329;
 Xn=0.5;
 Xk=2.0;
 Dx=0.5;
 An=0.1;
 Ak=0.5;
 Da=0.1;
Var
 x,a:Real;
 Na,Nx,i,j:Byte;

Function f(xf,af:real):real;
begin
 If xf<1 then f:=Sin(af*xf/b) else
 f:=Sqrt(sqr(af)*sqr(sqr(xf))+sqr(b))/xf/sqr(xf);
end;

BEGIN
 Nx:=ROUND((Xk-Xn)/Dx);
 Na:=ROUND((Ak-An)/Da);
 for i:=0 to Na do
  begin
   a:=An+Da*i;
   for j:=0 to Nx do
    begin
     x:=Xn+Dx*j;
     Writeln('x=',x:3:1,'    a=',a:3:1,'    f=',f(x,a):0:5);
    end;
  end;
 Readln;
END.
Vladimir_S вне форума   Ответить с цитированием
Старый 08.12.2011, 20:00   #22 (permalink)
Rume
Member
 
Регистрация: 07.12.2011
Сообщений: 39
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

спасибо, но почему то мне кажется что чего-то не хватает....
Rume вне форума   Ответить с цитированием
Старый 08.12.2011, 20:12   #23 (permalink)
Rume
Member
 
Регистрация: 07.12.2011
Сообщений: 39
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

не хочу показаться совсем дураком, но вот к примеру нам нужно написать текст процедуры ввода массива, табулирования функции, ResOut...просто без этого беда будет, а по скольку вы сказали, что в том, что я вам скидывал (в плане "программы") очень много ошибок, я не совсем знаю как это записать...
Rume вне форума   Ответить с цитированием
Старый 08.12.2011, 20:18   #24 (permalink)
Rume
Member
 
Регистрация: 07.12.2011
Сообщений: 39
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

и вот еще проблема, нужно не константами брать, а вызывать из различных подпрограмм (надеюсь правильно выразился). Тоесть например из программы высчитывания b мы вызываем это значение, а не задаем его в виде константы.
Rume вне форума   Ответить с цитированием
Старый 08.12.2011, 20:21   #25 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Rume Посмотреть сообщение
не хочу показаться совсем дураком, но вот к примеру нам нужно написать текст процедуры ввода массива, табулирования функции, ResOut...просто без этого беда будет, а по скольку вы сказали, что в том, что я вам скидывал (в плане "программы") очень много ошибок, я не совсем знаю как это записать...
Мне очень жаль, но я просто опять не понимаю, о чем речь. Вы выложили задачу, я написал программу, эту задачу решающую. Причем тут массивы? С какого они тут боку-припёку? Нет, не вижу. Извините.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 08.12.2011, 20:36   #26 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Rume Посмотреть сообщение
и вот еще проблема, нужно не константами брать, а вызывать из различных подпрограмм (надеюсь правильно выразился). Тоесть например из программы высчитывания b мы вызываем это значение, а не задаем его в виде константы.
Можно объединить программы. Например, так:
Код:
Const
 Xn=0.5;
 Xk=2.0;
 Dx=0.5;
 An=0.1;
 Ak=0.5;
 Da=0.1;
 a0=2.51;
 b0=-0.69;
Var
 x,a,b:Real;
 Na,Nx,i,j:Byte;

Function I0(x:real):Real;
begin
 I0:=0.5*Sin(x*2);
end;

Function I1(x:real):Real;
begin
 I1:=Cos(x*2)/4+x*Sin(x*2)/2;
end;

Function I2(x:real):Real;
begin
 I2:=x/2*Cos(x*2)+(sqr(x)/2-0.25)*Sin(x*2);
end;

Function I3(x:real):Real;
begin
 I3:=(sqr(x)*0.75-0.375)*Cos(x*2)+(x*sqr(x)/2-0.75*x)*Sin(x*2);
end;

Function I4(x:real):Real;
begin
 I4:=sqr(sqr(x))*Sin(x*2)/2-2.0*((sqr(x)*0.75-0.375)*Sin(x*2)-(x*sqr(x)/2-x*0/75)*Cos(x*2));
end;

Function f(xf,af:real):real;
begin
 If xf<1 then f:=Sin(af*xf/b) else
 f:=Sqrt(sqr(af)*sqr(sqr(xf))+sqr(b))/xf/sqr(xf);
end;

BEGIN
 b:=(I4(b0)+I3(b0)*2+I2(b0)*5+I1(b0)*4+I0(b0)*4)-(I4(a0)+I3(a0)*2+I2(a0)*5+I1(a0)*4+I0(a0)*4);
 Nx:=ROUND((Xk-Xn)/Dx);
 Na:=ROUND((Ak-An)/Da);
 for i:=0 to Na do
  begin
   a:=An+Da*i;
   for j:=0 to Nx do
    begin
     x:=Xn+Dx*j;
     Writeln('x=',x:3:1,'    a=',a:3:1,'    f=',f(x,a):0:5);
    end;
  end;
 Readln;
END.
Vladimir_S вне форума   Ответить с цитированием
Старый 08.12.2011, 21:16   #27 (permalink)
Rume
Member
 
Регистрация: 07.12.2011
Сообщений: 39
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Эхх...просто не смогу объяснить...
Попробую на примере показат тогда...(

---{b*sin^2ax при x<2
y={
---{xsqrt(ax+b) при Х>+2

Код:
Program TabRgr
const Nmax = 20
  type
Tmy=array[1..Nmax,1..Nmax] of Extended;
Tmx=array[1..Nmax] of Extended;
Ter=array[1..Nmax,1..Nmax] of integer;
  var
A,Mx:Tmx;
My: Tmy;
Xn,Xk,Dx,B,C,D,Xo,Eps,Z,Zt:Extended;
I,J,K,N,Err,Km:integer;
Er:Ter;
{Текст процедуры ввода массива}
Procedure DataIn(N: Integer;var A:Tmx);
var
  I:integer
begin
  for I:=1 to N do
   read(A[I]);
end;
 {Текст процедуры табулирования}
Procedure Tab(B,Xn,Xk,Dx:Extended; N:Integer; var Er:Ter;
var A,Mx:Tmx; Var My:Tmy};
var
  I,J:Integer;
  X,Y:Extended
begin
  for J:=1 to N do
   begin
     I:=1;
     X:=Xn;
     Er[J,I]:=0
repeat
   if X<2 then
     Y:=B*sqr(sin(A[j]*X))
    else if (A[j]*X+B)>0 then
        Y:=X*sqrt(A[J]*X+B)
       else Er[J,I]:=1;
       Mx[I]:=X; My[J,I]:=Y;
        Inc(I);
        X:=X+Dx;
      until X>Xk
    end;
end;
{Текст подпрограммы-функции}
Function F(C,D,X:Extended):Extended;
begin
  F:=C*sin(X)+X-D;
end;
{Пропустим нахождение корня}
{Текст процедуры вывода данных}
Procedure ResOut(Var Mx:Tmx; var A:Tmx; Var My:Tmy;
Var Er:Ter; K:integer);
Var
  I,J:Integer
begin
  for J:=1 to N do {Вывод результатов выполнения программы}
     begin
        writeIn('A[',J,']=',A[J]:8:4);
         writeIn('X',  'Y');
          for I:=1 to K do
           if Er[J,I]=1 then
            writeIn(Mx[I]:6:3, ' ошибка данных')
           else
            writeIn(Mx[I]:6:3,'   ',My[J,I]:6:3);
     end;
  end;

begin {Начало главной програмы}
 writeIn('Введите значение переменных:Xn,Xk,Dx,N');
 readIn(Xn,Xk,Dx,N);
writeIn('Xn=',Xn:4:2,' Xk=', Xk:4:2,' Dx=', Dx:4:2,' N=', N);
writeIn('Введите значения: параметров уравнения C,D; начального',
' приближения Xo, погрешности Eps, предельного числа циклов Km');
readIn(C,D,Xo,Eps,Km);
writeIn('C=',C:6:3, ' D=',D:6:3, ' Xo=',Xo:7:3, ' Eps=',Eps:7:5, ' Km=',Km:3);
  writeIn('Введите массив из N элементов');
   DataIn(N,A);    {Вызов подпрограммы ввода массива}
    Equat(Xo,Eps,Km,Err,Z); {Вызов подпрограммы  нахождения корня уравнения}
    if Err = 1 then
   begin
     writeIn('Корень не найден за', Km:2,' итераций');
     exit
    end;
   Zt:= F(C,D,Z);     {Погрешность вычисления корня по невязке}
   B:=Z;
  writeIn('Корень равен B=', B:4:2, ' Zt=', Zt:8:7);
 Tab(B,Xn,Xk,Dx,N,Er,A,Mx,My);    {Вызов подпрограммы табулирования}
 K:= trunc((Xk-Xn)/Dx+1);
ResOut(Mx,A,My,Er,K);                {Вызов подпрограммы вывода данных}    
readln;
end.
Кусок пропустил правда, но что смог - написал
Вот по этой программе мы должны были делать, лично я в ней нечего не понимаю(
Rume вне форума   Ответить с цитированием
Старый 08.12.2011, 21:50   #28 (permalink)
Rume
Member
 
Регистрация: 07.12.2011
Сообщений: 39
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Ладно, спасибо за проделанную работу, немного разными комментами подукрашу и будет небольшой шанс что пройдет
respect сайту и лично вам
Rume вне форума   Ответить с цитированием
Старый 08.12.2011, 22:12   #29 (permalink)
Rume
Member
 
Регистрация: 07.12.2011
Сообщений: 39
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Вот только если можно, не сможете сделать так, чтобы были не константы, а значения, которые пользователь вводит сам. И все, я перестану вам докучать.
Rume вне форума   Ответить с цитированием
Старый 09.12.2011, 09:28   #30 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Rume Посмотреть сообщение
лично я в ней нечего не понимаю
Я тоже. Тем более, там решается нелинейное уравнение, а мы вроде как договорились, что В ищем через интеграл. И в любом случае - не вижу в упор, зачем в этой задаче нужны массивы. По-моему, они тут "не пришей кобыле хвост".
Цитата:
Сообщение от Rume Посмотреть сообщение
Вот только если можно, не сможете сделать так, чтобы были не константы, а значения, которые пользователь вводит сам.
Пожалуйста:
Код:
Const
 a0=2.51;
 b0=-0.69;
Var
 x,a,b,Xn,Xk,Dx,An,Ak,Da:Real;
 Na,Nx,i,j:Byte;

Function I0(x:real):Real;
begin
 I0:=0.5*Sin(x*2);
end;

Function I1(x:real):Real;
begin
 I1:=Cos(x*2)/4+x*Sin(x*2)/2;
end;

Function I2(x:real):Real;
begin
 I2:=x/2*Cos(x*2)+(sqr(x)/2-0.25)*Sin(x*2);
end;

Function I3(x:real):Real;
begin
 I3:=(sqr(x)*0.75-0.375)*Cos(x*2)+(x*sqr(x)/2-0.75*x)*Sin(x*2);
end;

Function I4(x:real):Real;
begin
 I4:=sqr(sqr(x))*Sin(x*2)/2-2.0*((sqr(x)*0.75-0.375)*Sin(x*2)-(x*sqr(x)/2-x*0/75)*Cos(x*2));
end;

Function f(xf,af:real):real;
begin
 If xf<1 then f:=Sin(af*xf/b) else
 f:=Sqrt(sqr(af)*sqr(sqr(xf))+sqr(b))/xf/sqr(xf);
end;

BEGIN
 b:=(I4(b0)+I3(b0)*2+I2(b0)*5+I1(b0)*4+I0(b0)*4)-(I4(a0)+I3(a0)*2+I2(a0)*5+I1(a0)*4+I0(a0)*4);
 Write('Xn= ');
 Readln(Xn);
 Write('Xk= ');
 Readln(Xk);
 Write('Dx= ');
 Readln(Dx);
 Write('An= ');
 Readln(An);
 Write('Ak= ');
 Readln(Ak);
 Write('Da= ');
 Readln(Da);
 Nx:=ROUND((Xk-Xn)/Dx);
 Na:=ROUND((Ak-An)/Da);
 for i:=0 to Na do
  begin
   a:=An+Da*i;
   for j:=0 to Nx do
    begin
     x:=Xn+Dx*j;
     Writeln('x=',x:3:1,'    a=',a:3:1,'    f=',f(x,a):0:5);
    end;
  end;
 Readln;
END.
Цитата:
Сообщение от Rume Посмотреть сообщение
И все, я перестану вам докучать.
Да нет, обращайтесь, чем сможем - поможем.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




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

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.