Задача с массивами - Pascal (3902)

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

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

Пожалуйста, помогите с массивами, не могу исправить ошибки 1.Вычислить значения 34 элементов одномерного целочисленного массива в интервале(-10.10) с использованием генератора случайных чисел. 2.Вычеслить среднегармоническое значение нечетных по значению элементов второй четверти массива. 3. Определить наименьший по модулю элемент среди ненулевых элементов всего массива. 4. Упорядочить отрицательные элементы первой четверти массива по убыванию модулей обратных значений.
var a:array[1..100] of integer;
    n,m,i,j,k,t,min,x:integer;
    b,sg,s:real;
begin
n:=34;{заполняем массив}
writeln('Исходный массив:');
for i:=1 to n do
 begin
  a[i]:=random(20)-10;
  write(a[i]:4);
 end;
 writeln;
 for i:=1 to n do  {ищем среднегармоническое среднегармоническое значение }
t:=n div 4; 
for i:=(round(n/4)+1) to round(n/2) do 
if a[ i ] mod 2 <> 0 then 
for j := 1 to n do 
s := s + (1 / a[i]);
sg:=s+a[ i ]; 
s := n / s;
writeln('Sg = ',sg); 
 writeln;
  for i:=1 to n do {наименьший по модулю элемент среди ненулевых элементов всего массива.  }
  begin
 if a[i]<>0 then
 min:=10;
 if abs(a[i])< min then
 min:=a[i];
 end;
  writeln('min = ',min);
 writeln;
 for i:=(round(n/4)+1) to  n do {. Упорядочить отрицательные элементы первой четверти массива по убыванию модулей обратных значений. }
for j:=t+1 to t*3 do
if(a[i]<0)and(a[j]<0)and(abs(1/a[i])< abs(1/a[j])) then
 begin
x:=a[i];
a[i]:=a[j+1];
a[j]:=x;
write(x:4);
end;
end.

Решение задачи: «Задача с массивами»

textual
Листинг программы
const
    n = 34;
var
    a: Array[1..n] Of ShortInt;
    i, j, harmNumer, minAbsId: Byte;
    harmDenom: Double;
    flag: Boolean;
    temp: ShortInt;
begin
    Randomize();
    Write('Original array:');
    for i := 1 to n do
    begin
        a[i] := Random(21) - 10;
        Write(a[i]:4);
    end;
    WriteLn;
    harmDenom := 0; harmNumer := 0; flag := False;
    for i := Round(n / 4) + 1 to Round(n / 2) do
        if (Odd(a[i]))
        then
        begin
            flag := True;
            Inc(harmNumer);
            harmDenom := harmDenom + 1 / a[i];
        end;
    if (flag)
    then
        WriteLn('Harmonic mean: ', (harmNumer / harmDenom):0:2)
    else
        WriteLn('Error! No one odd element on second quarter!');
    minAbsId := 0; i := 1;
    while ((i <= n) And (minAbsId = 0)) do
    begin
        if (a[i] <> 0)
        then
            minAbsId := i
        else
            Inc(i);
    end;
    if (minAbsId = 0)
    then
        WriteLn('Array is zeros!')
    else
    begin
        for i := i + 1 to n do
            if ((a[i] <> 0) And (Abs(a[i]) < Abs(a[minAbsId])))
            then
                minAbsId := i;
        WriteLn('Min Abs <> 0=', a[minAbsId]);
    end;
    for i := 1 to Round(n / 4) - 1 do
        for j := i + 1 to Round(n / 4) do
            if ((a[i] < 0) And (a[j] < 0) And (Abs(1 / a[i]) < Abs(1 / a[j])))
            then
            begin
                temp := a[i];
                a[i] := a[j];
                a[j] := temp;
            end;
    Write('Sorted array:');
    for i := 1 to n do
        Write(a[i]:4);
end.

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

  1. В первой строке кода объявляются две переменные: n и a. Переменная n инициализируется значением 34, а переменная a представляет собой массив длиной n.
  2. Затем идет блок кода, который генерирует случайные числа для каждого элемента массива a. Для этого используется функция Randomize(), которая инициализирует генератор случайных чисел.
  3. Далее идет цикл for, который проходит по каждому элементу массива a. Внутри цикла вычисляется значение a[i] и записывается в соответствующую ячейку массива.
  4. После завершения цикла for начинается следующий блок кода, который заново инициализирует переменные harmDenom, harmNumer и flag.
  5. Затем идет цикл for, который проходит по каждому элементу массива a. Если текущий элемент является нечетным, то переменная flag устанавливается в значение True, переменная harmNumer увеличивается на единицу, а переменная harmDenom увеличивается на единицу, деленную на значение текущего элемента.
  6. Если переменная flag равна True, то выводится сообщение о гармоническом среднем, иначе выводится сообщение об ошибке.
  7. После завершения цикла for начинается следующий блок кода, который ищет минимальное абсолютное значение в массиве a. Для этого используется цикл while, который продолжается до тех пор, пока не будет найдено такое значение или пока все элементы массива не станут нулями.
  8. Если минимальное абсолютное значение найдено, то выводится его значение.
  9. После завершения цикла while начинается последний блок кода, который сортирует массив a. Для этого используется два вложенных цикла for. Первый цикл for проходит по каждому элементу массива a, а второй цикл for проходит по всем элементам массива, начиная с i+1 и заканчивая округлинием n/4.
  10. Если текущий элемент массива a меньше нуля и его абсолютное значение меньше абсолютного значения какого-либо другого элемента, то происходит обмен этого элемента и следующего за ним элемента.
  11. После завершения второго цикла for выводится отсортированный массив a.
  12. Конец программы.

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


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

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

13   голосов , оценка 4.077 из 5
Похожие ответы