Найти максимум из 3-х чисел x, y, z

Операторы цикла и условные операторы

Программа может иметь комментарии. Символ %означает, что далее следует поясняющий текст. Все комментарии начинаются с этого знака. Комментарий не является исполняемым оператором.

Вывод комментариев на экран при выполнении программы обеспечивает операторecho on. Отменяет вывод комментариев на экран оператор echo off. Оператор pauseприостанавливает выполнение программы и ожидает нажатия любой клавиши для продолжения. Оператор pause(n) создает паузу в n секунд.

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

Язык ML имеет специальные управляющие конструкции, которые позволяют задавать последовательность выполнения команд в программах. Такие конструкции называются операторами управления и задаются с помощью ключевых слов. Это условный оператор ifи оператор переключения (выбора) switch…case и операторы цикла for и while.

Изображение ветвления в виде блок-схемы выглядит следующим образом: (полное ветвление если-то-иначе, и неполный вариант ветвления если-то).

Бл-сх.

Условный оператор позволяет организовать ветвления в программе и имеет следующую синтаксическую конструкцию:

if (<логическое выражение1>)

<операторы>

Else

<операторы>

End

Синтаксис и выполняемые действия этих операторов аналогичны соответствующим операторам известных языков программирования. Область действия конструкции ограничивается словом end.

Условный оператор может содержать ветку elseif и иметь такой вид:

if (<логическое выражение1>)

<операторы>

[elseif (<логическое выражение2>)

<операторы>

elseif (<логическое выражение3>)

<операторы>

…]

[else

<операторы>]

End

В этой конструкции может быть произвольное количество вложений ветвей elseif, или их может не быть вовсе.

MATLAB допускает вложенность операторов. Условный оператор может быть вложенным. Тогда каждому if может соответствовать свой end.

if (<логическое выражение1>)

<операторы>

