Tuesday, December 31, 2019

ЛР5 Программирование (1.6 В21) - IV

LabWork5
📑 IT Online Mini Campus. Task 1.6
IV. Программа SageMath (Python)
def create_table(f,a,x1,dx,n):
    t=[['n','X','Y≈']]
    for i in [1..n]:
        t.append([i,x1,f(a,x1)]); x1+=dx
    show(table(t))
def f21(a,x):
    if x<3*a: return -a*exp(x-3*a)
    else: return -a-a*log(x-3*a)
var('a,x'); A21=.8; X21,dX21=-4*A21,2*A21/5
s21='$x<3a => f(x)=%s; x>=3a => f(x)=%s$'
s21=s21%(latex(-a*exp(x-3*a)),
         latex(-a-a*log(x-3*a)))
pretty_print(html(s21)) 
create_table(f21,A21,X21,dX21,20)


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

LabWork5
📑 Compile Pascal Online
III. Программа Pascal
Program Lab5;
var A,KX1,KdX,X,Y: real;
    N,i: integer;
begin
    writeln('Лаб.5':38);
    write('Количество значений N: '); 
    readln(N); writeln(N:3);
    write('Значение параметра A: '); 
    readln(A); writeln(A:5:2);
    write('KX1 => X1=KX1*A: '); 
    readln(KX1); X:=KX1*A;
    write(KX1:5:2); write('=>'); writeln(X:5:2);  
    write('KdX => dX=KdX*A: '); 
    readln(KdX); write(KdX:5:2); 
    write('=>'); writeln(KdX*A:5:2);
    i:=1; writeln('Таблица значений');
    while i<N+1 do
    begin
        if X<3*A then
            Y:=-A*Exp(X-3*A)
        else
            Y:=-A-A*Ln(X-3*A);
        write(X:5:2); write(', '); writeln(Y:5:4);
        X:=X+KdX*A; i:=i+1;
    end;
end.

STDIN
20
0.8
-4
0.4


Monday, December 30, 2019

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

LabWork5
II. Алгоритм


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

LabWork5
I. Внешняя спецификация
1. Условие задачи
Составить программу вычисления N значений функции Y для X, изменяющегося от X1 с шагом dX. Для проверки правильности программы задать значения для A, X1 и dX из второй таблицы.

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

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

4. Выходная форма

1 3
<N>
1 5
<A>
1 5
<KX1>
1 5
<KdX>
1 5
<X>
1 5
<Y>
...
1 5
<X>
1 5
<Y>

5. / 6. Проработка фрагментов программы
Значение функции существует при любых значениях аргумента.
Проверки дополнительных условий не требуется.

7. Аномалии
Ошибки программы возможны при некорректном вводе данных пользователем.
Сообщение об ошибке в таких случаях выдает компилятор.

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

20
0.8
-4
0.4

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

10
A
-3
0.1

Tuesday, December 24, 2019

ЛР4 Программирование (1.3.3 В22) - IV

IV. Программа SageMath (Python)
Вариант 1 (с проверкой условия)
V=0; N=3; c=0; R=4.17; H=2.79 
s='Данные не корректны'
if (R<=0 or H<=0):
    pretty_print(s); c=1   
else: 
    for i in range(N):
        V+=.5*pi*H^2*(R+(i+1)*H/2-H/6)
t=[['number',N],['radius',R],['height',H],
   ['volume',html(ascii_art('<p>$%s$</p>'\
   %[latex(V),latex(V.n())]))]]
if c==0: show(table(t))


Вариант 2 (программа генерирует случайные данные, подходящие по условию)
V=0; N=7 
R=round(random()*10,2)
H=round(1+random()*3,2)
for i in range(N):
    V+=.5*pi*H^2*(R+(i+1)*H/2-H/6)
t=[['number',N],['radius',R],['height',H],
   ['volume',html(ascii_art('<p>$%s$</p>'\
   %[latex(V),latex(V.n())]))]]
table(t)


ЛР4 Программирование (1.3.3 В22) - III

LabWork4
📑 Compile Pascal Online
Для проверки текст программы копируется в main.pas, 
данные (каждое число на новой строке) - в STDIN.
III. Программа Pascal
Program Lab4;
var R,H,V: real;
    N,i,c: integer;
begin
    writeln('Лаб.4':38);
    c:=0; V:=0;
    write('Количество дисков N: '); 
    readln(N); writeln(N:3);
    write('Радиус колышка R: '); 
    readln(R); writeln(R:5:2);  
    write('Толщина диска H: '); 
    readln(H); writeln(H:5:2);
    if ((R<=0) or (H<=0)) then
    begin
        writeln('Данные не корректны'); c:=1;
    end
    else
        i:=1; 
        while i<N+1 do
        begin
            V:=V+0.5*Pi*H*H*(R+i*H/2-H/6); i:=i+1;
        end;
    if c=0 then
    begin
        write('Объем игрушки V: '); writeln(V:7:4);
    end;
end.

STDIN
3
4.17
2.79


ЛР4 Программирование (1.3.3 В22) - II

LabWork4
II. Алгоритм
II. Алгоритм
V:=V+0.5*𝜋*H*H*(R+i*H/2-H/6)


ЛР4 Программирование (1.3.3 В22) - I

I. Внешняя спецификация
1. Условие задачи
Составить алгоритм и программу для вычисления в цикле суммарного результата.
Определить объем симметричной игрушки, состоящей из N дисков, нанизанных в порядке убывания их внешнего диаметра на колышек радиуса R, объем которого задан. Внешний диаметр диска определяется выражением D=2R+KH, где Н - заданная толщина диска (она одинакова для всех дисков), К - номер диска, считая от верхнего. Зазором между диском и колышком пренебречь.
Замечание. 
Диск толщиной Н представляет собой два шаровых сегмента высотой Н/2. Радиус каждого диска соответственно равен R+KH/2.
Объем одного диска (с номером К): 

Задача решена при условии, что объем колышка не исключается из объема игрушки.

2. Состав данных
Тип
Имя
Смысл
Структура
Исходные данные
вещественный
R
диаметр внутреннего колышка
простая переменная
вещественный
H
толщина каждого диска
простая переменная
целый
N
количество дисков
простая переменная
Выходные данные
вещественный
V
суммарный объем игрушки с N дисками
простая переменная
Промежуточные данные
целый
i
номер диска
простая переменная
целый
c
индекс выполнения условий корректности данных (0 - выполняется, 1 - не выполняется)
простая переменная

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

4. Выходная форма
1 3
<N>
1 5
<R>
1 5
<H>
1  7
<V>

5. / 6.
Вычисления производятся после проверки условия:
все исходные данные - положительные величины (R>0, H>0).
7. Аномалии
Радиус и толщина диска не могут принимать отрицательные значения или быть равными нулю.
R<=0, H<=0

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

3
4.17
2.79


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

5
-3.22
7.18