Программирование в среде 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

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.