22 Вопрос
массив — это структурированная совокупность ячеек памяти, хранящих элементы данных под единым общим именем. В PHP массивы представляют собой довольно гибкий и многоцелевой тип данных, так как они могут содержать в качестве элементов любой другой тип, существующий в PHP, в том числе другие массивы. Если переменная в один момент времени содержит только одно значение, то массив может содержать одновременно несколько значений — элементов. Каждый элемент массива строго идентифицируется по индексу, иначе называемому ключом. Индекс (ключ) — это номер или уникальный идентификатор элемента, записанный в квадратных скобках после имени массива. Таким образом, массив всегда состоит из одной или нескольких пар "ключ-значение".
Простейшим примером массива может служить обыкновенное слово. В языке PHP все строковые данные можно представить в виде массива символов. Например, слово "массив" состоит из шести элементов. К любому из элементов можно обратиться, указав его индекс. В языке PHP, как и в языке С, индексация массивов начинается с нуля, поэтому самый первый элемент массива будет иметь индекс 0. Рассмотрим пример.
<?php
$my_word = "массив";
echo $my_word[ 0 ] ;
//выведет на экран букву м
//в этом примере индекс (ключ) элемента = 0, значение = "м"
?>
Конечно, на первый взгляд, начало индексации с нуля кажется немного неудобным, однако к этому факту необходимо просто привыкнуть и уже через некоторое время все это будет казаться вполне естественным
23,24 И 25 вопрос
Наиболее простые примеры работы с одномерными массивами приведены в нижеследующей таблице.
1. Написать оператор, который описывает массив numиз 10 вещественных элементов, индекс первого элемента равен 2. var num: array[2..12] of real;
2. Написать оператор, который вводит с клавиатуры одномерный массив В из 30 элементов, начиная с нулевого. for i:=0 to 29 do
read(B[i]);
3. Написать оператор, который выводит на экран в столбик номера и значения элементов одномерного массива mas из 30 элементов. for i:=1 to 30 do
writeln(i, ' ',mas[i]);
4. Написать оператор, который выводит на экран ненулевые элементы одномерного массива mas из 20 элементов. for i:=1 to 20 do
if mas[i]<>0 then
writeln(mas[i]);
5. Сдвинуть все элементы массива a[1..n] вправо на 1 позицию t:=a[n];
for i:=n-1 downto 1 do
a[i+1]:=a[i];
a[1]:=t;
6. Получить инвертированный одномерный массив (с использованием вспомогательного массива) program invert_massiv;
const n=7;
Var a,b:array[1..n] of integer; i: integer;
begin
Randomize;
for i:=1 to n do
a[i]:=random(11);
writeln('Исходный массив');
for i:=1 to n do
write(a[i]:3, ' ');
for i:=0 to n-1 do
b[i+1]:=a[n-i];
writeln;
writeln('Инвертированный массив');
for i:=1 to n do
write(b[i]:3, ' ');
end.
7. Та же задача, но с использованием одного массива и вспомогательной переменной t for i:=1 to n div 2 do
begin
t:=a[i];
a[i]:=a[n-i+1];
a[n-i+1]:=t;
end;
26, 27 И 28 вопрос
Обычно двумерные массивы на языке программирования Pascal описываются так:
array [1..m, 1..n] of базовый_тип
Однако можно их описывать и по-другому:
array [1..m] of array [1..n] of базовый_тип
При этом описание может быть в разделе type и тогда создается новый тип, который можно использовать при объявлении переменных. Или массив может быть описан непосредственно в разделе переменных. m и n – это константы, их можно опустить и вставить конкретные значения, но лучше так не делать. Обычно подразумевают, что в интервале от 1 до m определяется количество строк, а в интервале от 1 до n – количество столбцов массива.
1 вариант – описание массива через раздел type:
const
M = 10;
N = 5;
type
matrix = array [1..M, 1..N] of integer;
var
a: matrix;
2 вариант – описание массива в разделе переменных:
const
M = 10;
N = 5;
var
a: array [1..M, 1..N] of integer;
При использовании третьего варианта описания лучше сначала определить некоторый тип одномерного массива (строка двухмерного массива), который затем используется при описании двухмерного массива:
type a = array[1..10] of byte;
var b: array[1..100] of a;
Для обращения к элементу двухмерного массива необходимо указать имя массива и в квадратных скобках через запятую – значения двух индексов (первый указывает номер строки, а второй – номер столбца), на пересечение которых стоит элемент (например, a[i,2]:=6). В языке программирования Pascal допустимо разделение индексов с помощью квадратных скобок (например, a[i][5]:= 7).
Если описывается двумерный массив как типизированная константа, то при задании значений его элементов он рассматривается как массив массивов. При этом в общих круглых скобках через запятую перечисляются заключенные в круглые скобки значения элементов строк (каждая строка в своих скобках):
type
arr = array[1..4, 1..3] of integer;
const
cords: arr = ((1,-1,3), (0,0,0), (1,4,0), (4,-1,-1));
Рассмотрим простой пример работы с двумерным массивом. Сначала заполним его данными, а затем выведем их на экран в виде таблицы.
var
matrix: array[1..3,1..5] of integer;
i, j: integer;
begin
writeln ('Введите 15 чисел: ');
for i := 1 to 3 do
for j := 1 to 5 do
read (matrix[i,j]);
for i := 1 to 3 do begin
for j := 1 to 5 do
write (matrix[i,j], ' ');
writeln
end;
readln
end.
Размерность массива (т.е. количество содержащихся в нем значений) определяется произведением количества строк на количество столбцов. В примере выше в массив помещается 15 значений.
Когда пользователь вводит очередное число, то процедура read считывает его и помещает в ячейку с текущими индексами i и j. Когда i равна единице, значение j меняется пять раз, и, значит, заполняется первая строка таблицы. Когда i равна двум, значение j снова меняется пять раз и заполняется вторая строка таблицы. Аналогично заполняется третья строка таблицы. Внутренний цикл for в общей сложности совершает 15 итераций, внешний только 3.
Как пользователь вводит значения – не важно. Он может их разделять либо пробелом, либо переходом на новую строку.
Вывод значений двумерного массива организован в виде таблицы. Выводятся 3 строки по 5 чисел в каждой. Внутри строк числа разделяются пробелом.
На самом деле, это не совсем корректно написанная программа. Мы несколько раз используем цифры 3 и 5. А что если мы захотим поменять размерность массива? Придется просмотреть всю программу (представьте, что она очень большая) и исправить значения. Это неэффективно. Поэтому в программе следует использовать константы. В случае чего их значения можно поменять всего лишь в одном месте.
Вторая проблема – это «кривость» выводимой на экран таблицы значений матрицы, в случае если есть значения разной разрядности (однозначное, двузначное и т.д. числа). Неплохо бы под каждое число отводить равное количество знаков.
Вот так может выглядеть подправленный вариант программы:
const
M = 3;
N = 5;
var
matrix: array[1..M,1..N] of integer;
i, j: integer;
begin
writeln ('Введите 15 чисел: ');
for i := 1 to M do
for j := 1 to N do
read (matrix[i,j]);
for i := 1 to M do begin
for j := 1 to N do
write (matrix[i,j]:5);
writeln
end;
readln
end.
