Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Лістинг 7.1. Файл-функція для перестановки символів в рядку↑ ⇐ ПредыдущаяСтр 12 из 12 Содержание книги
Поиск на нашем сайте
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; просмотров: 355; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.222.20.30 (0.008 с.) |