[else

if (<логическое выражение2>)

<операторы>

[else

<операторы>]

End

End

Пример

a=input('введите a=');

b=input('введите b=');

%disp(sprintf('исходные данные:при a=%3.1f; при b=%3.1f',a,b))

if a>10

res=a-b;

elseif a>0&a<=10&b<0

res=a+b;

else

res=2*b;

end

disp(sprintf('исходные данные:при a=%3.1f; при %b=%3.1f\nres=%3.1f',a,b,res))

%disp(sprintf('f=%3.1f',res))

disp(res)

Найти максимум из 3-х чисел x, y, z

x=input('bb x= ');

y=input('bb y= ');

z=input('bb z= ');

if (x>y)&(x>z)

max=x

elseif (y>z)

max=y

else

max=z

end

Disp(max)

Оператор выбора

 

Оператор переключения (выбора). Если необходимо сделать множественный выбор, можно воспользоваться оператором переключения, синтаксическая конструкция которого приведена ниже:

Switch <ключевое выражение>

Case { <список значений1}

<операторы>

Case {<список значений2>}

<операторы>

…….

[Otherwise

<операторы>]

End

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

Пусть необходимо по введенному с клавиатуры номеру месяца вывести название времени года. Ниже приведены команды, позволяющие решить эту задачу:

n=input('введи номер месяца : ')

switch n

case {1,2,12}

s='зима';

case {3,4,5}

s='весна';

case {6,7,8}

s='лето';

case {9,10,11}

s='осень';

otherwise

s='ошибка';

end

disp(strcat('введенный номер месяца - ',s))

 

Циклы

Напомним:

Цикл – это многократно повторение одинаковых действий с различными исходными значениями. Однократное выполнение совокупности действий в цикле называется итерацией цикла. Операторы и конструкции, которые выполняются в цикле, называется телом цикла.

Различают 2 вида циклов: арифметические и итерационные. Цикл называют арифметическим, если количество повторений заранее известно или может быть вычислено. Если количество повторений заранее неизвестно, то такой цикл называют итерационным.

В Матлабе различают циклические структуры: цикл «ДЛЯ», цикл «ПОКА». Это for и while соответственно.

Обычно, когда необходимо выполнять тело цикла для различных значений некоторой переменной в заданном диапазоне, удобно использовать конструкцию «ДЛЯ». В заголовке такого цикла указывается и начальное значение, и шаг, и конечное значение переменной. В остальных случаях используют конструкцию «ПОКА». В цикле «ПОКА» сначала, до выполнения тела цикла, проверяется условие, поэтому цикл может не выполниться ни одного раза. При использовании этого вида цикла обязательно до цикла надо указать начальное значение переменной, которая будет изменяться в цикле. Кроме того всегда внутри цикла должен быть оператор, изменяющий условие.

Возможны варианты, когда внутри одного цикла необходимо повторить некоторую совокупность действий, т.е. организовать еще один цикл (внутренний цикл). Такая структура называется вложенным циклом или циклом в цикле.

Оператор цикла с параметром позволяет описывать действия, которые выполняются фиксированное количество раз:

For <пар. цикла>=<нач. значение>:<шаг>:<кон. значение>

<операторы>

End

Для досрочного прерывания цикла используется оператор break.

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

Например, требуется вычислить значения у=x2 для всех х на отрезке от 1 до 10 c шагом равным 3:

>>for x=1:3:10 1:2:10

y=x^2

end

Результат выполнения данного оператора:

y =

y =

y =

y =

Или вычислим значения у для всех х на отрезке от 0 до 1.5
c шагом равным 0,5:

for x=0:0.5:1.5

y=x^2;

disp(strcat('x=',num2str(x),' y=',num2str(y)))

end

В результате на экране получим:

x=0 y=0

x=0.5 y=0.25

x=1 y=1

x=1.5 y=2.25

Вычислить сумму

Дано натуральное n. Вычислить значение суммы

s=0;

n=input('введите n=');

for i=1:n

s=s+1/i^2;

end

disp(strcat('s=', num2str(s)))

Вычислить значение произведения:

p = 1;

a = 1;

for i = 1:11

x=x/i;

p=p*(1+x);

end

disp(p)

Оператор цикла с предусловием while позволяет запрограммировать цикл, в котором количество повторений зависит от выполнения некоторого условия:

while <лог. выражение, задающее усл. продол. цикла>

<операторы>

End

Например, найти целое х, при котором ax больше заданного B.

a=input('введи a=');

b=input('введи b=');

x=0;

sta=1;

while sta <b

x=x+1;

sta=sta*a;

end

disp(x)

Получим на экране:

введи a=2

введи b=45

Пример.

Вычислить за сколько лет в сбербанке будет накоплена сумма S при начальном вкладе W и процентах годового прироста P.

K – число лет.

D – прирост за год.

D=w*p/100

W=w+d

k=0;

p=10;

s=1000;

w=800;

while w<s

d=w*p/100;

w=w+d;

k=k+1;

end

disp(strcat('s=',num2str(s),' k=',num2str(k),' w=',num2str(w)))

На экране получим:

s=1000 k=3 w=1064.8

Массивы

Как уже упоминали, все данные в системе Матлаб представляют собой массив. Это особенность системы. Матлаб предоставляет пользователю специальные возможности (матричные операции) для работы с массивами (векторами и матрицами). Однако пока мы будем рассматривать возможность поэлементной обработки (как в любом ЯВУ).

Массив– это упорядоченная совокупность данных одного типа, расположенных в памяти компьютера последовательно в порядке возрастания порядковых индексов (номеров).

Любой массив характеризуется именем, числом измерений (размерностью), размером, и типом элементов.

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

Размер массива соответствует количеству элементов по каждому измерению.

Элементами массива могут быть целые, вещественные, комплексные числа, логические значения и символы.

В массиве под одним именем хранится множество однотипных значений.

Каждый элемент массива имеет номер или индекс, определяющий его местоположение в массиве.

Доступ к элементу массива осуществляется указанием имени массива и в круглых скобках индекса. В качестве индекса массива может использоваться целочисленная переменная, константа или выражение (B(k), A(5), X(i+2), Y(3, 4)).

Нумерация элементов начинается с 1, т.е. индексы должны быть >=1.

В программировании различают (по количеству измерений) одномерные массивы и двумерные массивы и больше. В математике это следующие объекты: вектор (вектор-строка, вектор-столбец)и матрица. Вектор может быть представлен в виде столбца - вектор-столбец, или в виде строки – вектор-строка. Векторы и матрицы в Матлабе принято обозначать заглавными буквами.

В одномерном массиве расположение элемента определяется одним индексом (A (2)). В матрице (двумерном массиве) каждому элементу соответствует два индекса. Первый индекс - это номер строки, а второй - номер столбца, где расположен элемент матрицы.

Чтобы обратиться к элементу матрицы, достаточно указать имя матрицы и в скобках через запятую индексы (номера) строки и столбца. Например, запись Х (2, 3) означает обращение к элементу матрицы Х, расположенному во 2-й строке 3-го столбца.

На текущий моментвводлюбого массива одномерного и матрицы будем осуществлять в цикле(не учитываем пока возможности Матлаба). А как ещё? Вывод массивов в цикле, как мы увидим, в Матлабе выглядит некрасиво. Командой disp(<имя>)массив выводится автоматически в удобном для восприятия виде. Рассмотрим отдельно одномерные массивы и матрицы.

Одномерные массивы

Например, ввод и вывод массива можно организовать так:

n=input('введите n=');

for i=1:n

X(i)=input('X(i)=');

end

Вывод массива

Использовали для вывода цикл

for i=1:n

disp(X(i));

end

На экране:

введите n=4

X(i)=2

X(i)=3

X(i)=4

X(i)=5

Получили на экране при таком выводе:

Некрасиво! Так массив не надо выводить, ввод тоже неинформативен, не пронумерованы элементы.

Используем другой вариант:

clear;

n=input('введите n=');

for i=1:n

disp(sprintf('X(%g)=',i))

X(i)= input(' ');

end

disp('Массив X')

disp(X)

 

На экране увидим:

введите n=3

X(1)=

X(2)=

X(3)=

Массив X

2 5 8

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

Пример

Вычислить среднее арифметическое значение положительных элементов в массиве.

clear;

n=input('Введите n=');

for i=1:n

disp(sprintf('X(%g)=',i))

X(i)= input(' ');

end

s=0;

k=0;

for i=1:n

if X(i)>0

s=s+X(i);

k=k+1;

end

end

sr=s/k;

disp(‘sr=’);

disp(sr);

На экране:

Введите n=3

X(1)=

X(2)=

-1

X(3)=

sr=

3.5000

Пример

%заменить мин в массиве на число в

n=input('Введите n = ');

b=input('Введите b = ');

for i=1:n

x(i)=input('x(i)=');

end

disp('исходный массив');

disp(x);

min=x(1);

pmin=1;

for i=2:n

if x(i)<min

min=x(i);

pmin=i;

end

end

x(pmin)=b;

disp('полученный массив');

disp(x);

 

Пример

Сформировать новый массив из элементов кратных 5

clear;

n=input('Введите n=');

for i=1:n

disp(sprintf('X(%g)=',i))

X(i)= input('');

end

disp('isx mas');

disp(X);

k=0;

for i=1:n

if mod(X(i),5)==0

k=k+1;

Y(k)=X(i);

end

end

disp('new mas');

disp(Y);

 

Матрицы

В двумерном массиве каждому элементу соответствует два индекса. Первый индекс - это номер строки, а второй - номер столбца, где расположен элемент матрицы.

Чтобы обратиться к элементу двумерного массива, достаточно указать имя матрицы и в скобках через запятую индексы (номера) строки и столбца. Например, запись А(2, 3) означает обращение к элементу 2-й строки 3-го столбца.

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

Ввод матрицы можно осуществить следующими способами:

Й вариант

Этот вариант аналогичен 1-му примеру с одномерным массивом. Ввод осуществим построчно, но элементы матрицы при вводе не пронумерованы. Матрицу выведем традиционным для ML способом.

clear;

n=input('Введите n=');

m=input('Введите m=');

for i=1:n

disp(sprintf('Введите эл. %d строки матрицы',i))

for j=1:m

X(i,j)=input('X(i,j)=');

end

end

disp('Матрица X');

disp(X);

 

На экране получим:

Введите n=2

Введите m=3

Введите эл. 1 строки матрицы

X(i,j)=4

X(i,j)=5

X(i,j)=6

Введите эл. 2 строки матрицы

X(i,j)=1

X(i,j)=2

X(i,j)=3

Матрица X

4 5 6

1 2 3

Ой вариант

clear;

n=input('Введите n=');

m=input('Введите m=');

for i=1:n

for j=1:m

disp(sprintf('Введите %s(%d,%d)=','X',i,j))

X(i,j)= input(' ');

end

end

disp('Матрица X');

disp(X);

 

Получим:

Введите n=2

Введите m=3

Введите X(1,1)=

Введите X(1,2)=

Введите X(1,3)=

Введите X(2,1)=

Введите X(2,2)=

Введите X(2,3)=

Матрица X

4 3 7

4 9 1

 

Для обработки двумерных массивов также используют вложенные циклы.В зависимости от решаемой задачи просмотр матрицы может осуществляться или по строкам, или по столбцам. Когда действия производятся во всей матрице, то порядок обхода элементов неважен. Если необходимо произвести обработку по строкам, сначала обрабатываются все элементы первой строки, затем все элементы второй строки и так до конца массива. Для этого во внешнем цикле изменяется первый индекс (индекс строки), а во внутреннем – второй (индекс столбца). Иными словами, чтобы перемещаться по элементам одной строки, нужно изменять номера столбцов. В случае, если необходимо выполнить действия по столбцам, поступают аналогично, с той лишь разницей, что внешний цикл организуется по столбцам, а внутренний цикл по строкам, т.е. сначала обрабатываются все элементы первого столбца, потом все элементы второго, третьего, и так далее, а для перемещения по элементам столбца изменяется номер строки.

Пример

Определить среднее арифметическое отрицательных элементов в матрице. Если их нет, выдать сообщение.

n=input('введите n=');

m=input('введите m=');

disp('введите эл. матрицы');

for i=1:n

for j=1:m

X(i,j)=input('X(i,j)=');

end

end

disp('исходная матрица')

disp(X)

s=0;

k=0;

for i=1:n

for j=1:m

if X(i,j)< 0

k=k+1;

s=s+X(i,j);

end

end

end

if s==0

disp('Отрицательных нет');

else

sr=s/k;

disp('sr=');

disp(sr);

end

Пример








Дата добавления: 2016-03-22; просмотров: 1212;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.11 сек.