Форум программистов, компьютерный форум, киберфорум
Matlab
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
1 / 1 / 0
Регистрация: 26.07.2016
Сообщений: 12
1

GUI. Проверка на ввод массива или «Защита от дурака»

28.07.2016, 17:02. Просмотров 1954. Ответов 10
Метки нет (Все метки)

Доброго времени суток! Осталось внести в приложение последние штрихи – проверку вводимых данных.
Для понимая вот основная часть программы:
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function btn_calc_Callback(src,evt,handles)
 
str=get(handles.edt_pred,'String');
T=str2num(str);
 
str=get(handles.edt_predel,'String');
x0=str2num(str);
 
if isempty(x0);
       errordlg('Ошибка предела интегрирования ','ErroR','on');
      return
else
    
funstr=get(handles.edt_fun,'String')
funstr1=strcat('[',funstr,']')
fk=inline(funstr1, 't','x');
  
[t,x]=ode45(fk,T,x0);
 
plot(t,x)
xlabel('x')
ylabel('y')
end
Как вы уже заметили, кое-какую защиту на переменную x0 я уже прикрутил (предложение по модернизации приветствуются) , осталось проверить массив (переменная T), не подскажите с помощью какой фк. это можно сделать ? Защита по размеру типо:
Matlab M
1
2
3
4
5
6
[qe qr]=size(T);
if qe~=1|qr~=1;
    errordlg('текст ошибки','Error','on');
    
    return 
end
Тут не подходит, ведь Т не имеет опр. размера и всегда зависит от ввод. данных для примера вот значение Т при входных значениях как на скрине:
Matlab M
1
2
3
T =
 
     0     1     2     3     4     5
п.с. подскажите бонусом команду, которая будет чистить ячейки ввода, ото cla реагирует только на график, а delete сносит ячейку совсем)
0
Миниатюры
GUI. Проверка на ввод массива или «Защита от дурака»  
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.07.2016, 17:02
Ответы с готовыми решениями:

Проверка корректности ввода данных или "защита от дурака"
Нужно во всех формах реализовать контроль правилньости ввода данных. Не подскажете на примере, как...

Защита от дурака. Ввод данных типа int с клавиатуры.
Данные типа int вводятся с клавиатуры. нужно поставить защиту от дурака. Полазил на форуме нашёл...

Ввод/вывод имени и пути файла, а также защита от дурака
Доброго времени суток, господа. Что-то я либо некорректно формулирую запрос в google, либо просто...

Защита от дурака при вводе элементов массива
помоги, пожалуйста, написать защиту от дурака(после 38 и после 42 строк) #include <stdio.h>...

10
271 / 130 / 44
Регистрация: 05.02.2015
Сообщений: 834
28.07.2016, 20:19 2
Лучший ответ Сообщение было отмечено CIHXPOH как решение

Решение

Здравствуйте. насчет x0:
1) не надо проверять , а вдруг x0 - это массив? например:
Matlab M
1
x0 =[1 2 3 4 5]
если так, то вместо вашей проверки лучше написать:
Matlab M
1
2
3
 
if length(x0) ~=1
% ошибка
Добавлено через 14 минут
далее, x0 может принимать любое значение, или значение только из определенного диапазона, зависящего от t?
теперь по поводу t. насколько я понимаю t - это одномерный массив, а не матрица? тогда вместо size достаточно использовать length? а теперь самое интересное: сформулируйте на русском языке какое t правильное, а какое не правильное? пока что я вижу, что вам вместо знака неравенства вам нужно использовать знак меньше:
Matlab M
1
2
if length(t) < 1
% ошибка
ну и последнее: что вы называете "ячейка ввода"? если текстовое поле, то я обычно чищу так:
Matlab M
1
t.String ='';
1
1 / 1 / 0
Регистрация: 26.07.2016
Сообщений: 12
28.07.2016, 20:57  [ТС] 3
minore, спасибо за ответ, с Т-кой разобрался, ошибку при наличии "левых символов и букв" выдаёт)

Цитата Сообщение от minore Посмотреть сообщение
что вы называете "ячейка ввода"? если текстовое поле, то я обычно чищу так
Да, это поле Edit Text, но я немного не понял как
Matlab M
1
 t.String ='';
