Работа с последовательностями
Последовательность — это набор элементов, которые могут обрабатываться друг за другом
Последовательность:
foreach
var s: sequence of integer; |
begin var q:=ReadSeqReal(10); var s:=0.0; foreach var x in q do s+=x; print(s) end. |
Seq(1,3,5,7,9) .Print; // 1 3 5 7 9 print(Range(1,10)); // [1 2 3 4 5 6 7 8 9 10] print(Range(1,10,2)); // [1 3 5 7 9] print(Range('a','k')); // [a,b,c,d,e,f,g,h,i,j,k] sequence of char var q:=SeqRandomInteger(5,10,20); print(q); // [12,18,16,14,16] var q:=SeqRandomReal(3, 1.0, 5.0); print(q); // [4.98996168374548,2.22339218166815,2.81110574389394] print(SeqFill(10,55)); // 55 55 55 55 55 55 55 55 55 55 print(Partition(0.0, 6.0, 4)); // divide equally into 4 parts [0, 1.5, 3, 4.5, 6] |
Создайте функцию для вычисления произведения 5 введенных элементов последовательности.
Примечание: заголовок функции:
function Product(q: sequence of real):real; |
Пример вывода:
Пожалуйста, введите 5 вещественных чисел: 1.2 3.1 6.7 2.8 3.4 произведение: 237.27648
[файл: seq01.pas
]
Создайте последовательность целых чисел от -20
до 30
с шагом 3
(функция Range
).
Пример вывода:
[-20,-17,-14,-11,-8,-5,-2,1,4,7,10,13,16,19,22,25,28]
[файл: seq02.pas
]
Создайте N
случайных чисел последовательности от -50
до 100
(функция SeqRandom
).
Пример вывода:
введите n >>15 [-23,13,-27,2,46,-26,10,92,60,-9,75,28,85,7,18]
[файл: seq03.pas
]
Cycle()
Repeat
Step
Iterate
Повторение блока последовательности:
Seq(1,2,10,5).Cycle().Take(15).Println; // 1 2 10 5 1 2 10 5 1 2 10 5 1 2 10 |
Take
используется для того, чтобы ограничить вывод до указанного количества элементов
Бесконечная последовательность чисел:
var q:=55.Repeat.Take(10).Println; // 55 55 55 55 55 55 55 55 55 55 |
Генерация бесконечной последовательности с шагом:
var q:=5.Step(2).Take(10).Println; // 5 7 9 11 13 15 17 19 21 23 |
Генерация бесконечной последовательности, созданной по правилу Лямбда-выражения:
var q:=10.Iterate(x->x-2).Take(10).Println; // 10 8 6 4 2 0 -2 -4 -6 -8 |
SeqGen(count: integer; f: integer -> T): sequence of T;
SeqGen(count: integer; first: T; next: T -> T): sequence of T;
SeqGen(count: integer; first,second: T; next: (T,T) -> T): sequence of T;
SeqWhile(first: T; next: T -> T; pred: T -> boolean): sequence of T;
SeqWhile(first,second: T; next: (T,T) -> T; pred: T -> boolean): sequence of T;
begin var sq:=SeqGen(5,x->x+1); sq.println; // 1 2 3 4 5 end. |
begin var sq:=SeqGen(5, 4, x->x+1); sq.println; // 4 5 6 7 8 end. |
begin var sq:=SeqGen(5, 1,3, (x,y)->x+y); sq.println; // 1 3 4 7 11 end. |
Condition is added:
begin var sq := seqWhile(2, x->x*2, x->x <= 1024); sq.println; // 2 4 8 16 32 64 128 256 512 1024 end. |
begin var sq := seqWhile(1, 1, (x, y)-> x + y, x -> x <= 1000); sq.println; // 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 end. |
Используя лямбда-выражение создайте последовательность из N
четных чисел, начиная с числа 10 (использовать SeqGen
)
Примерный вывод:
Enter n >> 7 10 12 14 16 18 20 22
[Файл: seq04.pas
]
В pascalabc.net возможно использование следующих методов последовательностей:
s.Sum s.Average s.Min s.Max s.Count s.Count(условие) s.All(условие) s.Any(условие) s.Print s.Println s.PrintLines |
Создать функцию, которая ищет в последовательности количество максимальных элементов.
Примерный вывод:
1 5 2 10 1 10 кол-во максимальных элементов 2
✍ Решение:
function findCountMax(a: sequence of integer):integer; begin var k:=a.Max(); foreach var i in a do if i=k then result+=1; end; begin var c:=Seq(1,5,2,10,1,10); c.Println(); println('кол-во максимальных элементов ',findCountMax(c)); end. |
Создать последовательность, используя метод Seq
. Посчитать количество вхождений заданного x
в последовательности. Использовать метод count ()
.
Примерный вывод:
-1 2 3 -5 2 -7 8 2 11 введите x: 2 2 встречается в последовательности 3 раза
✍ Алгоритм:
begin var c:=Seq(-1,2,3,-5,2,-7,8,2,11); c.Println(); var x:=readinteger('введитеx:'); var n:=c.count(c->c=x); println($'{x} встречается в последовательности {n} раза'); end. |
Создайте последовательность, используя метод Seq
. Посчитайте количество отрицательных элементов последовательности. Необходимо использовать метод count ()
.
Примерный вывод:
-1 2 3 -5 6 -7 8 9 11 количество отрицательных элементов 3
[Файл: seqMeth-01.pas
]
+++++++++++++++++++++++
Создать функцию, которая выдает количество нечетных элементов последовательности. Следует использовать метод
IsOdd
и лямбда-выражение.
Пример вывода:
1 5 2 10 1 10 кол-во нечетных элементов 3
[Файл: seqMeth-02.pas
]
Используя метод
Seq
определите последовательность. Посчитайте количество отрицательных элементов последовательности. Следует использовать метод count(условие)
.
Примерный вывод:
-1 2 3 -5 6 -7 8 9 11 количество отрицательных элементов 3
[файл: seq-05.pas
]
{0.2 points}
Task 7:
To do: Create the following sequence: 1 3 9 27 81 243 729 2187 6561 19683
(SeqGen
should be used)
The resulting example:
3 9 27 81 243 729 2187 6561 19683
[Program name: 16task-07.pas
]
{0.3 points}
Task 8:
To do: Create a sequence of 15 numbers: 2 1 0.5 0.25 0.125 0.0625 0.03125 0.015625 ...
(specifying the first element and the function to get the next one) (SeqGen
should be used)
The resulting example:
2 1 0.5 0.25 0.125 0.0625 0.03125 0.015625 0.0078125 0.00390625 0.001953125 0.0009765625 0.00048828125 0.000244140625 0.0001220703125
[Program name: 16task-08.pas
]
{0.2 points}
Task 9:
To do: Create the following sequence: 2017 2012 2007 2002 1997 1992 1987 1982 1977 1972
(SeqGen
should be used)
The resulting example:
2017 2012 2007 2002 1997 1992 1987 1982 1977 1972
[Program name: 16task-09.pas
]
To do: Create a sequence of N Fibonacci numbers
The resulting example:
Enter n >>8 1 1 2 3 5 8 13 21
✍ Algorithm:
begin var n:=readInteger('Enter n'); var sq:=SeqGen(n,1,1,(x,y)->x+y); sq.println(); end. |
To do: Create a sequence of N
numbers generated by the iterative process: а1=2
, аk=(аk-1+1)*аk-1
, k
= 2,3,… (SeqGen
should be used)
The resulting example:
Enter n 7 2 6 42 1806 3263442 -1461943274 -757910022
✍ Algorithm:
begin var n:=readInteger('Enter n'); var sq:=SeqGen(n,2,x->(x+1)*x); sq.println(); end. |
{0.4 points}
Task 10:
To do: Create a sequence of N
numbers generated by the iterative process: a1 = 5
, ak = ak-1 / 2-1
, k
= 2,3, … (SeqGen
should be used)
The resulting example:
Enter n >> 9 5 1.5 -0.25 -1.125 -1.5625 -1.78125 -1.890625 -1.9453125 -1.97265625
[Program name: 16task-10.pas
]
{0.4 points}
Task 11:
To do: Create a sequence of N
numbers generated by the iterative process: а1=1
, а2=2
, аk=аk-1+2аk-2
, k
=3,… (SeqGen
should be used)
The resulting example:
Enter n >>7 1 2 4 8 16 32 64
[Program name: 16task-11.pas
]
{0.4 points}
Task 12:
To do: Create a sequence of N
numbers generated by the iterative process: а1=1
, а2=2
, аk=(аk-1+аk-2)/2
, k
=3,… (SeqGen
should be used)
The resulting example:
Enter n >> 7 1 2 1.5 1.75 1.625 1.6875 1.65625
[Program name: 16task-12.pas
]