Получить массив В путем перебора элементов массива А с нечетным индексом - Free Pascal

Узнай цену своей работы

Формулировка задачи:

Создать программу, в которой все данные будут размещаться динамически. Получить массив В путем перебора элементов массива А с нечетным индексом, стоящих правее максимального элемента. Отсортировать по убыванию методом пузырька. Помогите, где ошибка?
Листинг программы
  1. Program Z1_2_11;
  2. uses crt;
  3. type
  4. Arr=array [1..30] of integer;
  5. PArr=^Arr;
  6. var
  7. a,b:PArr;
  8. i,d,max,kl:integer;
  9. t:text;
  10. ch:char;
  11. Procedure VvodI (var ni:integer);
  12. begin
  13. repeat
  14. Writeln ('Vvedite kolichestvo elementov massiva');
  15. readln (ni);
  16. if ni<=0 then
  17. writeln ('Error!');
  18. until (ni>0);
  19. writeln (t,' kolichestvo elementov=',ni);
  20. end;
  21. Procedure ZapolnMas (ii:integer; var ai:PArr);
  22. var j:integer;
  23. Begin
  24. for j:=1 to ii do
  25. begin
  26. writeln ('Vvedite element [',j,']:');
  27. readln (ai^[j]);
  28. writeln (t,' a[',j,']=',ai^[j]);
  29. end;
  30. end;
  31. procedure MaxR(var ai: parr; var t:text; ni:integer;max:integer;kl:integer);
  32. var
  33. k:integer;
  34. begin
  35. kl:=1;
  36. max:=ai^[1];
  37. for k:=1 to ni do
  38. if a^[k]>max then
  39. begin
  40. max:=ai^[k];
  41. kl:=k;
  42. end;
  43. writeln(t,'index max element =',kl);
  44. writeln(t,'max element=',max);
  45. end;
  46. Procedure Obrabotka (ii:integer; ai:PArr; var di:integer; var kl:integer);
  47. var j:integer;
  48. begin
  49. di:=0;
  50. for j:=kl to ii do
  51. if (j mod 2=1) then
  52. inc(di);
  53. end;
  54. Procedure ZapolnB (di,ii,kl:integer; ai:PArr; var bi:PArr);
  55. var j:integer;
  56. begin
  57. if (kl mod 2=1) then bi^[1]:=a^[kl];
  58. di:=1;
  59. for j:=kl to ii do
  60. if (j mod 2=1) and (j>=kl) then
  61. begin
  62. bi^[di]:=ai^[j];
  63. inc(di);
  64. end;
  65. end;
  66. Procedure Sortirovka (var bi:PArr; di:integer);
  67. var i,j,k:integer;
  68. begin
  69. for i:=1 to di do
  70. for j:=1 to di do
  71. if bi^[j]>bi^[j+1] then
  72. begin
  73. k:= bi^[j];
  74. bi^[j]:=bi^[j+1];
  75. bi^[j+1]:=k;
  76. end;
  77. for j:=1 to di do
  78. writeln (t,' ',bi^[j],' ');
  79. writeln (' ',bi^[j],' ');
  80. end;
  81.  
  82. begin
  83. clrscr;
  84. assign (t,'z1_02.pas');
  85. append (t);
  86. repeat
  87. {writeln(t,' Available ',memavail ,' byte.');}
  88. VvodI (i);
  89. GetMem (a,sizeof(integer)*i);
  90. ZapolnMas (i,a);
  91. maxr(a,t,i,max,kl);
  92. Obrabotka (i,a,d,kl);
  93. GetMem(b,sizeof(integer)*d);
  94. ZapolnB (d,i,kl,a,b);
  95. writeln (t,' Otvet:');
  96. Sortirovka (b,d);
  97. {writeln(t,' Available ',memavail ,' byte.'); }
  98. writeln(t,'-----------------------------------------');
  99. FreeMem (a,sizeof(integer)*i);
  100. FreeMem (b,sizeof(integer)*d);
  101. writeln ('Press 1');
  102. readln (ch);
  103. until (ch='1');
  104. close (t);
  105. end.

Решение задачи: «Получить массив В путем перебора элементов массива А с нечетным индексом»

textual
Листинг программы
  1. const W=4;
  2. type
  3.   PIntArr = ^TIntArr;
  4.   TIntArr = array [1..$FFFE div SizeOf(Integer)] of Integer;
  5. var
  6.   pa, pb: PIntArr;
  7.   na, nb, i, j, k, t: Integer;
  8. begin
  9.   Randomize;
  10.   repeat Write('Размер A: '); ReadLn(na); until na>0;
  11.   GetMem(pa,SizeOf(pa^[1])*na);
  12.   for i:=1 to na do pa^[i]:=Random(100);
  13.   Write('A ='); for i:=1 to na do Write(' ',pa^[i]:W); WriteLn;
  14.   k:=1; for i:=2 to na do if pa^[i]>pa^[k] then k:=i;
  15.   nb:=(na-k) div 2;
  16.   if nb>0 then begin
  17.     GetMem(pb,SizeOf(pb^[1])*nb);
  18.     i:=(k+1) or 1; for j:=1 to nb do begin pb^[j]:=pa^[i]; Inc(i,2); end;
  19.     i:=nb;
  20.     repeat
  21.       k:=1;
  22.       for j:=1 to i-1 do
  23.         if pb^[j+1]>pb^[j] then begin
  24.           k:=j; t:=pb^[j]; pb^[j]:=pb^[j+1]; pb^[j+1]:=t;
  25.         end;
  26.       i:=k;
  27.     until k=1;
  28.     Write('B ='); for i:=1 to nb do Write(' ',pb^[i]:W); WriteLn;
  29.     FreeMem(pb,SizeOf(pb^[1])*nb);
  30.   end else WriteLn('Нет элементов с нечетными индексами после максимального');
  31.   FreeMem(pa,SizeOf(pa^[1])*na);
  32. end.

Объяснение кода листинга программы

В данном коде:

  1. Объявляются константа W размером 4 и типы данных PIntArr и TIntArr.
  2. Задаются начальные значения переменных pa, pb, na, nb, i, j, k, t.
  3. Инициализируется генератор случайных чисел.
  4. Пользователю предлагается ввести размер массива A.
  5. Выделяется память под массив A и заполняется случайными числами.
  6. Выводится массив A на экран.
  7. Находится элемент с максимальным индексом в массиве A.
  8. Определяется размер массива B как половина от (размера массива A минус 1).
  9. Если размер массива B больше нуля, то выделяется память под массив B и заполняется элементами с нечетными индексами из массива A.
  10. Сортируются элементы массива B по возрастанию.
  11. Выводится массив B на экран.
  12. Освобождается память, выделенная под массив B.
  13. Если размер массива A был равен нулю, то выводится сообщение об отсутствии элементов с нечетными индексами.
  14. Освобождается память, выделенная под массив A.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы