Переведите из паскаля в питон program naselenie; var
р: array [1..10] of real;
n: array [1..10] of string;
i, j, imin: integer;
х: real;
r: string;
const
k: array [1..10] of real = (58100, 81200, 10300, 5190, 39100, 57200, 38500, 9800, 5060, 57800);
s: array [1..10] of real = (244.1, 357, 132, 43.1, 504.8, 301.2, 312.7, 92.0, 337, 551);
begin
n[1]:=’Великобритания’;
n[2]:=’Германия’;
n[3]:=’Греция’;
n[4]:=’Дания’;
n[5]:=’Испания’;
n[6]:=’Италия’;
n[7]:=’Польша’;
n[8]:=’Португалия’;
n[9]:=’Финляндия’;
n[10]:=’Франция’;
for i:=1 to 10 do
р[i]:=k[i]/s[i];
for i:=1 to 9 do
begin
imin:=i;
for j:=i+1 to 10 do
if p[j]<p[imin] then
imin:=j; x:=p[i];
р[i]:=р[imin];
p[imin]:=х;
r:=n[i];
n[i]:=n[imin];
n[imin]:=r;
end;
writeln (‘Отсортированная информация’);
for i:=1 to 10 do
writeln (n[i], ‘ — ‘, p[i]);
end.
1. Короткое решение, оставляющее в недоумении: а для чего тут было использовать двусвязный список? ответ: потому что таково задание!
// PascalABC.NET 3.2, сборка 1439 от 09.05.2017
// Внимание! Если программа не работает, обновите версию!
function IsFib(n:integer):boolean;
begin
if (n=1) or (n=2) then Result:=true
else begin
Result:=false;
(var n1, var n2):=(1,2);
var Fib:integer;
repeat
Fib:=n1+n2;
if Fib=n then begin Result:=true; break end;
(n2,n1):=(Fib,n2)
until Fib>n
end;
end;
begin
var L:=ReadSeqInteger('->',ReadInteger('n=')).ToLinkedList;
L:=L.Where(x->not IsFib(x)).ToLinkedList;
L.Println
end.
Пример
n= 9
-> 3 17 13 10 12 4 11 0 5
17 10 12 4 11 0
2. Несколько более длинное решение для желающих немного порулить удалением узлов.
Функция остается той же, а изменения делаются в главной программе.
begin
var L:=ReadSeqInteger('->',ReadInteger('n=')).ToLinkedList;
var a:=L.Where(x->IsFib(x)).ToArray; // список значений для удаления
foreach var t in a do L.Remove(t); // собственно удаление узлов
L.Println
end.
3. Бонус. Как это сделать без двусвязного списка (опять же, основная программа).
begin
var a:=ReadSeqInteger('->',ReadInteger('n='))
.Where(x->not IsFib(x)).ToArray;
a.Println
end.
// Внимание! Если программа не работает, обновите версию!
begin
Writeln('*** Исходный массив [10x10] ***');
var q:=MatrRandom(10,10,-30,30);
q.Println(4); Writeln(4*q.ColCount*'-');
// #1
Writeln('S=',q.Rows.SelectMany(x->x).Where(x->(x>1) and (x<18)).Sum);
// #2, #3
var s:=q.ElementsWithIndexes;
// #2
Writeln('Ненулевые элементы');
s.Where(x->x[2]<>0).Foreach(x->Write('[',x[0]+1,',',x[1]+1,'] '));
Writeln;
// #3
Write('Первый максимальный отрицательный элемент: ');
var m:=s.MaxBy(x->x[2]);
Writeln('q[',m[0]+1,',',m[1]+1,']=',m[2])
end.
Пример
*** Исходный массив [10x10] ***
29 29 4 -12 10 -25 0 -27 17 -17
-27 5 -11 -21 26 1 -29 -10 -12 5
18 -18 0 -11 -16 0 10 -1 -10 23
-5 -20 -14 13 14 -27 0 -26 4 -11
-20 13 0 -24 4 -4 -3 12 -13 -4
-24 27 -21 -8 -13 17 -2 -15 -26 -21
-5 -29 13 25 18 24 -12 7 -4 23
-30 27 17 29 -6 -25 12 -6 15 18
-27 28 -19 25 17 -1 -30 25 -5 28
5 -15 -30 -6 25 -21 30 6 -11 10
S=230
Ненулевые элементы
[1,1] [1,2] [1,3] [1,4] [1,5] [1,6] [1,8] [1,9] [1,10] [2,1] [2,2] [2,3] [2,4] [2,5] [2,6] [2,7] [2,8] [2,9] [2,10] [3,1] [3,2] [3,4] [3,5] [3,7] [3,8] [3,9] [3,10] [4,1] [4,2] [4,3] [4,4] [4,5] [4,6] [4,8] [4,9] [4,10] [5,1] [5,2] [5,4] [5,5] [5,6] [5,7] [5,8] [5,9] [5,10] [6,1] [6,2] [6,3] [6,4] [6,5] [6,6] [6,7] [6,8] [6,9] [6,10] [7,1] [7,2] [7,3] [7,4] [7,5] [7,6] [7,7] [7,8] [7,9] [7,10] [8,1] [8,2] [8,3] [8,4] [8,5] [8,6] [8,7] [8,8] [8,9] [8,10] [9,1] [9,2] [9,3] [9,4] [9,5] [9,6] [9,7] [9,8] [9,9] [9,10] [10,1] [10,2] [10,3] [10,4] [10,5] [10,6] [10,7] [10,8] [10,9] [10,10]
Первый максимальный отрицательный элемент: q[10,7]=30