Структуры данных: массивы (PascalABC.NET): различия между версиями

Материал из Информационная безопасностя
Перейти к навигации Перейти к поиску
 
(не показаны 2 промежуточные версии этого же участника)
Строка 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 Статические массивы]
 
* [http://pascalabc.net/downloads/pabcnethelp/index.htm?page=LangGuide/Types/dynamicarrays.html Динамические массивы]
 
* [http://pascalabc.net/downloads/pabcnethelp/index.htm?page=LangGuide/Types/dynamicarrays.html Динамические массивы]
 
* [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/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.

Задачник