Array103. Дан массив размера $$N$$. Вставить элемент с нулевым значением перед минимальным и после максимального элемента массива.
Решение:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
program Array103; var a : array[1..10] of Integer; N,i,Amax,Amin:Integer; begin Write('N: '); Readln(N); Writeln('A: '); for i:=1 to N do begin write(i,' :'); readln(a[i]); end; Amin:=1; for i:=1 to N do if a[Amin]>a[i] then Amin:=i; N:=N+1; for i:=N downto Amin do a[i]:=a[i-1]; a[Amin]:=0; Amax:=1; for i:=1 to N do if a[Amax]<a[i] then Amax:=i; N:=N+1; for i:=N downto Amax+1 do a[i]:=a[i-1]; a[Amax+1]:=0; Writeln(N); for i:=1 to N do writeln(i,' :',a[i]); end. |
Задачи из раздела Array можно посмотреть здесь.
Во-первых: описание массива с 10 элементами и последующая инициализация N:=10 даст ошибку выхода за границы диапазона в первом же цикле for с измененной границей (N:=N+1). Во-вторых если массив изначально состоит из отрицательных чисел, то добавленный 0 перед найденным минимальным значением становится самым большим числом измененного массива. И последующий поиск индекса максимального числа в измененном массиве найдет уже его индекс, а не индекс максимального числа в изначальном массиве.
Неправильно работает программа. Если все числа массива отрицательные, тогда вставленный 0 перед минимальным становится максимальным числом в массиве и следующим заходом второй 0 установится за первым, а не за максимальным элементом исходного массива.