Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Работа с многомерным, динамически переопределяемым массивомРазработаем программу, которая позволяла бы вести турнирную таблицу матчей двух футбольных команд и выдавала нам полезные сообщения. Создайте новый проект, разместите в форме проекта надпись "Счет матчей", две надписи "Спартак" и "Динамо" и две не написанные надписи. Разместите также два текстовых поля и две кнопки. Используя элемент Line окна инструментов, нарисуйте в форме сетку, как показано на рисунке. Лучше, однако, поступить по-другому. Сначала набрать код, запустить программу, вывести результаты нескольких матчей на форму, заметить, где они расположились и там начертить сетку. Впрочем, вы можете придумать еще какой-нибудь способ правильно разместить сетку.Добавьте в проект модуль класса. Логика работы программы такова: при запуске программы запрашивается количество игр. Затем открывается форма для ввода счета матчей с указанием количества игр. Пользователь вводит счет и нажимает кнопку "следующий", чтобы ввести новые данные. Счет отображается в форме. Программа ведет контроль количества игр и не позволяет пользователю ввести больше данных, чем было заявлено игр. Не допускается также ввод отрицательных чисел в качестве количества игр. Сохраните проект в своей папке под именем МногомМассив.
Код модуля формы 1. Option Explicit 2. Private Sub Command1_Click() 3. On Error GoTo Мет 4. Text1.SetFocus 5. Label5.Caption = "Текущий матч" & i 6. Счет(1, i) = Text1.Text 7. Счет(2, i) = Text2.Text 8. CurrentX = 1500 + 200 * i 9. CurrentY = 800 10. Print Счет(1, i) 11. CurrentX = 1500 + 200 * i 12. CurrentY = 800 + 200 13. Print Счет(2, i) 14. i = i + 1 15. Вых: Text1.Text = "" 16. Text2.Text = "" 17. Print Финал1, Финал2 18. Exit Sub 19. Мет: MsgBox "Больше матчей не было!",, "Ошибка!" 20. Command1.Enabled = False 21. Label5.Caption = "" 22. Text1.Enabled = False 23. Text2.Enabled = False 24. Resume Вых 25. End Sub 26. Private Sub Command2_Click() 27. End 28. End Sub 29. Private Sub Form_Load() 30. Call Игры 31. Label4.Caption = "Количество игр:" & Матчи 32. i = 1 33. Form1.Show 34. End Sub Код модуля класса 35. Option Explicit 36. Option Base 1 37. Public Счет() As Variant 38. Public Матчи, Команды, i, j As Integer, Сообщение As String 39. Public Финал1, Финал2 As Integer 40. Sub Игры() 41. On Error GoTo Метка 42. Повтор: Матчи = InputBox ("Введите количество матчей", "Матчи") 43. If Матчи > 0 Then 44. ReDim Счет (2, Матчи) 45. Else 46. Do 47. Метка: MsgBox "Введите положительное число больше нуля!",, "Количество матчей" 48. Resume Повтор 49. Loop Until Матчи = "" 50. End If 51. End Sub 52. Sub Финал() 53. For j = 1 To Матчи 54. Финал1 = Финал1 + Счет (1, Матчи) 55. Финал2 = Финал2 + Счет (2, Матчи) 56. Next j 57. Form1.CurrentX = 1000 58. Form1.CurrentY = 1000 59. End Sub Несмотря на простоту задачи, программа кажется сложнее предыдущих. При открытии формы выполняется процедура этого события (строки 29 – 34). В строке 30 вызывается с помощью ключевого слова Call процедура Игры (строки 40 – 51). Она записана в модуле класса и не связана ни с каким событием. Управление передается этой процедуре. В процедуре описан массив Счет (), размерность которого заранее неизвестна, так как неизвестно, какое количество матчей введет пользователь. В строке 44 размерность массива Счет переопределяется с помощью оператора ReDim по значению переменной Матчи. Массив двумерный. Первый индекс означает количество команд, а второй количество сыгранных матчей. Получается таблица, в которой две строки (по количеству команд) и число столбцов соответствует количеству матчей. Процедура открывает окно для ввода количества матчей и контролирует число, которое вводит пользователь. Если оно больше нуля, то процедура Игры завершает нормально свою работу и возвращает управление вызвавшей ее процедуре загрузки формы. Та, в свою очередь, устанавливает переменную i в единицу, выводит на форму информацию о количестве матчей и делает форму проекта видимой. В модуле класса описана еще одна процедура – Финал. Она должна накапливать суммарный счет команд и хранить его в переменных Финал 1 и Финал 2 (строки 52 – 59). После ввода счета и нажатия кнопки "Следующий" в строке 4 фокус устанавливается на элемент Text1, чтобы подготовить ввод следующего матча, выводится информация о текущем матче, значение свойств Text элементов Text1 и Text2 записывается в элементы массива Счет, с помощью операторов присвоения устанавливается положение курсора в форме CurrentX и CurrentY, куда будут выводиться данные о счете команд и переменная i (номер матча) получает приращение 1. Координаты курсора в форме отсчитываются от левого верхнего угла формы сверху вниз и слева направо. Поля Text1 и Text2 обнуляются, и делается попытка напечатать на форме финальный счет Финал 1 и Финал 2, но этого не происходит. Разберитесь самостоятельно, почему не выводится в форме финальный счет, и попытайтесь исправить эту неточность. Ведь в остальном программа работает правильно. Если пользователь попытается ввести счет не существующего матча, возникнет ошибка, связанная с выходом второго индекса массива Счет за описанные пределы. Обработчик ошибок перехватит и обработает эту ситуацию. Будет выведено сообщение о том что, матчей больше не было и кнопка "Следующий" станет недоступной, чтобы пользователь не пытался больше, что-нибудь вводить. Вы, конечно, заметите, что после закрытия программы и повторного ее запуска вся ранее введенная информация теряется. Чтобы информация не терялась, необходимо создать базу данных для ее хранения, однако этот вопрос выходит за рамки данного пособия и здесь рассматриваться не будет. В этом примере мы познакомились с двумерным динамически переопределяемым массивом, командами установки текущей позиции курсора в форме, процедурами модуля класса и правилами их вызова. Пример 14
|