Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.08.2018, 17:36   #1
Firstaid
Пользователь
 
Регистрация: 05.04.2018
Сообщений: 27
Восклицание [Visual Basic 6.0]Дан двумерный массив 7х7. Вывести его на экран и подсчитать количество одинаковых элементов.

Доброго времени суток всем.

У меня такое задание в Visual Basic: Дан двумерный массив 7х7. Вывести его на экран и подсчитать количество одинаковых элементов.

Вот код, который я написал:

Код:
Dim Am(1 To 7, 1 To 7) As Double
Private Sub Command1_Click()

Picture2.Cls

Am_Min = -30
Am_Max = 30
k = 0

' Генерация массива '

For i = 1 To 7

For j = 1 To 7

Am(i, j) = Am_Min + Int(Rnd * (Am_Max - Am_Min))


Next
Next

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

For i = 2 To 7

For j = 7 To 2

If Am(i, j) = Am(i + 1, j - 1) Then k = k + 1 Else k = 0

Next
Next

For i = 3 To 7

For j = 7 To 3

If Am(i, j) = Am(i + 1, j - 1) Then k = k + 1 Else k = 0

Next
Next

For i = 4 To 7

For j = 7 To 4

If Am(i, j) = Am(i + 1, j - 1) Then k = k + 1 Else k = 0

Next
Next

For i = 5 To 7

For j = 7 To 5

If Am(i, j) = Am(i + 1, j - 1) Then k = k + 1 Else k = 0

Next
Next

For i = 6 To 7

For j = 7 To 6

If Am(i, j) = Am(i + 1, j - 1) Then k = k + 1 Else k = 0

Next
Next

Picture2.Print k 'Вывод количества одинаковых элементов'

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

For i = 1 To 7

For j = 1 To 7

result = result & Str(Am(i, j)) & Chr(13)

Text1 = result

Next
Next


End Sub
Теперь, собственно в чем проблема. Проблема в подсчете количества одинаковых элементов под побочной диагональю. Я придумал вот такой алгоритм:

Код:
'Поиск одинаковых элементов под побочной диагональю'

For i = 2 To 7

For j = 7 To 2

If Am(i, j) = Am(i + 1, j - 1) Then k = k + 1 Else k = 0

Next
Next

For i = 3 To 7

For j = 7 To 3

If Am(i, j) = Am(i + 1, j - 1) Then k = k + 1 Else k = 0

Next
Next

For i = 4 To 7

For j = 7 To 4

If Am(i, j) = Am(i + 1, j - 1) Then k = k + 1 Else k = 0

Next
Next

For i = 5 To 7

For j = 7 To 5

If Am(i, j) = Am(i + 1, j - 1) Then k = k + 1 Else k = 0

Next
Next

For i = 6 To 7

For j = 7 To 6

If Am(i, j) = Am(i + 1, j - 1) Then k = k + 1 Else k = 0

Next
Next
Суть его в чем, цикл проверяет каждый элемент, двигаясь по диагонали от 2,7 до 7,2, от 3,7 до 7,3 и т.д. Но дело в том, что он почему-то не работает, не считает количество одинаковых элементов. Может подкинете мне еще идею, как наиболее эффективно это сделать(только просьба с комментариями вот в таких скобках ' ', чтобы я понял что к чему), чтобы алгоритм работал.

P.S. И еще хотелось бы, чтобы массив в TextBox был не сплошной строкой, а разделялся нормально и выглядил как нормальная матрица.

Всем заранее спасибо за помощь!

_____
Код программы нужно выделять (форматировать) тегами [CODE] (читать FAQ)
Модератор
Изображения
Тип файла: png Окно.PNG (8.7 Кб, 104 просмотров)

Последний раз редактировалось Serge_Bliznykov; 02.08.2018 в 18:00.
Firstaid вне форума Ответить с цитированием
Старый 02.08.2018, 18:02   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

везде else k=0 нужно выкинуть ОДНОЗНАЧНО!

перед проверкой нужно ОДИН раз обнулить K
Serge_Bliznykov вне форума Ответить с цитированием
Старый 02.08.2018, 22:44   #3
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,304
По умолчанию

Цитата:
P.S. И еще хотелось бы, чтобы массив в TextBox был не сплошной строкой, а разделялся нормально и выглядел как нормальная матрица.
Используйте vbNewLine или vbCrLf после формирования каждой строки.
Мне не удалось понять фразу:
Цитата:
... подсчитать количество одинаковых элементов
Это как?
Если есть элементы со значениями 2, 2, 3, 6, 3, 3, 4, 6, 6, 4
То сколько тут одинаковых элементов?
И ещё. А как будет работать алгоритм, если матрица будет 6х6 или 10х10?
Можно пойти сложным путём перебора, когда два цикла определяют номер строки и столбца элемента, с которым выполняется сравнение, а два других (более вложенных) перебирают остальные элементы.
Попроще - это организовать одномерный массив, в который скопировать все нужные элементы и далее поработать с ним, предварительно отсортировав.
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 03.08.2018, 12:27   #4
Firstaid
Пользователь
 
