Задача с массивами - 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.
Объяснение кода листинга программы
- В первой строке кода объявляются две переменные: n и a. Переменная n инициализируется значением 34, а переменная a представляет собой массив длиной n.
- Затем идет блок кода, который генерирует случайные числа для каждого элемента массива a. Для этого используется функция Randomize(), которая инициализирует генератор случайных чисел.
- Далее идет цикл for, который проходит по каждому элементу массива a. Внутри цикла вычисляется значение a[i] и записывается в соответствующую ячейку массива.
- После завершения цикла for начинается следующий блок кода, который заново инициализирует переменные harmDenom, harmNumer и flag.
- Затем идет цикл for, который проходит по каждому элементу массива a. Если текущий элемент является нечетным, то переменная flag устанавливается в значение True, переменная harmNumer увеличивается на единицу, а переменная harmDenom увеличивается на единицу, деленную на значение текущего элемента.
- Если переменная flag равна True, то выводится сообщение о гармоническом среднем, иначе выводится сообщение об ошибке.
- После завершения цикла for начинается следующий блок кода, который ищет минимальное абсолютное значение в массиве a. Для этого используется цикл while, который продолжается до тех пор, пока не будет найдено такое значение или пока все элементы массива не станут нулями.
- Если минимальное абсолютное значение найдено, то выводится его значение.
- После завершения цикла while начинается последний блок кода, который сортирует массив a. Для этого используется два вложенных цикла for. Первый цикл for проходит по каждому элементу массива a, а второй цикл for проходит по всем элементам массива, начиная с i+1 и заканчивая округлинием n/4.
- Если текущий элемент массива a меньше нуля и его абсолютное значение меньше абсолютного значения какого-либо другого элемента, то происходит обмен этого элемента и следующего за ним элемента.
- После завершения второго цикла for выводится отсортированный массив a.
- Конец программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д