Студопедія
рос | укр

Головна сторінка Випадкова сторінка


КАТЕГОРІЇ:

АвтомобіліБіологіяБудівництвоВідпочинок і туризмГеографіяДім і садЕкологіяЕкономікаЕлектронікаІноземні мовиІнформатикаІншеІсторіяКультураЛітератураМатематикаМедицинаМеталлургіяМеханікаОсвітаОхорона праціПедагогікаПолітикаПравоПсихологіяРелігіяСоціологіяСпортФізикаФілософіяФінансиХімія






Структура ДНК


Дата добавления: 2014-12-06; просмотров: 579



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

Цикл for используется для повторения операторов в случае, когда число повторений заранее известно. В цикле for используется счетчик цикла, его начальное значение, шаг и конечное значение указываются через двоеточие. Блок операторов, размещенный внутри цикла, должен заканчиваться словом end. Листинг 6.1 содержит файл-программу для вывода графиков функции на отрезке , для значений параметра .

Листинг 6.1. Графики функции при различных значениях параметра

x=[-2:0.01:2];

for beta=-0.5:0.1:0.5

y=exp(beta*x).*sin(x);

plot(x,y)

hold on

end

hold off

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

при различных значениях x потребуется файл-функция, текст которой приведен на листинге 6.2. Обратите внимание, что sum10 может быть вызвана как от числа, так и от массива значений, благодаря применению поэлементных операций.

Листинг 6.2. Файл-функция для вычисления суммы

function s=sum10(x)

s=0;

for k=1:10

s=s+x.^k/factorial(k);

end

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

Цикл for подходит для повторения заданного числа определенных действий. В том случае, когда число повторов заранее неизвестно и определяется в ходе выполнения блока операторов следует организовать цикл while. Цикл while работает, пока выполнено условие цикла. Файл-функция negsum (см. листинг 6.3) находит сумму всех первых отрицательных элементов вектора.

Листинг 6.3. Файл-функция negsum

function s=negsum(x)

s=0;

k=1;

while x(k)<0

s=s+x(k);

k=k+1;

end

В качестве операторов отношения используются символы: >, < , >=, <=, == (равно), ~= (не равно). Файл-функция negsum имеет один недостаток: если все элементы массива — отрицательные числа, то k становится больше длины массива x, что приводит к ошибке, например:

» b=[-2 -7 -1 -9 -2 -5 -4];

» s=negsum(b)

??? Index exceeds matrix dimensions.

Кроме проверки значения x(k) следует позаботится о том, чтобы k не превосходила длины вектора x. Вход в цикл должен осуществляться только при одновременном выполнении условий k<=length(x) и x(k)<0, т. е. необходимо применить логический оператор "и", обозначаемый в MatLab символом &. Замените условие цикла на составное: k<=length(x) & x(k)<0. Если первое из условий не выполняется, то второе условие проверяется не будет, именно поэтому выбран такой порядок операндов. Теперь файл-функция negsum работает верно для любых векторов.

Логический оператор "или" обозначается символом вертикальной черты |, а отрицание — при помощи тильды ~. Если требуется применить отрицание к некоторому логическому выражению, то его следует заключить в круглые скобки, например: ~(a<1 & b==3). В отличие от многих языков программирования, приоритет у логического "или" такой же, как и у логического "и", например, выражения a==4 | x>‑1 & x<2 и a==4 | (x>‑1 & x<2) неэквивалентны. Для изменения порядка выполнения логических операторов используются круглые скобки.

Циклы могут быть вложены друг в друга. Например, для поиска суммы элементов матрицы, расположенных выше главной диагонали следует использовать два цикла for, причем начальное значение счетчика внутреннего цикла зависит от текущего значения счетчика внешнего цикла (см. листинг 6.4).

Листинг 6.4. Использование вложенных циклов

function s=upsum(A)

[n m]=size(A);

s=0;

for i=1:n

for j=i+1:m

s=s+A(i,j);

end

end

Ветвление в ходе работы программы осуществляется при помощи конструкции if-elseif-else. Самый простой вариант ее использования (без elseif и else) реализован в файл-функции possum (см. листинг 6.5), которая предназначена для нахождения суммы всех положительных элементов вектора.

Листинг 6.5. Файл-функция для суммирования положительных элементов вектора

function s=possum(x)

s=0;

for k=1:length(x)

if x(k)>=0

s=s+x(k);

end

end

Если ход программы должен изменяться в зависимости от нескольких условий, то следует использовать полную конструкцию if-elseif-else. Каждая из ветвей[1] elseif в этом случае должна содержать условие выполнения блока операторов, размещенных после нее. Важно понимать, что условия проверяются подряд, первое выполненное условие приводит к работе соответствующего блока, выходу из конструкции if-elseif-else и переходу к оператору, следующему за end. У последней ветви else не должно быть никакого условия. Операторы, находящиеся между else и end, работают в том случае, если все условия оказались невыполненными. Предположим, что требуется написать файл-функцию для вычисления кусочно-заданной функции:

Первое условие x<-1 проверяется в ветви if. Обратите внимание, что условие –1<=x не требуется включать в следующую ветвь elseif (см. листинг 6.6), поскольку в эту ветвь программа заходит, если предыдущее условие (x<-1) оказалось не выполнено. Условие x>2 проверять не надо — если не выполнены два предыдущих условия, то x будет больше двух.

Листинг 6.6. Файл-функция для вычисления кусочно-заданной функции

function f=pwf(x)

if x<-1

f=1-exp(-1-x);

elseif x<=2

f=x.^2-x-2;

else

f=2-x;

end

