написать интерфейс для готовой программы и соединить полученный код с моим(предоставленным) в Python. # Лист 1 # A1:F1 print("Введите наименования телефонов") a = [] for i in range(0, 6, 1): print("Введите телефон ", i) a.insert(i, input()) print("Введите наименование критерия") # A2:D2 c = [] for i in range(0, 9, 1): print("Введите критерий", i) c.insert(i, input()) # A3:C3 b = [[9900, 2000, 13, 5.2, 2000, 16, 1, 64, 5], [5500, 3500, 12, 6.5, 6000, 64, 1, 48, 8.5], [6700, 4200, 40, 6.5, 8000, 256, 1, 64, 9], [10000, 4000, 40, 6, 8000, 128, 2, 48, 9], [15500, 3200, 40, 6.5, 6000, 256, 2, 48, 9], [20080, 6700, 48, 6.3, 4000, 64, 2, 14, 10]] # A4:до конца листа d = [] print("Введите + и - значения критериев") h = 0 while h != 9: print(c[h]) print("+ или -") st = input() if st == "-": d.insert(h, -1) elif st == "+": d.insert(h, 1) else: h -= 1 h += 1 # Лист 2 # B1:E1 print("Введите значимость") e = [] for i in range(0, 9, 1): print("Значимость", i) e.insert(i, input()) # F1:G1 maxb = [] for i in range(0, 9, 1): maxb.insert(i, b[0][i]) # A2:D2 for i in range(0, 6, 1): for j in range(0, 9, 1): if maxb[j] < b[i][j]: maxb[j] = b[i][j] # E2:G2 for i in range(0, 6, 1): for j in range(0, 9, 1): b[i][j] = (b[i][j] / maxb[j])float(e[j])float(d[j]) # A3:C3 y = [0, 0, 0, 0, 0, 0] for i in range(0, 6, 1): for j in range(0, 9, 1): y[i] += b[i][j] # D3:I3 h = 1 while h < 9: for i in range(0, 6 - h, 1): if y[i] < y[i + 1]: y[i], y[i + 1] = y[i + 1], y[i] a[i], a[i + 1] = a[i + 1], a[i] h += 1 # A4:D4 for i in range(0, 5, 1): print(i, a[i], y[i])
//PascalABC.NET (версия 3.1, сборка 1210 от 29.03.2016) const m = 10;
var t: array[1..m] of integer; i, n, nm, sm: integer;
begin //Заполняем массив сл.числами и подсчитываем //количество элементов и среднее арифметическое //согласно условию задачи for i := 1 to m do begin t[i] := random(-20, 20);write(t[i]:4); if (i > 1) and (i <= m) then if t[i] > t[i - 1] then n := n + 1 else if t[i] < t[i - 1] then begin sm := sm + t[i];nm := nm + 1; end; end; writeln; writeln('число элементов больших предыдущего = ', n); writeln('ср. арифметическое элементов меньших предыдущего = ', sm / nm);
Если результат отрицательный, то первое меньше второго.
Если нулевой, то они равны.
Если положительный, то первое больше второго.
Найдем разность между первым и вторым значением: c=a-b
Все что нам требуется сделать, это выяснить, является ли с положительным числом.
Например, используя функцию сигнум, можно получить вариант функции Хевисайда, которая будет принимать значение 1 только для положительных значений, а во всех остальных случаях обращаться в ноль. f(c)=[(sgn(c)+1/)2]
В нашем случае можно записать, что max(a,b)=a*f(c)+b*f(-c)
Так мы можем сравнить два числа, не прибегая к логическому сравнению.
Конечно, данный алгоритм реализуем при условии наличия встроенной функции сигнум (она присутствует даже в старом Бейсике ). Но даже если такой встроенной функции нет, ее написание не составит большого труда.
const
m = 10;
var
t: array[1..m] of integer;
i, n, nm, sm: integer;
begin
//Заполняем массив сл.числами и подсчитываем
//количество элементов и среднее арифметическое
//согласно условию задачи
for i := 1 to m do
begin
t[i] := random(-20, 20);write(t[i]:4);
if (i > 1) and (i <= m) then
if t[i] > t[i - 1] then n := n + 1
else if t[i] < t[i - 1] then begin
sm := sm + t[i];nm := nm + 1;
end;
end;
writeln;
writeln('число элементов больших предыдущего = ', n);
writeln('ср. арифметическое элементов меньших предыдущего = ', sm / nm);
end.
Тестовое решение:
6 13 19 8 -19 -11 -20 -15 -19 -13
число элементов, больших предыдущего = 5
среднее арифметическое элементов, меньших предыдущего = -12.5
Вычитаем первое число из второго.
Если результат отрицательный, то первое меньше второго.
Если нулевой, то они равны.
Если положительный, то первое больше второго.
Найдем разность между первым и вторым значением: c=a-b
Все что нам требуется сделать, это выяснить, является ли с положительным числом.
Например, используя функцию сигнум, можно получить вариант функции Хевисайда, которая будет принимать значение 1 только для положительных значений, а во всех остальных случаях обращаться в ноль. f(c)=[(sgn(c)+1/)2]
В нашем случае можно записать, что max(a,b)=a*f(c)+b*f(-c)
Так мы можем сравнить два числа, не прибегая к логическому сравнению.
Конечно, данный алгоритм реализуем при условии наличия встроенной функции сигнум (она присутствует даже в старом Бейсике ). Но даже если такой встроенной функции нет, ее написание не составит большого труда.