Все о тюнинге авто

Matlab циклы примеры. Циклы в matlab. Условный оператор if

Кафедра: Информационные технологии

ПРОГРАММИРОВАНИЕ В MATLAB

Операторы MATLAB

· Операторы цикла

Цикл for

Синтаксис

for count=start:step:final

команды MATLAB

Описание

count - переменная цикла,

start - ее начальное значение,

final - ее конечное значение,

step - шаг, на который увеличивается count при каждом следующем заходе в цикл

цикл заканчивается, как только значение count становится больше final.

Пример

Пусть требуется вывести семейство кривых для x€ , которое задано функцией, зависящей от параметра

y (x, a) = e-ax sin x,

для значений параметра а от -0.1 до 0.1. Ниже приведен листинг файл-программы для вывода семейства кривых.

Листинг программы

x = ;

for a = -0.1:0.02:0.1

y = exp (-a*x).*sin(x);

В результате выполнения программы появится графическое окно, которое содержит требуемое семейство кривых.

Цикл while

Синтаксис

while условие цикла

команды MATLAB

Описание

Цикл работает, пока выполняется (истинно) условие цикла. Для задания условия выполнения цикла допустимы следующие операции отношения:

Задание более сложных условий производится с применением логических операторов. Логические операторы приведены в следующей таблице

Пример

Операторы ветвления

Условный оператор if

Синтаксис

if условие

команды MATLAB

Описание

Если условие верно, то выполняются команды MATLAB, размещенные между if и end, а если условие не верно, то происходит переход к командам, расположенных после end.

Пример

Условный оператор elseif

Синтаксис

if условие1

elseif условие2

………………………

elseif условиеn

Описание

В зависимости от выполнения того или иного условия работает соответствующая ветвь программы, если все условия неверны, то выполняются команды, размещенные после else.

Пример

Оператор switch

Синтаксис

switch переменная

case значение1

case значение2

……………………

case значениеn

Каждая ветвь определяется оператором case, переход в нее выполняется тогда, когда переменная оператора switch принимает значение, указанное после case, или одно из значение из списка case. После выполнения какой-либо из ветвей происходит выход из switch, при этом значения, заданные в других case, уже не проверяются. Если подходящих значений для переменной не нашлось, то выполняется ветвь программы, соответствующая otherwise.

Пример

Прерывания цикла. Исключительные ситуации.

Оператор break

Синтаксис

Оператор break используется при организации циклических вычислений: for…end, while…end. При выполнении условия

if условие

оператор break заканчивает цикл (for или while) и происходит выполнение операторов, которые расположены в строках, следующих за end. В случае вложенных циклов break осуществляет выход из внутреннего цикла.

Обработка исключительных ситуаций, оператор try catch

Синтаксис

операторы, выполнение которых

может привести к ошибке

операторы, которые следует выполнить

при возникновении ошибки в блоке

между try и catch

Описание

Конструкция try…catch позволяет обойти исключительные ситуации (ошибки, приводящие к окончанию работы программы, например, обращение к несуществующему файлу) и предпринять некоторые действия в случае их возникновения.

Пример

Сервисные функции

disp -осуществляет вывод текста или значения переменной в командное окно

input - осуществляет запрос на ввод с клавиатуры. Используется при создании приложений с интерфейсом из командной строки.

eval - выполняет содержимое строки или строковой переменной, как команды MATLAB

clear - удаляет переменные рабочей среды.

с lc - производит очистку командного окна

Более подробную информацию об этих и других функциях можно узнать, выполнив в командной строке

help имя_функции

Задания на выполнение лабораторной работы

Номер конкретного варианта задания определяется преподавателем.

Задание 1

Данное задание подразумевает нахождение для некоторой совокупности данных алгебраического интерполяционного многочлена степени n: P n (x ) .

Цель работы:

Необходимо составить программу вычисления коэффициентов алгебраического интерполяционного многочлена P n (x )= a 0 + a 1 x + + a n x n .

Методические указания:

х i

y i

Коэффициенты a 0 , a 1 , …, a n определяются из решения системы уравнений:

Здесь n - порядок интерполяционного многочлена,

n +1 - количество заданных пар точек (x , y ),

a 0 , a 1 ,… a n - искомые коэффициенты многочлена P n (x )= a 0 + a 1 x + + a n x n ).

