Решение задач с помощью стандартных программ

 

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

Пример 29. Дан массив чисел. Найти значение максимального элемента. Если таких элементов несколько, то определить, сколько их.

Решение. Эта задача может быть решена за один просмотр элементов массива. Вначале устанавливаем текущий max по первому элементу массива MAX = MASS(1) и запоминаем количество максимумов К = 1. Затем выбираем очередной элемент MASS(1) массива и сравниваем его с MAX. В случае равенства увеличиваем значение К на 1. Если текущий максимум меньше элемента MAS (I), то переписываем его MAX = MASS(1) и устанавливаем значение К в единицу. После окончания просмотра выводим результаты на экран.

В данном случае считывание элементов массива разумно совместить с процессом обработки, но можно осуществить и двумя последовательными циклами (первый цикл - ввод элементов массива, второй цикл - поиск максимума).

 

Sub Max()

Dim n As Integer

Dim i As Integer

Dim Mass() As Integer

Dim Max As Integer, k As Integer

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

ReDim Mass(n)

Mass(1) = InputBox("Введите значение 1-го элемента", "Ввод элементов массива")

For i = 2 To n

Mass(i) = InputBox("Введите значение " & i & "-го элемента массива", " Ввод элементов массива ")

If Mass(i) = Max Then k = k + 1

If Mass(i) > Max Then k = 1: Max = Mass(i)

Next i

MsgBox "Максимальный элемент равен " & Max & ". Их количество_ равно " & k, , "Ответ"

End Sub

 

Пример 30. Дан массив чисел. Найти, сколько в нем пар одинаковых соседних элементов.

 

Sub Para()

Dim n As Integer

Dim i As Integer

Dim Mass() As Integer

Dim k As Integer

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

ReDim Mass(n)

For i = 1 To n

Mass(i) = InputBox("Введите значение " & i & "-го элемента массива", " Ввод элементов массива ")

Next i

k = 0

For i = 2 To n%

If Mass(i) = Mass(i - 1) Then k = k + 1

Next i

MsgBox "Количество пар равно " & k, , "Ответ"

End Sub

 

Пример 31. Расположить N чисел массива А в порядке возрастания.

Решение. Сравниваем между собой первый и второй элементы массива и переставляем их, если это необходимо в порядке возрастания. Затем то же самое проделываем со вторым и третьим элементами и т.д. до конца массива. В результате этих сравнений и перестановок наибольшее число окажется последним. Второй этап сравнений и перестановок будем производить для (n -1) элементов, начиная с первого. В этом случае предпоследним окажется наибольший из (n -1) членов массива. Уменьшая каждый раз количество элементов на единицу, операции сравнения и перестановок закончим тогда, когда останется всего один элемент массива. Перестановку элементов будем осуществлять через промежуточную переменную p.

 

Sub Sotirovka()

Dim n As Integer

Dim i As Integer, j As Integer, p As Integer

Dim Mass() As Integer

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

ReDim Mass(n)

Dim str_msg1 As String, str_msg2 As String

str_msg1 = "": str_msg2 = ""

For i = 1 To n

Mass(i) = InputBox("Введите значение " & i & "-го элемента массива", " Ввод элементов массива ")

str_msg1 = str_msg1 & Mass(i) & ", "

Next i

For j = n - 1 To 2 Step -1

For i = 1 To j

If Mass(i) > Mass(i + 1) Then

p = Mass(i + 1): Mass(i + 1) = Mass(i): Mass(i) = p

End If

Next i

Next j

For i = 1 To n

str_msg2 = str_msg2 & Mass(i) & ", "

Next i

MsgBox "Исходный массив:" & Chr(13) & str_msg1 & Chr(13) & "Отсортированный массив:" & Chr(13) & str_msg2, , "Результат"

End Sub

Результат:

 

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

Для выбора кратных чисел используем следующее соображение: делимое делится без остатка на делитель в том случае, когда целая часть такой дроби равна самой дроби. В QB подобное сравнение можно записать, используя элементарную функцию INT. Так, если А (I) – элемент массива, а М – делитель, условный оператор будет иметь следующий вид:

 

IF INT(a(i) / m) = a(i) / m THEN PRINT i, a(i)

 

Для уменьшения количества циклов ввод элементов массива и проверку делимости объединим в один цикл.

 

Sub Para()

Dim n As Integer, m As Integer

Dim i As Integer

Dim Mass() As Integer

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

ReDim Mass(n)

Dim str_msg As String

str_msg = ""

For i = 1 To n

Mass(i) = InputBox("Введите значение " & i & "-го элемента массива", " Ввод элементов массива ")

Next i

m = InputBox("Введите целое положительное число")

For i = 1 To n

If Int(Mass(i) / m) = Mass(i) / m Then str_msg = str_msg & "i= " & i & " Mass(i)= " & Mass(i) & ", " & Chr(13)

Next i%

MsgBox "Ответ:" & Chr(13) & str_msg

End Sub

 

Результат:

Алгоритмы, предназначенные, для обработки двумерных массивов могут быть структурированы как:

– алгоритмы поиска;

– алгоритмы выборки;

– алгоритмы сортировки;

– алгоритмы преобразования матрицы.

Пример 33. Дана матрица N x M, состоящая из натуральных чисел. Найти в ней наименьший элемент и определить его местоположение. Если таких элементов несколько, то вывести на экран положение каждого из них.

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

