Saturday, January 4, 2020

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

LabWork8
📑 IT Online Mini Campus. Task 2.3
IV. Программа SageMath (Python)
def F(k): return k^3-25*k^2+50*k+1000
def create_table(values,cond,a,b,m):
    t=[['k','f(k)']]; c=0
    s='<left>Number of others: %d</left>'
    for k in values:
        if cond(F(k),a,b,m): t.append([k,F(k)])
        else: c+=1
    show(table(t)); pretty_print(html(s%c))
def C21(v,a,b,m):
    c1=(abs(v)<=a+b+m)&(v<0)&(v<-(a+b)/m)
    c2=(abs(v)<=a+b+m)&(v>=0)
    if (c1 or c2): return True
    return False
N,A,B,M=20,3*10^4,6*10^4,4
var('K'); K1,K2=-29,60 
pretty_print(html('f(K)=%s'%str(K^3-25*K^2+50*K+1000)))
K=sample(range(K1,K2),N)
pretty_print(html('K=%s'%K))
create_table(K,C21,A,B,M)


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

LabWork8
📑 Compile Pascal Online
III. Программа Pascal
Program Lab8;
var C,K,M,N,i: integer;
var A,B,F: longint;
begin
    writeln('Лаб.8':38);
    readln(N); writeln('Количество элементов N: ',N:3);
    readln(A); writeln('Параметр A: ',A:5);
    readln(B); writeln('Параметр B: ',B:5);
    readln(M); writeln('Параметр M: ',M:3);
    i:=1; C:=0; 
    writeln('Таблица значений функции аргумента K: ');
    while i<N+1 do
    begin
        readln(K); 
        if (K>-30) and (K<60) then
        begin
            F:=K*K*K-25*K*K+50*K+1000;
            if ((abs(K)<=A+B+M) and (F<0) and (F<-(A+B)/M)) or ((abs(K)<=A+B+M) and (F>=0)) then
                writeln(i:3,' ',K:3,' ',F:6)
            else
                C:=C+1;
        end
        else
        begin
            writeln('Данные не корректны. Выполнение программы остановлено'); 
            break;
        end;
        i:=i+1;
    end;
    writeln('Количество других значений функции: ',C); 
end.
STDIN
20
30000
60000
4
-5
28
42
15
7
53
2
44
-10
10
-7
25
1
8
-6
-28
-8
17
-12
47




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

II. Алгоритм



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

LabWork8

I. Внешняя спецификация
1. Условие задачи
Целочисленная функция f(K)=K3-25K2+50K+1000 определена только для целых значений аргумента  K. 
Составить программу вычисления значений функции  f(K) для 20 значений аргумента K в интервале (-30,60) с выводом лишь тех значений, которые удовлетворяют заданному условию, и подсчетом остальных ее значений.
Для проверки работы программы задать значения 
A=3*104, B=6*104, M=4.
Условие для определения выводимых значений f(K):
- значение f(K) не превышает по абсолютной величине сумму A+B+M, а если оно отрицательно, то к тому же меньше значения -(A+B)/M.

2. Состав данных
Тип
Имя
Смысл
Структура
Исходные данные
целый
A
параметр для определения выводимых значений функции
простая переменная
целый
B
параметр для определения выводимых значений функции
простая переменная
целый
M
параметр для определения выводимых значений функции
простая переменная
целый
N
количество значений аргумента
простая переменная
целый
K
аргумент функции
простая переменная
Выходные данные
целый
F
значение функции
простая переменная
целый
C
количество значений функции, не удовлетворяющих условию
простая переменная
Промежуточные данные
целый
i
номер элемента массива
простая переменная

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

4. Выходная форма
1 3
<N>
1 5
<A>
1 5
<B>
1 3
<M>
1 3
<i >
1 3
<K >
1 6
<F >
...
...
...
1 3
<i >
1 3
<K >
1 6
<F>
1 3
<C>

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

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

20
30000
60000
4
-5
28
42
15
7
53
2
44
-10
10
-7
25
1
8
-6
-28
-8
17
-12
47

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

20
30000
60000
4
58
48
45
L
K
-27
8

20
30000
60000
4
58
78
45
89
-30
31