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


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

LabWork3
📑 IT Online Mini Campus. Task 1.4.1
IV. Программа SageMath (Python)
Вариант 1 (с проверкой условия)
V=0; N=5; c=0; s='Данные не корректны'
R=[282.26,246.19,943.02,902.51,245.93]
H=[112.35,184.01,0,1414.61,91.32]
for i in [0..N-1]: 
    if (R[i]<=0 or H[i]<0 or 2*R[i]<H[i]):
        pretty_print(s); c=1; break   
    else: V+=pi*H[i]^2*(R[i]-H[i]/3)
t=[['radiuses',html(ascii_art('%s'%R))],
   ['heights',html(ascii_art('%s'%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,H=[],[]
for i in [0..N-1]: 
    R+=[round(random()*1000,2)]
    H+=[round(2*random()*R[i],2)]
    V+=pi*H[i]^2*(R[i]-H[i]/3)
t=[['radiuses',html(ascii_art('%s'%R))],
   ['heights',html(ascii_art('%s'%H))],
   ['volume',html(ascii_art('<p>$%s$</p>'\
   %[latex(V),latex(V.n())]))]]
table(t)


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

📑 Compile Pascal Online
Для проверки текст программы копируется в main.pas, данные (каждое число на новой строке) - в STDIN.
III. Программа Pascal
Program Lab3;
var R,H: array [0..1000] of real;
    N,i,c: integer;
    V: real;
begin
    writeln('Лаб.3':38);
    c:=0; V:=0;
    writeln('Количество резервуаров N: '); 
    readln(N); writeln(N:3);
    i:=0; 
    while i<N do
    begin
        writeln('Номер резервуара i: ',i+1);
        readln(R[i]); readln(H[i]);
        write('Радиус резервуара R: ',R[i]:5:2);
        write('Уровень топлива H: ',H[i]);
        if ((R[i]<=0) or (H[i]<0) or (2*R[i]<H[i])) then
        begin
            writeln('Данные не корректны');
            c:=1; break;
        end
        else
            if H[i]>0 then 
                V:=V+Pi*exp(2*ln(H[i]))*(R[i]-H[i]/3);  
        i:=i+1;
    end;
    if c=0 then
    begin
        write('Суммарный объем топлива V: ',V:15:4);
    end;
end.

STDIN
5
282.26
112.35
246.19
184.01
943.02
0
902.51
1414.61
245.93
91.32