1. вводим размеры массива MAS и значения его элементов;

2. просматриваем элементы массива, ищем минимальное значение и запоминаем значение индексов;

3. считаем количество минимальных элементов;

4. в зависимости от К либо выводим информацию о единственном минимальном элементе, либо организуем повторный просмотр массива MAS для вывода информации о всех минимальных элементах.

 

Sub Min()

Dim n As Integer, m As Integer, k As Integer

Dim i As Integer

Dim Mass() As Integer

Dim min As Integer, imin As Integer, jmin As Integer

n = InputBox("Введите количество строк")

m = InputBox("Введите количество столбцов")

ReDim Mass(n, m)

Dim str_msg As String

str_msg = ""

k = 0

'ввод массива

For i = 1 To n

For j = 1 To m

Mass(i, j) = InputBox("Введите значение для " & "элемента (" & i & "," & j & ") ", "Ввод элементов массива; строка " & i)

Next j

Next i

'поиск минимумов и их подсчет

min = Mass(1, 1)

imin = 1: jmin = 1: k = 0

For i = 1 To n

For j = 1 To m

If min = Mass(i, j) Then k = k + 1

If Mass(i, j) < min Then k = 1: imin = i: jmin = j: min = Mass(i, j)

Next j

Next i

str_msg = str_msg & "Количество минимальных элементов " & k & Chr(13)

If k = 1 Then

str_msg = str_msg & " i = " & imin & " j = " & jmin & " min = " & min

ElseIf k > 1 Then

For i = 1 To n

For j = 1 To m

If Mass(i, j) = min Then

str_msg = str_msg & " i = " & i & " j = " & j & " min = " & min & Chr(13)

End If

Next j

Next i

End If

MsgBox "Ответ:" & Chr(13) & str_msg

End Sub

 

Результат:

 

 

Пример 34. Дана матрица N x M состоящая из натуральных чисел. Выбрать в строках самые левые наименьшие элементы и поставить их в первый столбец.

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

 

Sub Min()

Dim n As Integer, m As Integer, k As Integer

Dim i As Integer, j As Integer

Dim Mass() As Integer

Dim Min As Integer, jmin As Integer

n = InputBox("Введите количество строк")

m = InputBox("Введите количество столбцов")

ReDim Mass(n, m)

Dim str_msg As String, str_msg1 As String

str_msg = "": str_msg1 = ""

'ввод массива и подготовка вывода на печать

For i = 1 To n

For j = 1 To m

Mass(i, j) = InputBox("Введите значение для " & "элемента (" & i & "," & j & ") ", "Ввод элементов массива; строка " & i)

str_msg = str_msg & Mass(i, j) & ","

Next j

str_msg = str_msg & Chr(13)

Next i

For i = 1 To n

Min = Mass(i, 1)

jmin = 1

For j = 1 To m - 1

If Mass(i, j) < Min Then jmin = j: Min = Mass(i, j)

Next j

k = Mass(i, 1): Mass(i, 1) = Mass(i, jmin): Mass(i, jmin) = k

Next i

For i% = 1 To n%

For j% = 1 To m%

str_msg1 = str_msg1 & Mass(i, j) & ","

Next j

str_msg1 = str_msg1 & Chr(13)

Next i

MsgBox "Исходный массив: " & Chr(13) & str_msg & Chr(13) & "Преобразованный массив: " & Chr(13) & str_msg1

End Sub

 

Результат:

 

Пример 35. Дана матрица N x M. Отсортировать каждую строку в порядке возрастания.

Решение. Для решения задачи:

1. вводим размеры массива MAS и значения его элементов;

2. просматриваем строки массива и упорядочиваем их;

3. выводим матрицу на экран.

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

Sub Sortirovka()

Dim n As Integer, m As Integer, k As Integer, p As Integer

Dim i As Integer, j As Integer

Dim Mass() As Integer

Dim Min As Integer, jmin As Integer

n = InputBox("Введите количество строк")

m = InputBox("Введите количество столбцов")

ReDim Mass(n, m)

Dim str_msg As String, str_msg1 As String

str_msg = "": str_msg1 = ""

'ввод массива и подготовка вывода на печать

For i = 1 To n

For j = 1 To m

Mass(i, j) = InputBox("Введите значение для " & "элемента (" & i & "," & j & ") ", "Ввод элементов массива; строка " & i)

str_msg = str_msg & Mass(i, j) & ","

Next j

str_msg = str_msg & Chr(13)

Next i

For i = 1 To n

'сортировка одномерного массива

For k = m - 1 To 2 Step -1

For j = 1 To k

If Mass(i, j) > Mass(i, j + 1) Then

p = Mass(i, j): Mass(i, j) = Mass(i, j + 1): Mass(i, j + 1) = p

End If

Next j

Next k

Next i

'подготовка к печати отсортированного массива

For i = 1 To n

For j = 1 To m

str_msg1 = str_msg1 & Mass(i, j) & ","

Next j

str_msg1 = str_msg1 & Chr(13)

Next i

MsgBox "Матрица до преобразования: " & Chr(13) & str_msg & Chr(13) & "Матрица после преобразования: " & Chr(13) & str_msg1

End Sub

 

Решение:

 









Дата добавления: 2015-08-14; просмотров: 877;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.043 сек.