Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VB_6.doc
Скачиваний:
97
Добавлен:
01.12.2018
Размер:
3.77 Mб
Скачать

Приложение 1. Типовые алгоритмы обработки чисел.

Целые числа:

  1. Определить, является ли число x целым.

If Int(x) = x Then

Text1.Text = “Число “ & x & “ целое”

Else

Text1.Text = “Число “ & x & “ вещественное”

End If

  1. Определить, является ли целое число n четным.

Dim n%

If n Mod 2 = 0 Then

Text1.Text = “Число “ & n & “ - четное”

Else

Text1.Text = “Число “ & n & “ - нечетное”

End If

  1. Определить, кратно ли целое число n целому числу k.

Dim n%, k%

If n Mod k = 0 Then

Text1.Text = “Число “ & n & “ кратно числу ” & k

Else

Text1.Text = “Число “ & n & “ не кратно числу “ & k

End If

4. Определить разрядность целого числа n.

Dim n%, a%, k%

a = n: k = 0

Do While a > 0

a = a\10

k = k + 1

Loop

Text1.Text = “Число “ & n & “ является “ & k & “-значным”

5. Определить, является ли целое число n точным квадратом..

Dim n%

If Sqr(n) = Int(Sqr(n)) Then

Text1.Text = “Число “ & n & “ является точным квадратом”

Else

Text1.Text = “Число “ & n & “ не является точным квадратом”

End If

6. Определить, является ли целое число n простым. Простым

называется целое число, которое не имеет других делителей, кроме

единицы и самого себя.

Dim n%, i%, f As Boolean

f = True

n = InputBox(“Введите произвольное целое число”)

For i = 2 To n \ 2

If n Mod i = 0 Then f = False: Exit For

Next i

If f Then

Text1.Text = “Число “ & n & “ простое”

Else

Text1.Text = “Число “ & n & “ не простое”

End If

7. Определить, является ли натуральное число n совершенным. Совершенным называется натуральное число равное сумме всех своих делителей, включая единицу, но исключая само число.

Dim n%, sum%, i%

sum = 0

For i = 1 To n \ 2

If n Mod i = 0 Then sum = sum + i

Next i

If n = sum Then

Text1.Text = “Число “ & n & ” является совершенным”

Else

Text1.Text = “Число “ & n & ” не является совершенным”

End If

Вещественные числа:

  1. Определить суммы цифр целой и дробной частей произвольно

введенного вещественного числа x, содержашего не более 5 цифр в

дробной части.

Dim x!, d!, c%, sc%, sd%

x = Val(InputBox(“Введите требуемое вещественное число”))

Выделяем целую часть числа x:

c = Int(x)

Дробная часть числа:

d = Round(x – c, 5)

Превращаем дробную часть числа в целое число:

Do

d = d * 10

Loop Until d = Int(d)

Определяем сумму цифр целой части исходного числа:

sc = 0

Do

sc = sc + c Mod 10

c = c \ 10

Loop Until c < 1

Определяем сумму цифр дробной части исходного числа:

sd = 0

Do

sd = sd + d Mod 10

d = d \ 10

Loop Until d < 1

Выводим результат:

Text1.Text = “Введено число ” & x & vbCrLf & _

“Сумма цифр целой части числа = “ & sc & _

vbCrLf & “Сумма цифр дробной части числа = ” & sd

Приложение 2. Типовые алгоритмы обработки последовательностей.

Рассмотренные в Приложении 1 типовые алгоритмы обработки

чисел во многих случаях используются в качестве составной части алго-

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

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

  2. объявить две новые переменные, в которых будут храниться значения требующегося нам свойства предыдущего и последующего элементов и после ввода следующего элемента значение его свойства передавать в переменную, в которой должно храниться значение свойства предыдущего, т.к. теперь бывший следующим становится предыдущим.

