<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://pascalabc.net/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Vikvez</id>
	<title>Вики проекта PascalABC.NET - Вклад [ru]</title>
	<link rel="self" type="application/atom+xml" href="https://pascalabc.net/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Vikvez"/>
	<link rel="alternate" type="text/html" href="https://pascalabc.net/wiki/index.php/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/Vikvez"/>
	<updated>2026-04-18T13:23:13Z</updated>
	<subtitle>Вклад</subtitle>
	<generator>MediaWiki 1.39.1</generator>
	<entry>
		<id>https://pascalabc.net/wiki/index.php?title=%D0%A1%D1%82%D0%B0%D0%BD%D0%B4%D0%B0%D1%80%D1%82%D0%BD%D1%8B%D0%B5_%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B8_%D0%BD%D0%B0_%D0%BE%D0%B4%D0%BD%D0%BE%D0%BC%D0%B5%D1%80%D0%BD%D1%8B%D0%B5_%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2%D1%8B&amp;diff=1977</id>
		<title>Стандартные задачи на одномерные массивы</title>
		<link rel="alternate" type="text/html" href="https://pascalabc.net/wiki/index.php?title=%D0%A1%D1%82%D0%B0%D0%BD%D0%B4%D0%B0%D1%80%D1%82%D0%BD%D1%8B%D0%B5_%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B8_%D0%BD%D0%B0_%D0%BE%D0%B4%D0%BD%D0%BE%D0%BC%D0%B5%D1%80%D0%BD%D1%8B%D0%B5_%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2%D1%8B&amp;diff=1977"/>
		<updated>2010-12-03T18:15:08Z</updated>

		<summary type="html">&lt;p&gt;Vikvez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Стандартные задачи на одномерные массивы =&lt;br /&gt;
&lt;br /&gt;
== Простейшие алгоритмы ==&lt;br /&gt;
&lt;br /&gt;
=== №1. Вывод массива ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;procedure Println&amp;lt;T&amp;gt;(a: array of T);&lt;br /&gt;
begin&lt;br /&gt;
  foreach x: T in a do&lt;br /&gt;
    write(x, ' ');&lt;br /&gt;
  writeln;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://pascalabc.net/WDE/?file=AlgStudents/Arrays/01_Print.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
=== №2. Заполнение массива случайными числами ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;procedure CreateRandomArray(var a: array of integer; n: integer);&lt;br /&gt;
begin&lt;br /&gt;
  a := new integer[n];&lt;br /&gt;
  for var i:=0 to n-1 do&lt;br /&gt;
    a[i] := random(100);&lt;br /&gt;
end;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://pascalabc.net/WDE/?file=AlgStudents/Arrays/02_CreateRandomArray.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
=== №3. Инвертирование массива ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;procedure Invert&amp;lt;T&amp;gt;(a: array of T);&lt;br /&gt;
begin&lt;br /&gt;
  var n := a.Length;&lt;br /&gt;
  for var i:=0 to n div 2 - 1 do&lt;br /&gt;
    Swap(a[i],a[n-i-1]);&lt;br /&gt;
end; &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://pascalabc.net/WDE/?file=AlgStudents/Arrays/03_Invert.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
=== №4. Поиск элемента по заданному значению ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;// С помощью for&lt;br /&gt;
function Find&amp;lt;T&amp;gt;(a: array of T; x: T): integer;&lt;br /&gt;
begin&lt;br /&gt;
  Result := -1;&lt;br /&gt;
  for var i := 0 to a.Length - 1 do&lt;br /&gt;
    if a[i] = x then&lt;br /&gt;
    begin&lt;br /&gt;
      Result := i;&lt;br /&gt;
      break;&lt;br /&gt;
    end;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
// С помощью while&lt;br /&gt;
function FindWhile&amp;lt;T&amp;gt;(a: array of T; x: T): integer;&lt;br /&gt;
begin&lt;br /&gt;
  var n := a.Length;&lt;br /&gt;
  var i := 0;&lt;br /&gt;
  while (i&amp;lt;n) and (a[i]&amp;lt;&amp;gt;x) do&lt;br /&gt;
    i += 1;&lt;br /&gt;
  if i=n then&lt;br /&gt;
    Result := -1&lt;br /&gt;
  else Result := i;&lt;br /&gt;
end;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://pascalabc.net/WDE/?file=AlgStudents/Arrays/04_Find.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
=== №4a. Поиск с барьером ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;function FindWithBarrier&amp;lt;T&amp;gt;(a: array of T; n: integer; x: T): integer;&lt;br /&gt;
begin&lt;br /&gt;
  Assert((0 &amp;lt; n) and (n &amp;lt; a.Length));&lt;br /&gt;
  a[n] := x; // барьерный элемент равен разыскиваему&lt;br /&gt;
  var i := 0;&lt;br /&gt;
  while a[i]&amp;lt;&amp;gt;x do&lt;br /&gt;
    i += 1;&lt;br /&gt;
  if i=n then&lt;br /&gt;
    Result := -1&lt;br /&gt;
  else Result := i;&lt;br /&gt;
end;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://pascalabc.net/WDE/?file=AlgStudents/Arrays/04_FindWithBarrier.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
=== №5. Минимальный элемент и его индекс ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;procedure MinElem(a: array of integer; var min: integer; var minind: integer);&lt;br /&gt;
begin&lt;br /&gt;
  min := a[0]; &lt;br /&gt;
  minind := 0;&lt;br /&gt;
  for var i:=1 to a.Length-1 do&lt;br /&gt;
    if a[i]&amp;lt;min then&lt;br /&gt;
    begin&lt;br /&gt;
      min := a[i];&lt;br /&gt;
      minind := i;&lt;br /&gt;
    end;&lt;br /&gt;
end;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://pascalabc.net/WDE/?file=AlgStudents/Arrays/05_MinElem.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
==Сдвиги, вставка, удаление==&lt;br /&gt;
=== №6. Сдвиг влево ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;procedure ShiftLeft&amp;lt;T&amp;gt;(a: array of T);&lt;br /&gt;
begin&lt;br /&gt;
  for var i:=0 to a.Length-2 do&lt;br /&gt;
    a[i] := a[i+1];&lt;br /&gt;
  a[a.Length-1] := default(T);&lt;br /&gt;
end;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://pascalabc.net/WDE/?file=AlgStudents/Arrays/06_ShiftLeft.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
=== №7. Сдвиг вправо ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
procedure ShiftRight&amp;lt;T&amp;gt;(a: array of T);&lt;br /&gt;
begin&lt;br /&gt;
  for var i := a.Length-1 downto 1 do&lt;br /&gt;
    a[i] := a[i-1];&lt;br /&gt;
  a[0] := default(T);&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://pascalabc.net/WDE/?file=AlgStudents/Arrays/07_ShiftRight.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
=== №8. Циклический сдвиг вправо ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
procedure CycleShiftRight&amp;lt;T&amp;gt;(a: array of T);&lt;br /&gt;
begin&lt;br /&gt;
  var v := a[a.Length-1];&lt;br /&gt;
  for var i := a.Length downto 1 do&lt;br /&gt;
    a[i] := a[i-1];&lt;br /&gt;
  a[0] := v;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://pascalabc.net/WDE/?file=AlgStudents/Arrays/08_CycleShiftRight.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
=== №9. Удаление k-того ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
procedure Delete&amp;lt;T&amp;gt;(a: array of T; var n: integer; k: integer);&lt;br /&gt;
begin&lt;br /&gt;
  Assert((0&amp;lt;=k) and (k&amp;lt;n))&lt;br /&gt;
  Assert((0&amp;lt;=n) and (n&amp;lt;=a.Length));&lt;br /&gt;
  for var i := k to n-2 do&lt;br /&gt;
    a[i] := a[i+1];&lt;br /&gt;
  a[n-1] := default(T);&lt;br /&gt;
  n -= 1;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://pascalabc.net/WDE/?file=AlgStudents/Arrays/09_Delete.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
=== №10. Вставка на k-тое место ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
procedure Insert&amp;lt;T&amp;gt;(a: array of T; var n: integer; k: integer; value: T);&lt;br /&gt;
begin&lt;br /&gt;
  Assert((0&amp;lt;=k) and (k&amp;lt;=n) and (n&amp;lt;a.Length));&lt;br /&gt;
  for var i := n-1 downto k do&lt;br /&gt;
    a[i+1] := a[i];&lt;br /&gt;
  a[k] := value;&lt;br /&gt;
  n += 1;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://pascalabc.net/WDE/?file=AlgStudents/Arrays/10_Insert.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
