До начала работы
В данной публикации покажем, что такое список в PascalABC.NET, рассмотрим объявление списков, заполнение значениями, операции и некоторые методы, а также решим задачу с применением списка.
Список (List) представляет собой структуру данных на основе динамического массива с динамическим изменением его размера во время выполнения программы.
Объявление списка в блоке Var
var L:list<integer>;
Создание нового пустого списка в теле программы
L:=new List<integer>;
Создание нового списка и заполнение его значениями
M:=Lst(-9, 213);
Добавление значений в конец списка
L.Add(21); // [21]
L+=5; // [21, 5]
L+=-6; // [21, 5, -6]
Вывод списка на экран
println(L); // [21, 5, -6]
println(M); // [-9, 213]
Все остальное в виде программы на языке Паскаль
var L, M:list<integer>;//объявление списка
x:integer;
begin
L:=new List<integer>;//создание нового пустого списка
M:=Lst(-9,213);//создание и заполнение нового списка значениями
L.println; //вывод значений списка на экран, пусто
println(M);//вывод списка на экран [-9,213]
L.Add(21);//добавление значения в конец списка
M+=21;//добавление значения в конец списка
L+=5;
L+=-6;
println(L);// [21,5,-6]
println(M);// [-9,213,21]
println(M.Count);//длина списка M, 3
println(M.Item[0]);//обращение к элементу с индексом 0, -9
println(L[L.Count-1]);//обращение к последнему элементу, -6
L.Insert(1,100);//вставка на 1 позицию значения 100, [21,100,5,-6]
println(L);
L.RemoveAt(2);//удаление элемента с индексом 2, [21,100,-6]
println(L);
L:=L+M;//сложение списков, [21,100,-6,-9,213,21]
println(L);
L.RemoveAll(x->x<0);//удаление элементов, значения которых меньше 0, [21,100,213,21]
println(L);
L.Sort;//сортировка списка по возрастанию [21,21,100,213]
println(L);
L.IndexOf(21).Println;//индекс первого по счету элемента, равного 21, 0
L.LastIndexOf(21).println;//индекс последнего по счету элемента, равного 21, 1
L.Reverse; //реверс списка 213 100 21 21
for x:=0 to L.Count-1 do //проход по списку
print(L[x]);
println;
L.Max.Println; //максимальное значение списка, 213
L.AddRange(arr(19,34,67));//функция arr возвращает массив, заполненный значениями; метод addRange добавляет массив в список, 213 100 21 21 19 34 67
L.Println;
L.RemoveRange(1,3);//удаление элементов списка с 1 по 3 индексы, 213 19 34 67
L.println;
L.Clear; //очистка списка
end.
Задача. Список S из N элементов заполнить случайными целыми числами из промежутка [1, 20]. Все числа списка S, кратные 3, поместить в новый список M, а из списка S эти числа удалить.
Для заполнения списка случайными числами воспользуемся функцией ArrRandom()
ArrRandom(N, A, B) возвращает N случайных целых чисел из промежутка [A, B]
В цикле пройдем по списку S, и если элемент списка кратен 3, добавим это значение в список M. После обработки списка S удалим из него все значения, кратные 3.
Программа решения задачи на языке Паскаль
var S, M:list<integer>;
N,k:integer;
begin
write('Введите количество элементов списка N=');
readln(N);
S:=Lst(ArrRandom(N,1,20));
print('Исходный список S:');
println(S);
M:=New List<integer>;
for k:=0 to S.count-1 do
begin
if S[k] mod 3 = 0 then M+=S[k];
end;
print('Новый список M:');
println(M);
S.RemoveAll(k->k mod 3=0);
print('Список S без элементов, кратных 3:');
println(S);
end.
Результат запуска программы