пользоваться, покрутил так и этак, что-то не работает... Это вы хотите этой командой присвоить String-у пробел, а вместо t нужно написать тэг "очищаемого" текстового поля? Или как её исп.?
0
271 / 130 / 44
Регистрация: 05.02.2015
Сообщений: 834
28.07.2016, 21:48 4
Разумеется, t - это тег текстового поля, только я присваиваю не пробел, а пустую строку. пустая строка пишется как ''. я честно говоря не помню, String с большой или с маленькой буквы пишется, по-моему с большой.
насчет ошибки: сейчас матлаба под рукой нет, но думаю, что она у вас возникает при выполнении строки:
Matlab M
1
t = str2mun(...)
если так, то заключите ее в блок try catch:
Matlab M
1
2
3
4
5
try
t = str2num(a) % ваша переменная не помню, как называется.
catch 
t =[]
end
через пол часа примерно смогу проверить свое предположение.
0
1 / 1 / 0
Регистрация: 26.07.2016
Сообщений: 12
28.07.2016, 22:01  [ТС] 5
Цитата Сообщение от minore Посмотреть сообщение
насчет ошибки: сейчас матлаба под рукой нет, но думаю, что она у вас возникает при выполнении строки:
Всё хорошо, я говорил про ошибку, которая выскакивает в окошке, когда криво задаёшь входные данные, чего я и добивался)
А вот очистка не работает, при этом ни ошибок ни действий не видно (при большой и маленькой S):
Matlab M
1
2
3
4
function btnClear_Callback(hObject, eventdata, handles)
cla
edt_pred.string='';
edt_predel.String='';
Кнопка задана верно, ведь cla срабатывает...
0
271 / 130 / 44
Регистрация: 05.02.2015
Сообщений: 834
28.07.2016, 22:21 6
до matlab доберусь, посмотрю что там. удивительно, что и при string и при String работает, как вы говорите, одинаково, так как метод либо string, либо String. вообщем, чуть позже отпишусь.
0
1 / 1 / 0
Регистрация: 26.07.2016
Сообщений: 12
29.07.2016, 00:21  [ТС] 7
Цитата Сообщение от minore Посмотреть сообщение
чуть позже отпишусь.
Ждём-с
0
271 / 130 / 44
Регистрация: 05.02.2015
Сообщений: 834
29.07.2016, 00:58 8
вот сварганил.
Matlab M
1
2
3
4
5
6
7
8
9
10
11
function inc_int
f = figure('MenuBar','none', 'Numbertitle', 'off', 'Name', 'визуализация показаний', 'tag', 'program_')
btn = uicontrol('Style', 'pushbutton', 'String', 'смена надписи', 'Position', [20 20 50 20], 'Parent', f, 'tag', 'exit1', 'Callback', @e_xit)
btl = uicontrol('Style', 'Edit', 'String', 'первоначальный вариант', 'Position', [100 100 50 20], 'Parent', f, 'tag', 'clear1')
uicontrol(btl)
function e_xit(src, evt)
handles = guihandles(src);
handles.clear1.String =''
uicontrol(handles.clear1)
end
end
0
1 / 1 / 0
Регистрация: 26.07.2016
Сообщений: 12
29.07.2016, 09:29  [ТС] 9
Хм… minore,у вас это как я понимаю работает, но у меня при нажатии на кнопку исчезает лишь надпись с самой кнопки , а “ первоначальный вариант“ остаётся без изменений, не исчезают и цифры если стереть “ первоначальный вариант“ и записать их туда.
Может это от версии МатЛаба зависит? У меня 7-ка.

Добавлено через 2 часа 41 минуту
Ответ найден, нужно было делать так :
Matlab M
1
set(handles.edt_pred,'String ','' )
1
40 / 26 / 6
Регистрация: 16.02.2011
Сообщений: 134
29.07.2016, 10:00 10
Цитата Сообщение от minore Посмотреть сообщение
Разумеется, t - это тег текстового поля
с тэгом у меня не получилось, с дескриптором - да

а как можно изменить сразу несколько свойств объекта?

в vba аналог такой:

Visual Basic
1
2
3
4
5
With h
        .color = 'red'
        .fontsize = 12
        .string = 'sometext'
End With
0
271 / 130 / 44
Регистрация: 05.02.2015
Сообщений: 834
29.07.2016, 10:31 11
вот всегда не понимал, зачем нужны функции get ии set, если все можно без них сделать. оказывается видимо, только в новых версиях (у меня 2014 b)

Добавлено через 21 минуту
ну также через set:
Matlab M
1
2
btl = uicontrol('Style', 'Edit', 'String', 'первоначальный вариант', 'Position', [100 100 50 20], 'Parent', f, 'tag', 'clear1')
set(btl, 'string', 'ura', 'position', [1 3 5 7])
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.07.2016, 10:31

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Ввод целочисленных чисел ("защита от дурака")
Пользователь вводит целое число, но если введённое число или символ не целочисленное - то программа...

Защита от дурака, на ввод "мусора" в int
В общем, пытался сделать защиту на ввод неверного значения. Т.е чтобы вводилось значение не более 5...

GUI: Проверка на ввод некорректных данных
как сделать чтобы в поле edit можно было вводить только числовые значения? при вводи букв и т.п....

Объектно-ориентированное программирование в MATLAB GUI и проверка на ввод некорректных данных
Здравствуйте! Решил научиться писать программы на MATLAB с использованием MATLAB GUI и среды...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.