Рис.1.68.Ввод матрицы и сохранение ее в файл

Предусмотрены окно ввода числа строк матрицы, окно ввода числа столбцов матрицы, кнопка для ввода этих характеристик матрицы (ее размерностей). Кроме этого, предусмотрены окно для вывода номера строки матрицы, которой принадлежит очередной элемент, окно для вывода номера столбца, окно для ввода очередного элемента матрицы пользователем, кнопка для ввода элемента матрицы. Помимо этого, есть окно для отображения всей матрицы, и оно тоже может использоваться для ее ввода и последующего редактирования. И, наконец, есть кнопка для сохранения матрицы в файл.

Опишем действия, выполняемы после нажатия на кнопку ввода размерностей матрицы. Она называется pushbutton1.

% Executes on button press in pushbutton1. INPUT MATRIX DIMENSIONS

function pushbutton1_Callback(hObject, eventdata, handles)

S=sprintf('%g',1);

set(handles.edit4,'String',S);

S=sprintf('%g',1);

set(handles.edit5,'String',S);

end

После ее нажатия, выводятся в окошки для вывода номера строки и столбца очередного элемента матрицы, в каждое окно, по единице. Таким образом, интерфейс готов к вводу элемента матрицы, расположенного в первой строке и первом столбце.

Опишем действия, происходящие после нажатия на кнопку ввода элемента матрицы. Это кнопка pushbutton2.

%Executes on button press in pushbutton2. INPUT NEW MATRIX ELEMENT

function pushbutton2_Callback(hObject, eventdata, handles)

NumberRows=str2double(get(handles.edit1,'String'));

NumberColumns=str2double(get(handles.edit2,'String'));

i=str2double(get(handles.edit4,'String'));

j=str2double(get(handles.edit5,'String'));

Matrix=str2num(get(handles.edit6,'String')); 

if i<=NumberRows   

if j<=NumberColumns       

   Matrix(i,j)=str2double(get(handles.edit3,'String'));

   S=mat2str(Matrix);

   set(handles.edit6,'String',S);

   if j<NumberColumns

       b=j+1;

       a=i;

   else

       b=1;

       a=i+1;

   end

   S=sprintf('%g',a);

   set(handles.edit4,'String',S);

   S=sprintf('%g',b);

   set(handles.edit5,'String',S);       

   j=j+1;

   S=sprintf('%s',' ');

   set(handles.edit3,'String',S);

end

i=i+1;

end 

end

Сначала происходит считывание размерностей матрицы, а также номера строки и номера столбца вводимого элемента матрицы из окошек, где они указаны.

Затем матрица считывается из окна, где она видна вся (то есть те ее элементы, которые уже введены, если таковые вообще есть). Это делается функцией str2num, преобразующей строку в матрицу (содержимое окна считается строкой символов).

После этого, проверив, что размерность матрицы не превышена, считывается очередной элемент матрицы из окошка, где он указан.

Затем матрица, дополненная этим новым элементом, преобразуется в строку функцией mat2str.

После этого строка, состоящая из элементов матрицы, выводится в окно функцией set. Затем выполняются изменения значений переменных, соответствующих номеру строки и столбца следующего ожидаемого для ввода элемента матрицы.

После этого они выводятся в окна, где указаны номер строки и столбца ожидаемого элемента матрицы. Теперь все готово к очередному циклу ввода элемента матрицы. То есть осталось его впечатать в соответствующее окно и нажать кнопку.

Опишем действия, происходящие после нажатия на кнопку Сохранить. Это кнопка pushbutton3.

Сначала считываются размерности матрицы и сама матрица из соответствующих окон. Затем открывается окно выбора файла для записи туда сохраняемой матрицы. Это окно открывается функцией uiputfile. Ее аргументами являются предполагаемый по умолчанию путь/имя файла, а также вызов самого окна выбора, указанного как второй аргумент функции uiputfile.

% --- Executes on button press in pushbutton3. SAVE

function pushbutton3_Callback(hObject, eventdata, handles)

NumberRows=str2double(get(handles.edit1,'String'));

NumberColumns=str2double(get(handles.edit2,'String')); 

Matrix=str2num(get(handles.edit6,'String'));

%OPEN FILE WT

[f,p]=uiputfile('C:\MATLAB701\work\Gartman_ex2.txt','Окно выбора');

KudaZapisat=strcat(p,f);

f=fopen(KudaZapisat,'wt');

fprintf(f,'%d\t%d\n',NumberRows,NumberColumns);

%SAVE VALUES OF ARGUMENTS AND RESULTS

for i=1:NumberRows

   for j=1:NumberColumns

       fprintf(f,'%g\t',Matrix(i,j));

   end

   fprintf(f,'\n');

end

fclose(f);

 end

Возвращаемые значения этой функции это файл и путь к нему, выбранные пользователем в окне выбора. Поместим их в переменную KudaZapisat, предварительно соединив в одну строку символов функцией strcat.

Теперь передадим эту строку в функцию fopen, открывающую файл, а вторым аргементом ее будет ‘wt’, означающее, что файл открывается для записи. Функция fopen вернет в качестве возвращаемого значения переменную, к которой можно теперь обращаться как к файлу.

Передадим эту переменную в функцию fprintf, а также укажем ей аргументы для записи в файл и их формат (числовой). Также введем символ табуляции, чтобы они были расположены раздельно, и символ перевода строки, чтобы перевести строку после их записи.

Потом в цикле запишем в файл элементы матрицы, разделяя их табуляцией и по мере надобности переводя строку. Затем с помощью функции fclose закроем файл.

Пример 3. Рассмотрим задачу ввести экспериментальные данные и построить график (Рис.1.69).

В интерфейсе предусмотрим кнопки выбора, какие данные будут вводиться, а также окошко для ввода нового числа и рядом с ним окошки, подсказывающие его порядковый номер и к каким из трех наборов данных оно принадлежит.

Также предусмотрим три окна для строк данных, расположив их в том же порядке, как и кнопки выбора. Для непосредственно самого ввода числа предусмотрим кнопку с соответствующей надписью.

Для построения графика предусмотрим кнопку и окно графика.

Опишем, что происходит после нажатия на какую-либо из кнопок выбора, какую из серий данных будем вводить. Это кнопки pushbutton1, pushbutton2 и pushbutton3. При нажатии происходит следующее. Ставятся в окошки, показывающие порядковый номер вводимого элемента данных и номер строки (окна интерфейса), где эти данные отображаются, соответственно единица и порядковый номер от 1 до 3.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: