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

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

28.07.2016, 17:02. Показов 4226. Ответов 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 сносит ячейку совсем)
Миниатюры
GUI. Проверка на ввод массива или «Защита от дурака»  
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.07.2016, 17:02
Ответы с готовыми решениями:

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

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

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

10
370 / 133 / 44
Регистрация: 05.02.2015
Сообщений: 901
28.07.2016, 20:19
Лучший ответ Сообщение было отмечено 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  [ТС]
minore, спасибо за ответ, с Т-кой разобрался, ошибку при наличии "левых символов и букв" выдаёт)

Цитата Сообщение от minore Посмотреть сообщение
что вы называете "ячейка ввода"? если текстовое поле, то я обычно чищу так
Да, это поле Edit Text, но я немного не понял как
Matlab M
1
 t.String ='';
пользоваться, покрутил так и этак, что-то не работает... Это вы хотите этой командой присвоить String-у пробел, а вместо t нужно написать тэг "очищаемого" текстового поля? Или как её исп.?
0
370 / 133 / 44
Регистрация: 05.02.2015
Сообщений: 901
28.07.2016, 21:48
Разумеется, 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  [ТС]
Цитата Сообщение от minore Посмотреть сообщение
насчет ошибки: сейчас матлаба под рукой нет, но думаю, что она у вас возникает при выполнении строки:
Всё хорошо, я говорил про ошибку, которая выскакивает в окошке, когда криво задаёшь входные данные, чего я и добивался)
А вот очистка не работает, при этом ни ошибок ни действий не видно (при большой и маленькой S):
Matlab M
1
2
3
4
function btnClear_Callback(hObject, eventdata, handles)
cla
edt_pred.string='';
edt_predel.String='';
Кнопка задана верно, ведь cla срабатывает...
0
370 / 133 / 44
Регистрация: 05.02.2015
Сообщений: 901
28.07.2016, 22:21
до matlab доберусь, посмотрю что там. удивительно, что и при string и при String работает, как вы говорите, одинаково, так как метод либо string, либо String. вообщем, чуть позже отпишусь.
0
1 / 1 / 0
Регистрация: 26.07.2016
Сообщений: 12
29.07.2016, 00:21  [ТС]
Цитата Сообщение от minore Посмотреть сообщение
чуть позже отпишусь.
Ждём-с
0
370 / 133 / 44
Регистрация: 05.02.2015
Сообщений: 901
29.07.2016, 00:58
вот сварганил.
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  [ТС]
Хм… minore,у вас это как я понимаю работает, но у меня при нажатии на кнопку исчезает лишь надпись с самой кнопки , а “ первоначальный вариант“ остаётся без изменений, не исчезают и цифры если стереть “ первоначальный вариант“ и записать их туда.
Может это от версии МатЛаба зависит? У меня 7-ка.

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

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

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

Visual Basic
1
2
3
4
5
With h
        .color = 'red'
        .fontsize = 12
        .string = 'sometext'
End With
0
370 / 133 / 44
Регистрация: 05.02.2015
Сообщений: 901
29.07.2016, 10:31
вот всегда не понимал, зачем нужны функции 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.07.2016, 10:31
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru