Какое понятие описывает последовательность действий, которые совершаются над объектами, определёнными условиями поставленной задачи? 1. Переменная величина 2. Константа 3. Алгоритм
// Использование указателей для создания односвязного списка // Сделано на базе демонстрационного примера PascalABC.Net // // PascalABC.NET 3.2, сборка 1325 от 19.10.2016 type PNode=^TNode; TNode=record data:integer; next:PNode; end;
function NewNode(d:integer;n:PNode):PNode; begin New(Result); Result^.data:=d; Result^.next:=n; end;
procedure WriteNode(a:PNode); // Вывод односвязного списка begin Writeln('Содержимое односвязного списка: '); var p:=a; while p<>nil do begin Write(p^.data,' '); p:=p^.next; end; Writeln end;
function SeekNode(k:integer;a:PNode):PNode; // Поиск элемента со значением k в списке begin var p:=a; Result:=Nil; while p<>nil do begin if p^.data=k then begin Result:=p; break end; p:=p^.next end end;
function PredNode(a,f:PNode):PNode; // Поиск предшественника f среди a begin var p:=a; while p^.next<>f do p:=p^.next; Result:=p end;
procedure Clear(a:pNode); // Разрушение односвязного списка begin var p:=a; while p<>nil do begin var p1:=p; p:=p^.next; Dispose(p1); // Память обязательно возвращать end end;
var first,found,father,grandfather,greatgrandfather:PNode;
begin Randomize; first:=nil; for var i:=1 to 10 do first:=NewNode(Random(100),first); WriteNode(first); // первоначальное состояние списка var k:=ReadInteger('Введите число для поиска в списке'); found:=SeekNode(k,first); if found<>nil then begin father:=PredNode(first,found); // отец grandfather:=PredNode(first,father); // дед greatgrandfather:=PredNode(first,grandfather); // прадед greatgrandfather^.next:=father; Writeln('Элемент ',grandfather^.data, ' удален'); Dispose(grandfather); WriteNode(first); k:=ReadInteger('Введите число для вставки'); father^.next:=NewNode(k,found); WriteNode(first); end else Writeln('Такого числа в списке нет'); Clear(first) end.
Пример Содержимое односвязного списка: 11 75 44 86 88 83 92 18 4 23 Введите число для поиска в списке 88 Элемент 44 удален Содержимое односвязного списка: 11 75 86 88 83 92 18 4 23 Введите число для вставки 40 Содержимое односвязного списка: 11 75 86 40 88 83 92 18 4 23
// PascalABC.NET 3.2, сборка 1482 от 12.06.2017 // Внимание! Если программа не работает, обновите версию!
begin var n:=ReadInteger('Количество строк в матрице:'); var m:=ReadInteger('Количество столбцов в матрице:'); var a:=new real[n,m]; // создали матрицу var s:=SeqRandom(m,1000,9999).Select(x->x/100); // шаблон случайной строки for var i:=0 to n-1 do a.SetRow(i,s.ToArray); // заполнили матрицу Writeln('*** Исходная матрица [',n,',',m,'] ***'); a.Println(6,2); Writeln(6*a.ColCount*'-'); // собственно, поиск нужного элемента var r:=a.Rows.Select((x,i)->(x.Select((y,j)->(y,j)) .MinBy(y->y[0]),i)).MaxBy(x->x[0][0]); Writeln('Искомый элемент A[',r[1]+1,',',r[0][1]+1,']=',r[0][0]) end.
Пример Количество строк в матрице: 4 Количество столбцов в матрице: 7 *** Исходная матрица [4,7] *** 95.22 17.16 14.35 66.27 20.10 91.88 67.96 20.80 32.71 45.44 35.80 20.17 58.59 24.22 93.03 93.99 18.30 75.80 65.47 97.14 56.24 16.95 73.12 48.54 75.72 91.90 67.95 95.71
// Сделано на базе демонстрационного примера PascalABC.Net
//
// PascalABC.NET 3.2, сборка 1325 от 19.10.2016
type
PNode=^TNode;
TNode=record
data:integer;
next:PNode;
end;
function NewNode(d:integer;n:PNode):PNode;
begin
New(Result);
Result^.data:=d;
Result^.next:=n;
end;
procedure WriteNode(a:PNode);
// Вывод односвязного списка
begin
Writeln('Содержимое односвязного списка: ');
var p:=a;
while p<>nil do begin
Write(p^.data,' ');
p:=p^.next;
end;
Writeln
end;
function SeekNode(k:integer;a:PNode):PNode;
// Поиск элемента со значением k в списке
begin
var p:=a;
Result:=Nil;
while p<>nil do begin
if p^.data=k then begin Result:=p; break end;
p:=p^.next
end
end;
function PredNode(a,f:PNode):PNode;
// Поиск предшественника f среди a
begin
var p:=a;
while p^.next<>f do p:=p^.next;
Result:=p
end;
procedure Clear(a:pNode);
// Разрушение односвязного списка
begin
var p:=a;
while p<>nil do begin
var p1:=p;
p:=p^.next;
Dispose(p1); // Память обязательно возвращать
end
end;
var
first,found,father,grandfather,greatgrandfather:PNode;
begin
Randomize;
first:=nil;
for var i:=1 to 10 do
first:=NewNode(Random(100),first);
WriteNode(first); // первоначальное состояние списка
var k:=ReadInteger('Введите число для поиска в списке');
found:=SeekNode(k,first);
if found<>nil then begin
father:=PredNode(first,found); // отец
grandfather:=PredNode(first,father); // дед
greatgrandfather:=PredNode(first,grandfather); // прадед
greatgrandfather^.next:=father;
Writeln('Элемент ',grandfather^.data, ' удален');
Dispose(grandfather);
WriteNode(first);
k:=ReadInteger('Введите число для вставки');
father^.next:=NewNode(k,found);
WriteNode(first);
end
else Writeln('Такого числа в списке нет');
Clear(first)
end.
Пример
Содержимое односвязного списка:
11 75 44 86 88 83 92 18 4 23
Введите число для поиска в списке 88
Элемент 44 удален
Содержимое односвязного списка:
11 75 86 88 83 92 18 4 23
Введите число для вставки 40
Содержимое односвязного списка:
11 75 86 40 88 83 92 18 4 23
// Внимание! Если программа не работает, обновите версию!
begin
var n:=ReadInteger('Количество строк в матрице:');
var m:=ReadInteger('Количество столбцов в матрице:');
var a:=new real[n,m]; // создали матрицу
var s:=SeqRandom(m,1000,9999).Select(x->x/100); // шаблон случайной строки
for var i:=0 to n-1 do a.SetRow(i,s.ToArray); // заполнили матрицу
Writeln('*** Исходная матрица [',n,',',m,'] ***');
a.Println(6,2); Writeln(6*a.ColCount*'-');
// собственно, поиск нужного элемента
var r:=a.Rows.Select((x,i)->(x.Select((y,j)->(y,j))
.MinBy(y->y[0]),i)).MaxBy(x->x[0][0]);
Writeln('Искомый элемент A[',r[1]+1,',',r[0][1]+1,']=',r[0][0])
end.
Пример
Количество строк в матрице: 4
Количество столбцов в матрице: 7
*** Исходная матрица [4,7] ***
95.22 17.16 14.35 66.27 20.10 91.88 67.96
20.80 32.71 45.44 35.80 20.17 58.59 24.22
93.03 93.99 18.30 75.80 65.47 97.14 56.24
16.95 73.12 48.54 75.72 91.90 67.95 95.71
Искомый элемент A[2,5]=20.17