Sunday, December 22, 2019

ЛР2 Программирование (1.3.1 В21) - I

LabWork2
I. Внешняя спецификация
1. Условие задачи

Тело С, покоящееся на расстоянии R м от тела В (ниже и левее последнего), начинает движение по горизонтальной прямой вправо, а тело В остается неподвижным. Расстояние между телами сокращается до Т м (когда тело С проходит под телом В), а затем опять начинает увеличиваться. Вычислить расстояние между телами через 1, 2, …, N с после начала движения тела С, если его ускорение равно А.

D[i]:=abs(sqrt(T*T+exp(2*ln(0.5*A*i*i-sqrt(R*R-T*T)))))

2. Состав данных
Тип
Имя
Смысл
Структура
Исходные данные
вещественный
A
ускорение тела С
простая переменная
вещественный
R
расстояние от тела С до тела В в начальный момент времени
простая переменная
вещественный
Т
минимальное расстояние от тела С до тела В
простая переменная
целый
N
количество значений величины “время”
простая переменная
Выходные данные
вещественный
D
расстояние между телами С и В через 1, 2, …, N с после начала движения тела С
одномерный массив
Промежуточные данные
целый
i
номер вычисляемого значения функции расстояния и одновременно время с момента начала движения в секундах
простая переменная

3. Форма ввода
1 3
<N>
1 5
<A>
1 5
<R>
1 5
<T>

4. Выходная форма
1 3
<N>
1 5
<A>
1 5
<R>
1 5
<T>
1 3
<i>
1 7
<D[1]>
...
...
1 3
<i>
1 7
<D[N]>

5. / 6. 
Вычисления производятся после проверки условий:
1) A>0 (тело движется только в одном направлении);
2) R>=T (расстояние между телами не может быть меньше Т).
7. Аномалии
1) A<=0;
2) R<T.

8. Тесты
1) с отрицательным результатом ⇒

10
-3.1
15.6
12.1


5
2.7
5.9
24.1


2) с положительным результатом ⇒

7
3.2
23.1
9.4


ЛР1 Программирование (1.1-1.2 В21) - IV

LabWork1
📑 IT Online Mini Campus. Task 1.1. Task 1.2
IV. Программа  SageMath (Python)
var('x'); A,B,N=.55,1,10; X1,X2=1000,6000
def F(f,x,a,b): 
    try: return round(f(x),4)
    except: return NaN
    if a>=b: return NaN
def create_table(f,a,b,n):
    d=(b-a)/(n-1); x0=randint(X1,X2)*.1^4    
    t=[[round(x,4),F(f,x,a,b)] for x in srange(a,b+d,d)]
    pretty_print(html(latex(f)))
    pretty_print(html('x=%.4f ↦ f(x)=%s'%(x0,F(f,x0,a,b))))
    show(table([['x','f(x)']]+t))
    return t
def create_plottable(f,a,b,n): 
    t=create_table(f,a,b,n)
    list_plot(t).show(gridlines=True,figsize=4)
f21(x)=(sin(x*pi/2)+x^(1/5))/(sqrt(abs(cos(pi*x)+1))*exp(sqrt(x)))
create_plottable(f21,A,B,N)


import sympy; from sympy import *
sympy.init_printing(use_unicode=True)
x=Symbol('x')
y=(sin(x*pi/2.)+x^(1/5.))/(sqrt(abs(cos(pi*x)+1.))*exp(1.)^sqrt(x));
a,b,n=.55,1,10; d=(b-a)/(n-1)
print('x   -> f(x)'); print(15*'-')
for t in range(n):
    x0=a+t*d
    if cos(pi*x0)!=-1 and x0>0 and a<b:
        pprint('%.2f, %.4f'%(x0,y.evalf(subs={x:x0}))); print(15*'-')
    else:
        pprint('%.2f, %s'%(x0,'NaN'))
plot(y,(x,.55,1),ylim=(0,30));


ЛР1 Программирование (1.2 В21) - III

LabWork1
📑 Compile Pascal Online
Для проверки текст программы копируется в main.pas, 
данные (каждое число на новой строке) - в STDIN.
III. Программа Pascal
Program Lab1;
var N,i: integer;
    A,B,X,Y,d: real;
begin
    writeln('Лаб.1':38);
    writeln('Количество значений функции N: '); 
    readln(N); writeln(N:3);
    writeln('Нижняя границ отрезка A: '); 
    readln(A); writeln(A:5:2);
    writeln('Верхняя границ отрезка B: '); 
    readln(B); writeln(B:5:2);
    i:=1; X:=A; d:=(B-A)/(N-1);
    writeln('Таблица значений аргумента и функции');
    while i<N+1 do
    begin
        write(i:3,' '); write(X:5:2,' ');
        if ((X<0) or (cos(Pi*X)=-1) or (A>=B)) then
            writeln(' NaN')
        else
        begin
            Y:=(sin(Pi*X/2)+exp(ln(X)/5))/(sqrt(abs(cos(Pi*X)+1))*exp(sqrt(X)));
            writeln(Y:5:2);
        end;
        i:=i+1; X:=X+d;
    end;
end.

STDIN
10
1.4
2.9


ЛР1 Программирование (1.2 В21) - II

 LabWork1
II. Алгоритм


ЛР1 Программирование (1.2 В21) - I

LabWork1
I. Внешняя спецификация
1. Условие задачи
Вычислить таблицу значений функции f(x) для N значений аргумента X, равномерно распределенных на отрезке [A,B]. 

Для проверки программы задать N=10; A=0.55; B=1.

2. Состав данных
Тип
Имя
Смысл
Структура
Исходные данные
вещественный
A
нижняя граница заданного отрезка
простая переменная
вещественный
B
верхняя граница заданного отрезка
простая переменная
целый
N
количество значений на заданном отрезке
простая переменная
Выходные данные
вещественный
Y
значение функции
простая переменная
вещественный
X
значение аргумента
простая переменная
Промежуточные данные
вещественный
d
величина изменения значения аргумента
простая переменная
целый
i
номер вычисляемого значения функции
простая переменная

3. Форма ввода
1 3
<N>
1 5
<A>
1 5
<B>

4. Выходная форма
1 3
<N>
1 5
<A>
1 5
<B>
1 3
<i>
1 5
<X>
1 5
<Y>
...
1 3
<i>
1 5
<X>
1 5
<Y>

5. / 6. Проработка фрагментов программы
Вычисления производятся после проверки 3-х условий:
1) Х≥0
2) cos(𝞹X)+1≠0
  X≠2*n+1, ⟇n∈N
3) B>A
Дополнительный блок проверки:

7. Аномалии
1) Х<0
2) mod(Х,2)=1
3) A≥B

8. Тесты
1) с отрицательным результатом ⇒

12
2


10
0.55
1


5
-3
2


2) с положительным результатом ⇒

10
1.4
2.9