Требования к программе

· Задать границы отрезка , на котором строится интерполяционный многочлен P(x)

· Задать n - количество отрезков интерполяции (или, что то же самое, степень многочлена)

Примечание: x0 , xn , n вводятся с клавиатуры.

· Для получения исходных данных (x , y ) (количество пар точек (x i , y i ) , по которым строится интерполяционный многочлен P(x) - n1=n+1 ) предусмотреть:

ь Ввод произвольно расположенных узлов x i , i=0 , n с клавиатуры

ь Расчет узлов x i , i=0 , n , соответствующих равномерному расположению аргумента x на отрезке

ь В пп. 1,2 значения y i , i=0 , n либо вводятся с клавиатуры (если исходная функция неизвестна), либо вычисляются по заданной функции f(x) . Выражение, определяющее функцию, вводится с клавиатуры и должно соответствовать правилам записи выражений в MATLAB

ь Ввод данных (x i , y i , i=0 , n ) из файла

· Решить систему уравнений для определения коэффициентов многочлена P(x)

· Построить графики исходной таблично заданной функции и многочлена P(x)

· Если исходные данные заданы в виде функции f(x), построить график погрешности интерполяции /f(x) - P(x)/. Рассчитать максимальное по модулю значение погрешности интерполяции на заданном промежутке.

Задание 2

Интерполяция сплайнами

Цель работы:

Необходимо составить программу вычисления коэффициентов и построения сплайн-функции S(x), «склеенной» из кусков многочленов 3_го порядка Si (x ), которые имеют специальную форму записи:

функция Si (x ) определена на отрезке ,

Требования к программе

При выполнении данной работы необходимо:

· Задать границы отрезка , на котором строится сплайн-функция S(x)

· Задать n - количество отрезков интерполяции, на каждом из которых строится кубический многочлен Si(x).

· Примечание: x0, xn, n вводятся с клавиатуры.

· Организовать ввод исходных данных (x, y) (количество пар точек (xi, yi), по которым строится сплайн-функция S(x), n1=n+1), предусмотрев:

ь Ввод произвольно расположенных узлов xi, i=0, n с клавиатуры

ь Расчет узлов xi, i=0, n, соответствующих равномерному расположению аргумента x на отрезке

ь В пп. 1,2 значения yi, i=0, n либо вводятся с клавиатуры (если исходная функция неизвестна), либо вычисляются по заданной функции f(x). Выражение, определяющее функцию, вводится с клавиатуры и должно соответствовать правилам записи выражений в MATLAB

ь Ввод данных (xi, yi, i=0, n) из файла

ь S1""(x0)=0, S3""(x3)=0

ь S1"(x0)=f "(x0), S3"(x3)=f "(x3)

ь S1""(x0)=f «(x0), S3""(x0)=f «(x3)

· Для определения коэффициентов естественного кубического сплайна (краевые условия 1) необходимо решить следующую систему уравнений:

Коэффициенты?0 =0,?n =0

· Построить графики исходной функции и сплайн-функций для всех трех типов краевых условий.

· Построить графики функций погрешности сплайн-интерполяции f(x) - S(x) для всех трех типов краевых условий.

Примечание:

В пакете MATLAB индексы одномерных и двумерных массивов начинаются с 1, а не с 0. Учесть это при составлении программы.

Задание №3

Аппроксимация функции методом наименьших квадратов (МНК).

Данное задание подразумевает нахождение для некоторой совокупности данных аппроксимирующей функции (многочлена степени m), построенной методом наименьших квадратов (МНК).

Цель работы:

Необходимо составить программу нахождения коэффициентов многочлена?(x )= a 0 + a 1 * x +… a n * x m методом наименьших квадратов.

Пусть, например, имеется следующая совокупность данных:

х i

y i

Поиск необходимых коэффициентов осуществляется следующим образом:

где n - количество точек (x , y ),

m - степень искомого многочлена,

a 0 , a 1 , …, a m - искомые коэффициенты (? ( x )= a 0 + a 1 x + … + a m x m ).

Требования к программе

При выполнении данной работы необходимо:

· Задать границы отрезка , на котором строится аппроксимирующая функция?(x)=a0+a1*x+… an * xm

· Задать m - степень многочлена

· Примечание: x1, xn, m вводятся с клавиатуры.

