Osnovy_informatiki_-_9_Tipy_dannykh
.pdfОбработка всех элементов массива
uses arrays; var a:IArr;
n,j,s,p,k:integer;
sr:real; begin
read(n); assert((n>0)and(n<=NM));
ReadArr(a,n); s:=0; {сумма}
for j:=1 to n do s:=s + a[j]; p:=1; {произведение}
for j:=1 to n do p:=p*a[j]; k:=0; {количество нулевых} for j:=1 to n do
if a[j]=0 then k:=k+1;
10.11.2012 |
Чердынцева М.И., мехмат ЮФУ |
21 |
Обработка всех элементов массива (продолжение)
FillArrRand(a,n,100);
sr:=0; k:=0; {ср. арифм. больших 50} for j:=1 to n do
if a[j]>50 then
begin sr:=sr+a[j];k:=k+1; end; if k<>0 then sr:=sr/k;
end.
10.11.2012 |
Чердынцева М.И., мехмат ЮФУ |
22 |
Минимальный элемент и его номер
uses arrays; var a:IArr;
n,j,min,nmin:integer; begin
read(n); assert((n>0)and(n<=NM));
ReadArr(a,n);
min:=a[1]; nmin:=1; {при n=1 min=a[1]} for j:=2 to n do
{ min=min(a[1],a[2],…,a[j-1]) – инвариант цикла} if a[j]<min then
{по определению min для двух чисел (a[j] и min)} begin
min:=a[j];
nmin:=j;
end;
end.
10.11.2012 |
Чердынцева М.И., мехмат ЮФУ |
23 |
Сумма до первого нулевого, если он есть
uses arrays; var a:IArr;
n,j,s:integer; begin
read(n); ReadArr(a,n); s:=0;
j:=1;
while (j<=n) and(a[j]<>0) do begin
s:=s+a[j];
j:=j+1;
end;
if (j>n) then writeln(’нет нулей’) else writeln(s);
end.
10.11.2012 |
Чердынцева М.И., мехмат ЮФУ |
24 |
Среднее арифметическое после первого отрицательного, если он есть
uses arrays; |
|
|
var a:IArr; |
n,j,k:integer; |
sr:real; |
begin |
|
|
read(n); |
ReadArr(a,n); |
|
j:=0; |
|
|
repeat |
|
|
j:=j+1; |
|
|
until (j=n) or (a[j]<0);//короткое вычисление OR if (a[j]<0) then
if (j=n) then |
writeln (’отр. – последнее’) |
else begin |
sr:=0; k:=n-j; |
for j:=j+1 to n do sr:=sr+a[j]; writeln(sr/k)
end
else writeln(’нет отрицательных’) end.
10.11.2012 |
Чердынцева М.И., мехмат ЮФУ |
25 |
Переставить два элемента с заданными номерами m, k
r:=a[m]; a[m]:=a[k]; a[k]:=r;
swap(a[m],a[k]);
Инвертировать массив
for i:=1 to n div 2 do
swap(a[i],a[n-i+1]);
10.11.2012 |
Чердынцева М.И., мехмат ЮФУ |
26 |
Циклический сдвиг влево/вправо
r:=a[1]; |
r:=a[n]; |
for i:=1 to n -1 do |
for i:=n downto 2 do |
a[i]:=a[i+1]; |
a[i]:=a[i-1]; |
a[n]:=r; |
a[1]:=r; |
Удаление элемента в позиции k
for i:=k to n -1 do a[i]:=a[i+1];
n:=n-1;
Добавление элемента в позицию k
for i:=n downto k+1 do a[i]:=a[i-1];
a[k]:= …; n:=n+1;
10.11.2012 |
Чердынцева М.И., мехмат ЮФУ |
27 |
Поиск заданного значения
function Find(const A: IArr; n: integer; k: integer): integer;
var i: integer; begin
i:=1;
while (i<=n) and (a[i]<>k) do i:=i+1; if i=n+1 then
Result:=0 else Result:=i; end;
10.11.2012 |
Чердынцева М.И., мехмат ЮФУ |
28 |
Поиск с барьером
function BarrierFind (var A:IArr;
n:integer; k:integer): integer;
var i: integer; begin
i:=1;
a[n+1]:=k; // барьер (для него нужно место!!!)
while a[i]<>k do i:=i+1; if i=n+1 then
Result:=0 else Result:=i; end;
10.11.2012 |
Чердынцева М.И., мехмат ЮФУ |
29 |
Поиск по условию, передаваемому как параметр
type
IPredicate = function(r: integer): boolean; function Find (const A: IArr; n: integer;
Pred: IPredicate): integer;
var i: integer; begin
i:=1;
while (i<=n) and not Pred(a[i]) do i:=i+1; if i=n+1 then
Result:=0
else Result:=i; end;
10.11.2012 |
Чердынцева М.И., мехмат ЮФУ |
30 |