
Churilov_otchet_lr4
.docxМИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ
Федеральное государственное автономное образовательное учреждение высшего образования
«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ»
ИНСТИТУТ НЕПРЕРЫВНОГО И ДИСТАНЦИОННОГО ОБРАЗОВАНИЯ
Кафедра проблемно-ориентированных вычислительных комплексов
ОЦЕНКА
ПРЕПОДАВАТЕЛЬ
доцент _________________ А.В. Аграновский
подпись, дата
ЛАБОРАТОРНАЯ РАБОТА №3
Использование смешанных алгоритмов
по дисциплине «Технологии программирования»
РАБОТУ ВЫПОЛНИЛ
СТУДЕНТ ГР. Z9411 __________________ А.С. Чурилов
подпись, дата
Студенческий билет № 2019/3684
Санкт-Петербург 2021г.
Оглавление
1. Постановка задачи 3
2. Математическая модель 3
3. Описание разработанной программы 3
4. Описание тестового набора 6
5. Примеры работы программы 7
Вывод 7
Приложение 1. Листинг программного кода 8
Постановка задачи
Формулировка задания (задание №9): дана последовательность слов из строчных русских букв, разделенных пробелом; требуется вывести первое самое короткое слово.
Входным параметром является одна строка, состоящая из нескольких слов на русском языке, разделенных между собой пробелами.
Конечная цель программы: определение в исходной строке первого самого короткого слова и вывод результата на экран.
Математическая модель
Следует ввести счетчик букв в слове. В цикле, размер которого соответствует числу символов в строке, счетчик будет засчитывать каждую букву в слове, пока не встретит пробел, знак препинания или цифру. Как только встречается один из останавливающих символов, следует сравнить значение счетчика со значением, записанным в переменной для хранения размера самого короткого слова. Если слово, которое сейчас было «измерено», имеет меньше букв, то надо записать его длину в эту переменную. Кроме того, надо запомнить индекс начала этого слова. Он определяется вычитанием длины слова из текущего индекса.
После того, как очередное слово было обработано, надо сбросить счетчик букв на 0.
Поскольку нам известны начало самого короткого слова в строке и его длина, то можем вывести на экран это слово.
Описание разработанной программы
В качестве входного параметра имеем одну характеристику, которая является строкой, состоящей из строчных русских букв (см. табл. 1).
Таблица 1 – Перечень входных параметров |
||
Имя переменной |
Тип переменной |
Описание |
s |
string |
Строка, может состоять из русских букв, пробелов, знаков препинания и цифр |
Используемая переменная должна являться строкой, в которой присутствуют русские буквы. Ввод последовательности, состоящей только из пробелов, знаков препинания или цифр, или пустой строки будет считаться ошибочным.
В таблице 2 приведена выходная характеристика. Таковой является первое самое короткое слово, найденное с помощью алгоритма, описанного в разделе «Математическая модель».
Таблица 2 – Перечень выходных параметров |
||
Имя переменной |
Тип переменной |
Описание |
word |
string |
Слово, состоящее из русских букв |
Разработанный для данной задачи алгоритм содержит разветвленные и циклические конструкции (см. рис. 1).
|
Рисунок 1 – Блок-схема алгоритма |
Вся программа состоит из двух функций. В первой функции LAB4_VAR_19(s) осуществляется обработка переданной строки и поиск первого самого короткого слова. Во второй функции TEST_LAB4_VAR_19() прописан автоматический тестовый сценарий, позволяющий проанализировать поведение программы при граничных условиях и различных форматах входных и выходных данных.
Листинг программного кода приведен в Приложении 1.
Описание тестового набора
Изучим набор тестовых случаев (см. табл. 3).
Таблица 3 –Тестовый набор |
|||
Описание тестового случая |
Входные данные |
Ожидаемый результат |
Результат теста |
Введена пустая строка |
s = «» |
Ошибка. «Была введена пустая строка или последовательность символов, не содержащая букв!» |
Пройден |
Введена строка, не содержащая букв |
s= « 745 4 7 8 , 56 ! 7.» |
Ошибка. «Была введена пустая строка или последовательность символов, не содержащая букв!» |
Пройден |
Введена строка, содержащая два одинаково коротких слова, длиной в один символ |
s = «надо купить, хлеб и 12 молоко, а кефир .» |
word = «и» |
Пройден |
Введена строка, содержащая одно самое короткое слово, длиной в один символ |
s = «надо купить, хлеб 12 молоко, а кефир .» |
word = «а» |
Пройден |
Введена строка, содержащая одно самое короткое слово, длиной более одного символа |
s = «надоо купить, хлеб 12 молоко , кефир .» |
word = «хлеб» |
Пройден |
Введена строка, содержащая два одинаково коротких слова, длиной более одного символа |
s = «хочется купить молоко, яйца, кефир, хлеб.» |
word = «яйца» |
Пройден |
Ожидаемые результаты вычислялись вручную согласно описанной математической модели.
Примеры работы программы
Далее представлен пример работы написанной программы с подобранными тестовыми значениями (см. рис. 2).
|
Рисунок 2 – Пример работы программы |
Вывод
В ходе выполнения лабораторной работы была реализована программа определения первого самого короткого слова в заданной последовательности буквенных символов. Были получены практические навыки написания структурно продуманных программ на языке программирования Python3.
Было проведено тестирование созданной программы. Во всех случаях полученный результат совпал с ожидаемым, что позволяет сделать вывод о корректной работе созданной программы.
Приложение 1. Листинг программного кода
#основная программа
def LAB4_VAR_19(s):
min_st=100
min = min_st
ind = 0
count = 0
for i in range(len(s)):
if s[i].isalpha():
count += 1
else:
if count < min and count!=0:
min = count
ind = i - count
if count!=0:
count = 0
if min==min_st:
print("Была введена пустая строка или последовательность символов, не содержащая букв!")
return('Error!')
else:
return(s[ind:ind+min])
#автоматический тестовый сценарий
def TEST_LAB4_VAR_19():
err='Error!'
print('ТЕСТ №1: s="".')
s=''
word=LAB4_VAR_19(s)
if word==err:
print('Тест пройден!')
else:
print('Тест не пройден!')
print('\nТЕСТ №2: s=" 745 4 7 8 , 56 ! 7.".')
s=' 745 4 7 8 , 56 ! 7.'
word=LAB4_VAR_19(s)
if word==err:
print('Тест пройден!')
else:
print('Тест не пройден!')
print('\nТЕСТ №3: s="надо купить, хлеб и 12 молоко, а кефир .".')
s='надо купить, хлеб и 12 молоко, а кефир .'
word=LAB4_VAR_19(s)
print("Первым самым коротким словом является ", word)
if word=='и':
print('Тест пройден!')
else:
print('Тест не пройден!')
print('\nТЕСТ №4: s="надо купить, хлеб 12 молоко, а кефир .".')
s='надо купить, хлеб 12 молоко, а кефир .'
word=LAB4_VAR_19(s)
print("Первым самым коротким словом является ", word)
if word=='а':
print('Тест пройден!')
else:
print('Тест не пройден!')
print('\nТЕСТ №5: s="надоо купить, хлеб 12 молоко , кефир .".')
s='надоо купить, хлеб 12 молоко , кефир .'
word=LAB4_VAR_19(s)
print("Первым самым коротким словом является ", word)
if word=='хлеб':
print('Тест пройден!')
else:
print('Тест не пройден!')
print('\nТЕСТ №6: s="хочется купить молоко, яйца, кефир, хлеб.".')
s='хочется купить молоко, яйца, кефир, хлеб.'
word=LAB4_VAR_19(s)
print("Первым самым коротким словом является ", word)
if word=='яйца':
print('Тест пройден!')
else:
print('Тест не пройден!')
TEST_LAB4_VAR_19() #вызов тестовой функции