· Для получения исходных данных (x, y), по которым строится аппроксимирующая функция?(x)=a0+a1*x+… an* xm предусмотреть:

ь Ввод произвольно расположенных узлов xi, i=1, n с клавиатуры

ь Расчет узлов xi, i=1, n, соответствующих равномерному расположению аргумента x на отрезке

ь В пп. 1,2 значения yi, i=1, n либо вводятся с клавиатуры (если исходная функция неизвестна), либо вычисляются по заданной функции f(x). Выражение, определяющее функцию, вводится с клавиатуры и должно соответствовать правилам записи выражений в MATLAB

ь Ввод данных (xi, yi, i=1, n) из файла

· Решить систему уравнений для определения коэффициентов многочлена?(x)

· Построить графики исходной таблично заданной функции и многочлена?(x)

· Если исходные данные заданы в виде функции f(x), построить график погрешности интерполяции /f(x) - ?(x)/. Рассчитать максимальное по модулю значение погрешности интерполяции на заданном промежутке.

При выполнении последнего пункта на отрезке взять не менее 500 точек для проведения расчетов

Требования к оформлению лабораторной работы

Отчет должен содержать:

1. Постановку задачи

2. Текст программы

3. Результаты тестирования

Примечание тексты программ должны быть снабжены комментариями.

Список литературы

1. Ануфриев И.Е. Самоучитель Matlab 5.3/6.x - СПб.: БХВ-Петербург, 2003. - 736 с.: ил.

2. В.П. Дьяконов MATLAB 6.5 SPI/7 + Simulink 5/6 в математике и моделировании. Серия «Библиотека профессионала». - М.: СОЛОН-Пресс, 2005. - 576 с.: ил.

3. Ануфриев И.Е., Смирнов А.Б., Смирнова Е.Н. MathLab 7. - СПб.: БХВ-Петербург, 2005. - 1104 с.: ил.

Часто при организации цикла требуется перебирать значение счетчика в заданном диапазоне значений и с заданным шагом изменения. Например, чтобы перебрать элементы вектора (массива), нужно организовать счетчик от 1 до N с шагом 1, где N – число элементов вектора. Чтобы вычислить сумму ряда, также задается счетчик от a до b с требуемым шагом изменения step. И так далее. В связи с тем, что подобные задачи часто встречаются в практике программирования, для их реализации был предложен свой оператор цикла for, который позволяет проще и нагляднее реализовывать цикл со счетчиком.

Синтаксис оператора цикла for имеет следующий вид:

for <счетчик> = <начальное значение>:<шаг>:<конечное значение>
<операторы цикла>
end

Рассмотрим работу данного цикла на примере реализации алгоритма поиска максимального значения элемента в векторе:

function search_max
a = ;
m = a(1); % текущее максимальное значение
for i=1:length(a) % цикл от 1 до конца вектора с
% шагом 1 (по умолчанию)
if m < a(i) % если a(i) > m,
m = a(i); % то m = a(i)
end
end % конец цикла for
disp(m);

В данном примере цикл for задает счетчик i и меняет его значение от 1 до 10 с шагом 1. Обратите внимание, что если величина шага не указывается явно, то он берется по умолчанию равным 1.

В следующем примере рассмотрим реализацию алгоритма смещения элементов вектора вправо, т.е. предпоследний элемент ставится на место последнего, следующий – на место предпоследнего, и т.д. до первого элемента:

function queue
a = ;
disp(a);
for i=length(a):-1:2 % цикл от 10 до 2 с шагом -1
a(i)=a(i-1); % смещаем элементы вектора а
end % конец цикла for
disp(a);

Результат работы программы

3 6 5 3 6 9 5 3 1 0
3 3 6 5 3 6 9 5 3 1

Приведенный пример показывает, что для реализации цикла со счетчиком от большего значения к меньшему, нужно явно указывать шаг, в данном случае, -1. Если этого не сделать, то цикл сразу завершит свою работу и программа будет работать некорректно.

В заключении рассмотрим работу оператора цикла for на примере моделирования случайной последовательности с законом изменения

где - коэффициент от -1 до 1; - нормальная случайная величина с нулевым математическим ожиданием и дисперсией

,

где - дисперсия моделируемого случайного процесса. При этом первый отсчет моделируется как нормальная случайная величина с нулевым математическим ожиданием и дисперсией . Программа моделирования имеет следующий вид:

