Получить массив В путем перебора элементов массива А с нечетным индексом - 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.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д