Модуль 5 - Школа анализа инженерных данных
Логика инженерного приложения — домашнее задание
Цель: научиться строить логику инженерного приложения: проверять наличие файлов, контролировать структуру данных, обрабатывать исключения, классифицировать состояния и формировать итоговое заключение о состоянии оборудования.
Данные:
-
Bearing.mat— эталонные данные с акустическими сигналами подшипника. -
Подшипник_1.wav— корректный аудиофайл для диагностики. -
— заведомо отсутствующий файл (используется для проверки обработки ошибок).Подшипник_0.wav -
Подшипник_.wav— заведомо некорректный файл (используется в проверке обработки исключений). -
Подшипник_чд.wav— файл с частотой дискретизации, отличной от ожидаемой.
Формат сдачи: В проверочную систему Etude нужно вставить код из секции с отметкой ✍️.
Важно: Все задания выполняются последовательно в одном скрипте. Каждое последующее задание использует переменные и функции, созданные в предыдущих заданиях. Перед выполнением заданий обязательно запустите подготовительную ячейку. Проверочные значения в заданиях подобраны так, чтобы учитывать не только корректную работу, но и поведение при ошибках. Некоторые файлы, упомянутые в заданиях, отсутствуют намеренно — это часть проверки логики обработки исключительных ситуаций. Сообщения вида «Файл data/Подшипник_0.wav не найден» не являются ошибкой скрипта, а представляют собой ожидаемый результат работы функции проверки данных.
⚙️ Подготовительный код
# ⚙️ ПОДГОТОВИТЕЛЬНЫЙ КОД
Pkg.add(["MAT", "WAV"])
cd( @__DIR__ )
# Выполните эту ячейку перед началом работы
✏️ Задание 1
Напишите функцию проверить_файл, которая принимает путь к файлу и возвращает true, если файл существует, и false в противном случае.
Подсказка:
-
Используйте встроенную функцию
isfile, которая возвращает логическое значение. -
Функция принимает один аргумент типа
Stringи возвращает результат проверки.
function проверить_файл(файл)
return # здесь напишите ваш код
end
В проверочной системе используется следующий код для проверки правильности выполнения задания:
ф = "data/Bearing.mat"
print(Int64(проверить_файл(ф)*length(ф)^2))
Ожидаемый вывод программы: 256
✏️ Задание 2
Напишите функцию обработка_исключений, которая принимает путь к аудиофайлу и пытается прочитать его через WAV.wavread. Если чтение успешно, функция возвращает true. Если возникает ошибка, функция возвращает false.
Подсказка:
-
Используйте конструкцию
try/catch. В блокеtryвызовитеWAV.wavread(файл_данные)и вернитеtrue. В блокеcatchвернитеfalse. -
Переменная
eпослеcatchнеобязательна, но её можно оставить для совместимости со стандартным синтаксисом. -
Задание проверяет поведение функции на двух файлах: один отсутствует, другой существует. Это нормально и ожидаемо — проверочный код учитывает оба случая.
using WAV
function обработка_исключений(файл_данные)
try
сигн, чд = # здесь напишите ваш код
return # здесь напишите ваш код
catch e
return # здесь напишите ваш код
end
end
В проверочной системе используется следующий код для проверки правильности выполнения задания:
a = "data/Подшипник_0.wav"
b = "data/Подшипник_1.wav"
print(Int64((length(a)-(!обработка_исключений("data/Подшипник_0.wav")+
обработка_исключений("data/Подшипник_1.wav")))^2))
Ожидаемый вывод программы: 324
✏️ Задание 3
Напишите функцию проверить_структуру, которая принимает словарь подшипник и возвращает true, если его ключи совпадают с ожидаемым списком ["normal", "roller", "inner", "outer"], и false в противном случае.
Подсказка:
-
Получите список фактических ключей словаря через
collect(keys(подшипник)). -
Сравните полученный вектор с ожидаемым через
==.
using MAT
function проверить_структуру(подшипник)
ожидаемые = # здесь напишите ваш код
фактические = # здесь напишите ваш код
return # здесь напишите ваш код
end
В проверочной системе используется следующий код для проверки правильности выполнения задания:
a = "data/Bearing_0.mat"
b = "data/Bearing.mat"
print(Int64((-(проверить_структуру(matread(a))+
проверить_структуру(matread(b)))+length(a)).^3))
Ожидаемый вывод программы: 4913
✏️ Задание 4
Напишите функцию классифицировать, которая принимает процент износа и возвращает текстовую категорию. Границы категорий:
-
до 10 процентов — идеальное состояние;
-
до 20 процентов — хорошее состояние;
-
до 50 процентов — средний износ;
-
до 75 процентов — сильный износ;
-
свыше 75 процентов — критический износ.
Подсказка:
-
Используйте конструкцию
if / elseif / elseс пятью ветвями. -
Возвращаемые строки должны в точности совпадать с указанными ниже, включая цветовые маркеры и пробелы. Эти сообщения можно скопировать прямо из этого текста:
"🟢 Идеальное состояние"
"🟢 Хорошее состояние"
"🟡 Средний износ"
"🟠 Сильный износ"
"🔴 Критический износ" -
Точное совпадение важно, потому что проверочный скрипт использует числовые коды символов. Любое отклонение в тексте, лишний пробел или другой эмодзи приведёт к несовпадению проверочного числа.
function классифицировать(процент)
# здесь напишите ваш код
# ...
# ...
# ...
# ...
# ...
# ...
# ...
# ...
# ...
# здесь напишите ваш код
end
В проверочной системе используется следующий код для проверки правильности выполнения задания:
print(reinterpret(Int64,
sum(collect(codeunits(классифицировать(8))))+
sum(collect(codeunits(классифицировать(16))))+
sum(collect(codeunits(классифицировать(32))))+
sum(collect(codeunits(классифицировать(64))))+
sum(collect(codeunits(классифицировать(88))))))
Ожидаемый вывод программы: 31812
✏️ Задание 5
Напишите функцию проверка_данных, которая объединяет все проверки: наличие файла, корректность чтения WAV, совпадение частоты дискретизации с ожидаемой 10000 Гц. В зависимости от результата функция возвращает одну из четырёх строк:
-
"Данные готовы к диагностике"— если все проверки пройдены; -
"Частота дискретизации аудио не соответствует модели."— если частота отличается; -
"Файл некорректен."— если файл не читается; -
"Файл $файл_данные не найден."— если файла нет.
Вызовите функцию проверка_данных для файла "data/Подшипник_0.wav" и сохраните результат в переменную ans5.
Подсказка:
-
В первом условии
if, проверьте существования файла (аналогично, как в Задании 1); -
Внутри блока, который выполняется если файл существует, используйте
try/catchдля чтения WAV. В блокеcatchустановитекорректность = false; -
После
try/catchпроверьтекорректность. Если она ложна, должно выводиться сообщение «Файл некорректен.»; -
Если
корректностьистинна, должно происходить сравнение частот черезInt64(чд) == 10000; -
Используйте конструкцию
if / elseif / elseдля выбора строки результата; -
Обратите внимание на отступы, они могут подсказать расположение служебных слов;
-
Не изменяйте тексты возвращаемых сообщений (например:
ans = "Данные готовы к диагностике", и т.д.), это важно для проверки; -
Обратите внимание: сообщение «Файл data/Подшипник_0.wav не найден.» в выводе — это нормально. Файл
Подшипник_0.wavотсутствует намеренно, чтобы проверить работу ветки обработки отсутствующего файла.
using WAV
function проверка_данных(файл_данные)
чд = []
корректность = true
if # здесь напишите ваш код
# здесь напишите ваш код (служебное слово)
сигн, чд = # здесь напишите ваш код
# здесь напишите ваш код (служебное слово и переменная)
корректность = # здесь напишите ваш код
# здесь напишите ваш код (служебное слово)
if # здесь напишите ваш код
if Int64(чд) == 10000
ans = "Данные готовы к диагностике"
# здесь напишите ваш код (служебное слово)
ans = "Частота дискретизации аудио не соответствует модели."
# здесь напишите ваш код (служебное слово)
# здесь напишите ваш код (служебное слово)
ans = "Файл некорректен."
# здесь напишите ваш код (служебное слово)
# здесь напишите ваш код (служебное слово)
ans = "Файл $файл_данные не найден."
# здесь напишите ваш код (служебное слово)
return ans
end
ans5 = # здесь напишите ваш код
В проверочной системе используется следующий код для проверки правильности выполнения задания:
print(reinterpret(Int64, sum(collect(codeunits(ans5)))))
Ожидаемый вывод программы: 9272
✏️ Задание 6
Вызовите функцию проверка_данных для файла "data/Подшипник_.wav" и сохраните результат в переменную ans6.
Подсказка:
- Ожидаемый результат — сообщение о том, что файл некорректен.
ans6 = # здесь напишите ваш код
В проверочной системе используется следующий код для проверки правильности выполнения задания:
print(reinterpret(Int64, sum(collect(codeunits(ans6)))))
Ожидаемый вывод программы: 5782
✏️ Задание 7
Вызовите функцию проверка_данных для файла "data/Подшипник_чд.wav" и сохраните результат в переменную ans7.
Подсказка:
-
Этот файл существует, но его частота дискретизации отличается от ожидаемой 10000 Гц.
-
Ожидаемый результат — сообщение о несоответствии частоты.
ans7 = # здесь напишите ваш код
В проверочной системе используется следующий код для проверки правильности выполнения задания:
print(reinterpret(Int64, sum(collect(codeunits(ans7)))))
Ожидаемый вывод программы: 17398
✏️ Задание 8
Вызовите функцию проверка_данных для файла "data/Подшипник_1.wav" и сохраните результат в переменную ans8.
Подсказка:
-
Этот файл существует и имеет правильную частоту дискретизации.
-
Ожидаемый результат — сообщение о готовности данных к диагностике.
ans8 = # здесь напишите ваш код
В проверочной системе используется следующий код для проверки правильности выполнения задания:
print(reinterpret(Int64, sum(collect(codeunits(ans8)))))
Ожидаемый вывод программы: 9215
Заключение
Вы научились строить логику инженерного приложения: проверять наличие файлов, контролировать структуру данных, обрабатывать исключения через try/catch, классифицировать состояния и формировать итоговое заключение о состоянии оборудования. Все проверки в заданиях работают не только на корректных данных, но и на ошибочных ситуациях: отсутствующий файл, повреждённый файл, неверная частота дискретизации. Это позволяет создавать надёжные промышленные приложения, устойчивые к ошибкам входных данных, что особенно важно при работе с реальным оборудованием, где сбои и некорректные записи встречаются регулярно. Поздравляем с успешным завершением Школы анализа инженерных данных!