function modeling_x
r = 0.95; % коэффициент модели
N = 100; % число моделируемых точек
ex = 100; % дисперсия процесса
et = ex*(1-r^2); % дисперсия случайной добавки
x = zeros(N,1); % инициализация вектора х
x(1) = sqrt(ex)*randn; % моделирование 1-го отсчета
for i=2:N % цикл от 2 до N
x(i)=r*x(i-1)+sqrt(et)*randn; % моделирование СП
end % конец цикла
plot(x); % отображение СП в виде графика

При выполнении данной программы будет показана реализация смоделированной случайной последовательности .

Рис. 2.1. Результат моделирования случайной последовательности.

Работа программы начинается с определения переменных , (в программе переменная ex) и для реализации указанной модели. Затем вычисляется дисперсия и моделируется первый отсчет случайного процесса с помощью функции randn. Функция randn выполняет генерацию нормальных случайных величин с нулевым средним и единичной дисперсией. Чтобы сгенерировать случайную величину с дисперсией достаточно случайную величину с единичной дисперсией умножить на , т.к. дисперсия – это средний квадрат случайной величины относительно математического ожидания. В результате имеем программную строчку

x(1) = sqrt(ex)*randn;

Затем, реализуется цикл for со счетчиком i от 2 до N с шагом 1. Внутри цикла выполняется моделирование оставшихся N-1 отсчетов случайного процесса в соответствии с приведенной выше формулой. В последней строчке программы записана функция plot(), которая выводит смоделированную последовательность на экран в виде графика. Более подробно работа с выводом графиков на экран будет рассмотрена в следующей главе.

Язык технических вычислений

Миллионы инженеров и ученых во всем мире используют MATLAB ® , чтобы анализировать и разработать системы и продукты, преобразовывающие наш мир. Матричный язык MATLAB является самым естественным способом в мире выразить вычислительную математику. Встроенная графика облегчает визуализацию и понимание данных. Окружение рабочего стола способствует экспериментированию, исследованиям и открытиям. Эти средства MATLAB и возможности все строго протестированы и разработаны, чтобы работать совместно.

MATLAB помогает вам воплощать свои идеи за пределами рабочего стола. Можно запустить исследования больших наборов данных и масштабировать до кластеров и облаков. Код MATLAB может быть интегрирован с другими языками, позволив вам развернуть алгоритмы и приложения в сети, предприятии и промышленных системах.

Начало работы

Изучите основы MATLAB

Основы языка

Синтаксис, индексация и обработка массива, типы данных, операторы

Импорт и анализ данных

Импорт и экспорт данных, в том числе и больших файлов; предварительная обработка данных, визуализация и исследования

Математика

Линейная алгебра, дифференцирование и интегрирование, преобразования Фурье и прочая математика

Графика

2D и 3D графики, изображения, анимация

Программирование

Скрипты, функции и классы

Создание приложений

Разработка приложений с помощью App Designer, программируемого рабочего процесса или GUIDE

Инструменты разработки программного обеспечения

Отладка и тестирование, организация крупных проектов, интеграция с системой контроля версий, упаковка тулбоксов

Циклы в matlab предполагает наличие условия, что команда или группа команд должны
повторяться несколько раз.

Самый простой способ создать цикл - это использовать
выражение for. Ниже показан простой пример, где вычисляется и отображается 10! = 10 * 9 * 8 ... * 2 * 1.

f = 1;
for n =2:10
f = f*n;
end

f =
3628800

Цикл в матлаб начинается с выражения for и заканчивается выражением end. Команда
между этими выражениями выполняется в целом девять раз, по одному разу для каждого
значения п от 2 до 10. Для прерывания промежуточного вывода внутри цикла мы
использовали точку с запятой. Чтобы увидеть конечный результат, необходимо
ввести f после завершения цикла. Если не использовать точку с запятой, программа
MATLAB будет отображать каждое промежуточное значение 2!, 3!, и т.д.

