Алгоритмы для студентов: различия между версиями

Материал из Вики проекта PascalABC.NET
Перейти к навигацииПерейти к поиску
Нет описания правки
Нет описания правки
Строка 1: Строка 1:
Здесь будет ряд алгоритмов из курса лекций "Основы программирования"
Здесь будет ряд алгоритмов из курса лекций "Основы программирования"
__NOTOC__
 
=== Вывод одномерного массива ===
=== Вывод массива ===
<source lang="Delphi">procedure Print<T>(a: array of T; delim: string := ' ');
<source lang="Delphi">procedure Print<T>(a: array of T; delim: string := ' ');
begin
begin
Строка 13: Строка 13:
   Print(a, delim);
   Print(a, delim);
   writeln;
   writeln;
end;  .</source>
end;</source>
 
=== Заполнение массива случайными числами ===
<source lang="Delphi">procedure CreateRandomArray(var a: array of integer;
   n: integer);
begin
  SetLength(a,n);
  for var i:=0 to n-1 do
    a[i] := random(100);
end;</source>
 
=== Инвертирование массива ===
<source lang="Delphi">procedure Invert<T>(a: array of T);
begin
  var n := a.Length;
  for var i:=0 to n div 2 - 1 do
    Swap(a[i],a[n-i-1]);
end; </source>
 
=== Поиск элемента по заданному значению ===
<source lang="Delphi">// С помощью for
function Find<T>(a: array of T; x: T): integer;
begin
  Result := -1;
  for var i := 0 to a.Length - 1 do
    if a[i] = x then
    begin
      Result := i;
      break;
    end;
end;
 
// С помощью while
function FindWhile<T>(a: array of T; x: T): integer;
begin
  var n := a.Length;
  var i := 0;
  while (i<n) and (a[i]<>x) do
    i += 1;
  if i=n then
    Result := -1
  else Result := i;
end;
 
// Поиск с барьером
function FindWithBarrier<T>(a: array of T; n: integer;
  x: T): integer;
begin
  Assert((0 < n) and (n < a.Length));
  a[n] := x;
  var i := 0;
  while a[i]<>x do
    i += 1;
  if i=n then
    Result := -1
  else Result := i;
end;</source>
 
=== Минимальный элемент и его индекс ===
<source lang="Delphi">procedure MinElem(a: array of integer;
  var min: integer; var minind: integer);
begin
  min := a[0];
  minind := 0;
  for var i:=1 to a.Length-1 do
    if a[i]<min then
    begin
      min := a[i];
      minind := i;
    end;
end;</source>
 
=== Сдвиг влево ===
<source lang="Delphi">procedure ShiftLeft<T>(a: array of T);
begin
  for var i:=0 to a.Length-2 do
    a[i] := a[i+1];
  a[a.Length-1] := default(T);
end;</source>

Версия от 23:35, 26 ноября 2010

Здесь будет ряд алгоритмов из курса лекций "Основы программирования"

Вывод массива

procedure Print<T>(a: array of T; delim: string := ' ');
begin
  foreach x: T in a do
    write(x, delim);
end;    

// С переходом на следующую строку
procedure Println<T>(a: array of T; delim: string := ' ');
begin 
  Print(a, delim);
  writeln;
end;

Заполнение массива случайными числами

procedure CreateRandomArray(var a: array of integer; 
  n: integer);
begin
  SetLength(a,n);
  for var i:=0 to n-1 do
    a[i] := random(100);
end;

Инвертирование массива

procedure Invert<T>(a: array of T);
begin
  var n := a.Length;
  for var i:=0 to n div 2 - 1 do
    Swap(a[i],a[n-i-1]);
end;

Поиск элемента по заданному значению

// С помощью for
function Find<T>(a: array of T; x: T): integer;
begin
  Result := -1;
  for var i := 0 to a.Length - 1 do
    if a[i] = x then
    begin
      Result := i;
      break;
    end;
end;

// С помощью while
function FindWhile<T>(a: array of T; x: T): integer;
begin
  var n := a.Length;
  var i := 0;
  while (i<n) and (a[i]<>x) do
    i += 1;
  if i=n then
    Result := -1
  else Result := i;
end;

// Поиск с барьером
function FindWithBarrier<T>(a: array of T; n: integer; 
  x: T): integer;
begin
  Assert((0 < n) and (n < a.Length));
  a[n] := x;
  var i := 0;
  while a[i]<>x do
    i += 1;
  if i=n then
    Result := -1
  else Result := i;
end;

Минимальный элемент и его индекс

procedure MinElem(a: array of integer; 
  var min: integer; var minind: integer);
begin
  min := a[0]; 
  minind := 0;
  for var i:=1 to a.Length-1 do
    if a[i]<min then
    begin
      min := a[i];
      minind := i;
    end;
end;

Сдвиг влево

procedure ShiftLeft<T>(a: array of T);
begin
  for var i:=0 to a.Length-2 do
    a[i] := a[i+1];
  a[a.Length-1] := default(T);
end;