Отчет по лабораторной работе № 3 по дисциплине: «Компьютерное моделирование» на тему: «Работа со строками и текстовыми файлами в MatLab» Вариант 1. Выполнил: Батищев Д.С. Проверила: Голощапова В.А. Урсол Д.В. Белгород 2012 Исходная строка: s = Alekseev Sergey 1980 5 4 4 5 3 5 0.1 0.2 0.3 9.91 1.9 0.4 0.1 8.01 4.7 5.1 3.9 7.16 Задание 1. Определить количество символов в первой строке варианта без учета пробелов. s = char('Alekseev Sergey 1980 5 4 4 5 3 5' , '0.1 0.2 0.3 9.91' , '1.9 0.4 0.1 8.01' , '4.7 5.1 3.9 7.16') length( strrep(s (1, : ), ' ', '') ) Листинг 1. Решение задачи 1. Задание 2. Первая строка является предложением, в котором слова разделены пробелами. Переставить первое и последнее слово. s = Alekseev Sergey 1980 5 4 4 5 3 5 0.1 0.2 0.3 9.91 1.9 0.4 0.1 8.01 4.7 5.1 3.9 7.16 >> sp = findstr( s(1, :), ' ' ) sp = 9 16 21 23 25 27 29 31 >> ns = [ s(1, (end - (end - sp(1, end))) : end) , s(1, sp(1, 1) : sp(end)) s(1, 1 : (sp(1, 1) - 1) ) ] ns = 5 Sergey 1980 5 4 4 5 3 Alekseev Листинг 2. Решение задания 2. Задание 3. Заменить в первой строке цифры числительными (вместо 1, 2,… — один, два, три, …). function res = task3(s) res = ''; sp = strfind( s(1, :), ' ' ); sp = [ 1 sp sp(end) + ( length(s(1, sp(end) : end - 1 )) ) ]; for i = 2 : 1 : length(sp) word = ''; tmp = strrep( s(1, sp(i - 1) : sp(i) ) , ' ', '' ); switch(tmp) case{ '0' } word = 'zero'; case{ '1' } word = 'one'; case{ '2' } word = 'two'; case{ '3' } word = 'three'; case{ '4' } word = 'four'; case{ '5' } word = 'five'; case{ '6' } word = 'six'; case{ '7' } word = 'seven'; case{ '8' } word = 'eight'; case{ '9' } word = 'nine'; otherwise word = tmp; end; res = [res word ' ']; end; end Листинг 3. Решение задачи 3. Файл task3.m Рис. 1. Решение задачи 3. Задача 4. Задана строка (первая строка варианта), содержащая текст и числа, разделенные пробелами, выделить числа в числовой массив. function res = task4(s) res = []; sp = strfind( s(1, :), ' ' ); sp = [ 1 sp sp(end) + ( length(s(1, sp(end) : end - 1 )) ) ]; for i = 2 : 1 : length(sp) tmp = str2double(strrep( s(1, sp(i - 1) : sp(i) ) , ' ', '' )); if( (tmp / 1) == tmp ) (tmp / 1) res(1, length(res) + 1) = tmp; end; end; end Листинг 4. Решение задачи 4. Файл task4.m Рис. 2. Решение задачи 4. Задача 5. Записать данные, указанные в соответствующем варианте, в файл inN.txt, где N – номер варианта. function res = task5(s, n) file = [ 'in' num2str(n) '.txt' ]; ss = size(s); f = fopen(file, 'wt'); for i = 1 : 1 : ss(1, 1) fprintf(f, [ s(i, : ) '\n']); end; fclose(f); end Задача 6. Считать матрицы и вектора из файла в подходящие по размеру массивы. Обратите внимание, что в файлах содержится рядом две или три матрицы или вектора, их следует занести в разные массивы. function res = task6(filename) res = ''; f = fopen(filename, 'r'); t = 0; tvlc = 0; tvlp = 0; v = []; m = []; n = 0; while( feof(f) == 0 ) ts = deblank(fgetl(f)); ts_sc = strfind(ts, ' '); ts_sc = [ 1 (ts_sc) ( ts_sc(1, end) + (length(ts(1, ts_sc(1, end) : end)) 1) ) ]; tv = []; for i = 2 : 1 : length(ts_sc) t = str2double(strrep( ts(1, ts_sc(i - 1) : ts_sc(i) ) , ' ', '' )); if( (t / 1) == t ) tv(1, length(tv) + 1) = t; end; end n = n + 1; tvs = length(tv); eval( [ 'tv_' num2str(n) '=[' num2str(tv) '];' ] ); end; for i = 1 : 1 : n s = size(m); eval( [ 'l=length(tv_' num2str(i) ');' ] ); if(l == 7) eval( [ 'v=tv_' num2str(i) ';' ] ); else eval( [ 'm( s(1, 1) + 1 , : ) = tv_' num2str(i) ';' ] ); end; end; v m fclose(f); end Листинг 6. Решение задачи 6. Файл task6.m Рис. 3. Решение задачи 6. Задача 7. Построить график функции y sin( Nx) , где N – номер варианта, x [1: 0.1: 5] . Представить результаты вычислений и график в виде html-файла «lab3_N.html», график сохранить в файле с именем «varN», где N – номер варианта. function res = task7(n) res = ''; x = [ 1 : 0.1 : 5 ]; y = sin( n .* x ); htmlf = ['lab3_' num2str(n) '.html']; figf = ['lab3_' num2str(n) 'fig.jpg']; f = fopen( htmlf , 'w+' ); html = '<html>\n\t<head>\n\t\t<title>lab3</title>\n\t\t<meta HTTP-EQUIV="ContentType" CONTENT="text/html; charset=utf-8">\n\t<head>\n\n\t<body>'; html = [html '<center><H3>?????<br>?? ???????????? ?????? ' num2str(n) '</h3></center>\n' ]; html = [html '<p><h3>???????? ??????</h3>\n' ]; html = [html '<br> <b>x</b> = [ %-5.0f ]\n', num2str(x) ]; html = [html '<br> <b>y</b> = [ %-5.0f ]</p>\n', num2str(y) ]; fig = figure('Name','?????? y = sin(Nx)'); hold on; plot( x, y ); hold off; saveas( fig, figf ) html = [html '<p><b>??????</b><br><a href=' figf '><img scr=' figf ' height=50% width=50%></img></a>' ]; html = [html '</body></html>' ]; fprintf( f, html ); fclose(f);