Читайте также: |
|
Массив (также индексный массив, иногда таблица, ряд ) — именованный (упорядоченный) набор однотипных переменных (данных), расположенных в памяти непосредственно друг за другом, доступ к которым осуществляется по индексу. В простейшем случае массив имеет постоянную длину и хранит единицы данных одного и того же типа.
Индекс же массива — это число целое, указывающее на конкретный элемент массива.
Количество используемых индексов массива может быть различным. Массивы с одним индексом называют одномерными, с двумя — двумерными и т. д.
Одномерный массив нестрого соответствует вектору в математике, двумерный — матрице. Чаще всего применяются массивы с одним или двумя индексами, реже — с тремя, ещё большее количество индексов встречается крайне редко.
Массив описывается так:
Чаще всего типом индекса является диапазон, например:
— выше описывается массив В, состоящий из 5 элементов и символьный массив R, состоящий из 34 элементов. Для массива В будет выделено 5*6=30 байт памяти (т.к. под переменные типа Real выделяется 6 байт памяти), для массива R — 1*34=34 байта памяти (под переменные типа Char — 1 байт).
Базовый тип элементов массива может быть любым, как простым, так и структурированным, за исключением файлового! Массив можно объявить с использованием собственного типа:
Циклом может называться любая многократно исполняемая последовательность инструкций, организованная любым способом (например, с помощью условного перехода).
Единичное выполнение тела цикла называется итерацией.
Выражение, определяющее, будет в очередной раз выполняться итерация, или цикл закончиться — это условие выхода или условие окончания цикла (но, может быть и условием продолжения).
Переменная, хранящая текущий номер итерации, называется счётчиком итераций цикла или просто счётчиком цикла. Цикл не обязательно содержит счётчик.
Циклы бывают:
— Цикл cо счётчиком, в котором некоторая переменная изменяет своё значение от заданного начального значения до конечного значения с некоторым шагом, и для каждого значения этой переменной тело цикла выполняется один раз. Реализуется оператором for
Пример. Заполнить массив:
А так можно заполнить двумерный массив:
— Цикл с предусловием, который выполняется пока истинно некоторое условие, указанное перед его началом. Реализуется оператором while.
— Цикл с постусловием, в котором условие проверяется после выполнения тела цикла, а, значит, тело всегда выполняется хотя бы один раз. В языке Паскаль этот цикл реализует оператор repeat...until
Существует операция пропуска итерации, когда в текущей итерации цикла необходимо пропустить все команды до конца тела выполняемого цикла. При этом сам цикл прерываться не должен, условия продолжения или выхода должны вычисляться обычным образом. Реализуется оператором continue.
Также в циклах нередко используется команда досрочного выхода из цикла, например, когда при выполнении тела цикла обнаруживается ошибка, после которой дальнейшая работа цикла не имеет смысла. Реализуется оператором EXIT или break.
Вернемся к началу, а точнее к в начале примеру. Нам нужно определить, что делает данный кусочек программы:
Исходя из вышесказанного, используемый двумерный массив А — это матрица размером n x n. Цикл используется со счетчиком от единицы до n, видимо определенной ранее.
Внутри цикла: переменная с получает значение двумерного массива с индексом [i,i] (c:= A[i,i]),сначала это [1,1]. Затем на место этого элемента массива заносится значение элемента того же массива, но с индексом [k,i] (A[i,i]:= A[k,i]), или при k:=1 (A[i,i]:= A[1,i]). Т.е. заносятся элементы первой строки, т.к. первое число в индексе отвечает за номер строки в матрице — [ i,j], а второе за номер столбца — [i, j ]. И в конце, на место элемента с индексом [k,i], заносится первоначальное значение элемента массива А с индексом [i,i], которое мы занесли в переменную с (A[k,i]:=c).
И с каждой итерацией нашего цикла значение i увеличивается на единицу. Проследим по шагам. Сначала это [1,1]:
с:=A[1,1]
A[1,1]:=A[1,1]
A[1,1]:=c
Далее [2,2]:
с:=A[2,2]
A[2,2]:=A[1,2]
A[1,2]:=c
Далее [3,3]:
с:=A[3,3]
A[3,3]:=A[1,3]
A[1,3]:=c
Далее [4,4]:
с:=A[4,4]
A[4,4]:=A[1,4]
A[1,4]:=c
И так n раз до [n,n].
Т.е. значение диагонали матрицы направления слева направо и сверху вниз. И элементы этой диагонали меняются значениями с элементами первой стоки матрицы (или k -той строки). Значит, правильный ответ — вариант 3: данный алгоритм меняет местами элементы диагонали и k -го столбца таблицы.
Определения[править | править вики-текст]
Последовательность инструкций, предназначенная для многократного исполнения, называется телом цикла. Единичное выполнение тела цикла называется итерацией. Выражение определяющее, будет в очередной раз выполняться итерация, или цикл завершится, называется условием выхода или условием окончания цикла (либо условием продолжения в зависимости от того, как интерпретируется его истинность — как признак необходимости завершения или продолжения цикла). Переменная, хранящая текущий номер итерации, называется счётчиком итераций цикла или просто счётчиком цикла. Цикл не обязательно содержит счётчик, счётчик не обязан быть один — условие выхода из цикла может зависеть от нескольких изменяемых в цикле переменных, а может определяться внешними условиями (например, наступлением определённого времени), в последнем случае счётчик может вообще не понадобиться.
Исполнение любого цикла включает первоначальную инициализацию переменных цикла, проверку условия выхода, исполнение тела цикла и обновление переменной цикла на каждой итерации. Кроме того, большинство языков программирования предоставляют средства для досрочного управления циклом, например, операторы завершения цикла, то есть выхода из цикла независимо от истинности условия выхода (в языке Си — break) и операторы пропуска итерации (в языке Си — continue).
Виды циклов[править | править вики-текст]
Безусловные циклы[править | править вики-текст]
Иногда в программах используются циклы, выход из которых не предусмотрен логикой программы. Такие циклы называются безусловными, или бесконечными. Специальных синтаксических средств для создания бесконечных циклов, ввиду их нетипичности, языки программирования не предусматривают, поэтому такие циклы создаются с помощью конструкций, предназначенных для создания обычных (или условных) циклов. Для обеспечения бесконечного повторения проверка условия в таком цикле либо отсутствует (если позволяет синтаксис, как, например, в цикле LOOP…END LOOP языка Ада), либо заменяется константным значением (while true do … в Паскале). В языке С используется цикл for(;;) с незаполненными секциями.
Цикл с предусловием[править | править вики-текст]
Цикл с предусловием — цикл, который выполняется пока истинно некоторое условие, указанное перед его началом. Это условие проверяется до выполнения тела цикла, поэтому тело может быть не выполнено ни разу (если условие с самого начала ложно). В большинстве процедурных языков программирования реализуется оператором while, отсюда его второе название — while-цикл. На языке Pascal цикл с предусловием имеет следующий вид:
while <условие> dobegin <тело цикла> end;На языке Си:
while(<условие>){ <тело цикла>}Цикл с постусловием[править | править вики-текст]
Цикл с постусловием — цикл, в котором условие проверяется после выполнения тела цикла. Отсюда следует, что тело всегда выполняется хотя бы один раз. В языке Паскаль этот цикл реализуетоператор repeat..until; в Си — do…while.
На языке Pascal цикл с постусловием имеет следующий вид::
На языке Си:
do{ <тело цикла>}while(<условие продолжения цикла>)
В трактовке условия цикла с постусловием в разных языках есть различия. В Паскале и языках, произошедших от него, условие такого цикла трактуется как условие выхода (цикл завершается, когда условие истинно, в русской терминологии такие циклы называют ещё «цикл до»), а в Си и его потомках — как условие продолжения (цикл завершается, когда условие ложно, такие циклы иногда называют «цикл пока»).
Цикл с выходом из середины[править | править вики-текст]
Цикл с выходом из середины — наиболее общая форма условного цикла. Синтаксически такой цикл оформляется с помощью трёх конструкций: начала цикла, конца цикла и команды выхода из цикла. Конструкция начала маркирует точку программы, в которой начинается тело цикла, конструкция конца — точку, где тело заканчивается. Внутри тела должна присутствовать команда выхода из цикла, при выполнении которой цикл заканчивается и управление передаётся на оператор, следующий за конструкцией конца цикла. Естественно, чтобы цикл выполнился более одного раза, команда выхода должна вызываться не безусловно, а только при выполнении условия выхода из цикла.
Принципиальным отличием такого вида цикла от рассмотренных выше является то, что часть тела цикла, расположенная после начала цикла и до команды выхода, выполняется всегда (даже если условие выхода из цикла истинно при первой итерации), а часть тела цикла, находящаяся после команды выхода, не выполняется при последней итерации.
Легко видеть, что с помощью цикла с выходом из середины можно легко смоделировать и цикл с предусловием (разместив команду выхода в начале тела цикла), и цикл с постусловием (разместив команду выхода в конце тела цикла).
Часть языков программирования содержат специальные конструкции для организации цикла с выходом из середины. Так, в языке Ада для этого используется конструкция LOOP…END LOOP и команда выхода EXIT или EXIT WHEN:
LOOP... Часть тела цикла EXIT WHEN <условие выхода>;... Часть тела цикла IF <условие выхода> THEN EXIT; END;... Часть тела циклаEND LOOP:Здесь внутри цикла может быть любое количество команд выхода обоих типов. Сами команды выхода принципиально не различаются, обычно EXIT WHEN применяют, когда проверяется только условие выхода, а просто EXIT — когда выход из цикла производится в одном из вариантов сложного условного оператора.
В тех языках, где подобных конструкций не предусмотрено, цикл с выходом из середины может быть смоделирован с помощью любого условного цикла и оператора досрочного выхода из цикла (такого, как break в Си, exit в Турбо Паскале и т. п.), либо оператора безусловного перехода goto.
Дата добавления: 2015-09-03; просмотров: 146 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Урок 6. Програми з розгалуженням | | | Цикл со счётчиком |