Форум программистов, компьютерный форум, киберфорум
Matlab
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
Vergil
43 / 37 / 17
Регистрация: 11.11.2009
Сообщений: 246
1

Найти другой вектор, в котором только не повторяющиеся элементы первого вектора - как реализовать проверку на буквы?

19.04.2014, 18:03. Просмотров 1263. Ответов 3
Метки нет (Все метки)

Написал простейшую м-функцию.
Дан вектор и нужно найти другой вектор, в котором только не повторяющиеся элементы первого вектора. Но, нужно еще написать обработчик ошибок. Т.е. допустим в первый вектор затесалось число или он пустой, нужно вывести суть ошибки и выйти из функции.
Проверку вектора на заполненность я могу сделать, а вот на буквы нет. Точнее я могу элемент разобрать на простейшие части(например 12B5 на 1; 2; B; 5 и каждую часть сравнивать с числами от 0 до 9). Но есть ли метод попроще? И как вывести, что я нашел ошибку и выйти из функции, если проверка будет проводится в цикле?

Добавлено через 1 час 18 минут
Обработку ошибки сделал так if (isempty(X)) error('массив не должен быть пустым')
сообщение простоте через disp('sadasd')
Возможно ли реализовать проверку на буквы?
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.04.2014, 18:03
Ответы с готовыми решениями:

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


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

Или воспользуйтесь поиском по форуму:
3
kav0221
114 / 107 / 30
Регистрация: 29.03.2012
Сообщений: 240
19.04.2014, 18:51 2
а можно увидеть код целиком? Гораздо проще будет помочь
0
Vergil
43 / 37 / 17
Регистрация: 11.11.2009
Сообщений: 246
19.04.2014, 21:43  [ТС] 3
Ой, я дурак. В матлабе нельзя создать вектор с числом просто так. Это еще нужно постараться.
X=[12b, 2,4]
|
Error: Unexpected MATLAB expression.
Вот такое выдает. Прошу прощения, первый день просто за матлабом.
0
Vergil
43 / 37 / 17
Регистрация: 11.11.2009
Сообщений: 246
30.04.2014, 15:13  [ТС] 4
задание
Кликните здесь для просмотра всего текста

1) Научиться работать с редактором m-файлов среды MATLAB.
2) Изучить основные операторы среды MATLAB для формирования m-функций.
3) Разработать алгоритм, решающий задание по варианту.
4) Создать m-функцию и, если необходимо, внутренние функции, поместить в неё реализацию разработанного алгоритма.
5) Главная m-функция должна содержать входные (например, массив X) и выходные (например, массив Y) параметры.
6) M-функция(и) должна(ы) содержать все необходимые проверки для исключения ошибок, возникающих при вводе пользователем некорректных входных данных (например, пустой массив X).

Дан массив целых чисел X=(x1,x2,...,xn). Сформировать массив Y=(y1,y2,...,ym), поместив в него в порядке убывания все различные (неповторяющиеся) числа, входящие в массив X. Определить, насколько отличаются средние арифметические значения элементов массивов X и Y.

код
Кликните здесь для просмотра всего текста
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
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
function [dSA, Y]=ma(X)
%вводить в виде ma(X), где X - исходный вектор
%Выводит в порядке убывания все различные(неповторяющиеся) числа,
% входящие в массив находящийся в скобках функции, а так же разницу 
% между средним арифмитическим получившегося и заданного массивов
% Массив не должен быть пустым
if (isempty(X)) error('массив не должен быть пустым') %{проверка пустой ли масив.
%В случае, если пустой выдает ошибку и прекращает работу функции
end % окончание условия
dSA2=0;
dSA1=0;
Y=X;
for a = unique(Y) % перебираем все уникальные элементы
  if sum(Y==a)>1 % если число более 1 раза (показывает сколько элементов
    Y(Y==a) = [];% удаляем все числа
  end
end
 
Y = sort(Y, 'descend'); % сортировка вектора в порятке убывания
 
for i=1:length(X)
dSA2=dSA2+X(i);    % сумма элементов заданного массива
end
 
for i=1:length(Y)
dSA1=dSA1+Y(i);    
end
 
dSA2=dSA2/length(X); % среднее арифмитическое заданного массива
dSA1=dSA1/length(Y); % среднее арифмитическое полученного массива
% ниже сравниваются средние арифмитические и в зависимости от результата
% выдается сообщение
if (dSA2>dSA1)
    disp('среднее арифмитическое заданного массива(X) больше среднего арифметического получившегося(Y) массива на') 
    dSA=dSA2-dSA1; 
    disp('Если вы видите это сообщение, то скинте, пожалуйста, вводные данные, которые вы вели, ибо автор предполагает, что такой вариант не может произойти')
end
 
if (dSA2<dSA1) 
    disp('среднее арифмитическое получившегося(Y) массива больше среднего арифметического заданного(X) массива на')
    dSA=dSA1-dSA2;
end
 
if (dSA2==dSA1)
    disp('среднее арифмитическое получившегося (Y) массива равно среднему арифметическому заданного(X) массива')
    dSA=dSA1-dSA2;
end
end


вызывать так
[любая переменная, которая будет обозначать разницу, (то, что будет выводить массив)]=ma(ваш массив);
пример [dSA, Y]=ma(x);

так же прикрепляю рабочий m-файл, но там есть кое-что лишнее, и функция вызывается [dSA, Y]=ma(x,0);
Если вдруг вам пригодилась данная функция(например, ученики следующего УИТСа), то поблагодарите пользователя Зосима
https://www.cyberforum.ru/post5469542.html
0
Ответ Создать тему
Опции темы

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