Получить массив В путем перебора элементов массива А с нечетным индексом - Free Pascal
Формулировка задачи:
Создать программу, в которой все данные будут размещаться динамически. Получить массив В путем перебора элементов массива А с нечетным индексом, стоящих правее максимального элемента. Отсортировать по убыванию методом пузырька. Помогите, где ошибка?
Program Z1_2_11;
uses crt;
type
Arr=array [1..30] of integer;
PArr=^Arr;
var
a,b:PArr;
i,d,max,kl:integer;
t:text;
ch:char;
Procedure VvodI (var ni:integer);
begin
repeat
Writeln ('Vvedite kolichestvo elementov massiva');
readln (ni);
if ni<=0 then
writeln ('Error!');
until (ni>0);
writeln (t,' kolichestvo elementov=',ni);
end;
Procedure ZapolnMas (ii:integer; var ai:PArr);
var j:integer;
Begin
for j:=1 to ii do
begin
writeln ('Vvedite element [',j,']:');
readln (ai^[j]);
writeln (t,' a[',j,']=',ai^[j]);
end;
end;
procedure MaxR(var ai: parr; var t:text; ni:integer;max:integer;kl:integer);
var
k:integer;
begin
kl:=1;
max:=ai^[1];
for k:=1 to ni do
if a^[k]>max then
begin
max:=ai^[k];
kl:=k;
end;
writeln(t,'index max element =',kl);
writeln(t,'max element=',max);
end;
Procedure Obrabotka (ii:integer; ai:PArr; var di:integer; var kl:integer);
var j:integer;
begin
di:=0;
for j:=kl to ii do
if (j mod 2=1) then
inc(di);
end;
Procedure ZapolnB (di,ii,kl:integer; ai:PArr; var bi:PArr);
var j:integer;
begin
if (kl mod 2=1) then bi^[1]:=a^[kl];
di:=1;
for j:=kl to ii do
if (j mod 2=1) and (j>=kl) then
begin
bi^[di]:=ai^[j];
inc(di);
end;
end;
Procedure Sortirovka (var bi:PArr; di:integer);
var i,j,k:integer;
begin
for i:=1 to di do
for j:=1 to di do
if bi^[j]>bi^[j+1] then
begin
k:= bi^[j];
bi^[j]:=bi^[j+1];
bi^[j+1]:=k;
end;
for j:=1 to di do
writeln (t,' ',bi^[j],' ');
writeln (' ',bi^[j],' ');
end;
begin
clrscr;
assign (t,'z1_02.pas');
append (t);
repeat
{writeln(t,' Available ',memavail ,' byte.');}
VvodI (i);
GetMem (a,sizeof(integer)*i);
ZapolnMas (i,a);
maxr(a,t,i,max,kl);
Obrabotka (i,a,d,kl);
GetMem(b,sizeof(integer)*d);
ZapolnB (d,i,kl,a,b);
writeln (t,' Otvet:');
Sortirovka (b,d);
{writeln(t,' Available ',memavail ,' byte.'); }
writeln(t,'-----------------------------------------');
FreeMem (a,sizeof(integer)*i);
FreeMem (b,sizeof(integer)*d);
writeln ('Press 1');
readln (ch);
until (ch='1');
close (t);
end.Решение задачи: «Получить массив В путем перебора элементов массива А с нечетным индексом»
textual
Листинг программы
const W=4;
type
PIntArr = ^TIntArr;
TIntArr = array [1..$FFFE div SizeOf(Integer)] of Integer;
var
pa, pb: PIntArr;
na, nb, i, j, k, t: Integer;
begin
Randomize;
repeat Write('Размер A: '); ReadLn(na); until na>0;
GetMem(pa,SizeOf(pa^[1])*na);
for i:=1 to na do pa^[i]:=Random(100);
Write('A ='); for i:=1 to na do Write(' ',pa^[i]:W); WriteLn;
k:=1; for i:=2 to na do if pa^[i]>pa^[k] then k:=i;
nb:=(na-k) div 2;
if nb>0 then begin
GetMem(pb,SizeOf(pb^[1])*nb);
i:=(k+1) or 1; for j:=1 to nb do begin pb^[j]:=pa^[i]; Inc(i,2); end;
i:=nb;
repeat
k:=1;
for j:=1 to i-1 do
if pb^[j+1]>pb^[j] then begin
k:=j; t:=pb^[j]; pb^[j]:=pb^[j+1]; pb^[j+1]:=t;
end;
i:=k;
until k=1;
Write('B ='); for i:=1 to nb do Write(' ',pb^[i]:W); WriteLn;
FreeMem(pb,SizeOf(pb^[1])*nb);
end else WriteLn('Нет элементов с нечетными индексами после максимального');
FreeMem(pa,SizeOf(pa^[1])*na);
end.
Объяснение кода листинга программы
В данном коде:
- Объявляются константа W размером 4 и типы данных PIntArr и TIntArr.
- Задаются начальные значения переменных pa, pb, na, nb, i, j, k, t.
- Инициализируется генератор случайных чисел.
- Пользователю предлагается ввести размер массива A.
- Выделяется память под массив A и заполняется случайными числами.
- Выводится массив A на экран.
- Находится элемент с максимальным индексом в массиве A.
- Определяется размер массива B как половина от (размера массива A минус 1).
- Если размер массива B больше нуля, то выделяется память под массив B и заполняется элементами с нечетными индексами из массива A.
- Сортируются элементы массива B по возрастанию.
- Выводится массив B на экран.
- Освобождается память, выделенная под массив B.
- Если размер массива A был равен нулю, то выводится сообщение об отсутствии элементов с нечетными индексами.
- Освобождается память, выделенная под массив A.