Структуры данных: массивы (PascalABC.NET): различия между версиями
Перейти к навигации
Перейти к поиску
(не показана 1 промежуточная версия этого же участника) | |||
Строка 1: | Строка 1: | ||
+ | {{TOCRight}} | ||
== Массивы == | == Массивы == | ||
* [http://pascalabc.net/downloads/pabcnethelp/index.htm?page=LangGuide/Types/staticarrays.html Статические массивы] | * [http://pascalabc.net/downloads/pabcnethelp/index.htm?page=LangGuide/Types/staticarrays.html Статические массивы] | ||
Строка 4: | Строка 5: | ||
* [http://pascalabc.net/stati-po-pascalabc-net/obuchenie-programmirovaniyu/19-uchebnyj-modul-dlya-raboty-s-massivami Учебный модуль для работы с массивами] | * [http://pascalabc.net/stati-po-pascalabc-net/obuchenie-programmirovaniyu/19-uchebnyj-modul-dlya-raboty-s-massivami Учебный модуль для работы с массивами] | ||
* [http://pascalabc.net/downloads/Presentations/Tutorials/ArraysAlgsVsMeths.pdf Алгоритмы и методы работы с массивами] | * [http://pascalabc.net/downloads/Presentations/Tutorials/ArraysAlgsVsMeths.pdf Алгоритмы и методы работы с массивами] | ||
+ | * [http://pascalabc.net/downloads/pabcnethelp/index.htm?page=LangGuide/PABCSystemUnit/Files/Subroutines%20for%20sequence%20generation.html Подпрограммы для генерации последовательностей (документация)] | ||
+ | |||
+ | == Задачи == | ||
+ | === Вывод всех целых чисел массива через пробел циклом For === | ||
+ | <syntaxhighlight lang="pascal" line> | ||
+ | Begin | ||
+ | var a := Arr(1, 3, 6, 33, 21, 67, 4); | ||
+ | for var i := 0 to a.Length-1 do | ||
+ | begin | ||
+ | Write($'{a[i]} '); | ||
+ | end; | ||
+ | Writeln(); | ||
+ | a.Print(); | ||
+ | end. | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | === Сделать массив из первых n нечётных чисел === | ||
+ | ==== Вариант 1 ==== | ||
+ | <syntaxhighlight lang="pascal" line> | ||
+ | // var a: array of integer; | ||
+ | Begin | ||
+ | var n := ReadInteger('Введите n:'); | ||
+ | var a := new integer[n]; | ||
+ | for var i := 0 to n-1 do | ||
+ | a[i] := 2*(i+1) - 1; | ||
+ | a.Print; | ||
+ | end. | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | ==== Вариант 2 ==== | ||
+ | <syntaxhighlight lang="pascal" line> | ||
+ | Begin | ||
+ | var n := ReadInteger('Введите n:'); | ||
+ | var a := SeqGen(n, i -> 2*(i+1)-1); | ||
+ | a.Print; | ||
+ | end. | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | === Сгенерировать массив случайных чисел === | ||
+ | <syntaxhighlight lang="pascal" line> | ||
+ | Begin | ||
+ | var a: array of integer; | ||
+ | a := new integer[10]; | ||
+ | Randomize(); | ||
+ | for var i := 0 to a.Length-1 do | ||
+ | a[i] := -10 + random(21); // 21 = 10 - (-10) + 1 | ||
+ | |||
+ | // var a := SeqRandomInteger(10, -10, 10).ToArray(); | ||
+ | |||
+ | a.Print(); | ||
+ | end. | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | === Вывести все содержащиеся в массиве нечетные числа в порядке возрастания их индексов, а также их количество === | ||
+ | <syntaxhighlight lang="pascal" line> | ||
+ | Begin | ||
+ | var count := 0; | ||
+ | var a := SeqRandomInteger(10, 0, 100).ToArray(); | ||
+ | a.Println(); | ||
+ | |||
+ | for var i := 0 to a.Length-1 do | ||
+ | begin | ||
+ | if (a[i] mod 2 = 1) then | ||
+ | begin | ||
+ | Write($'{a[i]} '); | ||
+ | count += 1; | ||
+ | end; | ||
+ | end; | ||
+ | Writeln(); | ||
+ | |||
+ | Writeln($'Количество нечётных чисел = {count}.'); | ||
+ | end. | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | === Разделить массив на два: на положительные+ноль и отрицательные числа === | ||
+ | ==== Вариант 1 ==== | ||
+ | <syntaxhighlight lang="pascal" line> | ||
+ | Begin | ||
+ | var count := 0; | ||
+ | var a := SeqRandomInteger(10, -100, 100).ToArray(); | ||
+ | a.Println(); | ||
+ | |||
+ | var pos := new integer[10]; | ||
+ | var posIndex := 0; | ||
+ | var neg := new integer[10]; | ||
+ | var negIndex := 0; | ||
+ | |||
+ | for var i := 0 to a.Length-1 do | ||
+ | begin | ||
+ | if (a[i] >=0) then | ||
+ | begin | ||
+ | pos[posIndex] := a[i]; | ||
+ | posIndex += 1; | ||
+ | end | ||
+ | else | ||
+ | begin | ||
+ | neg[negIndex] := a[i]; | ||
+ | negIndex += 1; | ||
+ | end; | ||
+ | end; | ||
+ | |||
+ | for var i := 0 to posIndex-1 do Write($'{pos[i]} '); | ||
+ | Writeln(); | ||
+ | for var i := 0 to negIndex-1 do Write($'{neg[i]} '); | ||
+ | Writeln(); | ||
+ | end. | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | ==== Вариант 2 ==== | ||
+ | <syntaxhighlight lang="pascal" line> | ||
+ | Begin | ||
+ | var count := 0; | ||
+ | var a := SeqRandomInteger(10, -100, 100).ToArray(); | ||
+ | a.Println(); | ||
+ | |||
+ | var pos := new List<integer>(); | ||
+ | var neg := new List<integer>(); | ||
+ | |||
+ | for var i := 0 to a.Length-1 do | ||
+ | begin | ||
+ | if (a[i] >=0) then | ||
+ | pos.Add(a[i]) | ||
+ | else | ||
+ | neg.Add(a[i]); | ||
+ | end; | ||
+ | |||
+ | pos.Println(); | ||
+ | neg.Println(); | ||
+ | end. | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | ==== Вариант 3 ==== | ||
+ | <syntaxhighlight lang="pascal" line> | ||
+ | Begin | ||
+ | var count := 0; | ||
+ | var a := SeqRandomInteger(10, -100, 100).ToArray(); | ||
+ | a.Println(); | ||
+ | |||
+ | var pos := a.Where(num -> num >= 0).ToArray(); | ||
+ | var neg := a.Where(num -> num < 0).ToArray(); | ||
+ | |||
+ | pos.Println(); | ||
+ | neg.Println(); | ||
+ | end. | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | == Задачник == | ||
+ | * [http://ptaskbook.com/ru/tasks/array.php Одномерные массивы] | ||
+ | * [http://ptaskbook.com/ru/tasks/matrix.php Двумерные массивы (матрицы)] |
Текущая версия на 12:09, 17 июня 2021
Массивы
- Статические массивы
- Динамические массивы
- Учебный модуль для работы с массивами
- Алгоритмы и методы работы с массивами
- Подпрограммы для генерации последовательностей (документация)
Задачи
Вывод всех целых чисел массива через пробел циклом For
1 Begin
2 var a := Arr(1, 3, 6, 33, 21, 67, 4);
3 for var i := 0 to a.Length-1 do
4 begin
5 Write($'{a[i]} ');
6 end;
7 Writeln();
8 a.Print();
9 end.
Сделать массив из первых n нечётных чисел
Вариант 1
1 // var a: array of integer;
2 Begin
3 var n := ReadInteger('Введите n:');
4 var a := new integer[n];
5 for var i := 0 to n-1 do
6 a[i] := 2*(i+1) - 1;
7 a.Print;
8 end.
Вариант 2
1 Begin
2 var n := ReadInteger('Введите n:');
3 var a := SeqGen(n, i -> 2*(i+1)-1);
4 a.Print;
5 end.
Сгенерировать массив случайных чисел
1 Begin
2 var a: array of integer;
3 a := new integer[10];
4 Randomize();
5 for var i := 0 to a.Length-1 do
6 a[i] := -10 + random(21); // 21 = 10 - (-10) + 1
7
8 // var a := SeqRandomInteger(10, -10, 10).ToArray();
9
10 a.Print();
11 end.
Вывести все содержащиеся в массиве нечетные числа в порядке возрастания их индексов, а также их количество
1 Begin
2 var count := 0;
3 var a := SeqRandomInteger(10, 0, 100).ToArray();
4 a.Println();
5
6 for var i := 0 to a.Length-1 do
7 begin
8 if (a[i] mod 2 = 1) then
9 begin
10 Write($'{a[i]} ');
11 count += 1;
12 end;
13 end;
14 Writeln();
15
16 Writeln($'Количество нечётных чисел = {count}.');
17 end.
Разделить массив на два: на положительные+ноль и отрицательные числа
Вариант 1
1 Begin
2 var count := 0;
3 var a := SeqRandomInteger(10, -100, 100).ToArray();
4 a.Println();
5
6 var pos := new integer[10];
7 var posIndex := 0;
8 var neg := new integer[10];
9 var negIndex := 0;
10
11 for var i := 0 to a.Length-1 do
12 begin
13 if (a[i] >=0) then
14 begin
15 pos[posIndex] := a[i];
16 posIndex += 1;
17 end
18 else
19 begin
20 neg[negIndex] := a[i];
21 negIndex += 1;
22 end;
23 end;
24
25 for var i := 0 to posIndex-1 do Write($'{pos[i]} ');
26 Writeln();
27 for var i := 0 to negIndex-1 do Write($'{neg[i]} ');
28 Writeln();
29 end.
Вариант 2
1 Begin
2 var count := 0;
3 var a := SeqRandomInteger(10, -100, 100).ToArray();
4 a.Println();
5
6 var pos := new List<integer>();
7 var neg := new List<integer>();
8
9 for var i := 0 to a.Length-1 do
10 begin
11 if (a[i] >=0) then
12 pos.Add(a[i])
13 else
14 neg.Add(a[i]);
15 end;
16
17 pos.Println();
18 neg.Println();
19 end.
Вариант 3
1 Begin
2 var count := 0;
3 var a := SeqRandomInteger(10, -100, 100).ToArray();
4 a.Println();
5
6 var pos := a.Where(num -> num >= 0).ToArray();
7 var neg := a.Where(num -> num < 0).ToArray();
8
9 pos.Println();
10 neg.Println();
11 end.