Ход работы программы может определятся значением некоторой переменной (переключателя). Такой альтернативный способ ветвления программы основан на использовании оператора переключения switch. Переменная-переключатель помещается после switch через пробел. Оператор switch содержит блоки, начинающиеся со слова case, после каждого case записывается через пробел то значение переключателя, при котором выполняется данный блок. Последний блок начинается со слова otherwise, его операторы работают в том случае, когда ни один из блоков case не был выполнен. Если хотя бы один из блоков case выполнен, то происходит выход из оператора switсh и переход к оператору, следующему за end.

Предположим, что требуется найти количество единиц и минус единиц в заданном массиве и, кроме того, найти сумму всех элементов, отличных единицы и минус единицы. Следует перебрать все элементы массива в цикле, а в роли переменной-переключателя выступает текущий элемент массива. Листинг 6.7 содержит файл-функцию, которая по заданному массиву возвращает число минус единиц в первом выходном аргументе, число единиц — во втором, а сумму — в третьем.

Листинг 6.7. Файл-функция mpsum

function [m,p,s]=mpsum(x)

m=0;

p=0;

s=0;

for i=1:length(x)

switch x(i)

case -1

m=m+1;

case 1

p=p+1;

otherwise

s=s+x(i);

end

end

Блок case может быть выполнен не только при одном определенном значении переключателя, но и в том случае, когда переключатель принимает одно из нескольких допустимых значений. В этом случае значения указываются после слова case в фигурных скобках через запятую, например: case {1,2,3}.

Досрочное завершение цикла while или for осуществляется при помощи оператора break. Пусть, например, требуется по заданному массиву x образовать новый массив y по правилу y(k)=x(k+1)/x(k) до первого нулевого элемента x(k), т.е. до тех пор, пока имеет смысл операция деления. Номер первого нулевого элемента в массиве x заранее неизвестен, более того, в массиве x может и не быть нулей. Решение задачи состоит в последовательном вычислении элементов массива y и прекращении вычислений при обнаружении нулевого элемента в x. Файл-функция, приведенная на листинге 6.8, демонстрирует работу оператора break.

Листинг 6.8. Использование оператора break для выхода из цикла

function y=div(x)

for k=1:length(x)-1

if x(k)==0

break

end

y(k)=x(k+1)/x(k);

end

Задания для самостоятельной работы

Написать файл-функцию для вычисления кусочно-заданной функции (см. варианты на стр. 35). Написать файл-функцию для решения поставленной задачи.

Варианты

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

2. Подсчитать число нулей и единиц в заданной матрице.

3. Определить количество положительных элементов вектора, расположенных между его максимальным и минимальным элементами.

4. Просуммировать отрицательные элементы матрицы, лежащие ниже главной диагонали.

5. Заменить положительные элементы вектора суммой всех его отрицательных элементов.

6. Заполнить квадратную матрицу A, каждый элемент которой определяется следующим образом:

.

7. Вычислить сумму:

.

8. Для матрицы размера n на m найти значение выражения:

.

9. По заданному x найти максимальное значение n, для которого следующая сумма не превосходит 100:

.

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

.

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

11. Заданы окружности, координаты их центров содержатся в массивах x и y, а радиусы в массиве r. Известны координаты некоторой точки. Требуется вывести график, на котором маркером отмечено положение точки, синим цветом изображены те окружности, внутри которых лежит точка, а остальные окружности нарисованы красным цветом.

 


[1] Ветвей elseif может быть сколько угодно.

Программирование МП и микро-ЭВМ

Под программированием понимают составление программы, т.е. последовательности инструкций для ЭВМ, описывающей процесс решения задачи.

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

Если мы хотим написать программу на машинном языке, то нужно весь вычислительный процесс (алгоритм) детализировать до уровня простейших операций, а затем каждую инструкцию, содержащую только простую операцию, записать в виде машинной команды. Так как машина внутри себя имеет дело только с двоичными числами, то ячейки нужно нумеровать двоичными числами. Например, если память состоит из 63 ячеек, то для обозначения каждого из 63 адресов понадобится шестиразрядное двоичное число от 000001 для ячейки 1 до 111111 – для­ ячейки 63 (1*25 + 1*24 + 1*23 + 1*22 + 1*21 + 1*20)

32 + 16 + 8 + 4 + 2 + 1 = 63.

Чтобы машина правильно решала задачу нужно в каждой команде указать, какую операцию она должна выполнить (например “сложить”), а также, где взять операнды (т.е. числа, над которыми будет выполняться операция), куда поместить результат и откуда прочитать следующую инструкцию.

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

1) сложить 1410 и 3510

2) напечатать результат

3) конец.

Нужно делать следующее:

а) представить исходные числа (14 и 35) в двоичном коде (001110 и 100011);

б) выделить ячейки с определенными номерами (адресами) для хранения исходных чисел и размещения результата; например, ячейка 001000 служит для хранения числа 001110 (т.е. 14), ячейка 001001 – для хранения числа 100011 (т.е. 35), ячейка 001010 – для размещения результата.

в) выделить ячейки с определенными адресами (например, начиная с адреса 111000) для размещения программы;

г) записать процесс решения в виде следующих инструкций.

 


<== предыдущая лекция | следующая лекция ==>
Моносахариди. | Ферменти.
1 | 2 | 3 | 4 | 5 | 6 | 7 | <== 8 ==> | 9 |
Studopedia.info - Студопедия - 2014-2024 год . (0.244 сек.) російська версія | українська версія

Генерация страницы за: 0.244 сек.
Поможем в написании
> Курсовые, контрольные, дипломные и другие работы со скидкой до 25%
3 569 лучших специалисов, готовы оказать помощь 24/7