Занятие 4. Pascal abc.net: Последовательности (начало)

Работа с последовательностями в Паскаль abc.net

Пример работы с последовательностью

Последовательности — это абстрактный набор данных, которые можно перебирать.

В отличие от других структур последовательности не хранятся в памяти (поэтому «абстрактный»), т.е. память используется только в конкретный момент времени, когда происходит перебор значений последовательности, и, как правило, нам необходим только 1 элемент (в единицу времени).

Последовательностью может быть, например, последовательность чисел:

арифметическая прогрессия: 1 3 5 7 9

или

геометрическая прогрессия: 1 2 4 8 16

Тип последовательности: Sequence of Real, Sequence of Integer

Наиболее близким типом данных к последовательности является массив.

Рассмотрим стандартный пример работы с числовым рядом, БЕЗ использования последовательности:

Пример: Вывести сумму 10 чисел

1
2
3
4
5
6
7
8
9
begin
var s:=0.0;
for var i:=1 to 10 do
  begin
    var x:=ReadReal;
    s+=x;
  end;
print(s)
end.

Данный стиль написания программы считается плохим, т.к. основной алгоритм смешивается с вводом (ReadReal).
пример
Ввод данных необходимо отсоединить от основного алгоритма. Для этого используем последовательность:

// накапливаем последовательность, переменная q хранит ее
var q:=ReadSeqReal(10); 
var s:=0.0;
foreach var x in q do
  s+=x;
print(s)
end.

пример работы с последовательностью паскаль абц

 

Теперь алгоритм находится отдельно от ввода, программа стала более модифицируема.
Остается оформить основной алгоритм в виде функции:

1
2
3
4
5
6
7
8
9
10
function Sum(q: sequence of real):real;
begin   
var s:=0.0;     
foreach var x in q do
  s+=x;
result:=s
end;
begin
print(Sum(ReadSeqReal(10)))
end.

Генерация и формирование последовательностей

Итак, мы рассмотрели, как сформировать последовательность через ввод с клавиатуры:

  • ReadSeqInteger
  • ReadSeqReal
var q:=ReadSeqReal(10);

Теперь рассмотрим, как генерируются последовательности.

Генераторы последовательностей:
Range(a,b: integer): sequence of integer

print(Range(1,10)); // [1,2,3,4,5,6,7,8,9,10]

Range(a,b,step: integer): sequence of integer

print(Range(1,10,2)); // [1,3,5,7,9]

Range(c1,c2: char): sequence of char

print(Range('a','k')); // [a,b,c,d,e,f,g,h,i,j,k]

Partition(a,b: real; n: integer): sequence of real

print(Partition(0.0, 6.0, 4)); // делим поровну на 4 части [0, 1.5, 3, 4.5, 6]

SeqRandomInteger(n: integer[; a,b: integer]): sequence of integer;

var q:=SeqRandomInteger(5,10,20);
print(q); // [12,18,16,14,16]

SeqRandomReal(n: integer[; a,b: real]): sequence of real;

var q:=SeqRandomReal(3, 1.0, 5.0);
print(q); // [4.98996168374548,2.22339218166815,2.81110574389394]

Seq(params a: array of T): sequence of T;

foreach var x in Seq (1,3,8) do
    print(x*x); // 1 9 64

SeqFill(count: integer; x: T): sequence of T;

begin
var q:=SeqFill(7,5);
print(q); // [5,5,5,5,5,5,5] 
end.

Следует учесть, что последовательности формируются каждый раз, как только с ними организовывается цикл или работает метод:

генерация последовательностей в Паскаль abc net

Вывод последовательностей

Print(delim: string := ' '): sequence of T;

var q:=SeqRandomInteger(5,10,20);
q.Print('/'); // 16/11/13/10/13

Println(delim: string := ' '): sequence of T;

Решение задач

Создание и вывод

Задание seq 1: Создайте целые числа последовательности от -20 до 30 с шагом 3 (Range).


Задание seq 2: Создайте вещественные числа последовательности от -4 до 4 с шагом 2 (Range)


Задание seq 3: Создайте N случайных чисел последовательности от -50 до 100 (SeqRandom)


Задание seq 4: Создайте N чисел последовательности, заполненные 5 (SeqFill)


Задание seq 5: Создайте N чисел последовательности c вводом


Пример: Написать функцию, которая в последовательности ищет количество максимальных элементов

Выполнение:

1
2
3
4
5
6
7
8
9
10
11
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);
  println('кол-во макс ',findCountMax(c));
  c.Print();
end.

Задание seq 6: Написать функцию, которая в последовательности ищет сумму нечетных элементов


Задание seq 7: Написать функцию, которая в последовательности ищет среднее арифметическое отрицательных элементов

Поделитесь уроком с коллегами и друзьями:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*
*

Вставить формулу как
Блок
Строка
Дополнительные настройки
Цвет формулы
Цвет текста
#333333
Используйте LaTeX для набора формулы
Предпросмотр
\({}\)
Формула не набрана
Вставить