// PascalABC.NET 3.2, сборка 1488 от 21.06.2017 // Внимание! Если программа не работает, обновите версию!
begin Write('Количество строк и столбцов в массиве: '); var (n,m):=ReadInteger2; Writeln('*** Исходный массив [',n,',',m,'] ***'); var a:=MatrRandom(n,m,-50,50); a.Println(4); Writeln(4*a.ColCount*'-'); var b:=a.Rows.SelectMany(x->x).Where(x->x>0).ToArray; Write('Массив b: '); b.Println end.
1) Разность: получится число переменных данного типа, которые смогли бы поместиться между адресами, на которые указывают указатели. Например: // зададим фиксированные адреса: int p1 = (int *)0x1000; int p2 = (int *)0x1004; int e = p2 - p1; Здесь 'e' = 1, т.е. равно числу переменных типа 'int', поместившихся бы между адресом 0x1000 и 0x1004. 2) Когда имеет место косвенная адресация, т.е. один указатель ссылается на другой, а тот - на переменную. Тогда, чтобы изменить значение переменной через 1-ый указатель мы используем разыменование 2 раза: int a; int *p1 = &a; int **p2 = &p1; **p2 = 10; // => a = 10
// Внимание! Если программа не работает, обновите версию!
begin
Write('Количество строк и столбцов в массиве: ');
var (n,m):=ReadInteger2;
Writeln('*** Исходный массив [',n,',',m,'] ***');
var a:=MatrRandom(n,m,-50,50);
a.Println(4); Writeln(4*a.ColCount*'-');
var b:=a.Rows.SelectMany(x->x).Where(x->x>0).ToArray;
Write('Массив b: '); b.Println
end.
Пример
Количество строк и столбцов в массиве: 5 8
*** Исходный массив [5,8] ***
1 -36 -40 31 -12 18 9 -19
-18 -32 -30 10 9 -19 -13 -11
49 -20 -9 40 -32 37 4 38
-1 -48 -43 -5 25 16 20 22
25 -39 1 -4 -26 -18 44 -49
Массив b: 1 31 18 9 10 9 49 40 37 4 38 25 16 20 22 25 1 44
Например:
// зададим фиксированные адреса:
int p1 = (int *)0x1000;
int p2 = (int *)0x1004;
int e = p2 - p1;
Здесь 'e' = 1, т.е. равно числу переменных типа 'int', поместившихся бы между адресом 0x1000 и 0x1004.
2) Когда имеет место косвенная адресация, т.е. один указатель ссылается на другой, а тот - на переменную. Тогда, чтобы изменить значение переменной через 1-ый указатель мы используем разыменование 2 раза:
int a;
int *p1 = &a;
int **p2 = &p1;
**p2 = 10; // => a = 10