Программирование в среде Matlab
Программирование основных формул и управление виртуальным графопостроителем. Использование рекуррентных соотношений для суммирования степенных рядов. Обработка текстовой информации, применение виртуального графопостроителя и синтаксиса языка МатЛаб.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | лабораторная работа |
Язык | русский |
Дата добавления | 21.10.2017 |
Размер файла | 633,0 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
МИНОБРНАУКИ РОССИИ
Федеральное государственное бюджетное образовательное учреждение
высшего профессионального образования
"Московский государственный технический университет радиотехники,
электроники и автоматики"
МГТУ МИРЭА
Факультет кибернетики
Кафедра высшей математики
ОТЧЕТ ПО ЛАБОРАТОРНЫМ РАБОТАМ
по дисциплине «Языки программирования»
Тема работы: «Программирование в среде Matlab»
Студент группы КТС-3-13
Алешин Павел Алексеевич (3 вариант)
Преподаватель:
Якубов Михаил Игоревич
Москва 2013
Реферат
Данный документ содержит задания, решения заданий, пояснения к ним и примеры работы программ.
Содержание
ВВЕДЕНИЕ
1. ОСНОВНАЯ ЧАСТЬ
1.1 Задание 1. Программирование формул и управление виртуальным графопостроителем
1.1.1 Цель работы
1.1.2 Задача
1.1.3 Решение
1.1.4 Исходный код
1.1.5 Пример работы
1.2 Использование рекуррентных соотношений для суммирования степенных рядов
1.2.1 Цель работы
1.2.2 Задача
1.2.3 Решение
1.2.4 Исходный код
1.2.5 Пример работы
1.3 Одномерные массивы
1.3.1 Цель работы
1.3.2 Задача
1.3.3 Решение
1.3.4 Исходный код
1.2.5 Пример работы
1.4 Одномерные массивы
1.4.1 Цель работы
1.4.2 Задача
1.4.3 Решение
1.4.4 Исходный код
1.4.5 Пример работы
1.5 Одномерные массивы
1.5.1 Цель работы
1.5.2 Задача
1.5.3 Решение
1.5.4 Исходный код
1.5.5 Пример работы
1.6 Задание 6. Обработка текстовой информации
1.6.1 Цель работы
1.6.2 Задача
1.6.3 Решение
1.6.4 Исходный код
1.6.5 Пример работы
ЗАКЛЮЧЕНИЕ
СПИСОК ИСПОЛЬЗУЕМЫХ ИСТОЧНИКОВ
Введение
Для решения задач из типового расчета и написания программ используется язык программирования Matlab. Это пакет прикладных программ для решения задач технических вычислений и одноимённый язык программирования, используемый в этом пакете. Maltab хорошо подходит для начального ознакомления с основами программирования, т.к. был разработан для решения математических задач.
1. ОСНОВНАЯ ЧАСТЬ
1.1 Задание 1. Программирование формул и управление виртуальным графопостроителем
1.1.1 Цель работы
Научиться оформлять формулы в соответствии с синтаксисом языка МатЛаб и использовать виртуальный графопостроитель.
1.1.2 Задача
1. Написать m-функцию, возвращающую значение заданного выражения при произвольных значениях величин x, n (входные параметры). При этом использовать вспомогательную m-функцию, возвращающую значение выражения, стоящего под знаком суммы или произведения, т.е. возвращающую значение k-го слагаемого в сумме или, соответственно, k-го сомножителя в произведении. Проверить правильность программы для каких-либо подходящих значений x и n.
2. Воспользовавшись этой m-функцией как вспомогательной, запрограммировать построение графика (по равноотстоящим промежуточным точкам) соответствующей математической функции аргумента x на отрезке [a, b] при фиксированном значении параметра n. Построение графика предполагается с помощью виртуального графопостроителя. Таким образом, построенный график будет представлять собой некоторую ломанную кривую. При достаточно большом числе промежуточных точек эта ломаная может выглядеть как плавная кривая, однако этого добиваться не нужно. Программа должна запрашивать ввод значений следующих величин: 1) число слагаемых (сомножителей) в выражении для функции, 2) концы отрезка, на котором строится график функции, 3) число точек этого отрезка, по которым должен быть построен график, и после их ввода строить уже график. Для организации диалога с пользователем программы использовать встроенную функцию INPUT, для построения графика использовать графопостроитель. Проверить работу программы при значениях первых трех из этих параметров, указанных в таблице, а число промежуточных точек графика взять произвольно в пределах от 5 до 10.
3. Дополнить программу вычерчиванием горизонтальной линии на уровне среднего арифметического значений функции в промежуточных точках (в пределах отрезка [a, b]).
4. Доработать программу еще так, чтобы во время построения графика (все в том же цикле) те его точки, в которых он пересекает ось среднюю линию, выделялись квадратиками. Для реализации этого вспомогательного алгоритма воспользоваться действием графопостроителя -- VECTOR.
1.1.3 Решение
1. x, n - входные данные.
2. Находим значение выражения под знаком суммы.
3. Домножаем значение суммы на выражение за знаком суммы.
1.1.4 Исходный код
function y=m1(x,n)
%ИСХ: x - число от 0 до 1. n - число сумм.
%Формула для вычислений: y=
%РЕЗ: y - результат вычисления формулы.
y=0; %Начальное значение функции
s=summa(x,n); %Находим значение сумм.
y=0.05*sqrt(n+abs(x))*s;
end
function s=summa(x,n)
%ИСХ: x - число от 0 до 1. n - число сумм.
%РЕЗ: s - результат суммирования.
s=0;
for i=1:n
s=s+(exp(i+sqrt(x))*cos(2*x/i))^(1/i);
end
end function risui
a=input('Введи левая граница a=');% Левая граница
b=input('Введи правая граница b=');% Правая граница
n=input('Введи число слогаемых n=');% Число слогаемых
ch=input('Введи число точек графика ch=');%Число точек графика
p=Pero(a,m1(a,n)) %создаем графопостроитель
h=(b-a)/(ch-1); % Определяем шаг h
line=0; %Значения функции для построения средней линии
%строим график
for i=a:h:b
l=m1(i,n);
p.punct(i, l)
line=line+l; %Значения функции
end
%График функции:
p.draw
sr=line/ch; % Находим среднее значение
p.set('lineColor', 'w') % делаем линию невидимой
p.punct(a,sr) % Ставим "точку" в нужное место
p.draw
p.set('lineColor', 'b') % Делаем цвет видимым
vich(p,a,b,h,n,sr) %Рисует среднюю линию, ищет пересечения со средней линией
%Ищем место пересечения средней линии с графиком функции:
function vich(p,a,b,h,n,sr) % х - значение "х"
for i=a:h:b
l=m1(i,n); % l=y1 x1=i
m=m1(i+h,n);% m=y2 x2=i+h y0=sr
if i+h>b
break
end
p.punct(i,sr)
if (l<=sr) && (m>=sr)
p.set('lineColor', 'b') % Ставим цвет
CB=h*(sr-l);
CB=real(CB)/real(m-l);
p.punct(i+CB,sr) %i+h-CB - новая точка, где нужен квадратик. sr - значение средней линии
p.draw
kvadrat(p)
end
p.draw
end
function kvadrat(p)
% ИСХОДНО:
% 1) перо находится в точке, вокруг которой требуется
% начертить квадратный маркер
% 2) цвет чернил синий (цвет основной линии графика)
% РЕЗУЛЬТАТ:
% 1) перо в исходной точке
% 2) цвет чернил синий
% 3) начерчен квадрат зеленого цвета с центром в исходной
% точке и со стороной равной... (размер выбрать самостоятельно)
p.set('lineColor', 'w') % делаем линию невидимой
p.vector(0.05,0.05) % Ставим точку в начало квадрата
p.draw
p.set('lineColor', 'g') % рисуем квадратик
p.vector(-0.1,0)
p.vector(0,-0.1)
p.vector(0.1,0)
p.vector(0,0.1)
p.draw
p.set('lineColor', 'w') % делаем линию невидимой
p.vector(-0.05,-0.05) %возвращаем точку в начальное положение
p.draw
p.set('lineColor', 'b') % возвращаем нужный цвет
1.1.5 Пример работы
1.2 Задание 2. Использование рекуррентных соотношений для суммирования степенных рядов
1.2.1 Цель работы
Научиться использовать рекуррентные соотношения.
1.2.2 Задача
1. Исходя из заданной в варианте формулы для n-го члена ряда, получить одно или несколько рекуррентных соотношений позволяющих последовательно вычислять все члены ряда (в этих соотношениях уже не должно быть ни факториалов, ни многоточий, ни переменных степеней). Проверить полученные рекуррентные соотношения, вычислив первые 2--3 члена ряда и сравнив результаты с исходной не рекуррентной формулой. В некоторых вариантах не следует выводить рекуррентную формулу для n-го члена целиком. Постарайтесь разбить полное сложное выражение на более простые части, для которых, или даже только для некоторых из них, уже вывести соответствующие формулы (в случае затруднения посоветуйтесь с преподавателем).
2. Воспользовавшись полученными рекуррентными соотношениями, а также свойством (2), написать m-функцию, возвращающую значение суммы s(x) данного ряда с произвольной сколь угодно малой погрешностью е > 0 (входной параметр) при произвольном значении аргумента x из интервала [0, 1) (другой входной параметр). Допускается использовать только 4 арифметических операции (сложение, вычитание, умножение и деление); операцию возведения в степень и другие встроенные математические функции не использовать. При необходимости желательно ввести дополнительные рекуррентные соотношения для минимизации числа арифметических операций, выполняемых за каждый цикл.
3. Проверить правильность написанной программы с помощью контрольной формулы (в каждом варианте приведена контрольная формула, которая, по крайней мере, для каждого 0 <= x < 1 определяет точное значение s(x)). Проверку можно осуществить непосредственно изкомандной строки.
4. Написать m-функцию, возвращающую значение n-ой частичной суммы данного ряда sn(x) при произвольном значении аргумента x.
5. Воспользовавшись этой m-функцией как вспомогательной, написать новую m-функцию (основную), которая с помощью виртуального графопостроителя (его заранее создать) строит графики sn(x) при n = 1, 2, 4, 8 (это степени 2) для x ? [0, 1], а затем на том же интервале -- график s(x). Предельный график выделить цветом. Операцию возведения в степень не использовать. Все графики строить по 10--20 равноотстоящим по оси OX точкам.
1.2.3 Решение
1. Выводим рекуррентное отношение.
2. Оформляем на языке МатЛаб.
1.2.4 Исходный код
function y=m2_a(x,n)
%ИСХ: x - аргумент, n - число членов
%РЕЗ: y - сумма членов последовательности
xn=(x+2)/2*x;
cn=x;
ch=2;
sp=xn;
while (ch<=n)
xn=(2*ch+x)/(fact(2*ch));
cn=-cn*x*x;
an=xn*cn;
sp=sp+an;
ch=ch+1;
end
y=sp;
function y=fact(x)
y=1;
if x>1
y=x*fact(x-1);
end
function sp=m2_b(x,e) % ИСХ.: х - число, е - погрешность.
% Рез: сумма чисел при данной погрешности
xn=(x+2)/2;
xn=xn*x;
cn=x;
an=Inf;
n=1;
sp=xn;
while (abs(an)>e)
n=n+1;
xn=(2*n+x)/fact(2*n);
cn=-cn*x*x;
an=xn*cn;
sp=sp+an;
end
%---Факториал
function y=fact(x)
y=1;
if x>1
y=x*fact(x-1);
end
function sx=sx(x) % s(х) - контрольная сумма
sx=sin(x)-cos(x)+1;
function m_e
p=Pero(0,0)
for n=1:8
p.set('lineColor', 'w')%установка в начало координат
p.punct(0,0)
p.draw
p.set('lineColor', 'g')
for x=0:0.1:1 %n=1,2,4,8
p.punct(x, dop(x,2))
p.draw
end
n=n*2;
end
for x=0:0.1:1 %график функции для m2
p.set('lineColor', 'w')
p.punct(0,0)
p.draw
p.set('lineColor', 'b')
p.punct(x, m2(x,0.001))
p.draw
end
1.2.5 Пример работы
1.3 Задание 3. Обработка одномерных массивов
1.3.1 Цель работы
Научиться обрабатывать одномерные массивы
1.3.2 Задача
Написать m-функцию. Фигурирующий в каждом пункте заданий одномерный массив (вектор) x--это объект класса DOUBLE с вещественными элементами. В каждом варианте задачу пункта 1 решить 3-мя способами: с помощью цикла с условием и с помощью цикла с параметром (цикл с параметром может иметь 2 варианта). Требуется: 1. y = x(2) ? x(4) ? x(6) ? . . . (произведение элементов с четными индексами).
2. y = x(n1 + 1) + x(n1 + 2) + . . . + x(nk ? 1), где n1, nk--индексы 1-го нулевого элемента, и, соответственно, последнего нулевого элемента в массиве x (это если нулей в x больше 1 и nk > n1 + 1, а в противном случае результат должен иметь значение 0).
3. Отсортировать по не убыванию все отрицательные элементы x, а все остальные оставить на своих местах. [Указание: сформировать вспомогательный массив из всех отрицательных элементов исходного массива и применить к нему сортировку.]
1.3.3 Решение
Находим 1-ый нуль и последний. Затем суммируем элементы между этими нулями.
а) Выделяем отрицательные элементы в матрицу, где 1-ая строка - сами элементы, а 2-ая - их позиции.
б) Сортируем строки матрицы по возрастанию.
в) Делаем замену соответствующих элементов матрицы и массива.
Исходный код
1. 1 способ
function p=m3a1(x) %1-ый вариант
%ИСХ.: x - массив
%РЕЗ.: p - произведение четных элементов
p=1;
i=2; % i - счетчик
while i<=length(x)
p=p*x(i);
i=i+2;
end
2 способ
function p=m3a2(x) %2-ой вариант
%ИСХ.: x - массив
%РЕЗ.: p - произведение четных элементов
p=1;
for i=2:2:length(x)
p=p*x(i);
end
3 способ
function p=m3a3(x) %3-ой вариант
%ИСХ.: x - массив
%РЕЗ.: p - произведение четных элементов
p=1;
for i=1:length(x)
if mod(i,2)==0
p=p*x(i);
end
end
function y=m3b(x)
%ИСХ.: x - массив
%РЕЗ.: p - сумма элементов, находящихся между нулями.
y=0;
for i=find_null_perv(x):find_null_posl(x)
y=y+x(i);
end
function t=find_null_perv(x)
%ИСХ.: x - массив
%РЕЗ.: t - индекс первого нуля
for i=1:length(x)
if x(i)==0 %t - 1-ый 0.
t=i;
break
end
end
function z=find_null_posl(x)
%ИСХ.: x - массив
%РЕЗ.: z - индекс последнего нуля
for i=1:length(x)
if x(i)==0 %t - последний 0.
z=i;
end
end
function y=m3(ma)
%ИСХ: ma - массив для сортировки отрицательных элементов
%РЕЗ: у - Все положительные элементы остались на месте, отрицательные
%отсортированы по неубыванию.
mo=[0;0];
for i=1:length(ma)
if ma(i)<0
mo(1,end+1)=[ma(i)]; %Все отрицательные элементы записываются в массив
mo(2,end)=[i];
end
end
mo(:,1)=[ ];
mo(1,:)=sortir(mo(1,:)); %Сортируются отдельно два столбца отрицательного массива mo(2,:)=sortir(mo(2,:));
for i=1:length(mo)
ma(mo(2, i))=mo(1,i); %Собственно замена всех отрицательных элементов
end
y=ma;
function ee=sortir(ma)
%Дано: ma - массив для сортировки элементов.
%Результат: ee - отсортированный массив.
d=length(ma);
for j=1:d-1
for i=1:d-j
if ma(i)>ma(i+1)
k=ma(i+1);
ma(i+1)=ma(i);
ma(i)=k;
end
end
end
ee=ma;
1.3.5 Пример работы
Способ 1
Способ 2
Способ 3
1.4 Задание 4. Обработка двумерных числовых массивов
1.4.1 Цель работы
Научиться обрабатывать двумерные числовые массивы.
1.4.2 Задача
Написать m-функцию, выполняющую соответствующее задание. Фигурирующий в каждом пункте заданий двумерный массив (матрица) x--это объект класса DOUBLE с вещественными элементами. Требуется:
А. Подсчитать число столбцов, содержащих хотя бы один нулевой элемент.
Б. Найти номер строки, в которой находится самая длинная серия одинаковых элементов.
1.4.3 Решение
1. Проверяем все столбцы матрицы на наличие в них 0.
2. Прибавляем к счетчику 1, если есть 0 в столбце.
1. Найти элемент, повторяющийся в строке наибольшее число раз.(подфункция)
2. Запомнить число его повторений
3. Создать одномерный массив, где значения элементов i-ых будет число наиболших повторений, а номер элемента - номер строки
4. Найти наибольший значение элемента массива
5. Вывести номер столбца, где находится этот элемент
1.4.4 Исходный код.
А:
function y=m4a(x) %1-ый способ решения
% Считаем число столбцов в матрице, х - матрица.
y=0;
bool=0; %логическая переменная: наличие или отсутствие 0.
[m,n]=size(x); % m - число столбцов, n - число строк
for i=1:m
for j=1:n
if x(j,i)==0
bool=1;
end
end
if bool==1
y=y+1;
bool=0;
end
end
function y=m4b(x) % 2-ой способ решения
% Считаем число строк в транспонированной матрице, х - матрица.
% 1)Пройтись по всей матрице
% 2)Организовать счетчик
y=0;
xa=x.'; %Транспонируем матрицу
bool=0;
[m,n]=size(x); %m - число строк, n - число столбцов.
for j=1:m
for i=1:n
if xa(j,i)==0
bool=1;
end
end
if bool==1
y=y+1;
bool=0;
end
end
Б.
function y=poisk(x)
% ДАНО: х - матрица
% РЕЗУЛЬТАТ: у - номер строки, в которой самая длинна серия одинаковых
% элементов.
[m,n]=size(x);
mas(1:m)=0;
for i=1:m
ss=pod_func(x(i,:)); % Находим часто повторяющийся элемент в строке
mas(i)=ss; %Записываем его в массив
end
max=0;
for j=1:m
if mas(j)>max % Ищем, в какой строке чаще всего повторяется какой-либо элемент.
max=mas(j);
new=j;
end
end
y=new; % Выводим номер строки
function ss=pod_func(x)
% ДАНО: х - одномерный массив
% РЕЗУЛЬТАТ: ss - наибольшее число повторений числа в строке.
m=length(x); % Длина массива
l(1:m)=0;
for i=1:m %i,j - счетчики
for j=1:m
if x(i) == x(j)
l(i)=(l(i)+1); %Записываем число повторений соответствующего числа
end
end
end
max=0;
%Находим наибольшее число
for i=1:m
if max<l(i)
max=l(i);
end
end
ss=max;
1.4.5 Пример работы
А. 1 способ
2 способ
Б.
1.5 Задание 5. Векторные и матричные вычисления
текстовая информация графопостроитель matlab
1.5.1 Цель работы
Научиться работать с векторами и матрицами.
1.5.2 Задача
В этом задании требуется повторно выполнить некоторые пункты из предыдущих заданий, применяя теперь встроенные векторно-матричные операции и функции:
1. Запрограммировать в виде m-функции вычисление выражения из ЗАДАНИЯ1 при произвольных значениях величин x, n (входные параметры), где x--это вектор произвольной длины, n--скаляр. Результат вычисления должен быть массивом, соразмерным с x. Рассмотреть 2 варианта: с одним циклом и вообще без единого цикла.
2. Написать m-функцию, строящую график этого выражения на интервале [a, b], по k равноотстоящим точкам, для чего воспользоваться встроенной функцией LINE.
3. Написать m-функцию, возвращающую вектор значений k-го члена степенного ряда из ЗАДАНИЯ2, соответствующий вектору значений аргумента x.
4. Запрограммировать (в цикле) вычисление частичных сумм sn(x) в случае векторного аргумента x и одновременное построение их графиков с помощью функции LINE при n = 2, 4, 8, 16. [Указание: если графики слишком плотно проходят друг к другу, то можно увеличить диапазон значений аргумента, чтобы убедиться в том, что расхождения графиков все же имеют место.]
5. Выполнить заново ЗАДАНИЕ3 (все три пункта. Обойтись без циклов).
6. Выполнить заново ЗАДАНИЕ4 (в 1-ом пункте обойтись без циклов, а во втором, возможно, совсем обойтись без циклов не удастся).
1.5.3 Решение
1. Используя встроенную команду repmat, создаем матрицу и решаем при помощи матрицы задание.
2. Меняем графопостроитель из 1-ого задания на Line.
3. Добавляем индексацию в задание 2.
4. Доработать 2-ое задание, меняем графопостроитель.
5. Считаем число столбцов в матрице, х - матрица.
1)Пройтись по всей матрице
2)Организовать счетчик
1.5.4 Исходный код
1. function y=m1a(x,n)
y(1:length(x))=0; %В нем хранятся суммы
for i=1:length(x)
s=summa(x(i),n);
y(i)=0.05*sqrt(n+abs(x(i)))*s;
end
end
function s=summa(x,n)
s=0;%В s хранится промежуточная сумма i-ого члена последовательности
for i=1:n
s=s+(exp(n+sqrt(x))*cos(2*x/n))^(1/n);
end
end
function y=m1b(x,n)%ИСХ: х - вектор, п - число слогаемых. РЕЗ: у - вектор.
t=length(x);
k=1:n;
k=repmat(k,t,1);
k=k.';
x=repmat(x,n,1);
l=(exp(k+sqrt(x)).*cos(2*x./n)).^(1./n);
y=l.*sqrt(n+abs(x));
y=y.*0.05;
2. function m2
a=input('Введи левая граница a=');% Левая граница
b=input('Введи правая граница b=');% Правая граница
n=input('Введи число слогаемых n=');% Число слогаемых
ch=input('Введи число точек графика ch=');%Число точек графика
h=(b-a)/(ch-1); %h - шаг
k=1;
z=[];
%строит график
for i=a:h:b
z=m1(i,n);
x(k)=i;
k=k+1;
end
line(x, z)
3. function y=m3(x,n) % Вычисляет по формуле значения из вектора х.
for i=1:length(x)
xn=(x+2)/2*x(i);
cn=x(i);
ch=2;
sp=xn;
while (ch<=n)
xn=(2*ch+x(i))/(fact(2*ch));
cn=-cn*x(i)*x(i);
an=xn*cn;
sp(i)=sp(i)+an;
ch=ch+1;
end
y(i)=sp(i);
end
4. function m4(x)
for n=1:16
line(x, dop(x,n))
n=n*2;
end
function y=dop(x,n) % Сумма n членов при x
% y = СУММА(a1+a2+...+an)
for i=1:length(x)
xn=(x+2)/2*x(i);
cn=x(i);
ch=2;
sp=xn;
while (ch<=n)
xn=(2*ch+x(i))/(fact(2*ch));
cn=-cn*x(i)*x(i);
an=xn*cn;
sp(i)=sp(i)+an;
ch=ch+1;
end
y(i)=sp(i);
end
5. function p=m3_a(x)
i=length(x);
l=x(2:2:i);
p=prod(l);
function y=m3_b(x)
% Создать массив, который расположен между "0", и суммировать
% элементы.
promeG=find(x==0);
new=x(promeG(1):promeG(end));
y=sum(new);
function y=m3_c(ma)
%Дано: ma - массив для сорторовки отрицательных элементов
%Результат: Все положительные элементы остались на месте, отрицательные
%отсорторованны по неубыванию.
mo=find(ma<0);
mo(2,:)=ma(mo);
mo=sort(mo,2);
ma(mo(1,1:length(mo)))=mo(2,1:length(mo)); %Собственно замена всех отрицательных элементов
y=ma;
6. function y=m4a(x)
% ИСХ: х - матрица, РЕЗ: у - число столбцов.
[m,n]=find(x==0);
m=unique(n);%Убирает повторяющиеся элементы
y=length(m);
function y=m4b(x) %ИСХ: х -матрица. РЕЗ: у - номер строки
[m,n]=size(x);
mas(1:m)=0;
for i=1:m
mas(i)=pod_func(x(i,:));
end
y=find(mas==max(mas));
function ss=pod_func(x)
m=length(x);
l(1:m)=0;
for i=1:m
z=find(x==x(i));
l(i)=length(z);
end
ss=max(l); %Находим наибольшее число
1.5.5 Пример работы
1.6 Задание 6. Обработка текстовой информации
1.6.1 Цель работы
Научиться обрабатывать текстовую информацию.
1.6.2 Задача
Подсчитать число предложений, в которых заданное слово встречается минимальное число раз.
1.6.3 Решение
1. Проходимся по тексту 2 раз: 1- «запоминаем» концы предложения, 2 - запоминаем «координаты» слова.
2. Сравниваем.
1.6.4 Исходный код
function z=a6(x, sdf) %a- текст b-заданное слово
a=[];
for i=1:length(x)
if x(i)=='.' || x(i)=='!' || x(i)=='?'
a(end+1)=i;
end
end
b=strfind(x, sdf); %Координаты начала слов.
c(1:length(a))=0; %Массив с предложениями и кол-вом слов в каждом
ch=1;
for i=1:length(b) %Сравниваем координаты:
if b(i)<a(ch)
c(ch)=c(ch)+1;
end
if (i+1<=length(b)) && (b(i+1)>a(ch))
ch=ch+1;
end
end
sh=min(c);
lol=0;
for i=1:length(c) %Ищем число предложений
if c(i)==sh
lol=lol+1;
end
end
z=lol;
Однопроходный алгоритм:
function z=a6b(x, sdf)
% ИСХ: х - текст, sdf - заданное слово
% РЕЗ: z - число предложений
k=1; %Счетчик
m=[]; %Создаем массив, в котором будет хранится число слов в каждом предложении
while x>0
[a,x]=strtok(x,' '); %Делим предложение на слова, анализируем 1-ое слово
b=strfind(a, sdf);
if length(b)>0 %Если слово есть, то флагу присваиваем 1, иначе - 0.
q=1;
else
q=0;
end
if k>numel(m) %Если вышли за размеры(началось след. предложение), то создаем новый элемент.
m(k)=0;
end
m(k)=m(k)+q; %Прибавляем к элементу 1 или 0.
if a(end) == '!' || a(end) == '?' || a(end) == '.' %"Ищем" предложения
k=k+1;
end
end
ch=min(m); %Узнаем самое маленькое число повторений
pr=0;
for i=1:length(m) %Считаем число предложений с минимальным числом слов
if m(i)==ch
pr=pr+1;
end
end
z=pr; %Выводим число
1.6.5 Пример работы
Заключение
Таким образом, в ходе проделанной работы были изучены основы программирования в среде Matlab и выполнены следующие задачи:
· программирование формул и построение по ним графиков;
· вывод рекуррентной формулы, вычисление частичных сумм,
· построение предельных графиков;
· работа с одномерными массивами и выполнение различных операций над ними;
· работа с двумерными массивами и матрицами и выполнение различных операций над ними;
· работа со встроенными функциями Matlab
· обработка и анализ текста;
· В полном объеме выполнен типовой расчет по Языкам программирования за 1 курс.
В результате были получены следующие навыки:
· Развитие алгоритмического мышления.
· Опыт в программировании.
СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ:
1) Конспекты лекций
2) А.Шень Программирование: теоремы и задачи 2-е изд., М.:МЦНМО, 2004
3) Методические указания по выполнению лабораторных работ. Информатика ( часть 3. №0902 Москва. 2009.)
4) Встроенная справочная служба в среду программирования Матлаб
Размещено на Allbest.ru
Подобные документы
Изучение программирования в MATLAB. Использование команд Save и Load, операторы ввода и вывода для работы в командном окне. Отладка собственных программ. Интерфейс MATLAB. Отличия поздней версии MATLAB от более ранних. Средство Source Control Interface.
контрольная работа [43,0 K], добавлен 25.12.2011Описания объектов, свойств, методов, формы и основных модулей текста программы в среде Delphi. Создание Windows-приложения на алгоритмическом языке Object Pascal в среде визуального программирования. Анализ результатов тестирования программного продукта.
курсовая работа [2,4 M], добавлен 27.08.2012Общая характеристика и свойства системы Matlab - пакета прикладных программ для решения задач технических вычислений. Разработка математической модели в данной среде, программирование функций для задающего воздействия. Проектирование GUI-интерфейса.
курсовая работа [1023,2 K], добавлен 23.05.2013Создание языка программирования с помощью приложения "Java". История названия и эмблемы Java. Обзор многообразия современных текстовых редакторов. Обработка строки. Методы в классе String. Java: задачи по обработке текста. Примеры программирования.
курсовая работа [276,1 K], добавлен 19.07.2014Многослойная архитектура драйверов. Организация внутреннего хранения данных диска. Выбор и обоснование языка и среды программирования. Обработка расширенных запросов. Процедуры установки драйвера виртуального диска. Блокировка выгрузки устройства.
курсовая работа [159,1 K], добавлен 23.06.2009Почему C++. Возникновение и эволюция языка C++. Сравнение языков С++ и С. Эффективность и структура. Процедурное программирование. Модульное программирование. Абстракция данных. Объектно-ориентированное программирование. Улучшенный С.
реферат [26,4 K], добавлен 03.06.2004Выбор параметров и структурой схемы. Программирование скрипта (m-файла) для задания исходных параметров. Расчет параметров регулятора, проектирование его S-функции. Программирование GUI-интерфейса: разработка внешнего вида и проектирование обработчиков.
курсовая работа [721,5 K], добавлен 18.05.2013Различные способы обработки информации и программирование в среде Pascal. История создания языка. Блок схема с использованием заголовка функций задания. Описание подпрограмм. Сущность структурного программирования в аспекте написания алгоритмов программ.
курсовая работа [331,9 K], добавлен 18.01.2016Особенности работы в режиме командной строки в системе Matlab. Переменные и присваивание им значений. Комплексные числа и вычисления в системе Matlab. Вычисления с использованием функции sqrt. Неправильное использование функций с комплексными аргументами.
дипломная работа [1,9 M], добавлен 30.07.2015Использование языка программирования Бейсик для создания приложений в области компьютерных технологий: бизнес, игры, мультимедиа, базы данных. Моделирование работы оператора по управлению автобусами. Разработка интерфейса и редактирование маршрутов.
курсовая работа [637,6 K], добавлен 29.01.2011