Второй способ предпочтительнее, т.к. часто значения самих элементов нам не важны, а требуется знать значения некоторого их свойства. Например, требуется выяснить, сколько раз во вводимой последовательности чередовались простые и непростые числа. В таком случае можно объявить целочисленные переменные, например, fp и fs. Если предыдущий элемент является простым числом, то переменной fp присваиваем значение 1, иначе: - 1. Аналогично, если следующий элемент является простым числом, то переменной fs присваиваем значение 1, иначе: - 1. Далее проверяем произведение fp*fs. Если оно меньше 0, то чередование этого свойства элементов произошло, иначе – не произошло. После этой проверки значение переменной fs передаем в переменную fp и вводим очередной элемент, для которого определяем значение его свойства fs. Теперь он будет исполнять роль следующего, а бывший следующим теперь играет роль предыдущего. Его значение “затерто” вновь введенным элементом, но значение его свойства сохранилось в переменной fp.

Для обработки последовательностей с заданным количеством элементов удобно использовать регулярный цикл, а с неопределенным количеством элементов – итерационные циклы.

Примеры обработки числовых последовательностей

с заданным количеством элементов.

Пример 1. В числовую переменную последовательно вводится N

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

Dim n%, a!, sum!, i%, j%, f%

n = InputBox("Введите кол-во элементов последовательности")

sum = 0

Randomize

For i = 1 To n

a = Int(Rnd * 1000) - 500: f = 0

For j = 2 To i \ 2

If i Mod j = 0 Then f = 1: Exit For

Next j

If f = 0 Then

List1.AddItem Str(a)

List2.AddItem Str(i)

sum = sum + a

End If

Next i

Text1.Text = " Сумма чисел= " & sum

Пример 2. Вводится последовательность из N вещественных чисел. Сколько из них больше своих соседей?

Dim i%, k%, n%, x!, y!, z!

Randomize

n = Int(Rnd * 100) + 3 - кол-во членов

последовательности

x = Rnd * 1000 - 500 - первый член

последовательности

List1.AddItem Str(x)

y = Rnd * 1000 - 500 - второй член

последовательности

List1.AddItem Str(y)

k = 0

For i = 3 To n

z = Rnd * 1000 - 500 - очередной член

последовательности

List1.AddItem Str(z)

If y > x And y > z Then

k = k + 1

List2.AddItem Str(y)

End If

x = y: y = z

Next i

Text1.Text = " Количество = " & k

Пример 3. Из всех 3-значных натуральных чисел вывести такие, у которых цифра, обозначающая количество единиц, является делителем цифры, обозначающей количество сотен. Определить количество таких чисел.

Dim i&, s%, e%, k%

k = 0

For i = 100 To 999

e = i Mod 10: s = i \ 100

If e <> 0 Then

If s Mod e = 0 Then List1.AddItem Str(i): k = k + 1

End If

Next i

Text1.Text = " Количество чисел = " & k

Пример 4. В числовую переменную последовательно вводятся N целых чисел. Найти 2 последних отрицательных числа или выдать сообщение об их отсутствии.

Dim n%, a%, b%, c%, i%

n = InputBox("Введите кол-во элементов")

b = 0: c = 0

Randomize

For i = 2 To n

a = Int(Rnd * 1000) - 500

List1.AddItem Str(a)

If a < 0 Then b = c: c = a

Next i

If b >= 0 Then

Text1.Text = "Таких чисел нет!"

Else

Text1.Text = " b = " & b & " c = " & c

End If

Пример 5. В числовую переменную последовательно вводятся N произвольных целых чисел. Определить порядковые номера и значения первого из максимальных и последнего из минимальных чисел, а также сумму чисел, введенных между ними.

Dim n%, a%, max%, n_max%, min%, n_min%, i%, sum%, sum1%, sum2%

n = InputBox("Введите кол-во элементов")

a = InputBox("Введите первый элемент")

List1.Clear

min = a: n_min = 1

max = a: n_max = 1

sum1 = 0: sum2 = 0

List1.AddItem Str(a)

Randomize

For i = 2 To n

a = Int(Rnd * 10) - 5

List1.AddItem Str(a)

Суммируем числа, которые вводятся после 1-го максимального