== Слияние упорядоченных и бинарный поиск в упорядоченном массиве==&lt;br /&gt;
=== №11. Слияние двух упорядоченных в один упорядоченный ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
// a,b упорядочены по возрастанию&lt;br /&gt;
function Merge(a,b: array of real; na,nb: integer): array of real;&lt;br /&gt;
begin&lt;br /&gt;
  Assert((0 &amp;lt; na) and (na &amp;lt; a.Length));&lt;br /&gt;
  Assert((0 &amp;lt; nb) and (nb &amp;lt; b.Length));&lt;br /&gt;
  a[na] := real.MaxValue;&lt;br /&gt;
  b[nb] := real.MaxValue;&lt;br /&gt;
  var c := new real[na + nb];&lt;br /&gt;
  var ia := 0;&lt;br /&gt;
  var ib := 0;&lt;br /&gt;
  for var ic := 0 to na + nb - 1 do&lt;br /&gt;
    if a[ia]&amp;lt;b[ib] then&lt;br /&gt;
    begin&lt;br /&gt;
      c[ic] := a[ia];&lt;br /&gt;
      ia += 1;&lt;br /&gt;
    end&lt;br /&gt;
    else&lt;br /&gt;
    begin&lt;br /&gt;
      c[ic] := b[ib];&lt;br /&gt;
      ib += 1;&lt;br /&gt;
    end;&lt;br /&gt;
  Result := c;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[http://pascalabc.net/WDE/?file=AlgStudents/Arrays/11_Merge.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
=== №12. Поиск в упорядоченном массиве ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
function BinarySearch(a: array of integer; x: integer): integer;&lt;br /&gt;
begin&lt;br /&gt;
  var k: integer;&lt;br /&gt;
  var i := 0;&lt;br /&gt;
  var j := a.Length-1;&lt;br /&gt;
  repeat&lt;br /&gt;
    k := (i+j) div 2;&lt;br /&gt;
    if x&amp;gt;a[k] then&lt;br /&gt;
      i := k + 1&lt;br /&gt;
    else j := k - 1;&lt;br /&gt;
  until (a[k]=x) or (i&amp;gt;j);&lt;br /&gt;
  if a[k]=x then&lt;br /&gt;
    Result := k&lt;br /&gt;
  else Result := -1;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[http://pascalabc.net/WDE/?file=AlgStudents/Arrays/12_BinarySearch.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
== Сортировка массивов ==&lt;br /&gt;
&lt;br /&gt;
=== №13. Сортировка выбором ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
procedure SortByChoice(a: array of integer);&lt;br /&gt;
begin&lt;br /&gt;
  for var i := 0 to a.Length - 2 do&lt;br /&gt;
  begin&lt;br /&gt;
    var min := a[i];&lt;br /&gt;
    var imin := i;&lt;br /&gt;
    for var j := i + 1 to a.Length - 1 do&lt;br /&gt;
      if a[j] &amp;lt; min then&lt;br /&gt;
      begin&lt;br /&gt;
        min := a[i];&lt;br /&gt;
        imin := j;&lt;br /&gt;
      end;&lt;br /&gt;
    a[imin] := a[i];&lt;br /&gt;
    a[i] := min;&lt;br /&gt;
  end;  &lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[http://pascalabc.net/WDE/?file=AlgStudents/Arrays/13_SortByChoice.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
=== №14. Пузырьковая сортировка ===&lt;br /&gt;
====Способ №1====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
procedure BubbleSort(a: array of integer);&lt;br /&gt;
begin&lt;br /&gt;
  var n := a.Length;&lt;br /&gt;
  for var i := 0 to n - 2 do&lt;br /&gt;
    for var j := n - 1 downto i + 1 do&lt;br /&gt;
      if a[j] &amp;lt; a[j - 1] then&lt;br /&gt;
        Swap(a[j], a[j - 1]);&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[http://pascalabc.net/WDE/?file=AlgStudents/Arrays/14_BubbleSort.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
====Способ №2(оптимизация)====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
procedure BubbleSort2(a: array of integer);&lt;br /&gt;
begin&lt;br /&gt;
  var i := a.Length - 1;&lt;br /&gt;
  var q: boolean;&lt;br /&gt;
  repeat&lt;br /&gt;
    q := true;&lt;br /&gt;
    for var j := 0 to i - 1 do&lt;br /&gt;
      if a[j + 1] &amp;lt; a[j] then&lt;br /&gt;
      begin&lt;br /&gt;
        Swap(a[j + 1], a[j]);&lt;br /&gt;
        q := false;&lt;br /&gt;
      end;&lt;br /&gt;
    i -= 1;&lt;br /&gt;
  until q;  &lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[http://pascalabc.net/WDE/?file=AlgStudents/Arrays/14(2)_BubbleSort2.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
=== №15. Сортировка вставками ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
procedure SortByInsert(a: array of integer);&lt;br /&gt;
begin&lt;br /&gt;
  for var i := 1 to a.Length - 1 do &lt;br /&gt;
  begin&lt;br /&gt;
    var x := a[i];&lt;br /&gt;
    var j := i - 1;&lt;br /&gt;
    while (j &amp;gt;= 0) and (x &amp;lt; a[j]) do&lt;br /&gt;
    begin&lt;br /&gt;
      a[j + 1] := a[j];&lt;br /&gt;
      j -= 1;&lt;br /&gt;
    end;&lt;br /&gt;
    a[j + 1] := x;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[http://pascalabc.net/WDE/?file=AlgStudents/Arrays/15_SortByInsert.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
== Использование процедурных типов в задачах на массивы ==&lt;br /&gt;
Пусть сделаны следующие описания:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
type IPredicate = function(x: integer): boolean;&lt;br /&gt;
&lt;br /&gt;
// Примеры предикатов&lt;br /&gt;
function Even(x: integer): boolean;&lt;br /&gt;
begin&lt;br /&gt;
  result := not odd(x);&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
function IsPositive(x: integer): boolean;&lt;br /&gt;
begin&lt;br /&gt;
  Result := x &amp;gt; 0;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== №16. Поиск по условию ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
function FindPred(a: array of integer; pred: IPredicate): integer;&lt;br /&gt;
begin&lt;br /&gt;
  var n := a.Length;&lt;br /&gt;
  var i := 0;&lt;br /&gt;
  while (i &amp;lt; n) and not pred(a[i]) do &lt;br /&gt;
    i += 1;&lt;br /&gt;
  if i = n then&lt;br /&gt;
    Result := -1&lt;br /&gt;
  else Result := i;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[http://pascalabc.net/WDE/?file=AlgStudents/Arrays/16_FindPred.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
=== №17. Количество по условию ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
function CountPred(a: array of integer; pred: IPredicate): integer;&lt;br /&gt;
begin&lt;br /&gt;
  Result := 0;&lt;br /&gt;
  for var i := 0 to a.Length - 1 do&lt;br /&gt;
    if pred(a[i]) then&lt;br /&gt;
      Result += 1;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[http://pascalabc.net/WDE/?file=AlgStudents/Arrays/17_CountPred.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
=== №18. Условный минимум ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
procedure MinElemPred(a: array of integer; pred: IPredicate; var min, imin: integer);&lt;br /&gt;
begin&lt;br /&gt;
  min := Integer.MaxValue;&lt;br /&gt;
  imin := -1;&lt;br /&gt;
  for var i := 1 to a.length - 1 do &lt;br /&gt;
    if pred(a[i]) and (a[i] &amp;lt; min) then&lt;br /&gt;
    begin&lt;br /&gt;
      min := a[i];&lt;br /&gt;
      imin := i;&lt;br /&gt;
    end;&lt;br /&gt;
end; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[http://pascalabc.net/WDE/?file=AlgStudents/Arrays/18_MinElemPred.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
=== №19. Удаление по условию ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
procedure DeleteAll(a: array of integer; var n: integer; pred: IPredicate);&lt;br /&gt;
begin&lt;br /&gt;
  Assert((0 &amp;lt; n) and (n &amp;lt;= a.Length));&lt;br /&gt;
  var j := 0;&lt;br /&gt;
  for var i := 0 to n - 1 do&lt;br /&gt;
    if not pred(a[i]) then&lt;br /&gt;
    begin&lt;br /&gt;
      a[j] := a[i];&lt;br /&gt;
      j += 1;&lt;br /&gt;
    end;&lt;br /&gt;
  n := j;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[http://pascalabc.net/WDE/?file=AlgStudents/Arrays/19_DeleteAll.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
© Буцев Виктор, Белоусько Тихон, Зуев Семен, Гончаров Владислав, Батраков Михаил, Гаджиев Казанфар, Пак Владислав&lt;/div&gt;</summary>
		<author><name>Vikvez</name></author>
	</entry>
	<entry>
		<id>https://pascalabc.net/wiki/index.php?title=%D0%A1%D1%82%D0%B0%D0%BD%D0%B4%D0%B0%D1%80%D1%82%D0%BD%D1%8B%D0%B5_%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B8_%D0%BD%D0%B0_%D0%BE%D0%B4%D0%BD%D0%BE%D0%BC%D0%B5%D1%80%D0%BD%D1%8B%D0%B5_%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2%D1%8B&amp;diff=1976</id>
		<title>Стандартные задачи на одномерные массивы</title>
		<link rel="alternate" type="text/html" href="https://pascalabc.net/wiki/index.php?title=%D0%A1%D1%82%D0%B0%D0%BD%D0%B4%D0%B0%D1%80%D1%82%D0%BD%D1%8B%D0%B5_%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B8_%D0%BD%D0%B0_%D0%BE%D0%B4%D0%BD%D0%BE%D0%BC%D0%B5%D1%80%D0%BD%D1%8B%D0%B5_%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2%D1%8B&amp;diff=1976"/>
		<updated>2010-12-03T17:45:05Z</updated>

		<summary type="html">&lt;p&gt;Vikvez: /* №4. Поиск элемента по заданному значению */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Стандартные задачи на одномерные массивы =&lt;br /&gt;
&lt;br /&gt;
== Простейшие алгоритмы ==&lt;br /&gt;
&lt;br /&gt;
=== №1. Вывод массива ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;procedure Println&amp;lt;T&amp;gt;(a: array of T);&lt;br /&gt;
begin&lt;br /&gt;
  foreach x: T in a do&lt;br /&gt;
    write(x, ' ');&lt;br /&gt;
  writeln;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=vikvez/alg_for_students/01_Print.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
=== №2. Заполнение массива случайными числами ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;procedure CreateRandomArray(var a: array of integer; n: integer);&lt;br /&gt;
begin&lt;br /&gt;
  a := new integer[n];&lt;br /&gt;
  for var i:=0 to n-1 do&lt;br /&gt;
    a[i] := random(100);&lt;br /&gt;
end;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=vikvez/alg_for_students/02_CreateRandomArray.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
=== №3. Инвертирование массива ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;procedure Invert&amp;lt;T&amp;gt;(a: array of T);&lt;br /&gt;
begin&lt;br /&gt;
  var n := a.Length;&lt;br /&gt;
  for var i:=0 to n div 2 - 1 do&lt;br /&gt;
    Swap(a[i],a[n-i-1]);&lt;br /&gt;
end; &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=vikvez/alg_for_students/03_Invert.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
=== №4. Поиск элемента по заданному значению ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;// С помощью for&lt;br /&gt;
function Find&amp;lt;T&amp;gt;(a: array of T; x: T): integer;&lt;br /&gt;
begin&lt;br /&gt;
  Result := -1;&lt;br /&gt;
  for var i := 0 to a.Length - 1 do&lt;br /&gt;
    if a[i] = x then&lt;br /&gt;
    begin&lt;br /&gt;
      Result := i;&lt;br /&gt;
      break;&lt;br /&gt;
    end;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
// С помощью while&lt;br /&gt;
function FindWhile&amp;lt;T&amp;gt;(a: array of T; x: T): integer;&lt;br /&gt;
begin&lt;br /&gt;
  var n := a.Length;&lt;br /&gt;
  var i := 0;&lt;br /&gt;
  while (i&amp;lt;n) and (a[i]&amp;lt;&amp;gt;x) do&lt;br /&gt;
    i += 1;&lt;br /&gt;
  if i=n then&lt;br /&gt;
    Result := -1&lt;br /&gt;
  else Result := i;&lt;br /&gt;
end;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=vikvez/alg_for_students/04_Find.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
=== №4a. Поиск с барьером ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;function FindWithBarrier&amp;lt;T&amp;gt;(a: array of T; n: integer; x: T): integer;&lt;br /&gt;
begin&lt;br /&gt;
  Assert((0 &amp;lt; n) and (n &amp;lt; a.Length));&lt;br /&gt;
  a[n] := x; // барьерный элемент равен разыскиваему&lt;br /&gt;
  var i := 0;&lt;br /&gt;
  while a[i]&amp;lt;&amp;gt;x do&lt;br /&gt;
    i += 1;&lt;br /&gt;
  if i=n then&lt;br /&gt;
    Result := -1&lt;br /&gt;
  else Result := i;&lt;br /&gt;
end;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=vikvez/alg_for_students/04_FindWithBarrier.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
=== №5. Минимальный элемент и его индекс ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;procedure MinElem(a: array of integer; var min: integer; var minind: integer);&lt;br /&gt;
begin&lt;br /&gt;
  min := a[0]; &lt;br /&gt;
  minind := 0;&lt;br /&gt;
  for var i:=1 to a.Length-1 do&lt;br /&gt;
    if a[i]&amp;lt;min then&lt;br /&gt;
    begin&lt;br /&gt;
      min := a[i];&lt;br /&gt;
      minind := i;&lt;br /&gt;
    end;&lt;br /&gt;
end;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=vikvez/alg_for_students/05_MinElem.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
==Сдвиги, вставка, удаление==&lt;br /&gt;
=== №6. Сдвиг влево ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;procedure ShiftLeft&amp;lt;T&amp;gt;(a: array of T);&lt;br /&gt;
begin&lt;br /&gt;
  for var i:=0 to a.Length-2 do&lt;br /&gt;
    a[i] := a[i+1];&lt;br /&gt;
  a[a.Length-1] := default(T);&lt;br /&gt;
end;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=vikvez/alg_for_students/06_ShiftLeft.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
=== №7. Сдвиг вправо ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
procedure ShiftRight&amp;lt;T&amp;gt;(a: array of T);&lt;br /&gt;
begin&lt;br /&gt;
  for var i := a.Length-1 downto 1 do&lt;br /&gt;
    a[i] := a[i-1];&lt;br /&gt;
  a[0] := default(T);&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=vikvez/alg_for_students/07_ShiftRight.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
=== №8. Циклический сдвиг вправо ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
procedure CycleShiftRight&amp;lt;T&amp;gt;(a: array of T);&lt;br /&gt;
begin&lt;br /&gt;
  var v := a[a.Length-1];&lt;br /&gt;
  for var i := a.Length downto 1 do&lt;br /&gt;
    a[i] := a[i-1];&lt;br /&gt;
  a[0] := v;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=vikvez/alg_for_students/08_CycleShiftRight.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
=== №9. Удаление k-того ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
procedure Delete&amp;lt;T&amp;gt;(a: array of T; var n: integer; k: integer);&lt;br /&gt;
begin&lt;br /&gt;
  Assert((0&amp;lt;=k) and (k&amp;lt;n))&lt;br /&gt;
  Assert((0&amp;lt;=n) and (n&amp;lt;=a.Length));&lt;br /&gt;
  for var i := k to n-2 do&lt;br /&gt;
    a[i] := a[i+1];&lt;br /&gt;
  a[n-1] := default(T);&lt;br /&gt;
  n -= 1;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=vikvez/alg_for_students/09_Delete.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
=== №10. Вставка на k-тое место ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
procedure Insert&amp;lt;T&amp;gt;(a: array of T; var n: integer; k: integer; value: T);&lt;br /&gt;
begin&lt;br /&gt;
  Assert((0&amp;lt;=k) and (k&amp;lt;=n) and (n&amp;lt;a.Length));&lt;br /&gt;
  for var i := n-1 downto k do&lt;br /&gt;
    a[i+1] := a[i];&lt;br /&gt;
  a[k] := value;&lt;br /&gt;
  n += 1;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=vikvez/alg_for_students/10_Insert.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
== Слияние упорядоченных и бинарный поиск в упорядоченном массиве==&lt;br /&gt;
=== №11. Слияние двух упорядоченных в один упорядоченный ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
// a,b упорядочены по возрастанию&lt;br /&gt;
function Merge(a,b: array of real; na,nb: integer): array of real;&lt;br /&gt;
begin&lt;br /&gt;
  Assert((0 &amp;lt; na) and (na &amp;lt; a.Length));&lt;br /&gt;
  Assert((0 &amp;lt; nb) and (nb &amp;lt; b.Length));&lt;br /&gt;
  a[na] := real.MaxValue;&lt;br /&gt;
  b[nb] := real.MaxValue;&lt;br /&gt;
  var c := new real[na + nb];&lt;br /&gt;
  var ia := 0;&lt;br /&gt;
  var ib := 0;&lt;br /&gt;
  for var ic := 0 to na + nb - 1 do&lt;br /&gt;
    if a[ia]&amp;lt;b[ib] then&lt;br /&gt;
    begin&lt;br /&gt;
      c[ic] := a[ia];&lt;br /&gt;
      ia += 1;&lt;br /&gt;
    end&lt;br /&gt;
    else&lt;br /&gt;
    begin&lt;br /&gt;
      c[ic] := b[ib];&lt;br /&gt;
      ib += 1;&lt;br /&gt;
    end;&lt;br /&gt;
  Result := c;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=vikvez/alg_for_students/11_Merge.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
=== №12. Поиск в упорядоченном массиве ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
function BinarySearch(a: array of integer; x: integer): integer;&lt;br /&gt;
begin&lt;br /&gt;
  var k: integer;&lt;br /&gt;
  var i := 0;&lt;br /&gt;
  var j := a.Length-1;&lt;br /&gt;
  repeat&lt;br /&gt;
    k := (i+j) div 2;&lt;br /&gt;
    if x&amp;gt;a[k] then&lt;br /&gt;
      i := k + 1&lt;br /&gt;
    else j := k - 1;&lt;br /&gt;
  until (a[k]=x) or (i&amp;gt;j);&lt;br /&gt;
  if a[k]=x then&lt;br /&gt;
    Result := k&lt;br /&gt;
  else Result := -1;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=vikvez/alg_for_students/12_BinarySearch.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
== Сортировка массивов ==&lt;br /&gt;
&lt;br /&gt;
=== №13. Сортировка выбором ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
procedure SortByChoice(a: array of integer);&lt;br /&gt;
begin&lt;br /&gt;
  for var i := 0 to a.Length - 2 do&lt;br /&gt;
  begin&lt;br /&gt;
    var min := a[i];&lt;br /&gt;
    var imin := i;&lt;br /&gt;
    for var j := i + 1 to a.Length - 1 do&lt;br /&gt;
      if a[j] &amp;lt; min then&lt;br /&gt;
      begin&lt;br /&gt;
        min := a[i];&lt;br /&gt;
        imin := j;&lt;br /&gt;
      end;&lt;br /&gt;
    a[imin] := a[i];&lt;br /&gt;
    a[i] := min;&lt;br /&gt;
  end;  &lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=vikvez/alg_for_students/13_SortByChoice.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
=== №14. Пузырьковая сортировка ===&lt;br /&gt;
====Способ №1====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
procedure BubbleSort(a: array of integer);&lt;br /&gt;
begin&lt;br /&gt;
  var n := a.Length;&lt;br /&gt;
  for var i := 0 to n - 2 do&lt;br /&gt;
    for var j := n - 1 downto i + 1 do&lt;br /&gt;
      if a[j] &amp;lt; a[j - 1] then&lt;br /&gt;
        Swap(a[j], a[j - 1]);&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=vikvez/alg_for_students/14_BubbleSort.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
====Способ №2(оптимизация)====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
procedure BubbleSort2(a: array of integer);&lt;br /&gt;
begin&lt;br /&gt;
  var i := a.Length - 1;&lt;br /&gt;
  var q: boolean;&lt;br /&gt;
  repeat&lt;br /&gt;
    q := true;&lt;br /&gt;
    for var j := 0 to i - 1 do&lt;br /&gt;
      if a[j + 1] &amp;lt; a[j] then&lt;br /&gt;
      begin&lt;br /&gt;
        Swap(a[j + 1], a[j]);&lt;br /&gt;
        q := false;&lt;br /&gt;
      end;&lt;br /&gt;
    i -= 1;&lt;br /&gt;
  until q;  &lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=vikvez/alg_for_students/14(2)_BubbleSort2.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
=== №15. Сортировка вставками ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
procedure SortByInsert(a: array of integer);&lt;br /&gt;
begin&lt;br /&gt;
  for var i := 1 to a.Length - 1 do &lt;br /&gt;
  begin&lt;br /&gt;
    var x := a[i];&lt;br /&gt;
    var j := i - 1;&lt;br /&gt;
    while (j &amp;gt;= 0) and (x &amp;lt; a[j]) do&lt;br /&gt;
    begin&lt;br /&gt;
      a[j + 1] := a[j];&lt;br /&gt;
      j -= 1;&lt;br /&gt;
    end;&lt;br /&gt;
    a[j + 1] := x;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=vikvez/alg_for_students/alg_15.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
== Использование процедурных типов в задачах на массивы ==&lt;br /&gt;
Пусть сделаны следующие описания:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
type IPredicate = function(x: integer): boolean;&lt;br /&gt;
&lt;br /&gt;
// Примеры предикатов&lt;br /&gt;
function Even(x: integer): boolean;&lt;br /&gt;
begin&lt;br /&gt;
  result := not odd(x);&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
function IsPositive(x: integer): boolean;&lt;br /&gt;
begin&lt;br /&gt;
  Result := x &amp;gt; 0;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== №16. Поиск по условию ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
function FindPred(a: array of integer; pred: IPredicate): integer;&lt;br /&gt;
begin&lt;br /&gt;
  var n := a.Length;&lt;br /&gt;
  var i := 0;&lt;br /&gt;
  while (i &amp;lt; n) and not pred(a[i]) do &lt;br /&gt;
    i += 1;&lt;br /&gt;
  if i = n then&lt;br /&gt;
    Result := -1&lt;br /&gt;
  else Result := i;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=vikvez/alg_for_students/15_SortByInsert.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
=== №17. Количество по условию ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
function CountPred(a: array of integer; pred: IPredicate): integer;&lt;br /&gt;
begin&lt;br /&gt;
  Result := 0;&lt;br /&gt;
  for var i := 0 to a.Length - 1 do&lt;br /&gt;
    if pred(a[i]) then&lt;br /&gt;
      Result += 1;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=vikvez/alg_for_students/17_CountPred.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
=== №18. Условный минимум ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
procedure MinElemPred(a: array of integer; pred: IPredicate; var min, imin: integer);&lt;br /&gt;
begin&lt;br /&gt;
  min := Integer.MaxValue;&lt;br /&gt;
  imin := -1;&lt;br /&gt;
  for var i := 1 to a.length - 1 do &lt;br /&gt;
    if pred(a[i]) and (a[i] &amp;lt; min) then&lt;br /&gt;
    begin&lt;br /&gt;
      min := a[i];&lt;br /&gt;
      imin := i;&lt;br /&gt;
    end;&lt;br /&gt;
end; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=vikvez/alg_for_students/18_MinElemPred.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
=== №19. Удаление по условию ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
procedure DeleteAll(a: array of integer; var n: integer; pred: IPredicate);&lt;br /&gt;
begin&lt;br /&gt;
  Assert((0 &amp;lt; n) and (n &amp;lt;= a.Length));&lt;br /&gt;
  var j := 0;&lt;br /&gt;
  for var i := 0 to n - 1 do&lt;br /&gt;
    if not pred(a[i]) then&lt;br /&gt;
    begin&lt;br /&gt;
      a[j] := a[i];&lt;br /&gt;
      j += 1;&lt;br /&gt;
    end;&lt;br /&gt;
  n := j;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=vikvez/alg_for_students/19_DeleteAll.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
© Буцев Виктор, Белоусько Тихон, Зуев Семен, Гончаров Владислав, Батраков Михаил, Гаджиев Казанфар, Пак Владислав&lt;/div&gt;</summary>
		<author><name>Vikvez</name></author>
	</entry>
	<entry>
		<id>https://pascalabc.net/wiki/index.php?title=%D0%A1%D1%82%D0%B0%D0%BD%D0%B4%D0%B0%D1%80%D1%82%D0%BD%D1%8B%D0%B5_%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B8_%D0%BD%D0%B0_%D0%BE%D0%B4%D0%BD%D0%BE%D0%BC%D0%B5%D1%80%D0%BD%D1%8B%D0%B5_%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2%D1%8B&amp;diff=1975</id>
		<title>Стандартные задачи на одномерные массивы</title>
		<link rel="alternate" type="text/html" href="https://pascalabc.net/wiki/index.php?title=%D0%A1%D1%82%D0%B0%D0%BD%D0%B4%D0%B0%D1%80%D1%82%D0%BD%D1%8B%D0%B5_%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B8_%D0%BD%D0%B0_%D0%BE%D0%B4%D0%BD%D0%BE%D0%BC%D0%B5%D1%80%D0%BD%D1%8B%D0%B5_%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2%D1%8B&amp;diff=1975"/>
		<updated>2010-12-03T15:50:44Z</updated>

		<summary type="html">&lt;p&gt;Vikvez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Стандартные задачи на одномерные массивы =&lt;br /&gt;
&lt;br /&gt;
== Простейшие алгоритмы ==&lt;br /&gt;
&lt;br /&gt;
=== №1. Вывод массива ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;procedure Println&amp;lt;T&amp;gt;(a: array of T);&lt;br /&gt;
begin&lt;br /&gt;
  foreach x: T in a do&lt;br /&gt;
    write(x, ' ');&lt;br /&gt;
  writeln;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=vikvez/alg_for_students/01_Print.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
=== №2. Заполнение массива случайными числами ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;procedure CreateRandomArray(var a: array of integer; n: integer);&lt;br /&gt;
begin&lt;br /&gt;
  a := new integer[n];&lt;br /&gt;
  for var i:=0 to n-1 do&lt;br /&gt;
    a[i] := random(100);&lt;br /&gt;
end;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=vikvez/alg_for_students/02_CreateRandomArray.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
=== №3. Инвертирование массива ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;procedure Invert&amp;lt;T&amp;gt;(a: array of T);&lt;br /&gt;
begin&lt;br /&gt;
  var n := a.Length;&lt;br /&gt;
  for var i:=0 to n div 2 - 1 do&lt;br /&gt;
    Swap(a[i],a[n-i-1]);&lt;br /&gt;
end; &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=vikvez/alg_for_students/03_Invert.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
=== №4. Поиск элемента по заданному значению ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;// С помощью for&lt;br /&gt;
function Find&amp;lt;T&amp;gt;(a: array of T; x: T): integer;&lt;br /&gt;
begin&lt;br /&gt;
  Result := -1;&lt;br /&gt;
  for var i := 0 to a.Length - 1 do&lt;br /&gt;
    if a[i] = x then&lt;br /&gt;
    begin&lt;br /&gt;
      Result := i;&lt;br /&gt;
      break;&lt;br /&gt;
    end;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
// С помощью while&lt;br /&gt;
function FindWhile&amp;lt;T&amp;gt;(a: array of T; x: T): integer;&lt;br /&gt;
begin&lt;br /&gt;
  var n := a.Length;&lt;br /&gt;
  var i := 0;&lt;br /&gt;
  while (i&amp;lt;n) and (a[i]&amp;lt;&amp;gt;x) do&lt;br /&gt;
    i += 1;&lt;br /&gt;
  if i=n then&lt;br /&gt;
    Result := -1&lt;br /&gt;
  else Result := i;&lt;br /&gt;
end;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[ http://pascalabc.net/WDE/?shared=vikvez/alg_for_students/04_Find.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
=== №4a. Поиск с барьером ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;function FindWithBarrier&amp;lt;T&amp;gt;(a: array of T; n: integer; x: T): integer;&lt;br /&gt;
begin&lt;br /&gt;
  Assert((0 &amp;lt; n) and (n &amp;lt; a.Length));&lt;br /&gt;
  a[n] := x; // барьерный элемент равен разыскиваему&lt;br /&gt;
  var i := 0;&lt;br /&gt;
  while a[i]&amp;lt;&amp;gt;x do&lt;br /&gt;
    i += 1;&lt;br /&gt;
  if i=n then&lt;br /&gt;
    Result := -1&lt;br /&gt;
  else Result := i;&lt;br /&gt;
end;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=vikvez/alg_for_students/04_FindWithBarrier.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
=== №5. Минимальный элемент и его индекс ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;procedure MinElem(a: array of integer; var min: integer; var minind: integer);&lt;br /&gt;
begin&lt;br /&gt;
  min := a[0]; &lt;br /&gt;
  minind := 0;&lt;br /&gt;
  for var i:=1 to a.Length-1 do&lt;br /&gt;
    if a[i]&amp;lt;min then&lt;br /&gt;
    begin&lt;br /&gt;
      min := a[i];&lt;br /&gt;
      minind := i;&lt;br /&gt;
    end;&lt;br /&gt;
end;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=vikvez/alg_for_students/05_MinElem.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
==Сдвиги, вставка, удаление==&lt;br /&gt;
=== №6. Сдвиг влево ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;procedure ShiftLeft&amp;lt;T&amp;gt;(a: array of T);&lt;br /&gt;
begin&lt;br /&gt;
  for var i:=0 to a.Length-2 do&lt;br /&gt;
    a[i] := a[i+1];&lt;br /&gt;
  a[a.Length-1] := default(T);&lt;br /&gt;
end;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=vikvez/alg_for_students/06_ShiftLeft.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
=== №7. Сдвиг вправо ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
procedure ShiftRight&amp;lt;T&amp;gt;(a: array of T);&lt;br /&gt;
begin&lt;br /&gt;
  for var i := a.Length-1 downto 1 do&lt;br /&gt;
    a[i] := a[i-1];&lt;br /&gt;
  a[0] := default(T);&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=vikvez/alg_for_students/07_ShiftRight.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
=== №8. Циклический сдвиг вправо ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
procedure CycleShiftRight&amp;lt;T&amp;gt;(a: array of T);&lt;br /&gt;
begin&lt;br /&gt;
  var v := a[a.Length-1];&lt;br /&gt;
  for var i := a.Length downto 1 do&lt;br /&gt;
    a[i] := a[i-1];&lt;br /&gt;
  a[0] := v;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=vikvez/alg_for_students/08_CycleShiftRight.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
=== №9. Удаление k-того ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
procedure Delete&amp;lt;T&amp;gt;(a: array of T; var n: integer; k: integer);&lt;br /&gt;
begin&lt;br /&gt;
  Assert((0&amp;lt;=k) and (k&amp;lt;n))&lt;br /&gt;
  Assert((0&amp;lt;=n) and (n&amp;lt;=a.Length));&lt;br /&gt;
  for var i := k to n-2 do&lt;br /&gt;
    a[i] := a[i+1];&lt;br /&gt;
  a[n-1] := default(T);&lt;br /&gt;
  n -= 1;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=vikvez/alg_for_students/09_Delete.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
=== №10. Вставка на k-тое место ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
procedure Insert&amp;lt;T&amp;gt;(a: array of T; var n: integer; k: integer; value: T);&lt;br /&gt;
begin&lt;br /&gt;
  Assert((0&amp;lt;=k) and (k&amp;lt;=n) and (n&amp;lt;a.Length));&lt;br /&gt;
  for var i := n-1 downto k do&lt;br /&gt;
    a[i+1] := a[i];&lt;br /&gt;
  a[k] := value;&lt;br /&gt;
  n += 1;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=vikvez/alg_for_students/10_Insert.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
== Слияние упорядоченных и бинарный поиск в упорядоченном массиве==&lt;br /&gt;
=== №11. Слияние двух упорядоченных в один упорядоченный ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
// a,b упорядочены по возрастанию&lt;br /&gt;
function Merge(a,b: array of real; na,nb: integer): array of real;&lt;br /&gt;
begin&lt;br /&gt;
  Assert((0 &amp;lt; na) and (na &amp;lt; a.Length));&lt;br /&gt;
  Assert((0 &amp;lt; nb) and (nb &amp;lt; b.Length));&lt;br /&gt;
  a[na] := real.MaxValue;&lt;br /&gt;
  b[nb] := real.MaxValue;&lt;br /&gt;
  var c := new real[na + nb];&lt;br /&gt;
  var ia := 0;&lt;br /&gt;
  var ib := 0;&lt;br /&gt;
  for var ic := 0 to na + nb - 1 do&lt;br /&gt;
    if a[ia]&amp;lt;b[ib] then&lt;br /&gt;
    begin&lt;br /&gt;
      c[ic] := a[ia];&lt;br /&gt;
      ia += 1;&lt;br /&gt;
    end&lt;br /&gt;
    else&lt;br /&gt;
    begin&lt;br /&gt;
      c[ic] := b[ib];&lt;br /&gt;
      ib += 1;&lt;br /&gt;
    end;&lt;br /&gt;
  Result := c;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=vikvez/alg_for_students/11_Merge.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
=== №12. Поиск в упорядоченном массиве ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
function BinarySearch(a: array of integer; x: integer): integer;&lt;br /&gt;
begin&lt;br /&gt;
  var k: integer;&lt;br /&gt;
  var i := 0;&lt;br /&gt;
  var j := a.Length-1;&lt;br /&gt;
  repeat&lt;br /&gt;
    k := (i+j) div 2;&lt;br /&gt;
    if x&amp;gt;a[k] then&lt;br /&gt;
      i := k + 1&lt;br /&gt;
    else j := k - 1;&lt;br /&gt;
  until (a[k]=x) or (i&amp;gt;j);&lt;br /&gt;
  if a[k]=x then&lt;br /&gt;
    Result := k&lt;br /&gt;
  else Result := -1;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=vikvez/alg_for_students/12_BinarySearch.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
== Сортировка массивов ==&lt;br /&gt;
&lt;br /&gt;
=== №13. Сортировка выбором ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
procedure SortByChoice(a: array of integer);&lt;br /&gt;
begin&lt;br /&gt;
  for var i := 0 to a.Length - 2 do&lt;br /&gt;
  begin&lt;br /&gt;
    var min := a[i];&lt;br /&gt;
    var imin := i;&lt;br /&gt;
    for var j := i + 1 to a.Length - 1 do&lt;br /&gt;
      if a[j] &amp;lt; min then&lt;br /&gt;
      begin&lt;br /&gt;
        min := a[i];&lt;br /&gt;
        imin := j;&lt;br /&gt;
      end;&lt;br /&gt;
    a[imin] := a[i];&lt;br /&gt;
    a[i] := min;&lt;br /&gt;
  end;  &lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=vikvez/alg_for_students/13_SortByChoice.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
=== №14. Пузырьковая сортировка ===&lt;br /&gt;
====Способ №1====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
procedure BubbleSort(a: array of integer);&lt;br /&gt;
begin&lt;br /&gt;
  var n := a.Length;&lt;br /&gt;
  for var i := 0 to n - 2 do&lt;br /&gt;
    for var j := n - 1 downto i + 1 do&lt;br /&gt;
      if a[j] &amp;lt; a[j - 1] then&lt;br /&gt;
        Swap(a[j], a[j - 1]);&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=vikvez/alg_for_students/14_BubbleSort.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
====Способ №2(оптимизация)====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
procedure BubbleSort2(a: array of integer);&lt;br /&gt;
begin&lt;br /&gt;
  var i := a.Length - 1;&lt;br /&gt;
  var q: boolean;&lt;br /&gt;
  repeat&lt;br /&gt;
    q := true;&lt;br /&gt;
    for var j := 0 to i - 1 do&lt;br /&gt;
      if a[j + 1] &amp;lt; a[j] then&lt;br /&gt;
      begin&lt;br /&gt;
        Swap(a[j + 1], a[j]);&lt;br /&gt;
        q := false;&lt;br /&gt;
      end;&lt;br /&gt;
    i -= 1;&lt;br /&gt;
  until q;  &lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=vikvez/alg_for_students/14(2)_BubbleSort2.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
=== №15. Сортировка вставками ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
procedure SortByInsert(a: array of integer);&lt;br /&gt;
begin&lt;br /&gt;
  for var i := 1 to a.Length - 1 do &lt;br /&gt;
  begin&lt;br /&gt;
    var x := a[i];&lt;br /&gt;
    var j := i - 1;&lt;br /&gt;
    while (j &amp;gt;= 0) and (x &amp;lt; a[j]) do&lt;br /&gt;
    begin&lt;br /&gt;
      a[j + 1] := a[j];&lt;br /&gt;
      j -= 1;&lt;br /&gt;
    end;&lt;br /&gt;
    a[j + 1] := x;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=vikvez/alg_for_students/alg_15.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
== Использование процедурных типов в задачах на массивы ==&lt;br /&gt;
Пусть сделаны следующие описания:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
type IPredicate = function(x: integer): boolean;&lt;br /&gt;
&lt;br /&gt;
// Примеры предикатов&lt;br /&gt;
function Even(x: integer): boolean;&lt;br /&gt;
begin&lt;br /&gt;
  result := not odd(x);&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
function IsPositive(x: integer): boolean;&lt;br /&gt;
begin&lt;br /&gt;
  Result := x &amp;gt; 0;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== №16. Поиск по условию ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
function FindPred(a: array of integer; pred: IPredicate): integer;&lt;br /&gt;
begin&lt;br /&gt;
  var n := a.Length;&lt;br /&gt;
  var i := 0;&lt;br /&gt;
  while (i &amp;lt; n) and not pred(a[i]) do &lt;br /&gt;
    i += 1;&lt;br /&gt;
  if i = n then&lt;br /&gt;
    Result := -1&lt;br /&gt;
  else Result := i;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=vikvez/alg_for_students/15_SortByInsert.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
=== №17. Количество по условию ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
function CountPred(a: array of integer; pred: IPredicate): integer;&lt;br /&gt;
begin&lt;br /&gt;
  Result := 0;&lt;br /&gt;
  for var i := 0 to a.Length - 1 do&lt;br /&gt;
    if pred(a[i]) then&lt;br /&gt;
      Result += 1;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=vikvez/alg_for_students/17_CountPred.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
=== №18. Условный минимум ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
procedure MinElemPred(a: array of integer; pred: IPredicate; var min, imin: integer);&lt;br /&gt;
begin&lt;br /&gt;
  min := Integer.MaxValue;&lt;br /&gt;
  imin := -1;&lt;br /&gt;
  for var i := 1 to a.length - 1 do &lt;br /&gt;
    if pred(a[i]) and (a[i] &amp;lt; min) then&lt;br /&gt;
    begin&lt;br /&gt;
      min := a[i];&lt;br /&gt;
      imin := i;&lt;br /&gt;
    end;&lt;br /&gt;
end; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=vikvez/alg_for_students/18_MinElemPred.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
=== №19. Удаление по условию ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
procedure DeleteAll(a: array of integer; var n: integer; pred: IPredicate);&lt;br /&gt;
begin&lt;br /&gt;
  Assert((0 &amp;lt; n) and (n &amp;lt;= a.Length));&lt;br /&gt;
  var j := 0;&lt;br /&gt;
  for var i := 0 to n - 1 do&lt;br /&gt;
    if not pred(a[i]) then&lt;br /&gt;
    begin&lt;br /&gt;
      a[j] := a[i];&lt;br /&gt;
      j += 1;&lt;br /&gt;
    end;&lt;br /&gt;
  n := j;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=vikvez/alg_for_students/19_DeleteAll.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
© Буцев Виктор, Белоусько Тихон, Зуев Семен, Гончаров Владислав, Батраков Михаил, Гаджиев Казанфар, Пак Владислав&lt;/div&gt;</summary>
		<author><name>Vikvez</name></author>
	</entry>
	<entry>
		<id>https://pascalabc.net/wiki/index.php?title=%D0%A1%D1%82%D0%B0%D0%BD%D0%B4%D0%B0%D1%80%D1%82%D0%BD%D1%8B%D0%B5_%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B8_%D0%BD%D0%B0_%D0%BE%D0%B4%D0%BD%D0%BE%D0%BC%D0%B5%D1%80%D0%BD%D1%8B%D0%B5_%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2%D1%8B&amp;diff=1972</id>
		<title>Стандартные задачи на одномерные массивы</title>
		<link rel="alternate" type="text/html" href="https://pascalabc.net/wiki/index.php?title=%D0%A1%D1%82%D0%B0%D0%BD%D0%B4%D0%B0%D1%80%D1%82%D0%BD%D1%8B%D0%B5_%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B8_%D0%BD%D0%B0_%D0%BE%D0%B4%D0%BD%D0%BE%D0%BC%D0%B5%D1%80%D0%BD%D1%8B%D0%B5_%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2%D1%8B&amp;diff=1972"/>
		<updated>2010-12-02T17:51:59Z</updated>

		<summary type="html">&lt;p&gt;Vikvez: /* Способ №2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Стандартные задачи на одномерные массивы =&lt;br /&gt;
&lt;br /&gt;
== Простейшие алгоритмы ==&lt;br /&gt;
&lt;br /&gt;
=== №1. Вывод массива ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;procedure Println&amp;lt;T&amp;gt;(a: array of T);&lt;br /&gt;
begin&lt;br /&gt;
  foreach x: T in a do&lt;br /&gt;
    write(x, ' ');&lt;br /&gt;
  writeln;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=DaZzz/Arrays/1.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
=== №2. Заполнение массива случайными числами ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;procedure CreateRandomArray(var a: array of integer; n: integer);&lt;br /&gt;
begin&lt;br /&gt;
  a := new integer[n];&lt;br /&gt;
  for var i:=0 to n-1 do&lt;br /&gt;
    a[i] := random(100);&lt;br /&gt;
end;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=DaZzz/Arrays/2.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
=== №3. Инвертирование массива ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;procedure Invert&amp;lt;T&amp;gt;(a: array of T);&lt;br /&gt;
begin&lt;br /&gt;
  var n := a.Length;&lt;br /&gt;
  for var i:=0 to n div 2 - 1 do&lt;br /&gt;
    Swap(a[i],a[n-i-1]);&lt;br /&gt;
end; &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=DaZzz/Arrays/3.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
=== №4. Поиск элемента по заданному значению ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;// С помощью for&lt;br /&gt;
function Find&amp;lt;T&amp;gt;(a: array of T; x: T): integer;&lt;br /&gt;
begin&lt;br /&gt;
  Result := -1;&lt;br /&gt;
  for var i := 0 to a.Length - 1 do&lt;br /&gt;
    if a[i] = x then&lt;br /&gt;
    begin&lt;br /&gt;
      Result := i;&lt;br /&gt;
      break;&lt;br /&gt;
    end;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
// С помощью while&lt;br /&gt;
function FindWhile&amp;lt;T&amp;gt;(a: array of T; x: T): integer;&lt;br /&gt;
begin&lt;br /&gt;
  var n := a.Length;&lt;br /&gt;
  var i := 0;&lt;br /&gt;
  while (i&amp;lt;n) and (a[i]&amp;lt;&amp;gt;x) do&lt;br /&gt;
    i += 1;&lt;br /&gt;
  if i=n then&lt;br /&gt;
    Result := -1&lt;br /&gt;
  else Result := i;&lt;br /&gt;
end;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=DaZzz/Arrays/4.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
=== №4a. Поиск с барьером ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;function FindWithBarrier&amp;lt;T&amp;gt;(a: array of T; n: integer; x: T): integer;&lt;br /&gt;
begin&lt;br /&gt;
  Assert((0 &amp;lt; n) and (n &amp;lt; a.Length));&lt;br /&gt;
  a[n] := x; // барьерный элемент равен разыскиваему&lt;br /&gt;
  var i := 0;&lt;br /&gt;
  while a[i]&amp;lt;&amp;gt;x do&lt;br /&gt;
    i += 1;&lt;br /&gt;
  if i=n then&lt;br /&gt;
    Result := -1&lt;br /&gt;
  else Result := i;&lt;br /&gt;
end;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=DaZzz/Arrays/4a.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
=== №5. Минимальный элемент и его индекс ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;procedure MinElem(a: array of integer; var min: integer; var minind: integer);&lt;br /&gt;
begin&lt;br /&gt;
  min := a[0]; &lt;br /&gt;
  minind := 0;&lt;br /&gt;
  for var i:=1 to a.Length-1 do&lt;br /&gt;
    if a[i]&amp;lt;min then&lt;br /&gt;
    begin&lt;br /&gt;
      min := a[i];&lt;br /&gt;
      minind := i;&lt;br /&gt;
    end;&lt;br /&gt;
end;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=DaZzz/Arrays/5.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
==Сдвиги, вставка, удаление==&lt;br /&gt;
=== №6. Сдвиг влево ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;procedure ShiftLeft&amp;lt;T&amp;gt;(a: array of T);&lt;br /&gt;
begin&lt;br /&gt;
  for var i:=0 to a.Length-2 do&lt;br /&gt;
    a[i] := a[i+1];&lt;br /&gt;
  a[a.Length-1] := default(T);&lt;br /&gt;
end;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=DaZzz/Arrays/6.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
=== №7. Сдвиг вправо ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
procedure ShiftRight&amp;lt;T&amp;gt;(a: array of T);&lt;br /&gt;
begin&lt;br /&gt;
  for var i := a.Length-1 downto 1 do&lt;br /&gt;
    a[i] := a[i-1];&lt;br /&gt;
  a[0] := default(T);&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=PacVlad/ShiftRight.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
=== №8. Циклический сдвиг вправо ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
procedure CycleShiftRight&amp;lt;T&amp;gt;(a: array of T);&lt;br /&gt;
begin&lt;br /&gt;
  var v := a[a.Length-1];&lt;br /&gt;
  for var i := a.Length downto 1 do&lt;br /&gt;
    a[i] := a[i-1];&lt;br /&gt;
  a[0] := v;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=PacVlad/CycleShiftRight.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
=== №9. Удаление k-того ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
procedure Delete&amp;lt;T&amp;gt;(a: array of T; var n: integer; k: integer);&lt;br /&gt;
begin&lt;br /&gt;
  Assert((0&amp;lt;=k) and (k&amp;lt;n))&lt;br /&gt;
  Assert((0&amp;lt;=n) and (n&amp;lt;=a.Length));&lt;br /&gt;
  for var i := k to n-2 do&lt;br /&gt;
    a[i] := a[i+1];&lt;br /&gt;
  a[n-1] := default(T);&lt;br /&gt;
  n -= 1;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=PacVlad/Delete.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
=== №10. Вставка на k-тое место ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
procedure Insert&amp;lt;T&amp;gt;(a: array of T; var n: integer; k: integer; value: T);&lt;br /&gt;
begin&lt;br /&gt;
  Assert((0&amp;lt;=k) and (k&amp;lt;=n) and (n&amp;lt;a.Length));&lt;br /&gt;
  for var i := n-1 downto k do&lt;br /&gt;
    a[i+1] := a[i];&lt;br /&gt;
  a[k] := value;&lt;br /&gt;
  n += 1;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=PacVlad/Insert.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
== Слияние упорядоченных и бинарный поиск в упорядоченном массиве==&lt;br /&gt;
=== №11. Слияние двух упорядоченных в один упорядоченный ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
// a,b упорядочены по возрастанию&lt;br /&gt;
function Merge(a,b: array of real; na,nb: integer): array of real;&lt;br /&gt;
begin&lt;br /&gt;
  Assert((0 &amp;lt; na) and (na &amp;lt; a.Length));&lt;br /&gt;
  Assert((0 &amp;lt; nb) and (nb &amp;lt; b.Length));&lt;br /&gt;
  a[na] := real.MaxValue;&lt;br /&gt;
  b[nb] := real.MaxValue;&lt;br /&gt;
  var c := new real[na + nb];&lt;br /&gt;
  var ia := 0;&lt;br /&gt;
  var ib := 0;&lt;br /&gt;
  for var ic := 0 to na + nb - 1 do&lt;br /&gt;
    if a[ia]&amp;lt;b[ib] then&lt;br /&gt;
    begin&lt;br /&gt;
      c[ic] := a[ia];&lt;br /&gt;
      ia += 1;&lt;br /&gt;
    end&lt;br /&gt;
    else&lt;br /&gt;
    begin&lt;br /&gt;
      c[ic] := b[ib];&lt;br /&gt;
      ib += 1;&lt;br /&gt;
    end;&lt;br /&gt;
  Result := c;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== №12. Поиск в упорядоченном массиве ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
function BinarySearch(a: array of integer; x: integer): integer;&lt;br /&gt;
begin&lt;br /&gt;
  var k: integer;&lt;br /&gt;
  var i := 0;&lt;br /&gt;
  var j := a.Length-1;&lt;br /&gt;
  repeat&lt;br /&gt;
    k := (i+j) div 2;&lt;br /&gt;
    if x&amp;gt;a[k] then&lt;br /&gt;
      i := k + 1&lt;br /&gt;
    else j := k - 1;&lt;br /&gt;
  until (a[k]=x) or (i&amp;gt;j);&lt;br /&gt;
  if a[k]=x then&lt;br /&gt;
    Result := k&lt;br /&gt;
  else Result := -1;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Сортировка массивов ==&lt;br /&gt;
&lt;br /&gt;
=== №13. Сортировка выбором ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
procedure SortByChoice(a: array of integer);&lt;br /&gt;
begin&lt;br /&gt;
  for var i := 0 to a.Length - 2 do&lt;br /&gt;
  begin&lt;br /&gt;
    var min := a[i];&lt;br /&gt;
    var imin := i;&lt;br /&gt;
    for var j := i + 1 to a.Length - 1 do&lt;br /&gt;
      if a[j] &amp;lt; min then&lt;br /&gt;
      begin&lt;br /&gt;
        min := a[i];&lt;br /&gt;
        imin := j;&lt;br /&gt;
      end;&lt;br /&gt;
    a[imin] := a[i];&lt;br /&gt;
    a[i] := min;&lt;br /&gt;
  end;  &lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=vikvez/alg_for_students/alg_13.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
=== №14. Пузырьковая сортировка ===&lt;br /&gt;
====Способ №1====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
procedure BubbleSort(a: array of integer);&lt;br /&gt;
begin&lt;br /&gt;
  var n := a.Length;&lt;br /&gt;
  for var i := 0 to n - 2 do&lt;br /&gt;
    for var j := n - 1 downto i + 1 do&lt;br /&gt;
      if a[j] &amp;lt; a[j - 1] then&lt;br /&gt;
        Swap(a[j], a[j - 1]);&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=vikvez/alg_for_students/alg_14.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
====Способ №2(оптимизация)====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
procedure BubbleSort2(a: array of integer);&lt;br /&gt;
begin&lt;br /&gt;
  var i := a.Length - 1;&lt;br /&gt;
  var q: boolean;&lt;br /&gt;
  repeat&lt;br /&gt;
    q := true;&lt;br /&gt;
    for var j := 0 to i - 1 do&lt;br /&gt;
      if a[j + 1] &amp;lt; a[j] then&lt;br /&gt;
      begin&lt;br /&gt;
        Swap(a[j + 1], a[j]);&lt;br /&gt;
        q := false;&lt;br /&gt;
      end;&lt;br /&gt;
    i -= 1;&lt;br /&gt;
  until q;  &lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=vikvez/alg_for_students/alg_14_2.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
=== №15. Сортировка вставками ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
procedure SortByInsert(a: array of integer);&lt;br /&gt;
begin&lt;br /&gt;
  for var i := 1 to a.Length - 1 do &lt;br /&gt;
  begin&lt;br /&gt;
    var x := a[i];&lt;br /&gt;
    var j := i - 1;&lt;br /&gt;
    while (j &amp;gt;= 0) and (x &amp;lt; a[j]) do&lt;br /&gt;
    begin&lt;br /&gt;
      a[j + 1] := a[j];&lt;br /&gt;
      j -= 1;&lt;br /&gt;
    end;&lt;br /&gt;
    a[j + 1] := x;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=vikvez/alg_for_students/alg_15.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Использование процедурных типов в задачах на массивы ==&lt;br /&gt;
Пусть сделаны следующие описания:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
type IPredicate = function(x: integer): boolean;&lt;br /&gt;
&lt;br /&gt;
// Примеры предикатов&lt;br /&gt;
function Even(x: integer): boolean;&lt;br /&gt;
begin&lt;br /&gt;
  result := not odd(x);&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
function IsPositive(x: integer): boolean;&lt;br /&gt;
begin&lt;br /&gt;
  Result := x &amp;gt; 0;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== №16. Поиск по условию ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
function FindPred(a: array of integer; pred: IPredicate): integer;&lt;br /&gt;
begin&lt;br /&gt;
  var n := a.Length;&lt;br /&gt;
  var i := 0;&lt;br /&gt;
  while (i &amp;lt; n) and not pred(a[i]) do &lt;br /&gt;
    i += 1;&lt;br /&gt;
  if i = n then&lt;br /&gt;
    Result := -1&lt;br /&gt;
  else Result := i;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=vikvez/alg_for_students/alg_16.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
=== №17. Количество по условию ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
function CountPred(a: array of integer; pred: IPredicate): integer;&lt;br /&gt;
begin&lt;br /&gt;
  Result := 0;&lt;br /&gt;
  for var i := 0 to a.Length - 1 do&lt;br /&gt;
    if pred(a[i]) then&lt;br /&gt;
      Result += 1;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=Miklus/ArraysWithPredicate/17_CountWithCond.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
=== №18. Условный минимум ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
procedure MinElemPred(a: array of integer; pred: IPredicate; var min, imin: integer);&lt;br /&gt;
begin&lt;br /&gt;
  min := Integer.MaxValue;&lt;br /&gt;
  imin := -1;&lt;br /&gt;
  for var i := 1 to a.length - 1 do &lt;br /&gt;
    if pred(a[i]) and (a[i] &amp;lt; min) then&lt;br /&gt;
    begin&lt;br /&gt;
      min := a[i];&lt;br /&gt;
      imin := i;&lt;br /&gt;
    end;&lt;br /&gt;
end; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=Miklus/ArraysWithPredicate/18_CondMin.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
=== №19. Удаление по условию ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
procedure DeleteAll(a: array of integer; var n: integer; pred: IPredicate);&lt;br /&gt;
begin&lt;br /&gt;
  Assert((0 &amp;lt; n) and (n &amp;lt;= a.Length));&lt;br /&gt;
  var j := 0;&lt;br /&gt;
  for var i := 0 to n - 1 do&lt;br /&gt;
    if not pred(a[i]) then&lt;br /&gt;
    begin&lt;br /&gt;
      a[j] := a[i];&lt;br /&gt;
      j += 1;&lt;br /&gt;
    end;&lt;br /&gt;
  n := j;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=Miklus/ArraysWithPredicate/19_DeleteWithCond.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
© Буцев Виктор, Белоусько Тихон, Зуев Семен, Гончаров Владислав, Батраков Михаил, Гаджиев Казанфар, Пак Владислав&lt;/div&gt;</summary>
		<author><name>Vikvez</name></author>
	</entry>
	<entry>
		<id>https://pascalabc.net/wiki/index.php?title=%D0%A1%D1%82%D0%B0%D0%BD%D0%B4%D0%B0%D1%80%D1%82%D0%BD%D1%8B%D0%B5_%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B8_%D0%BD%D0%B0_%D0%BE%D0%B4%D0%BD%D0%BE%D0%BC%D0%B5%D1%80%D0%BD%D1%8B%D0%B5_%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2%D1%8B&amp;diff=1928</id>
		<title>Стандартные задачи на одномерные массивы</title>
		<link rel="alternate" type="text/html" href="https://pascalabc.net/wiki/index.php?title=%D0%A1%D1%82%D0%B0%D0%BD%D0%B4%D0%B0%D1%80%D1%82%D0%BD%D1%8B%D0%B5_%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B8_%D0%BD%D0%B0_%D0%BE%D0%B4%D0%BD%D0%BE%D0%BC%D0%B5%D1%80%D0%BD%D1%8B%D0%B5_%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2%D1%8B&amp;diff=1928"/>
		<updated>2010-11-29T22:54:33Z</updated>

		<summary type="html">&lt;p&gt;Vikvez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Стандартные задачи на одномерные массивы =&lt;br /&gt;
&lt;br /&gt;
== Простейшие алгоритмы ==&lt;br /&gt;
&lt;br /&gt;
=== №1. Вывод массива ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;procedure Println&amp;lt;T&amp;gt;(a: array of T; delim: string := ' ');&lt;br /&gt;
begin&lt;br /&gt;
  foreach x: T in a do&lt;br /&gt;
    write(x, delim);&lt;br /&gt;
  writeln;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=DaZzz/Arrays/1.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
=== №2. Заполнение массива случайными числами ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;procedure CreateRandomArray(var a: array of integer; n: integer);&lt;br /&gt;
begin&lt;br /&gt;
  SetLength(a,n);&lt;br /&gt;
  for var i:=0 to n-1 do&lt;br /&gt;
    a[i] := random(100);&lt;br /&gt;
end;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=DaZzz/Arrays/2.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
=== №3. Инвертирование массива ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;procedure Invert&amp;lt;T&amp;gt;(a: array of T);&lt;br /&gt;
begin&lt;br /&gt;
  var n := a.Length;&lt;br /&gt;
  for var i:=0 to n div 2 - 1 do&lt;br /&gt;
    Swap(a[i],a[n-i-1]);&lt;br /&gt;
end; &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=DaZzz/Arrays/3.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
=== №4. Поиск элемента по заданному значению ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;// С помощью for&lt;br /&gt;
function Find&amp;lt;T&amp;gt;(a: array of T; x: T): integer;&lt;br /&gt;
begin&lt;br /&gt;
  Result := -1;&lt;br /&gt;
  for var i := 0 to a.Length - 1 do&lt;br /&gt;
    if a[i] = x then&lt;br /&gt;
    begin&lt;br /&gt;
      Result := i;&lt;br /&gt;
      break;&lt;br /&gt;
    end;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
// С помощью while&lt;br /&gt;
function FindWhile&amp;lt;T&amp;gt;(a: array of T; x: T): integer;&lt;br /&gt;
begin&lt;br /&gt;
  var n := a.Length;&lt;br /&gt;
  var i := 0;&lt;br /&gt;
  while (i&amp;lt;n) and (a[i]&amp;lt;&amp;gt;x) do&lt;br /&gt;
    i += 1;&lt;br /&gt;
  if i=n then&lt;br /&gt;
    Result := -1&lt;br /&gt;
  else Result := i;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
// №4a. Поиск с барьером&lt;br /&gt;
function FindWithBarrier&amp;lt;T&amp;gt;(a: array of T; n: integer; x: T): integer;&lt;br /&gt;
begin&lt;br /&gt;
  Assert((0 &amp;lt; n) and (n &amp;lt; a.Length));&lt;br /&gt;
  a[n] := x; // барьерный элемент равен разыскиваему&lt;br /&gt;
  var i := 0;&lt;br /&gt;
  while a[i]&amp;lt;&amp;gt;x do&lt;br /&gt;
    i += 1;&lt;br /&gt;
  if i=n then&lt;br /&gt;
    Result := -1&lt;br /&gt;
  else Result := i;&lt;br /&gt;
end;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=DaZzz/Arrays/4.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
=== №5. Минимальный элемент и его индекс ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;procedure MinElem(a: array of integer; var min: integer; var minind: integer);&lt;br /&gt;
begin&lt;br /&gt;
  min := a[0]; &lt;br /&gt;
  minind := 0;&lt;br /&gt;
  for var i:=1 to a.Length-1 do&lt;br /&gt;
    if a[i]&amp;lt;min then&lt;br /&gt;
    begin&lt;br /&gt;
      min := a[i];&lt;br /&gt;
      minind := i;&lt;br /&gt;
    end;&lt;br /&gt;
end;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=DaZzz/Arrays/5.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
==Сдвиги, вставка, удаление==&lt;br /&gt;
=== №6. Сдвиг влево ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;procedure ShiftLeft&amp;lt;T&amp;gt;(a: array of T);&lt;br /&gt;
begin&lt;br /&gt;
  for var i:=0 to a.Length-2 do&lt;br /&gt;
    a[i] := a[i+1];&lt;br /&gt;
  a[a.Length-1] := default(T);&lt;br /&gt;
end;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=DaZzz/Arrays/6.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
=== №7. Сдвиг вправо ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
procedure ShiftRight&amp;lt;T&amp;gt;(a: array of T);&lt;br /&gt;
begin&lt;br /&gt;
  for var i := a.Length-1 downto 1 do&lt;br /&gt;
    a[i] := a[i-1];&lt;br /&gt;
  a[0] := default(T);&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=PacVlad/ShiftRight.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
=== №8. Циклический сдвиг вправо ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
procedure CycleShiftRight&amp;lt;T&amp;gt;(a: array of T);&lt;br /&gt;
begin&lt;br /&gt;
  var v := a[a.Length-1];&lt;br /&gt;
  for var i := a.Length downto 1 do&lt;br /&gt;
    a[i] := a[i-1];&lt;br /&gt;
  a[0] := v;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=PacVlad/CycleShiftRight.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
=== №9. Удаление k-того ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
procedure Delete&amp;lt;T&amp;gt;(a: array of T; var n: integer; k: integer);&lt;br /&gt;
begin&lt;br /&gt;
  Assert((0&amp;lt;=k) and (k&amp;lt;n))&lt;br /&gt;
  Assert((0&amp;lt;=n) and (n&amp;lt;=a.Length));&lt;br /&gt;
  for var i := k to n-2 do&lt;br /&gt;
    a[i] := a[i+1];&lt;br /&gt;
  a[n-1] := default(T);&lt;br /&gt;
  n -= 1;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=PacVlad/Delete.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
=== №10. Вставка на k-тое место ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
procedure Insert&amp;lt;T&amp;gt;(a: array of T; var n: integer; k: integer; value: T);&lt;br /&gt;
begin&lt;br /&gt;
  Assert((0&amp;lt;=k) and (k&amp;lt;=n) and (n&amp;lt;a.Length));&lt;br /&gt;
  for var i := n-1 downto k do&lt;br /&gt;
    a[i+1] := a[i];&lt;br /&gt;
  a[k] := value;&lt;br /&gt;
  n += 1;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=PacVlad/Insert.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
== Слияние упорядоченных и бинарный поиск в упорядоченном массиве==&lt;br /&gt;
=== №11. Слияние двух упорядоченных в один упорядоченный ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
// a,b упорядочены по возрастанию&lt;br /&gt;
function Merge(a,b: array of real; na,nb: integer): array of real;&lt;br /&gt;
begin&lt;br /&gt;
  Assert((0 &amp;lt; na) and (na &amp;lt; a.Length));&lt;br /&gt;
  Assert((0 &amp;lt; nb) and (nb &amp;lt; b.Length));&lt;br /&gt;
  a[na] := real.MaxValue;&lt;br /&gt;
  b[nb] := real.MaxValue;&lt;br /&gt;
  var c := new integer[na + nb];&lt;br /&gt;
  var ia := 0;&lt;br /&gt;
  var ib := 0;&lt;br /&gt;
  for var ic := 0 to na + nb - 1 do&lt;br /&gt;
    if a[ia]&amp;lt;b[ib] then&lt;br /&gt;
    begin&lt;br /&gt;
      c[ic] := a[ia];&lt;br /&gt;
      ia += 1;&lt;br /&gt;
    end&lt;br /&gt;
    else&lt;br /&gt;
    begin&lt;br /&gt;
      c[ic] := b[ib];&lt;br /&gt;
      ib += 1;&lt;br /&gt;
    end;&lt;br /&gt;
  Result := c;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== №12. Поиск в упорядоченном массиве ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
function BinarySearch(a: array of integer; x: integer): integer;&lt;br /&gt;
begin&lt;br /&gt;
  var k: integer;&lt;br /&gt;
  var i := 0;&lt;br /&gt;
  var j := a.Length-1;&lt;br /&gt;
  repeat&lt;br /&gt;
    k := (i+j) div 2;&lt;br /&gt;
    if x&amp;gt;a[k] then&lt;br /&gt;
      i := k + 1&lt;br /&gt;
    else j := k - 1;&lt;br /&gt;
  until (a[k]=x) or (i&amp;gt;j);&lt;br /&gt;
  if a[k]=x then&lt;br /&gt;
    Result := k&lt;br /&gt;
  else Result := -1;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Сортировка массивов ==&lt;br /&gt;
&lt;br /&gt;
=== №13. Сортировка выбором ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
procedure SortByChoice(a: array of integer);&lt;br /&gt;
begin&lt;br /&gt;
  for var i := 0 to a.Length - 2 do&lt;br /&gt;
  begin&lt;br /&gt;
    var min := a[i];&lt;br /&gt;
    var imin := i;&lt;br /&gt;
    for var j := i + 1 to a.Length - 1 do&lt;br /&gt;
      if a[j] &amp;lt; min then&lt;br /&gt;
      begin&lt;br /&gt;
        min := a[i];&lt;br /&gt;
        imin := j;&lt;br /&gt;
      end;&lt;br /&gt;
    a[imin] := a[i];&lt;br /&gt;
    a[i] := min;&lt;br /&gt;
  end;  &lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=vikvez/alg_for_students/alg_13.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
=== №14. Пузырьковая сортировка ===&lt;br /&gt;
====Способ №1====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
procedure BubbleSort(a: array of integer);&lt;br /&gt;
begin&lt;br /&gt;
  var n := a.Length;&lt;br /&gt;
  for var i := 0 to n - 2 do&lt;br /&gt;
    for var j := n - 1 downto i + 1 do&lt;br /&gt;
      if a[j] &amp;lt; a[j - 1] then&lt;br /&gt;
        Swap(a[j], a[j - 1]);&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=vikvez/alg_for_students/alg_14.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
====Способ №2====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
procedure BubbleSort2(a: array of integer);&lt;br /&gt;
begin&lt;br /&gt;
  var i := a.Length - 1;&lt;br /&gt;
  var q: boolean;&lt;br /&gt;
  repeat&lt;br /&gt;
    q := true;&lt;br /&gt;
    for var j := 0 to i - 1 do&lt;br /&gt;
      if a[j + 1] &amp;lt; a[j] then&lt;br /&gt;
      begin&lt;br /&gt;
        Swap(a[j + 1], a[j]);&lt;br /&gt;
        q := false;&lt;br /&gt;
      end;&lt;br /&gt;
    i -= 1;&lt;br /&gt;
  until q;  &lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=vikvez/alg_for_students/alg_14_2.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== №15. Сортировка вставками ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
procedure SortByInsert(a: array of integer);&lt;br /&gt;
begin&lt;br /&gt;
  for var i := 1 to a.Length - 1 do &lt;br /&gt;
  begin&lt;br /&gt;
    var x := a[i];&lt;br /&gt;
    var j := i - 1;&lt;br /&gt;
    while (j &amp;gt;= 0) and (x &amp;lt; a[j]) do&lt;br /&gt;
    begin&lt;br /&gt;
      a[j + 1] := a[j];&lt;br /&gt;
      j -= 1;&lt;br /&gt;
    end;&lt;br /&gt;
    a[j + 1] := x;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=vikvez/alg_for_students/alg_15.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Использование процедурных типов в задачах на массивы ==&lt;br /&gt;
Пусть сделаны следующие описания:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
type IPredicate = function(x: integer): boolean;&lt;br /&gt;
&lt;br /&gt;
// Примеры предикатов&lt;br /&gt;
function Even(x: integer): boolean;&lt;br /&gt;
begin&lt;br /&gt;
  result := not odd(x);&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
function IsPositive(x: integer): boolean;&lt;br /&gt;
begin&lt;br /&gt;
  Result := x &amp;gt; 0;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== №16. Поиск по условию ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
function FindPred(a: array of integer; pred: IPredicate): integer;&lt;br /&gt;
begin&lt;br /&gt;
  var n := a.Length;&lt;br /&gt;
  var i := 0;&lt;br /&gt;
  while (i &amp;lt; n) and not pred(a[i]) do &lt;br /&gt;
    i += 1;&lt;br /&gt;
  if i = n then&lt;br /&gt;
    Result := -1&lt;br /&gt;
  else Result := i;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[http://pascalabc.net/WDE/?shared=vikvez/alg_for_students/alg_16.pas Ссылка на алгоритм в среде WDE]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== №17. Количество по условию ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
function CountPred(a: array of integer; pred: IPredicate): integer;&lt;br /&gt;
begin&lt;br /&gt;
  Result := 0;&lt;br /&gt;
  for var i := 0 to a.Length - 1 do&lt;br /&gt;
    if pred(a[i]) then&lt;br /&gt;
      Result += 1;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== №18. Условный минимум ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
procedure MinElemPred(a: array of integer; pred: IPredicate; var min, imin: integer);&lt;br /&gt;
begin&lt;br /&gt;
  min := Integer.MaxValue;&lt;br /&gt;
  imin := -1;&lt;br /&gt;
  for var i := 1 to a.length - 1 do &lt;br /&gt;
    if pred(a[i]) and (a[i] &amp;lt; min) then&lt;br /&gt;
    begin&lt;br /&gt;
      min := a[i];&lt;br /&gt;
      imin := i;&lt;br /&gt;
    end;&lt;br /&gt;
end; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== №19. Удаление по условию ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
procedure DeleteAll(a: array of integer; var n: integer; pred: IPredicate);&lt;br /&gt;
begin&lt;br /&gt;
  Assert((0 &amp;lt; n) and (n &amp;lt;= a.Length));&lt;br /&gt;
  var j := 0;&lt;br /&gt;
  for var i := 0 to n - 1 do&lt;br /&gt;
    if not pred(a[i]) then&lt;br /&gt;
    begin&lt;br /&gt;
      a[j] := a[i];&lt;br /&gt;
      j += 1;&lt;br /&gt;
    end;&lt;br /&gt;
  n := j;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
© Буцев Виктор, Белоусько Тихон, Зуев Семен, Гончаров Владислав, Батраков Михаил, Гаджиев Казанфар, Пак Владислав&lt;/div&gt;</summary>
		<author><name>Vikvez</name></author>
	</entry>
</feed>