Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика_2011__2_МГРИ-РГГРУ.pdf
Скачиваний:
213
Добавлен:
29.03.2016
Размер:
4.01 Mб
Скачать

ЗАДАНИЕ 3

ПОИСК ЭЛЕМЕНТОВ МАССИВА ПО УСЛОВИЮ

Ключевые понятия: выбор элементов массива, запись условий в цикле, условие чѐтности и нечѐтности чисел, вычисление количества элементов, алгоритм нахождения максимального и минимального элементов массива.

ДВОЙНОЙ ЦИКЛ С ПАРАМЕТРОМ

ЗАДАЧА № 1.3

Заполнить массив размером N на N ячеек листа ЭТ целыми числами, полученными по определенным алгоритмам (правилам). Константу N и параметры циклов i, j объявить в разделе General (вверху, выше всех макросов Sub) как общие (Public) переменные и константы (Const).

Const N = 10

Public i As Byte, j As Byte

1. Построить таблицу умножения и сложения номера строки и столбца (Пифагоровы таблицы).

Sub Умножение()

Sub Сложение()

For i = 1 To N

For i = 1 To N

For j = 1 To N

For j = 1 To N

Cells(i, j) = i * j

Cells(i, j) = i + j

Next j

Next j

Next i

Next i

End Sub

End Sub

2. Разместить на листе Excel командные кнопки и назначить им макросы для выполнения соответствующих программ. Изменить свойство отображения ЭТ (Сервис-Параметры-Общие-Стиль ссылок R1С1).

55

3. Заполнить таблицу случайными числами в заданном диапазоне от А до В. Для этого использовать функцию (Rnd()*(b - a + 1) + a). Для выбора целой части числа применяем функцию Cells(i, j) = Int(Rnd()*(В - А ) + А) и записываем в i-строку и j-столбец.

Sub Случ_числа()

Dim a As Integer

Dim b As Integer

a= Val(InputBox("A от -255 до 255", "Введи A?"))

b= Val(InputBox("B>A от " & Str(a) & " до 255", "Введи B?"))

Randomize 'включение датчика

For i = 1 To N For j = 1 To N

Cells(i, j) = Int(Rnd() * (b - a ) + a)

Next j Next i

End Sub

4. Рассчитать сумму всех чисел в таблице (т.е. N*N) а также среднее значение. Для этого мы возьмем пустую переменную s=0 и в процессе просмотра таблицы в двойном цикле будем складывать все числа в s = s + Cells(i, j). Так накопиться сумма, а среднее будет равно s/(N*N).

Sub Сумма()

Dim s As Integer

s = 0 'начальное значение суммы

For i = 1 To N For j = 1 To N

s = s + Cells(i, j) ' накапливаемая сумма

Next j Next i

Cells(12, 1) = s : Cells(12, 2) = "- cумма"

Cells(13, 1) = s / (N * N) : Cells(13, 2) = "- cреднее"

MsgBox ("Сумма = " & Str(s) & " Среднее = " & Str(s / (N * N)))

End Sub

5. Определить количество нечетных и четных чисел. Для этой задачи введем две вспомогательные переменные k1 и k2 для хранения количества нечетных и четных чисел. Отличать четное число будем с помощью условного оператора, где в качестве условия будем проверять остаток от деления нацело (оператор Mod) каждого

56

числа из таблицы Cells(i, j) Mod 2 = 0 и увеличивать соответствующие счетчики k2 = k2 + 1, если правда, и k1 = k1 + 1, если иначе.

Sub Чет_Нечет()

Dim k2 As Integer, k1 As Integer

k2 = 0

' счетчик четных значений

k1 = 0

' счетчик нечетных значений

For i = 1 To N For j = 1 To N

If Cells(i, j) Mod 2 = 0 Then Cells(i, j).Interior.ColorIndex = 0

k2 = k2 + 1 ' увеличение счетчика четных значений

Else

Cells(i, j).Interior.ColorIndex = 15

k1 = k1 + 1 ' увеличение счетчика нечетных значений

End If

Next j Next i

Cells(12, 1) = k2: Cells(12, 2) = "- четных" Cells(13, 1) = k1: Cells(13, 2) =" - нечетных"

End Sub

6. Определить количество положительных и отрицательных чисел. Для этой задачи можно поступить так же, как и в предыдущем случае, но мы рассмотрим альтернативный прием. Выберем две ячейки таблицы и обнулим все, что в них могло храниться Cells(12, 1) = 0 'ячейка положительных чисел и Cells(13, 1) = 0 'ячейка отрицательных. Отличать положительное число от отрицательного будем с помощью условного оператора, где в качестве условия будем сравнивать каждое число с нулем Cells(i, j) > 0 и увеличивать соответствующую ячейку-счетчик Cells(12, 1) = Cells(12, 1) + 1, если правда, и иначе Cells(13, 1) = Cells(13, 1) + 1.

Sub Числа_плюс_минус()

Cells(12, 1) = 0 'ячейка положительных

Cells(13, 1) = 0 'ячейка отрицательных

For i = 1 To N

For j = 1 To N

If Cells(i, j) > 0 Then

Cells(12, 1) = Cells(12, 1) + 1

Cells(i, j).Interior.ColorIndex = 45

Else

57

Cells(13, 1) = Cells(13, 1) + 1

Cells(i, j).Interior.ColorIndex = 35

End If

Next j

Next i

Cells(12, 2) = "положительных"

Cells(13, 2) = "отрицательных"

End Sub

7. Написать программу, которая будет закрашивать ячейки получившихся таблиц различными цветами из цветовой палитры (от 0-до 56). Так как у нас могут появиться в процессе работы и отрицательные числа и числа больше значения 56, то применим функцию ABS(Число), которая возвращает абсолютное значение числа, и уже знакомую операцию Mod к значению в каждой ячейки. Полученным цветовым индексом (ColorIndex) закрасим свойство ин-

терьер (Interior или фон) ячейки Cells(i, j).Interior.ColorIndex =

Abs(c) Mod 56.

Sub Закрасить() For i = 1 To N

For j = 1 To N c = Cells(i, j)

Cells(i, j).Interior.ColorIndex = Abs(c) Mod 56 Next j

Next i End Sub

8. Предусмотреть очистку закрашенной области ячеек с исполь-

зованием метода Cells(i, j).Clear.

Sub Очистить()

If Cells(1, 1).Value <> "" Then

For i = 1 To N

For j = 1 To N

Cells(i, j).Clear

Next j

Next i

End If

End Sub

9. Разместить на листе Excel командные кнопки и назначить им макросы для выполнения соответствующих программ.

58

Пример работы программы Sub Чет-Нечет() и Sub Закрасить()

Пример работы программы Sub Случ_числа() и программы Sub Числа_плюс_минус()

САМОСТОЯТЕЛЬНО:

ЗАДАЧА №1.4. Определить количество кратных 3 среди четных и нечетных элементов в массиве ячеек.

ЗАДАЧА №1.5. Определить номера минимального и максимального элементов в массиве.

ЗАДАЧА №1.6. Определить наличие простых чисел в массиве среди элементов.

ЗАДАЧА №1.7. Определить сколько пар, начиная с первого элемента, в таблице стоят по порядку, т.е. число в ячейке с нечетным номером столбца больше чем с четным [Cells(i, 1)> Cells(i, 2)].

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

59