If a > max Then

max = a: n_max = i: sum1 = 0

Else

sum1 = sum1 + a

End If

Суммируем числа, которые вводятся после последнего минимального

If a <= min Then

min = a: n_min = i: sum2 = 0

Else

sum2 = sum2 + a

End If

Определяем сумму чисел, введенных между первым максимальным и последним минимальным

. If n_max < n_min Then

sum = sum1 - sum2 - min

Else

sum = sum2 - sum1 - max

End If

Next i

Text1.Text = " 1-й max = " & max & ". Его номер= " & n_max & _

vbCrLf & “ Последний min = “ & min & “. Его номер = “ & _

n_min & vbCrLf & “ Сумма = “ & sum

Пример 6. Сколько чередований четности среди отрицательных элементов последовательности из N элементов.

Dim a%, pr%, sl%, i%, k%

k = 0

a = InputBox("Введите первый элемент")

If (a < 0) And (a mod 2 <> 0) Then pr = 1 Else pr = -1

For i = 2 To n

a = InputBox("Введите очередной элемент")

If (a < 0) And (a Mod 2 <> 0) Then sl = 1 Else sl=-1

If pr * sl < 0 Then k = k + 1

pr = sl

Next i

Tex1.Text = " Кол-во чередований четности = " & k

Примеры обработки числовых последовательностей

с неизвестным количеством элементов.

Пример 1. Вывести 10 простых чисел, больших некоторого заданного числа.

Dim nz%, n%, i%, j%, f As Boolean

nz = InputBox("Введите произвольное натуральное число")

Text1.Text = " " & nz

j = 0: n = nz

Do

n = n + 1

f = True

For i = 2 To n \ 2

If n Mod i = 0 Then f = False

Next i

If f Then

j = j + 1

List1.AddItem Str(n)

End If

Loop Until j = 10

Пример 2. Найти наиболее длинную цепочку положительных элементов последовательности. Определить, является ли она единственной.

Dim a%, m%, n%, max%

List1.Clear

m = 0: n = 0: max = 0

Do

a = InputBox("Введите очередной элемент")

List1.AddItem Str(a)

If a > 0 Then

m = m + 1

Else

m = 0

End If

If m > max Then max = m: n = 0

If m = max Then n = n + 1

Loop Until MsgBox("Продолжить ввод?", 36) = vbNo

Text1.Text = " Max длина цепочки= " & max & vbCrLf & _

" Кол-во таких цепочек= " & n

Пример 3. Вводится последовательность целых чисел. Найти сумму чисел до первого отрицательного члена последовательности.

Dim n%, sum&

sum = 0

Do

n = InputBox(“Введите очередной элемент”)

List1.AddItem Str(n)

If n > 0 Then sum = sum + n

Loop Until n < 0

Text1.Text = " Сумма = " & sum

Пример 4. Вводится последовательность чисел. Найти максимальное количество подряд идущих отрицательных элементов, расположенных между положительными числами.

Dim n%, m%, d%

m = 0: d = 0

Do

n = InputBox("Введите очередной элемент")

List1.AddItem Str(n)

If n > 0 Then

m = 0

Else

m = m + 1

If m > d Then d = m

End If

Loop Until MsgBox("Продолжить ввод?", 36) = vbNo

Text1.Text = " Max цепочка " & vbCrLf & " отрицательных = " & d

Пример 5. Сколько чередований четности среди отрицательных элементов последовательности с неопределенным количеством элементов.

Dim a%, pred%, posl%, k%

k = 0: pred = 1

a = InputBox("Введите первый элемент")

If a < 0 And a mod 2 <> 0 Then pred = -1

Do

a = InputBox("Введите очередной элемент")

posl = 1

If a < 0 And a Mod 2 <> 0 Then posl = -1

If pred * posl < 0 Then k = k + 1

pred = posl

Loop Until MsgBox(“Продолжить ввод?”, 36) = vbNo

Tex1.Text = " Кол-во чередований четности = " & k

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]