Array66. Дан целочисленный массив размера $$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 |
program Array66; var a : array[1..10] of integer; N,Ak2,i:Integer; begin Write('N: '); Readln(N); Writeln('A: '); for i:=1 to N do begin write(i,' :'); readln(a[i]); end; i:=1; Ak2:=0; while (a[i] mod 2 <> 0) and (i<=N) do i:=i+1; if i<=N then Ak2:=a[i]; for i:=1 to N do if a[i] mod 2 = 0 then a[i]:=a[i]+Ak2; for i:=1 to N do writeln(i,' :',a[i]); end. |
Задачи из раздела Array можно посмотреть здесь.
Что то я не понял… вы создали массив состоящий из значения элемента a[k] а потом прибавляете …
В общем зачем?! почему не прибавлять a[k] вместо TempArray[i]? и вообще TempArray можно будет убрать..
Да и обвязка функции становиться больше тела функции…
Да уж.. Что то увлекся немного
Исправил 🙂
Пришлось также поменять строчку #29:
А то присваивалось новое значение k после увеличения первого четного
Да, так лучше… 🙂 но всё таки считаю, что функция конкретно в этом случае излишня. Из за неё приходиться объявлять тип:
Писать обвязку:
И вызывается она в таком месте, что конструкция :
Никак не ухудшила бы читаемость…
Но если это всё сделать то будет практически тоже самое, что и в шапке 🙂
Если массив не содержит четных чисел, то в строке 19 ошибка выхода индекса за границу массива. Нужно поменять условия местами, чтобы проверялось сначала i <= N