![]() Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву ![]() Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Лістинг 7.1. Файл-функція для перестановки символів в рядкуСодержание книги
Поиск на нашем сайте
function sout=strinv(s) L=length(s); for k=1:L sout(L-k+1)=s(k); end Перейдемо тепер до вивчення масивів рядків. Можна вважати, що масив рядків є вектор-стовбець, кожен елемент якого є рядок, причому довжини всіх рядків однакові. В результаті виходить прямокутна матриця, що складається з символів. Наприклад, для змінних s1='March', s2='April', s3='May', операція S=[s1; s2] є допустимою, і приводить до масиву рядків: S = March April Аналогічне об'єднання трьох рядків S=[s1; s2; s3] викличе виведення повідомлення про помилку. Можна, звичайно, доповнити за допомогою зчеплення, кожен рядок пропусками справа до довжини найбільшою з рядків і потім проводити формування масиву. Функція char якраз і вирішує цю задачу, створюючи з рядків різної довжини масив рядків: >> S=char(s1,s2,s3) S = March April May Перевірте за допомогою команди whos, що S є масивом розміру 3 на 5. Для визначення розмірів масиву рядків, так само, як і будь-яких масивів, використовується size. Звернення до елементів масиву рядків проводиться аналогічно зверненню до елементів числового масиву за допомогою індексування числами або двокрапкою, наприклад: S(3,2), S(2:), S(2:3,1:4). При виділенні рядка із масиву рядків в кінці можуть залишитися пропуски. Якщо вони не потрібні, то їх слід видалити, скориставшись функцією deblank. Порівняєте, до чого приводять S(3:) і deblank(S(3:)). Пошук під-рядка в масиві рядків виконується функцією strmatch. Вхідними аргументами strmatch являється під-рядок і масив рядків, а вихідним — вектор з номерами рядків, що містять під-рядок: >> p=strmatch('Ma',S) p = Якщо потрібно шукати номери рядків, точно співпадаючих з під-рядком, то слід задати третій додатковий вхідний аргумент 'exact'. Деякі функції обробки рядків можуть працювати і з масивами рядків. Наприклад, при зчепленні масивів з однаковим числом рядків за допомогою strcat, зчеплення застосовується до відповідних рядків масивів, утворюючи новий масив рядків. Серед вхідних аргументів strcat може бути і рядок. В цьому випадку вона добавляється до всіх рядків масиву. Серед символів рядки можуть бути цифри і точки, тобто рядок може містити числа. Важливо розуміти, що оператор привласнення b=10 приводить до утворення числової змінної b, а оператор s='10' — рядковою. Перетворення цілого числа в рядок проводиться за допомогою функції int2str, вхідним аргументом якої є число, а вихідним рядок, наприклад:
>> str=['May ' int2str(10)] str = May, 10 Зауважте, що нецілі числа перед перетворенням округляються. Для перекладу нецілих чисел в рядки служить функція num2str: >> str=num2str(pi) str = 3.1416 Додатковий другий вхідний аргумент num2str призначений для вказівки кількості цифр в рядку з результатом: str=num2str(pi,11). Можливе гнучкіше управління перетворенням за допомогою рядка спеціального вигляду, що визначає формат (експоненціальний або з плаваючою крапкою) і кількість позицій, що відводяться під число. Рядок з форматом задається як другий вхідний аргумент num2str, починається із знаку відсотка і має вид '%A.ax', де: · A — кількість позицій, що відводиться під все число; · а — кількість цифр після десяткової крапки; · x — формат висновку, який може приймати, наприклад, одне з наступних значень: f (з плаваючою крапкою), e (експоненціальний) або g (автоматичний підбір якнайкращого представлення). Порівняєте результати наступних перетворень числа в рядок: >> z=198.23981 >> sf=num2str(z, '%12.5f') >> se=num2str(z, '%12.5e') >> sg=num2str(z, '%12.5g') Якщо вхідним аргументом функцій int2str і num2str є матриця, то результатом буде масив рядків. В цьому випадку в рядку з форматом часто корисно вказати роздільник, наприклад кому і пропуск: >> R=rand(5) >> S=num2str(R,'%7.2e ') Зворотне завдання, а саме, перетворення рядкової змінної, що містить число, в числову змінну вирішується за допомогою функції str2num. Вхідним аргументом str2num може бути рядок з представленням цілого, речовинного або комплексного числа відповідно до правил MatLab, наприклад: str2num('2.9e-3'), str2num('0.1'), str2num('4.6+4i'). Завдання для самостійної роботи 1. Написати файл-функцію для вирішення поставленого завдання. Варіанти 1. Підрахувати число входжень під-рядка в рядок. 2. Знайти кількість пропусків в рядку. 3. Визначити кількість цифр в рядку. 4. Видалити що йдуть підряд однакові символи в рядку. 5. Замінити що йдуть підряд однакові символи в рядку на один. 6. Рядок є пропозицією, в якій слова розділені пропусками. Переставити перше і останнє слово. 7. Утворити рядок, що складається з перших букв рядків, що входять в масив рядків. 8. Вивести номери однакових рядків в масиві рядків. 9. Визначити кількість символів в кожному рядку масиву рядків без урахування пропусків.
10. По заданому масиву рядків утворити новий, виключивши рядки, що повторюються. 11. Замінити в рядку цифри числівниками (замість 1, 2. — один, два, три.). 12. Заданий рядок, що містить текст і числа, виділити числа в числовий масив. Текстові файли MatLab пропонує достатньо універсальні способи прочитування даних з текстових файлів і запису даних в необхідному вигляді в текстовий файл. Розглянемо спочатку операцію з числовими даними, представленими матрицями і векторами. Нехай в текстовому файлі vec.dat у стовпчик записані числа відповідно до правил MatLab, тобто для відділення десяткових знаків використовується крапка, а для запису числа в експоненціальному вигляді застосовується символ e. Функція load дозволяє занести вміст файлу vec.dat у числовий масив. Ім'я файлу, поміщене в апострофи, вказується у вхідному аргументі load, а у вихідному аргументі повертається вектор-стовпець: >> v=load('vec.dat'); Зворотна операція запис значень вектор-стовпця у файл проводиться за допомогою команди save, аргументами якої є: ім'я файлу, змінна, і додатковий параметр –ascii, що означає запис в текстовому вигляді: >> v2=v.^2; >> save 'vec2.dat' v2 –ascii Якщо числа в текстовому файлі розташовані в рядок і розділені пропусками, то результатом прочитування буде вектор-рядок. Вірно і зворотне, запис значень вектор-рядка приведе до занесення їх в рядок в текстовому файлі. Запис матриці командою save приводить до утворення текстового файлу з таблицею чисел. Текстовий файл, в кожному рядку якого знаходиться однакова кількість чисел, відокремлених один від одного пропусками, прочитується в двовимірний масив функцією load. Команди load і save призначені тільки для простого введення-висновку числових даних. Розберемо тепер складніший випадок, коли прочитуванна або записувана інформація містить не тільки числа, але і текст. Робота з текстовими файлами складається з трьох етапів: 1. відкриття файлу; 2. прочитування або запис даних; 3. закриття файлу. Для відкриття файлу служить функція fopen, яка викликається з двома вхідними аргументами: ім'ям файлу і рядком, заданий спосіб доступу до файлу. Вихідним аргументом fopen є ідентифікатор файлу, тобто змінна, яка згодом використовується при будь-якому зверненні до файлу. Функція fopen повертає –1, якщо при відкритті файлу виникла помилка. Існує чотири основні способи відкриття файлу: 1. f=fopen('myfile.dat','rt') відкриття текстового файлу myfile.dat тільки для читання з нього; 2. f=fopen('myfile.dat','rt+') відкриття текстового файлу myfile.dat для читання і запису даних; 3. f=fopen('myfile.dat','wt') створення порожнього текстового файлу myfile.dat тільки для запису даних; 4. f=fopen('myfile.dat','wt+') створення порожнього текстового файлу myfile.dat для запису і читання даних. При використанні двох останніх варіантів слід дотримуватися обережності якщо файл myfile.dat вже існує, то його вміст буде знищений. Після відкриття файлу з'являється можливість прочитувати з нього інформацію, або заносити її у файл. Після закінчення роботи з файлом необхідно закрити його за допомогою fclose(f). Відрядкове прочитування інформації із текстового файлу проводиться за допомогою функції fgetl. Вхідним аргументом fgetl є ідентифікатор файлу, а вихідним поточний рядок. Кожен виклик fgetl приводить до прочитування одного рядка і перекладу поточної позиції у файлі на початок наступного рядка. Команди, приведені на лістингу 9.1, послідовно прочитують з файлу myfile.dat перші три рядки в рядкові змінні str1, str2, str3.
|
|||||||
Последнее изменение этой страницы: 2016-04-18; просмотров: 365; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.191.31.223 (0.007 с.) |