Var
a: array [1..12] of integer;
i: integer;
begin
writeln('Начальный вид массива:');
for i := 1 to 12 do
begin
a[i] := -20 + random(41);
writeln('A[', i:2, ']=', a[i]:3);
end;
writeln('Конечный вид массива:');
for i := 1 to 12 do
begin
if a[i] < 0 then a[i] := -1;
writeln('A[', i:2, ']=', a[i]:3);
end;
readln
<span>end.</span>
Программа приложена файлом для Visual Basic for Applications
Ниже текст этой программы продублирован
Sub trans_sequence(ByVal M)'заполнение массива и создание преобразованной последовательности чисел N = M Dim mas() ReDim mas(M) Sg = "" Sf = "" Randomize For i = 1 To M mas(i) = Round((Rnd(100) - 0.5) * 100) Sg = Sg + Str(mas(i)) If (mas(i) < 0) Then mas(i) = mas(i) * mas(i) Sf = Sf + Str(mas(i)) If i <> M Then Sg = Sg + "," Sf = Sf + "," End If Next i MsgBox "последовательность чисел " + Sg + Chr(10) + "преобразованная последовательность " + SfEnd Sub
Sub test() trans_sequence (25)End Sub
Немного теории:
Любой доступ к элементу массива, осуществляемый с помощью операции индексирования может быть осуществлен при помощи указателей.
Имя массива хранит адрес его нулевого элемента. Поэтому адрес любого i элемента массива можно представить как (x+i), где x - указатель на первый элемент массива. А его значение как *(x+i)
Подобные операции верны для любого типа и размера массивом, так как при прибавлении к указателю целого числа, он "сдвигается" не на i байтов, а на i элементов этого типа.
int a[]={7,8,9}; - инициализация массива.
int b*=a - в этой строчке ошибка. Правильно: int *b=a; - объявляем указатель на нулевой элемент массива.
b++; - операция постфиксного инкремента(так как значение b в этой строчке нигде не используется, то данное выражение равносильно b=b+1). Теперь в b находится адрес первого элемента массива.
*(b+1)=*b - присваиваем второму элементу массива значение первого элемента(эта запись равносильна a[2]=a[1])
b[1] равносильно a[2] (не забываем, что в b[0] теперь адрес первого элемента, а не в нулевого. Адрес нулевого элемента будет в b[-1], а второго элемента - в b[1]).
В итоге значение b[1] равно 8
Ответ: 8
2468,6824,4682,2486,2684,2648,6248,6842,2846,2864,6284,8642,8624,8264,8246,8426,8462,4862,4826,4286,4268,4628,4682.