Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 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

Date: 2016-07-25; view: 287; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.005 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию