1. Mr Tommy21.05.2025 в 01:15от
Загрузка...

Pascal ABC.Нужно подкорректировать 2 задачки.

Тема в разделе "С/С++/Pascal/Delphi", создана пользователем Valet194, 18.06.2015.

  1. Valet194

    Valet194

    Статус:
    Оффлайн
    Регистрация:
    07.12.12
    Сообщения:
    16
    Репутация:
    163 +/-
    Задача 1 (не актуально,запилил сам)
    Условие: составить алгоритм и программу вычисления:
    -исследовать методами математического анализа поведение функции при заданных значениях аргумента.
    -результаты вычислений вывести на экран в виде таблицы.
    -значения аргумента Xmin=0;Xmax=3. Прирост Δх=0.1 . Для тригонометрических функций нужно включить значение х, кратное числу Pi (Pi/4, Pi/2, 3Pi/4, Pi).

    Таблица значений функций прилагается,а также сами 7 функций к табулированию.
    [​IMG]
    [​IMG]
    -------
    А теперь что получилось у меня.

    Program lab4;
    Uses Crt;
    Const pi=3.1415926;
    Var i:integer;
    x:real;
    Function fun1(x:real):real;
    begin
    fun1:=x* (x-1) * (x-1) * (x-1) * (x-1);
    end;
    Function fun2(x:real):real;
    begin
    fun2:=sqrt(1+x)/sqr(x);
    end;
    Function fun3(x:real):real;
    begin
    fun3:=sqr(1-sin(x))/sin(x);
    end;
    Function fun4(x:real):real;
    begin
    fun4 := 1/ (1-lol (-x));
    end;
    Function fun5(x:real):real;
    begin
    fun5 :=sqr (x) / ( (lol (x) +lol (-x) ) /2) ;
    end;
    Function fun6(x:real):real;
    begin
    fun6:=1/(ln(sqr(x)+1));
    end;
    Function fun7(x:real):real;
    begin
    fun7:= ((lol (x) -lol (-x) ) /2) *sin (x);
    end;
    Procedure FBI(x:real);
    begin
    write(x:2:1,' ');
    write(fun1(x): 9: 3);
    if ((x=0) or ((x)<1)) then write(' ---- ') else write(fun2(x):8:3);
    if ((x=0) or (x=pi)) then write(' ---- ') else write(fun3(x):8:3);
    if x=0 then write(' ____ ') else write(fun4(x):8:3);
    write(fun5(x):8:3) ;
    if x=0 then write(' ____ ') else write(fun6(x):8:3);
    write(fun7(x):8:3);
    end;
    BEGIN
    ClrScr;
    writeln (' x fun1 fun2 fun3 fun4 fun5 fun6 fun7');
    x:=0;
    for i:=1 to 31 do
    begin
    writeln;
    FBI(x);
    x:=x+0.1;
    end;
    x:=pi/4;
    for i:=1 to 4 do
    begin
    writeln;
    FBI(x);
    x:=x+pi/4;
    end;
    readln;
    END.

    Программа считает не корректно,помогите найти ошибку.Например:почему оно не может найти sqrt(1+x)/sqr(x) при х=0.8 ,будет же где-то около 2. Скрин результатов ниже.
    [​IMG]

    Пожалуйста,не проходите мимо,буду очень благодарен за помощь,а за готовый переделанный код вообще буду безгранично благодарен.

    -----------------------------------------------
    Задача 2 (актуально,ещё нужна помощь)

    Нужно в паскале просортировать массив А=[аі] без уменьшения методом простых вставок.
    Сам метод:
    Я загуглил,хз так ли,лучше сами погуглите.
    Метод простых вставок

    Последовательно просматриваем a1 , …, an-1 и каждый новый элемент ai вставляем на подходящее место в уже упорядоченную совокупность ai-1 , …, a1 . Это место определяется последовательным сравнением ai с упорядоченными элементами a0 , …, ai-1 .

    (*******************************************************
    Процедура для сортировки массива.
    Принимает:
    *массив значений a с индексами элементов от 0 до N-1
    *число элементов N
    *******************************************************)
    procedure InsertionSort(var Arr : array of Real; N : Integer);
    var
    I : Integer;
    J : Integer;
    K : Integer;
    Tmp : Real;
    begin
    dec(N);
    i:=1;
    repeat
    j:=0;
    repeat
    if Arr<=Arr[j] then
    begin
    k:=i;
    Tmp:=Arr;
    repeat
    Arr[k]:=Arr[k-1];
    dec(k);
    until not(k>j);
    Arr[j]:=Tmp;
    j:=i;
    end
    else inc(j);
    until not(j<i);
    inc(i);
    until not(i<=n);
    end;


    Мой модуль:

    Unit GTA;
    interface
    type
    massiv=array[1..1000] of real;
    procedure Theft(d:integer);
    procedure Grand(f:integer);
    procedure Autov(f:integer);
    implementation
    Procedure Grand(f:integer);
    Var A:massiv; i,n:integer;
    begin
    n:=f;
    for i:=1 to n do
    begin
    write('A[',i,'] = ');
    readln(A);
    end;
    end;
    Procedure Autov(f:integer);
    Var A:massiv; i,n:integer;
    begin
    n:=f;
    for i:=1 to n do
    begin
    writeln('A[',i,'] =',A:3:0);
    end;
    end;
    Procedure Theft(d:integer);
    Var
    i,imax,n:integer;
    A:massiv;
    Max:real;
    Begin
    n:=d;
    for i:=1 to n do
    begin
    if (A>A[i+1]) then
    begin
    Max:=A;
    imax:=i;
    A:=A[i+1];
    A[i+1]:=Max;
    end;
    end;
    end;
    end.


    Программа использующая модуль:

    Program lab5;
    Uses Crt,GTA;
    Const m=6;
    Var
    i,j,imax:integer;
    A:massiv;
    Max:real;
    BEGIN
    ClrScr;
    Grand(6);
    for j:=1 to m do
    begin
    Theft(6);
    end;
    writeln;
    Autov(6);
    readln;
    END.

    Она запускается,но получаются только нули.
    [​IMG]
    Одногрупник подсказал,что у меня массивы просто копируются между функциями и в параметрах которые принимают функции нужно написать var A:massiv.И тогда в программе все функции будут вида Grand(6,A).
    Да вот только у меня что-то не получается,так ли на самом деле?Если да - то можете вставить у себя и скинуть мне код,может тогда у меня заработает.

    Спасибо за внимание.Надеюсь на вашу помощь программисты.Всех,кто поможет,отблагодарю.
     
    Последнее редактирование: 19.06.2015