Работа с последовательностями
Последовательность — это набор элементов, которые могут обрабатываться друг за другом
Последовательность:
foreachvar 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()RepeatStepIterate
Повторение блока последовательности:
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]