Показать сообщение отдельно

  #10  
Старый 02.06.2009, 16:10
Feonor
Участник форума
Регистрация: 23.07.2008
Сообщений: 202
С нами: 9369202

Репутация: 122
По умолчанию

Цитата:
Сообщение от SHAXID  
Код HTML:
program tr_s;    uses crt,graph;    var    a,b:real; { Границы отрезка }    r,r2:real; { Предыдущее и текущее приближенные значения интеграла }    n:integer; { Счетчик }    { Интегрируемая функция }    function f(x:real):real;    begin    f:=1/(x*ln(x)*0.43429);    end;    { Метод трапеций }    function trap(a,b:real;n:integer):real;    var    s:real; { Полученная сумма }    h:real; { Шаг }    m:integer; { Счетчик }    begin    h:=(b-a)/(n-1); { Определяется шаг }    s:=(f(a)+f(b))/2; { Начальное значение суммы }    for m:=1 to n-2 do s:=s+f(a+m*h); { Суммирование остальных элементов }    trap:=s*h; { Возвращается значение интеграла }    end;    { Метод Симпсона }    function simpson(a,b:real;n:integer):real;    var    s:real; { Сумма }    h:real; { Шаг }    m:integer; { Счетчик }    mn:integer; { Очередной множитель }    begin    h:=(b-a)/(n-1); { Рассчитывается шаг }    s:=f(a)+f(b); { Начальное значение шага }    mn:=4; { Первый множитель - 4 }    { Суммирование остальных элементов }    for m:=1 to n-2 do begin    s:=s+mn*f(a+h*m);    if (mn=4) then mn:=2 else mn:=4;{Изменение множителя 2<>4 }    end;    simpson:=s*h/3; { Возвращается вычисленное значение }    end;    { Процедура вычисления порядка числа }    procedure norm(a:real);    var n:real;    begin    { Если число слишком мало - возвращается ноль }    if (a<0.00001) then n:=0    else begin    { Если число меньше единицы }    if (a<1) then begin    n:=1;    repeat    a:=a*10;    n:=n/10;    until (trunc(a)<>0);    end else begin    { Если число больше единицы }    n:=1;    repeat    a:=a/10;    n:=n*10;    until (trunc(a)=0);    end;    end;    a:=n;    end;    { Построение графика функции }    procedure out_grp(xmin,xmax,ymin,ymax:real);    var    drv,mode:integer;    mx,my:real; { Масштабы по осям }    xx,yy:real; { Текущие координаты }    sx:real; { Шаг по оси X }    dltx,dlty:integer;{ Приращение на графике при смещении графика }    s:string; { Строка }    begin    { Инициализация графики }    drv:=VGA;    mode:=VGAHi;    initgraph(drv,mode,'');    { Выяснение порядков минимумов и максимумов }    norm(xmax);    norm(ymax);    norm(ymin);ymin:=ymin/10;    norm(xmin);ymin:=ymin/10;    if (xmin/xmax)>0.01 then dltx:=20 else dltx:=0;    if (ymin/ymax)>0.01 then dlty:=20 else dlty:=0;    { Расчет масштабов }    mx:=500/(xmax-xmin);    my:=400/(ymax-ymin);    { Расчет приращение по X }    sx:=(xmax-xmin)/550;    { Вывод системы координат  }    settextjustify(1,1);    xx:=xmin;    repeat    setcolor(1);    line(trunc(40+mx*(xx-xmin)+dltx),20,trunc(40+mx*(xx-xmin)+dltx),469);    str(xx:4:2,s);    setcolor(15);    outtextxy(trunc(40+mx*(xx-xmin)+dltx),475,s);    xx:=xx+50*sx;    until (xx>(xmax+50*sx));    yy:=ymin+(ymax-ymin)/10;    repeat    setcolor(1);    line(41,trunc(470-my*(yy-ymin)-dlty),630,trunc(470-my*(yy-ymin)-dlty));    str(yy:4:2,s);    setcolor(15);    outtextxy(20,trunc(470-my*(yy-ymin)-dlty),s);    yy:=yy+(ymax-ymin)/10;    until (yy>(ymax+(ymax-ymin)/10));    line(40,0,40,480);    line(0,470,640,470);    line(40,0,38,10);    line(40,0,42,10);    line(640,470,630,472);    line(640,470,630,468);    { Вывод графика }    xx:=xmin;    repeat    yy:=f(xx);    putpixel(trunc(40+mx*(xx-xmin)+dltx),trunc(470-my*(yy-ymin)-dlty),7);    xx:=xx+sx;    until (xx>xmax);    outtextxy(300,10,' Press ESC to continue ');    repeat until (readkey=#27);    closegraph;    end;    { Основная программа }    begin    { Ввод границ отрезков }    clrscr;    write(' Vvedite A,B: ');    readln(a,b);    { Выводится график функции }    out_grp(a,b,f(b),f(a));    { Вычисляется интеграл по методу трапеции }    n:=3;    r:=trap(a,b,n); { Начальное значение }    repeat    r2:=r; { Запоминается предыдущее значение }    n:=n+2; { Увеличивается количество шагов }    r:=trap(a,b,n); { Рассчитывается новое значение }    until (abs(r-r2)<0.001);{ Повторяется до достижения необходимой точности }    { Вывод результатов }    writeln(' Rezultat po metodu trapeciy raven: ',r:6:3);    writeln(' dlya polucheniya neobhodimoy tochnosti interval byl razbit na ');    writeln(n,' otrezkov ');    { Вычисляется интеграл по методу Симпсона }    n:=3;    r:=simpson(a,b,n); { Начальное значение }    repeat    r2:=r; { Запоминается предыдущее значение }    n:=n+2; { Увеличивается количество шагов }    r:=simpson(a,b,n); { Рассчитывается новое значение }    until (abs(r-r2)<0.001);{ Повторяется до достижения необходимой точности }    { Вывод результатов }    writeln;    writeln(' Rezultat po metodu Simpsona raven: ',r:6:3);    writeln(' dlya polucheniya neobhodimoy tochnosti interval byl razbit na ');    writeln(n,' otrezkov ');      end.
какой изврат в щелку писать ппц))) +1
 
Ответить с цитированием