Алгоритмы для студентов: различия между версиями
Материал из Вики проекта PascalABC.NET
Перейти к навигацииПерейти к поиску
DaZzz (обсуждение | вклад) Нет описания правки |
DaZzz (обсуждение | вклад) Нет описания правки |
||
Строка 1: | Строка 1: | ||
Здесь будет ряд алгоритмов из курса лекций "Основы программирования" | Здесь будет ряд алгоритмов из курса лекций "Основы программирования" | ||
=== Вывод | === Вывод массива === | ||
<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;