уыаы. Отчет по 3 лабораторной(ластовый) 1. Работа с циклами
Скачать 263.5 Kb.
|
Департамент образования города Москвы Государственное бюджетное профессиональное образовательное учреждение Колледж связи № 54 имени П.М. Вострухина ЛАБОРАТОРНАЯ РАБОТА №_3_ Тема:«Работа с циклами» Обучающийся группы___1ИСП11-8____________ Савельев Иван Сергеевич Специальность: 09.02.07 Информационные системы и программирование Преподаватель _____________________/А.С.Сидельников/ Дата 27.03.2019____________________ Москва 2019 СодержаниеСодержание 2 Введение 3 1. Теоретический раздел 4 2. Практический раздел 10 2.1 Инструкция пользователя 10 2.2. Листинг кода: 18 Заключение 34 Список литературы 35 ВведениеДля выполнения данной лабораторной работы я использовал программу Microsoft Visual Basic версии 6.0. В этой работе мы, используем переменные с различными циклами. В данной работе у нас присутствует 7 кнопок (FOR; DWL; DUL; DLW; DLU; CLEAR; END). Также есть 3 поля для ввода («Ввод только цифр»; «Ввод только букв»; «Ввод только цифр или букв»; «Результат FOR»; «Результат DWL»; «Результат DUL»; «Результат DLW»; «Результат DLU»). В первом текстовом поле мы записываем количество итераций цикла. Во втором текстовом поле мы записываем текст для использования в цикле. В третьем текстовом поле мы записываем количество пробелов между в случае ввода некорректной информации программа должна выводить на экран окно с информацией об ошибке, а также стирать все информацию записанную в этом окне. 1. Теоретический разделВ данной программе мы используем следующие методы и функции: Циклы: For – цикл, который работает независимо от условия, Цикл - это алгоритмическая структура, при помощи которой реализуется многократное повторение блоков операторов. Цикл For:Next. Используется в том случае, когда количество повторов заданного блока операторов известно заранее. Данная конструкция выглядит следующим образом: For счетчик = начальное значение To конечное значение [Step шаг] Операторы1 [Exit For] Операторы2 Next [счетчик] Условный оператор: If….Then - выражение проверяет одно или несколько условий в зависимости от результата выполняет различные действия. Виды: Блочная: If condition, Then Command1 Command2 ... Command Else Command01 Command02 ... Command End if Однострочная: If condition Then command1 Else command2 Функция IsNumeric проверяет, является ли значение данного выражения числом. Функция способна обрабатывать данные любого типа без генерации ошибки. Возвращает значение типа Boolean, показывающее, имеет ли выражение числовое значение. Функция IsNumeric возвращает True, если выражение имеет числовое значение; в противном случае возвращается False.IsNumeric возвращает False, если выражение является выражением даты Dim MyVar, MyCheck MyVar = "53" MyCheck = IsNumeric(MyVar) MyVar = "45 Help" MyCheck = IsNumeric(MyVar) Функция Mid(Middle) используется для считывания заданного числа символов или байт подряд от заданной позиции в строке слева направо. Нумерация символов в строке всегда начинается с единицы. Для определения числа символов в строке следует использовать функцию . Dim Mystring,retval Mystring="колобок" retval=Mid(Mystring,3,3) Функция Len вычисляет число символов в строке или размер заданной переменной. Из двух возможных аргументов должен быть указан только один. Для определяемых пользователем типов Len возвращает размер, который требуется для записи переменной в файл Описание Функция возвращает количество символов указанной строки, либо размер указанной переменной в байтах. Синтаксис Len(Expression) Параметры Expression - любое допустимое строковое выражение, либо переменная. Возвращаемые значения Возвращает значение типа Variant (Long). Если значение аргумента равно Null, функция возвращает Null. Цикл For…Next является самой старой и самой простой циклической конструкцией Basic. Фрагмент блок-схемы, который реализует оператор For…Next, можно представить следующим образом: Cинтаксис оператораFor…Next следующий: For Cчетчик=Начальное значение To Конечное значение [Step шаг] Операторы блока S Next [счетчик] Оператор цикла DO…LOOP С помощью оператора Do…Loop на языке Visual Basic можно реализовать цикл с предусловием и цикл с послеусловием. Формат цикла с предусловием следующий: Do [{While/Until} условие] [Операторы блока S] Loop Формат цикла с послеусловием следующий: Do [Операторы блока S] Loop [{While/Until} условие] Цикл с предусловием никогда не выполняется в случае невыполнения условия. Цикл с послеусловием выполняется обязательно как минимум один раз, независимо от того, выполняется условие или нет. Проверка условий выхода из цикла проводится с помощью ключевых слов While или Until. Эти слова придают одному и тому же условию противоположный смысл. Например, в цикле: A = 1 Do A = A + 1 Print “Visual Basic” Loop While A < 11 Цикл Do While ... используется для выполнения операторов, пока не будет выполнено определенное условие. Оператор Do ... Loop While сначала выполняет операторы, а затем проверяет условие после каждого выполнения. Разновидности циклов в Visual Basic Кроме структур принятия решений, существуют еще одна разновидность управляющих конструкций, называемая циклом. Цикл - это алгоритмическая структура, при помощи которой реализуется многократное повторение блоков операторов. В языке Visual Basic существует три основных вида циклов, которые реализуется при помощи конструкций For:Next, Do:Loop и While:Wend. Цикл For:Next. Используется в том случае, когда количество повторов заданного блока операторов известно заранее. Данная конструкция выглядит следующим образом: For счетчик = начальное значение To конечное значение [Step шаг] Операторы1 [Exit For] Операторы2 Next [счетчик] Когда приведенные операторы выполняются первый раз, то переменной счетчику присваивается начальное значение, после чего возможны два варианта действий. Если в результате проверки условия счетчик > конечное значение было получено значение True, то происходит завершение цикла, при этом блоки операторы1 и операторы2 ни разу не выполняются. С другой стороны, если результатом проверки условия является False, то в этом случае блоки операторов выполняются первый раз, после чего происходит переход на начало цикла. Далее значение переменной-счетчика увеличивается на шаг, расположенный после ключевого слова Step (в случае его отсутствия устанавливается шаг = 1). После этого снова проверяется истинность условия счетчик > конечное значение и т.д., окончание цикла происходит в тот момент, когда результатом данной проверки станет значение True. Зачастую бывает необходимо "аварийно" завершать работу цикла при выполнении какого-либо дополнительного условия. В этом случае внутри цикла следует использовать служебное словосочетание Exit:For, которое обычно располагают в управляющей конструкции, например: If условие Then Exit For Если результатом проверки условия будет значение True, то выполнение цикла будет прекращено, причем блок операторы1 будет выполнен очередной раз, а блок операоры2 - нет. Цикл Do:Loop. Применяется в том случае, когда число повторений операторов тела цикла заранее неизвестно. Существуют четыре разновидности данной конструкции. При использовании первых двух цикл либо выполнится много раз, либо не выполнится вообще. Do Until условие Операторы Loop Если результатом проверки условия является значение False, то блок операторы выполняется, иначе осуществляется переход на оператор, расположенный после служебного слова Loop. С другой стороны, если первая проверка условия даст результат True, то цикл не выполнится ни разу. Do While условие Операторы Loop Если условие истинно, то происходит выполнение блока операторы, если же ложно, то есть результатом проверки является False, то цикл не выполниться ни разу. В случае использования последних двух конструкций цикл будет выполнен хотя бы один раз. Do Операторы Loop Until условие Блок операторы выполняется до тех пор, пока результатом проверки условия является значение False, иначе выполнение цикла заканчивается. Do Операторы Loop While условие В случае ложности условия выполняется блок операторы, если же оно истинно, т.е. результатом проверки является значение True, то происходит окончание чикла. Цикл While:Wend. Также используется в том случае, когда число повторений операторов тела цикла заранее неизвестно, и имеет следующий синтаксис: While условие Операторы Wend Если результатом проверки условия является значение True, то блок операторы выполняется, иначе осуществляется переход на оператор, расположенный после служебного слова Wend. С другой стороны, если первая проверка условия даст результат False, то цикл не выполнится ни разу. Cstr: Описание Функция преобразует указанное выражение в тип String. Синтаксис CStr(Expression) Параметры Expression - любая строка, либо численное выражение. Возвращаемые значения Возвращает значение типа String. Если аргумент не может быть преобразован в тип String, возникает ошибка. 2. Практический раздел2.1 Инструкция пользователя1. Запустить программу. 2. Ввести в поле “Ввод только цифры” количество итераций цикла: Рис. 1. Ввод количество итераций цикла. 3. Ввести в поле “ввод только цифры” введите симмволы для использования в цикле : Рис. 2. Ввод символов используемых в цыкле. 4. Ввести в поле “ввод цифр или букв ” ведети Цифры – кол-во пробелов перед символом Буквы – каждая буква из поля 3 ставится перед каждым символом в поле 2 Рис. 3. Ввод цифр в поле 3 Рис.4. Ввод бук в поле 3 5. Далее жмем FOR и наблюдаем результат работы программы Рис. 5. Вывод результат работы программы 6. Ошибка при вводе цифр в поле 1 программа выдаст следующую ошибку: Рис. 6. Ошибка при вводе цифр в тестовое поле 1 7. Ошибка при вводе пробела в поле 1. Если Вы будете вводить в поле 1 пробел, то программа выдаст Вам следующую ошибку: Рис. 7. Ошибка при вводе пробела в тестовое поле 1 8. Ошибка при вводе цифры в текстовое поле 2. Если Вы будете вводить в поле 2 число, то программа выдаст Вам следующую ошибку: Рис. 8. Ошибка при вводе цифры в поле 2 9. Ошибка при отсутствие значения в поле 3 Если Вы не вводите в поле 3 символы, то программа выдаст Вам следующую ошибку Рис. 9. Ошибка при отсутствии символов в поле 3 10.кнопки DWL, DUL, DLW, DLU работают по такому же принципу (смотреть пункт 2-9) Рис. 10. Работа программы при вводе цифр Рис. 11. Работа программы при вводе цифр 11.при нажатии кнопки CLEAR программа очистит все заполненные поля и установит фокус на поле 1 Рис. 12. Работа программы при очистки полей 2.2. Листинг кода:Form1(Лабораторная №3): Text3.SetFocus Exit Sub End If End If If Text2.Text = "Ввод только букв" Then MsgBox "Введите текст", , "Ошибка" Text2.Text = "" Text7.Text = "Результат DLW" Text2.SetFocus Exit Sub End If If Text2.Text = "Ввод только букв" Then MsgBox "Введите текст", , "Ошибка" Text2.Text = "" Text7.Text = "Результат DLW" Text2.SetFocus Exit Sub End If If IsNumeric(Mid(Text1.Text, Len(Text1.Text))) = False Then MsgBox "В поле 'только цифры' введены недопустимые символы", , "Ошибка" Text1.Text = "" Text7.Text = "Результат DLW" Text1.SetFocus Exit Sub End If For i = 1 To Len(Text1.Text) If Mid(Text1.Text, i, 1) = " " Then MsgBox "В поле 'только цифры' введены пробелы символы", , "Ошибка" Text1.Text = "" Text7.Text = "Результат DLW" Text1.SetFocus Exit Sub End If Next i If Text1.Text > 10000 Or Text1.Text < -10000 Then MsgBox "В поле 'только цифры' введено значение не входящее в допустимый диапозон (от -10000 До 10000)", , "Ошибка" Text1.Text = "" Text7.Text = "Результат DLW" Text1.SetFocus Exit Sub End If If Text3.Text = "Ввод цифр или символов" Then MsgBox "Введите текст", , "Ошибка" Text3.Text = "" Text7.Text = "Результат DLW" Text3.SetFocus Exit Sub End If For i = 1 To Len(Text2.Text) If IsNumeric(Mid(Text2.Text, i, 1)) Then MsgBox "В поле 'только буквы' введены цифры", , "Ошибка" Text2.Text = "" Text7.Text = "Результат DLW" Text2.SetFocus Exit Sub End If Next i Text7.Text = "" If Text1.Text >= 0 Then If IsNumeric(Text3.Text) Then i = 1 Do If i <= Len(Text2.Text) Then Text7.Text = Text7.Text + Mid(Text2.Text, i, 1) If Text3.Text > 0 Then j = 1 Do Text7.Text = Text7.Text + " " j = j + 1 Loop While j <= CInt(Text3.Text) ElseIf Text3.Text < 0 Then j = -1 Do Text7.Text = Text7.Text + " " j = j - 1 Loop While j >= CInt(Text3.Text) End If Else Text7.Text = Text7.Text + ", " + CStr(i - Len(Text2.Text)) flag = True End If i = i + 1 Loop While i <= CInt(Text1.Text) If flag = True Then Text7.Text = Text7.Text + "." End If Else i = 1 Do If Len(Text2.Text) >= Len(Text3.Text) Then If i <= Len(Text2.Text) Then If i <= Len(Text3.Text) Then Text7.Text = Text7.Text + Mid(Text2.Text, i, 1) + Mid(Text3.Text, i, 1) Else Text7.Text = Text7.Text + Mid(Text2.Text, i, 1) + " " End If Else Text7.Text = Text7.Text + ", " + CStr(i - Len(Text2.Text)) flag = True End If Else If i <= Len(Text3.Text) Then If i <= Len(Text2.Text) Then Text7.Text = Text7.Text + Mid(Text2.Text, i, 1) + Mid(Text3.Text, i, 1) Else Text7.Text = Text7.Text + " " + Mid(Text3.Text, i, 1) End If Else Text7.Text = Text7.Text + ", " + CStr(i - Len(Text3.Text)) flag = True End If End If i = i + 1 Loop While i <= CInt(Text1.Text) If flag = True Then Text7.Text = Text7.Text + "." End If End If Else If IsNumeric(Text3.Text) Then i = -1 Do If -i <= Len(Text2.Text) Then Text7.Text = Text7.Text + Mid(Text2.Text, -i, 1) If Text3.Text > 0 Then j = 1 Do Text7.Text = Text7.Text + " " j = j + 1 Loop While j <= CInt(Text3.Text) ElseIf Text3.Text < 0 Then j = -1 Do Text7.Text = Text7.Text + " " j = j - 1 Loop While j >= CInt(Text3.Text) End If Else Text7.Text = Text7.Text + ", " + CStr(-i - Len(Text2.Text)) flag = True End If i = i - 1 Loop While i >= CInt(Text1.Text) If flag = True Then Text7.Text = Text7.Text + "." End If Else i = -1 Do If Len(Text2.Text) >= Len(Text3.Text) Then If -i <= Len(Text2.Text) Then If -i <= Len(Text3.Text) Then Text7.Text = Text7.Text + Mid(Text2.Text, -i, 1) + Mid(Text3.Text, -i, 1) Else Text7.Text = Text7.Text + Mid(Text2.Text, -i, 1) + " " End If Else Text7.Text = Text7.Text + ", " + CStr(-i - Len(Text2.Text)) flag = True End If Else If -i <= Len(Text3.Text) Then If -i <= Len(Text2.Text) Then Text7.Text = Text7.Text + Mid(Text2.Text, -i, 1) + Mid(Text3.Text, -i, 1) Else Text7.Text = Text7.Text + " " + Mid(Text3.Text, -i, 1) End If Else Text7.Text = Text7.Text + ", " + CStr(-i - Len(Text3.Text)) flag = True End If End If i = i - 1 Loop While i >= CInt(Text1.Text) If flag = True Then Text7.Text = Text7.Text + "." End If End If End If End Sub Private Sub Command5_Click() Dim i, j, k As Integer If Text1.Text = "Ввод только цифр" Then MsgBox "Введите количество интеграций цикла", , "Ошибка" Text1.Text = "" Text8.Text = "Результат DLU" Text1.SetFocus Exit Sub End If If IsNumeric(Text3.Text) Then If Text3.Text > 100 Or Text3.Text < -100 Then MsgBox "В поле 'Ввод цифр или символов' введено значение не входящее в допустимый диапозон (от -100 До 100)", , "Ошибка" Text3.Text = "" Text8.Text = "Результат DLU" Text3.SetFocus Exit Sub End If End If If Text2.Text = "Ввод только букв" Then MsgBox "Введите текст", , "Ошибка" Text2.Text = "" Text8.Text = "Результат DLU" Text2.SetFocus Exit Sub End If If Text2.Text = "Ввод только букв" Then MsgBox "Введите текст", , "Ошибка" Text2.Text = "" Text8.Text = "Результат DLU" Text2.SetFocus Exit Sub End If If IsNumeric(Mid(Text1.Text, Len(Text1.Text))) = False Then MsgBox "В поле 'только цифры' введены недопустимые символы", , "Ошибка" Text1.Text = "" Text8.Text = "Результат DLU" Text1.SetFocus Exit Sub End If For i = 1 To Len(Text1.Text) If Mid(Text1.Text, i, 1) = " " Then MsgBox "В поле 'только цифры' введены пробелы символы", , "Ошибка" Text1.Text = "" Text8.Text = "Результат DLU" Text1.SetFocus Exit Sub End If Next i If Text1.Text > 10000 Or Text1.Text < -10000 Then MsgBox "В поле 'только цифры' введено значение не входящее в допустимый диапозон (от -10000 До 10000)", , "Ошибка" Text1.Text = "" Text8.Text = "Результат DLU" Text1.SetFocus Exit Sub End If If Text3.Text = "Ввод цифр или символов" Then MsgBox "Введите текст", , "Ошибка" Text3.Text = "" Text8.Text = "Результат DLU" Text3.SetFocus Exit Sub End If For i = 1 To Len(Text2.Text) If IsNumeric(Mid(Text2.Text, i, 1)) Then MsgBox "В поле 'только буквы' введены цифры", , "Ошибка" Text2.Text = "" Text8.Text = "Результат DLU" Text2.SetFocus Exit Sub End If Next i Text8.Text = "" If Text1.Text >= 0 Then If IsNumeric(Text3.Text) Then i = 1 Do If i <= Len(Text2.Text) Then Text8.Text = Text8.Text + Mid(Text2.Text, i, 1) If Text3.Text > 0 Then j = 1 Do Text8.Text = Text8.Text + " " j = j + 1 Loop Until j > CInt(Text3.Text) ElseIf Text3.Text < 0 Then j = -1 Do Text8.Text = Text8.Text + " " j = j - 1 Loop Until j < CInt(Text3.Text) End If Else Text8.Text = Text8.Text + ", " + CStr(i - Len(Text2.Text)) flag = True End If i = i + 1 Loop Until i > CInt(Text1.Text) If flag = True Then Text8.Text = Text8.Text + "." End If Else i = 1 Do If Len(Text2.Text) >= Len(Text3.Text) Then If i <= Len(Text2.Text) Then If i <= Len(Text3.Text) Then Text8.Text = Text8.Text + Mid(Text2.Text, i, 1) + Mid(Text3.Text, i, 1) Else Text8.Text = Text8.Text + Mid(Text2.Text, i, 1) + " " End If Else Text8.Text = Text8.Text + ", " + CStr(i - Len(Text2.Text)) flag = True End If Else If i <= Len(Text3.Text) Then If i <= Len(Text2.Text) Then Text8.Text = Text8.Text + Mid(Text2.Text, i, 1) + Mid(Text3.Text, i, 1) Else Text8.Text = Text8.Text + " " + Mid(Text3.Text, i, 1) End If Else Text8.Text = Text8.Text + ", " + CStr(i - Len(Text3.Text)) flag = True End If End If i = i + 1 Loop Until i > CInt(Text1.Text) If flag = True Then Text8.Text = Text8.Text + "." End If End If Else If IsNumeric(Text3.Text) Then i = -1 Do If -i <= Len(Text2.Text) Then Text8.Text = Text8.Text + Mid(Text2.Text, -i, 1) If Text3.Text > 0 Then j = 1 Do Text8.Text = Text8.Text + " " j = j + 1 Loop Until j > CInt(Text3.Text) ElseIf Text3.Text < 0 Then j = -1 Do Text8.Text = Text8.Text + " " j = j - 1 Loop Until j < CInt(Text3.Text) End If Else Text8.Text = Text8.Text + ", " + CStr(-i - Len(Text2.Text)) flag = True End If i = i - 1 Loop Until i < CInt(Text1.Text) If flag = True Then Text8.Text = Text8.Text + "." End If Else i = -1 Do If Len(Text2.Text) >= Len(Text3.Text) Then If -i <= Len(Text2.Text) Then If -i <= Len(Text3.Text) Then Text8.Text = Text8.Text + Mid(Text2.Text, -i, 1) + Mid(Text3.Text, -i, 1) Else Text8.Text = Text8.Text + Mid(Text2.Text, -i, 1) + " " End If Else Text8.Text = Text8.Text + ", " + CStr(-i - Len(Text2.Text)) flag = True End If Else If -i <= Len(Text3.Text) Then If -i <= Len(Text2.Text) Then Text8.Text = Text8.Text + Mid(Text2.Text, -i, 1) + Mid(Text3.Text, -i, 1) Else Text8.Text = Text8.Text + " " + Mid(Text3.Text, -i, 1) End If Else Text8.Text = Text8.Text + ", " + CStr(-i - Len(Text3.Text)) flag = True End If End If i = i - 1 Loop Until i < CInt(Text1.Text) If flag = True Then Text8.Text = Text8.Text + "." End If End If End If End Sub Private Sub Command6_Click() Text1.Text = "Ввод только цифр" Text2.Text = "Ввод только букв" Text3.Text = "Ввод цифр или символов" Text4.Text = "Результат FOR" Text5.Text = "Результат DWL" Text6.Text = "Результат DUL" Text7.Text = "Результат DLW" Text8.Text = "Результат DLU" Text1.SetFocus End Sub Private Sub text1_GotFocus() If Text1.Text = "Ввод только цифр" Then Text1.Text = "" End If End Sub Private Sub text2_GotFocus() If Text2.Text = "Ввод только букв" Then Text2.Text = "" End If End Sub Private Sub text3_GotFocus() If Text3.Text = "Ввод цифр или символов" Then Text3.Text = "" End If End Sub Private Sub text1_LostFocus() If Text1.Text = "" Then Text1.Text = "Ввод только цифр" End If End Sub Private Sub text2_LostFocus() If Text2.Text = "" Then Text2.Text = "Ввод только букв" End If End Sub Private Sub text3_lostFocus() If Text3.Text = "" Then Text3.Text = "Ввод цифр или символов" End If End Sub Private Sub Command7_Click() Unload Me End Sub Private Sub form_Load() Label1.Caption = "Лабораторная работа №3" Label1.Alignment = 2 - center Text1.Text = "Ввод только цифр" Text2.Text = "Ввод только букв" Text3.Text = "Ввод цифр или символов" Text4.Text = "Результат FOR" Text5.Text = "Результат DWL" Text6.Text = "Результат DUL" Text7.Text = "Результат DLW" Text8.Text = "Результат DLU" Text4.Locked = True Text5.Locked = True Text6.Locked = True Text7.Locked = True Text8.Locked = True Command1.Caption = "FOR" Command2.Caption = "DWL" Command3.Caption = "DUL" Command4.Caption = "DLW" Command5.Caption = "DLU" Command6.Caption = "CLEAR" Command7.Caption = "END" End Sub ЗаключениеМы изучили тему “Сравнение работы разных циклов”, создали программу, которую описали во Введении. При этом мы исключили случаи, когда пользователь мог ввести некорректные данные, а также сделали все проверки исходя из данных связанных с правильностью вводимых данных в зависимости от желания пользователя в полях “Ввод только цифр”, “ Ввод только букв”, “ Ввод цифр или букв”. Список литературыСтроковые функции (Visual Basic). Режим доступа: https://docs.microsoft.com/ru-ru/dotnet/visual-basic/language-reference/functions/string-functions. Дата обращения: 26.03.2019 Основы работы со строками в Visual Basic. Режим доступа: https://docs.microsoft.com/ru-ru/dotnet/visual-basic/programming-guide/language-features/strings/string-basics. Дата обращения: 26.03.2019 Лукин С.Н. Visual Basic 6.0 - Самоучитель для начинающих Москва– 2001 Стив Браун. Visual Basic 6.0 – учебный курс. 19 уроков для освоения языка. – СПб: Питер, 2009. Решении сложных задач программирования VB6. Режим доступа: http://informatic.ugatu.ac.ru/lib/VB_6.0/function/bycat.html Дата обращения: 26.03.2019 |