В модуле Editor (Редактор) команды for и end автоматически выделяются
синим цветом. Это придает лучшую читабельность, если вы вставляете между
ними команды (как мы это сделали); модуль Editor (Редактор) делает это
автоматически. Если вы введете for в окне Command Window (Командное окно),
программа MATLAB не выдаст новое приглашение командной строки >>, пока вы не
введете команду end, при которой программа MATLAB выполнит полный цикл и
отобразит новую командную строку.

  • Если вы используете цикл в М-файле-сценарии с эффектом отображения echo on, то команды будут отражаться каждый раз во всем цикле. Вы можете предотвратить это, вставив команду echo off прямо перед выражением end и команду echo on сразу после него; тогда каждая команда в цикле будет отражена один раз (кроме end).

Примечание: есть три вида циклов в матлаб, которые приведены ниже

1. Цикл for в Matlab

a=0;
for i=1:10
a=a+1;
end

2. Цикл while в Матлаб

a=0;
while a<10
a=a+1;
end

3. Цикл if в Матлаб

a=10;
if a==10
"первый случай"
else
"второй случай"
end

ans =
первый случай

Поэтому из выше всего сказанного можно сделать вывод, что вам необходимо просмотреть много дополнительной информации и альтернатив!


Кафедра: Информационные технологии

ПРОГРАММИРОВАНИЕ В MATLAB


Операторы MATLAB

· Операторы цикла

Цикл for

Синтаксис

for count=start:step:final

команды MATLAB

Описание

count – переменная цикла,

start – ее начальное значение,

final – ее конечное значение,

step – шаг, на который увеличивается count при каждом следующем заходе в цикл

цикл заканчивается, как только значение count становится больше final.

Пример

Пусть требуется вывести семейство кривых для x€ , которое задано функцией, зависящей от параметра

y (x, a) = e -ax sin x,

для значений параметра а от -0.1 до 0.1. Ниже приведен листинг файл-программы для вывода семейства кривых.

Листинг программы

x = ;

for a = -0.1:0.02:0.1

y = exp (-a*x).*sin(x);

В результате выполнения программы появится графическое окно, которое содержит требуемое семейство кривых.

Цикл while

Синтаксис

while условие цикла

команды MATLAB

Описание

Цикл работает, пока выполняется (истинно) условие цикла. Для задания условия выполнения цикла допустимы следующие операции отношения:

Задание более сложных условий производится с применением логических операторов. Логические операторы приведены в следующей таблице


Пример

Операторы ветвления

Условный оператор if

Синтаксис

if условие

команды MATLAB

Описание

Если условие верно, то выполняются команды MATLAB, размещенные между ifи end, а если условие не верно, то происходит переход к командам, расположенных после end.

Пример

Условный оператор elseif

Синтаксис

if условие1

elseif условие2

………………………

elseif условиеn

Описание

В зависимости от выполнения того или иного условия работает соответствующая ветвь программы, если все условия неверны, то выполняются команды, размещенные после else.

Пример

Оператор switch

Синтаксис

switch переменная

case значение1

case значение2

……………………

caseзначениеn


Каждая ветвь определяется оператором case, переход в нее выполняется тогда, когда переменная оператора switch принимает значение, указанное после case, или одно из значение из списка case. После выполнения какой-либо из ветвей происходит выход из switch, при этом значения, заданные в других case, уже не проверяются. Если подходящих значений для переменной не нашлось, то выполняется ветвь программы, соответствующая otherwise.

Пример

Прерывания цикла. Исключительные ситуации.

Оператор break

Синтаксис

Оператор break используется при организации циклических вычислений: for…end, while…end. При выполнении условия

if условие

оператор break заканчивает цикл (for или while) и происходит выполнение операторов, которые расположены в строках, следующих за end. В случае вложенных циклов break осуществляет выход из внутреннего цикла.

Обработка исключительных ситуаций, оператор try catch

Синтаксис

операторы, выполнение которых

может привести к ошибке

операторы, которые следует выполнить

при возникновении ошибки в блоке

между try и catch

Описание

Конструкция try…catch позволяет обойти исключительные ситуации (ошибки, приводящие к окончанию работы программы, например, обращение к несуществующему файлу) и предпринять некоторые действия в случае их возникновения.

Пример

Сервисные функции

disp осуществляет вывод текста или значения переменной в командное окно

input – осуществляет запрос на ввод с клавиатуры. Используется при создании приложений с интерфейсом из командной строки.

eval выполняет содержимое строки или строковой переменной, как команды MATLAB

clear – удаляет переменные рабочей среды.

с lc – производит очистку командного окна

Более подробную информацию об этих и других функциях можно узнать, выполнив в командной строке