Регистрация: 05.04.2018
Сообщений: 27
По умолчанию

Цитата:
Сообщение от ViktorR Посмотреть сообщение
Мне не удалось понять фразу:

Подсчитать количество одинаковых элементов в матрице 7х7

Это как?
Если есть элементы со значениями 2, 2, 3, 6, 3, 3, 4, 6, 6, 4
То сколько тут одинаковых элементов?
Я объясню поподробнее. Тут надо посчитать количество элементов с одинаковыми значениями под побочной диагональю. Это например Am(2,7) = 5, Am(3,6) = 5, Am(4,5) = 5, т.е. посчитать, сколько элементов под побочной диагональю имеет одинаковое значение.

Матрица по условию строго 7х7, N и M не меняются. Там даже в описании переменных написано 1 To 7
Firstaid вне форума Ответить с цитированием
Старый 03.08.2018, 12:47   #5
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Firstaid
ответьте на вопрос
Цитата:
есть элементы со значениями 2, 2, 3, 6, 3, 3, 4, 6, 6, 4
То сколько тут одинаковых элементов?
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 03.08.2018, 13:23   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Aleksandr H. Посмотреть сообщение
ответьте на вопрос
Цитата:
Сообщение от ViktorR Посмотреть сообщение
Если есть элементы со значениями 2, 2, 3, 6, 3, 3, 4, 6, 6, 4
То сколько тут одинаковых элементов?
и поясните свой ответ (почему именно так посчитали).
Serge_Bliznykov вне форума Ответить с цитированием
Старый 04.08.2018, 12:09   #7
Firstaid
Пользователь
 
Регистрация: 05.04.2018
Сообщений: 27
По умолчанию

Цитата:
Сообщение от Aleksandr H. Посмотреть сообщение
Firstaid
ответьте на вопрос
Мда, теперь я понял, насколько тупое задание мне дали. В этом случае сложно будет сказать. Но у меня диапазон от -30 до 30, поэтому считать кол-во одинаковых элементов будет проще. Только как это сделать лучше? Мой способ какой-то извращенский
Firstaid вне форума Ответить с цитированием
Старый 04.08.2018, 12:18   #8
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Цитата:
Сообщение от Firstaid Посмотреть сообщение
Но у меня диапазон от -30 до 30, поэтому считать кол-во одинаковых элементов будет проще
вот вам матрица, с элементами от -30 до 30. Какой результат хотитете получить? Одно число! И ход вашего решения
Код:
-  - - - x
-  - - x 2
-  - x 2 3
-  x 6 3 3
x  4 6 6 4
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 06.08.2018, 13:44   #9
Firstaid
Пользователь
 
Регистрация: 05.04.2018
Сообщений: 27
По умолчанию

Цитата:
Сообщение от Aleksandr H. Посмотреть сообщение
вот вам матрица, с элементами от -30 до 30. Какой результат хотитете получить? Одно число! И ход вашего решения
Код:
-  - - - x
-  - - x 2
-  - x 2 3
-  x 6 3 3
x  4 6 6 4
А если например(плюс еще расширить диапазон):

Код:
-  - - - x
-  - - x 16
-  - x 24 56
-  x 16 33 36
x  76 45 16 14
тут например 3 раза попалось 16
Firstaid вне форума Ответить с цитированием
Старый 06.08.2018, 14:04   #10
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

А на конкретный вопрос из #8 слабо ответить?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подсчитать и вывести на экран общее количество отрицательных элементов, определить в какой из матриц среднее арифметическое значение прочих элементов имеет большую величину. rustorkan PHP 0 14.01.2018 19:29
Visual Basic. Подсчитайте, каково наибольшее количество одинаковых элементов следуют подряд в массиве. makslim Помощь студентам 4 24.06.2015 15:32
Дан целочисленный массив размера N. Найти максимальное количество его одинаковых элементов. nadyaH Помощь студентам 10 20.03.2014 10:15
Дан целочисленный массив размера N. Определить максимальное количество его одинаковых элементов. cheburashkaRF PHP 10 03.02.2014 12:35
Дан целочисленный массив размера N, содержащий ровно два одинаковых элемента. Найти номера одинаковых элементов и вывести эти номе Alexar Makken Паскаль, Turbo Pascal, PascalABC.NET 1 23.12.2011 22:07