Monday, January 13, 2020

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

LabWork13
📑 IT Online Mini Campus. Task 2.5.3

IV. Программа SageMath (Python)
N1=5; S=False; A=N(10*random_matrix(RR,N1),digits=2)
N2=5; CN=[]; C=[round(random(),1) for i in range(N2)]
pretty_print(html(r'$A=%s$<br/><br/>$C=%s$'%\
                  (latex(A),latex(C))))
for i in range(N1):
    CN.append(C[i]+A[i,i])
    for j in range(i+1,N1):
        if C[i]==C[j]: S=True
if S: C=CN
pretty_print(html(r'$C=%s$'%latex(C)))




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

LabWork13
📑 Compile Pascal Online
III. Программа Pascal
Program Lab13;
type ReArr=array [0..1000] of real;
var C,CN: ReArr;
var i,j: integer;
var c1,c2: boolean;
var SC,SA,SCN,st: string;
function st2ar(a:string;n:integer): ReArr;
var k: integer;
var x: real;
var ka: string;
begin
    st2ar[n]:=0;
    for k:=1 to n do
    begin 
        if k=n then ka:=a else 
            ka:=copy(a,1,pos(' ',a)-1); 
        val(ka,x); delete(a,1,pos(' ',a));
        if ((x<>0) or ((x=0) and (ka='0'))) then
            st2ar[k-1]:=x
        else
        begin
            st2ar[n]:=1; break;
        end;
    end;
end;
begin
    writeln('Лаб.13':38);
    c1:=true; c2:=false; SCN:='';
    readln(SC); C:=st2ar(SC,5);
    writeln('Исходный массив C: ',SC);
    if C[5]=1 then c1:=false; 
    writeln('Матрица A: ');
    for i:=1 to 5 do
    begin 
        readln(SA); writeln(SA); 
        CN[i-1]:=st2ar(SA,5)[i-1];
        if st2ar(SA,5)[5]=1 then c1:=false;
        CN[i-1]:=CN[i-1]+C[i-1];
        str(CN[i-1]:5:2,st); SCN:=concat(SCN,st);        
        for j:=1 to 5 do
        begin
            if ((i>j) and (C[i-1]=C[j-1])) then
                c2:=true;
        end;
    end;
    if c2 then SC:=SCN;
    if c1 then writeln('Полученный массив C: ',SC)
    else writeln('Данные не корректны');
end.


STDIN
0.5 0.8 0.6 0.6 0.7
-8.1 8.2 -6.6 0.97 3.8 
0.028 3.8 -9.8 9.9 -1.8
-4.4 -1.8 0.79 4.1 9.2 
8.3 -1.1 3.3 9.2 -4.4 
6.0 2.3 9.2 8.0 8.4







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

LabWork13
II. Алгоритм

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

I. Внешняя спецификация
1. Условие задачи
Разработать алгоритм и программу нисходящим способом, предполагая заданной матрицу А из 5 строк и 5 столбцов или одномерные массивы указанной длины.
  • Если в последовательности С1, С2, …, С5 имеются равные элементы, изменить значения всех ее элементов по правилу:
Ci:=Ci+Aii.


2. Состав данных
Тип
Имя
Смысл
Структура
Исходные данные
символ
SC
строка элементов последовательности С, разделенных пробелом
строка
символ
строка для считывания элементов текущей строки матрицы А, разделенных пробелом
строка
Выходные данные
символ
SC
строка элементов последовательности С, разделенных пробелом
строка
Промежуточные данные
вещественный
C
исходные данные последовательности для обработки
одномерный массив
целый
i
текущее значение номера элемента последовательности
простая переменная
целый
j
текущее значение номера элемента последовательности для сравнения с элементом под номером i
простая переменная
логический
c1
переменная, означающая корректность (true) или некорректность (false) данных последовательности С или матрицы А
простая переменная
логический
c2
переменная, означающая наличие (true) или отсутствие (false) одинаковых элементов последовательности С
простая переменная
вещественный
CN
последовательность С, изменненная в соответствии с условием задачи 
Ci:=Ci+Aii
одномерный массив
символ
st
текущий элемент последовательности CN, сохраненный в виде строки
строка
символ
SCN
строка для элементов получившейся последовательности СN, разделенных пробелом
строка


3. Форма ввода
1 5
<С1>
...
1 5
<С5>
1 5
<A11>
...
1 5
<A15>
...
1 5
<A51>
...
1 5
<A55>


4. Выходная форма
1 5
<С1>
...
1 5
<С5>
1 5
<A11>
...
1 5
<A15>
...
1 5
<A51>
...
1 5
<A55>
1 5
<С1>
...
1 5
<С5>


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


function st2ar(a:string; n:integer): ReArr;
var k: integer;
var x: real;
var ka: string;
begin
    st2ar[n]:=0;
    for k:=1 to n do
    begin 
        if k=n then ka:=a else 
            ka:=copy(a,1,pos(' ',a)-1); 
        val(ka,x); delete(a,1,pos(' ',a));
        if ((x<>0) or ((x=0) and (ka='0'))) then
            st2ar[k-1]:=x
        else
        begin
            st2ar[n]:=1; break;
        end;
    end;
end;


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


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


0.5 0.8 0.6 0.6 0.7
-8.1 8.2 -6.6 0.97 3.8
0.028 3.8 -9.8 9.9 -1.8
-4.4 -1.8 0.79 4.1 9.2
8.3 -1.1 3.3 9.2 -4.4
6.0 2.3 9.2 8.0 8.4




0.9 0.2 0.4 0.5 0.1
7.6 6.8 -0.73 5.2 0.79
3.7 -8.3 -2.3 -6.2 9.3
4.1 5.4 -2.8 -2.0 4.4
-7.0 -7.7 9.1 3.5 8.2
-4.9 2.8 -0.90 4.7 0.60




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


5.1 -2.9 1.1 0.7 1.1
-12.3 7.8 -4.2 0.1 -2.8
0.4 A -11.2 -5.9 1.1
3.4 7.8 S -9.1 12.2
3.3 -8.1 -3.3 5.2 4.74
6.5 -2.3 -1.2 3.0 7.4