Пятница, 03.05.2024, 07:35
Сайт Курсантов и Студентов
Приветствую Вас Гость | RSS
Главная Каталог файлов Регистрация Вход
Друзья Сайта

Меню сайта

Категории раздела
Все для информатики [17]
Программирование [5]

Мини-чат

Наш опрос
А вы даёте взятки преподавателям?
Всего ответов: 427

Статистика
Рейтинг@Mail.ru
Онлайн всего: 1
Гостей: 1
Пользователей: 0

Форма входа

Главная » Файлы » Информатика/Программирование » Все для информатики

Практическое задание по Visual basic. Головоломка Лойда. Из набора чисел (25,27,3,12,6,15,9,30,21,19)выбрать те, сумма которых составит 50.
[ · Скачать удаленно (84 Kb) ] 06.12.2009, 14:30


Практическое задание №3

Пример №1

Головоломка Лойда. Из заданного набора чисел (25,27,3,12,6,15,9,30,21,19) надо выбрать те, сумма которых составит 50.

Составим программу для решения этой головоломки двумя способами.

Первый способ:

Создадим форму :



Разместим на форме 10 элементов CheckBox так как показано на Рис. 1 и соответствующим образом установим значения свойства Caption для каждого из них. Будем использовать имена, заданные по умолчанию. С помощью флажков мы будем выбирать числа. Также нам понадобиться список, в него мы будем помещать выбранные числа, и элемент Label в который будет помещаться результат вычисления.

Перейдем к программированию. В качестве события мы будем стандартно использовать щелчок мышью по кнопке «Вычислить».

Итак, при выборе понравившихся чисел, мы будем устанавливать флажки в квадратики рядом с этими числами. Напишем часть кода, с помощью которой программа будет распознавать выбранные числа. Для этого в процедуре Command1_Click() запишем следующее:

If Check1.Value = 1 Then List1.AddItem (Check1.Caption)

То есть для первого флажка проверяем значение свойства Value. Если значение этого свойства равно 1, то есть флажок находиться в состоянии «установлен», то значение свойства Caption (т.е. само число) добавляется в список List1 с помощью метода AddItem. Аналогично проверьте остальные флажки и запишите для них код.

После того как мы проверили все флажки и занесли выбранные числа в список, нужно вычислить сумму этих чисел и проверить, равна ли она 50. Для этого в этой же процедуре допишем следующий код:

S = 0

For i = 0 To List1.ListCount - 1

S = S + Val(List1.List(i))

Next

В этой части программы мы суммируем все элементы списка List1. Для этого присваиваем переменной S значение равное 0. Затем в цикле прибавляем все числа находящиеся в списке. Начальное значение для переменной цикла – 0, конечное - определяется функцией ListCount. Функция ListCount определяет количество элементов в списке. Так как числа в списке являются текстовой переменной, то для суммирования их сначала нужно перевести в число с помощью функции Val.

Теперь полученный результат нужно вывести в элемент Label и в случае, если сумма выбранных чисел равна 50, поздравить победителя. Для этого добавим следующий код:

Label1.Caption = "Сумма" + Str(S)

If S = 50 Then Label1.Caption = "Победа!!!"

Теперь запустите программу на выполнение.

Второй способ (более рациональный):

Немного исправим нашу форму :



Заменим в нашей предыдущей программе флажки списком флажков. Для этого добавим в форму элемент LisBox, как показано на Рис. 2. Только что созданный список переименуйте в List1. Существующий список назовите List2. Для того, чтобы превратить обычный список в список флажков нужно для свойства Style установить значение 1-Checkbox. Теперь зададим состав списка. Откройте раскрывающийся список свойства List. Введите первое число, для перехода на другую строку нажмите комбинацию клавиш Ctrl+Enter, введите следующее значение. После ввода всех 10 чисел нажмите клавишу Enter. Установите нужный размер списка.

Удалите кнопку «Вычислить». Теперь в нашем окне только один элемент управления способен к диалогу – это список флажков. Программа должна что-то делать только в том случае, если один из флажков устанавливается или сбрасывается. В этом случае возникает событие ItemCheck (Пометка пункта). Опишем реакцию на него.

Откройте окно редактора кода двойным щелчком по списку флажков. В открывающемся списке справа вверху выберите событие ItemCheck. Система Visual Basic создаст заготовку процедуры List1_ItemCheck для обработки этого события.

Private Sub List1_ItemCheck(Item As Integer)

Номер установленного или сброшенного пункта передается через параметр Item. Информация о состоянии флажка (установлен или сброшен) храниться в свойстве Selected. Для обработки списка флажков напишем следующий код:

If List1.Selected(Item) Then

List2.AddItem (List1.List(Item)) - процедура выполняется после изменения состояния флажка. Поэтому, если флажок был установлен, то условие List1.Selected(Item) выполнено. В этом случае мы добавляем выбранное число во второй список.

Else

For i = 0 To List1.ListCount - 1

If List1.List(i) = List2.List(Item) Then - Если флажок был сброшен, то мы должны удалить соответствующее число из второго списка, но мы не знаем где именно (индекс) во втором списке он находится. Поэтому нам придется перебрать все элементы второго списка и сравнить их с элементом первого, флажок которого был снят. Для этого введем цикл, который будет осуществлять перебор элементов первого списка.

List1.RemoveItem (i) - удаляется элемент при помощи метода RemoveItem.

End If - Закроем начатый условный оператор:

Next i

End If

Часть программы, рассчитывающую сумму и выводящую результат скопируем в данную процедуру. Запустите программу на выполнение и оцените результат.

Пример №2

Напишем программу, которая рисует следующий узор (см. Рис. 3). Этот узор образован следующим образом: сначала строятся вершины правильного
восемнадцатиугольника, центр которого совпадает с центром формы. Каждая из 18 вершин соединяется отрезками со всеми другими вершинами. Координаты вершин задаются следующим образом:

Xi=Xc+R*cos(2*pi/n); Yi=Yc+Rsin(2*pi/n),   i=1,2,...,18

 

Private Sub Command1_Click()

Picture1.Scale (-105, 105)-(105, -105)задаем масштаб

n = 16

Dim x(18) As Variant, y(18) As Variant

R = 99

Dt = 2 * 3.1416 / n

t = 0

For i = 1 To n

t = t + Dt

x(i) = 0 + R * Cos(t)

y(i) = 0 - R * Sin(t)

Next

For i = 1 To n - 1

For j = i + 1 To n

Picture1.Line (x(i), y(i))-(x(j), y(j)), vbRed

For k = 0 To 567987

Next k

Next j

Next i

End Sub

Для динамического массива переделать: самостоятельно задаем количество вершин.

Категория: Все для информатики | Добавил: vel-master
Просмотров: 3277 | Загрузок: 562 | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *:
Поиск

Copyright MyCorp © 2024