help имя_функции

Задания на выполнение лабораторной работы

Номер конкретного варианта задания определяется преподавателем.

Задание №1

Данное задание подразумевает нахождение для некоторой совокупности данных алгебраического интерполяционного многочлена степени n: P n (x ) .

Цель работы:

Необходимо составить программу вычисления коэффициентов алгебраического интерполяционного многочлена P n (x )= a 0 + a 1 x + … + a n x n .

Методические указания:

Пусть, например, имеется следующая совокупность данных:

i 0 1 2 3
х i 1,2 1,4 1,6 1,8
y i 8,3893 8,6251 8,9286 8,9703

Коэффициенты a 0 , a 1 , …, a n определяются из решения системы уравнений:

Здесь n – порядок интерполяционного многочлена,

n +1 – количество заданных пар точек (x , y ),

a 0 , a 1 ,… a n – искомые коэффициенты многочлена P n (x )= a 0 + a 1 x + … + a n x n ).

Требования к программе

· Задать границы отрезка , на котором строится интерполяционный многочлен P(x)

· Задать n – количество отрезков интерполяции (или, что то же самое, степень многочлена)

Примечание: x0 , xn , n вводятся с клавиатуры.

· Для получения исходных данных (x, y) (количество пар точек (x i, y i) , по которым строится интерполяционный многочлен P(x) n1=n+1 ) предусмотреть:

Ввод произвольно расположенных узлов x i, i=0, n с клавиатуры

Расчет узлов x i , i=0, n, соответствующих равномерному расположению аргумента x на отрезке

В пп. 1,2 значения y i , i=0, n либо вводятся с клавиатуры (если исходная функция неизвестна), либо вычисляются по заданной функции f(x) . Выражение, определяющее функцию, вводится с клавиатуры и должно соответствовать правилам записи выражений в MATLAB

Ввод данных (x i, y i, i=0, n ) из файла

· Решить систему уравнений для определения коэффициентов многочлена P(x)

· Построить графики исходной таблично заданной функции и многочлена P(x)

· Если исходные данные заданы в виде функции f(x), построить график погрешности интерполяции /f(x) – P(x)/. Рассчитать максимальное по модулю значение погрешности интерполяции на заданном промежутке.

При выполнении последнего пункта на отрезке взять не менее 500 точек для проведения расчетов

Задание №2

Интерполяция сплайнами

Цель работы:

Необходимо составить программу вычисления коэффициентов и построения сплайн-функции S(x), «склеенной» из кусков многочленов 3‑го порядка S i (x ), которые имеют специальную форму записи:

,

функция S i (x ) определена на отрезке ,

Требования к программе

При выполнении данной работы необходимо:

· Задать границы отрезка , на котором строится сплайн-функция S(x)

· Задать n – количество отрезков интерполяции, на каждом из которых строится кубический многочлен Si(x).

· Примечание: x0, xn, n вводятся с клавиатуры.

· Организовать ввод исходных данных (x, y) (количество пар точек (xi, yi), по которым строится сплайн-функция S(x), n1=n+1), предусмотрев:

Ввод произвольно расположенных узлов xi, i=0, n с клавиатуры

Расчет узлов xi, i=0, n, соответствующих равномерному расположению аргумента x на отрезке

В пп. 1,2 значения yi, i=0, n либо вводятся с клавиатуры (если исходная функция неизвестна), либо вычисляются по заданной функции f(x). Выражение, определяющее функцию, вводится с клавиатуры и должно соответствовать правилам записи выражений в MATLAB

Ввод данных (xi, yi, i=0, n) из файла

S1""(x0)=0, S3""(x3)=0

S1"(x0)=f "(x0), S3"(x3)=f "(x3)

S1""(x0)=f «(x0), S3""(x0)=f «(x3)

· Для определения коэффициентов естественного кубического сплайна (краевые условия 1) необходимо решить следующую систему уравнений:

Коэффициенты σ 0 =0,σ n =0

· Построить графики исходной функции и сплайн-функций для всех трех типов краевых условий.

· Построить графики функций погрешности сплайн-интерполяции f(x) – S(x) для всех трех типов краевых условий.

Примечание:

В пакете MATLAB индексы одномерных и двумерных массивов начинаются с 1, а не с 0. Учесть это при составлении программы.