Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 28.11.2012
Сообщений: 45

Как исключить из одномерного массива max и min?

18.03.2013, 13:25. Показов 2726. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Из данного массива A(n) исключить максимальный и минимальный элемент
Задача элементарная, но я тупо забыл как работать в VB)))
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.03.2013, 13:25
Ответы с готовыми решениями:

Max и Min одномерного массива и их индексы
Max и Min одномерного массива и их индексы. При наличии в массиве отрицательного числа программа работает как надо с одним циклом...

Нахождение разности между max и min элементами одномерного массива
Люди добрые помогите пожалуйста решить задачу: Составить программу нахождения разности между max и min элементами одномерного массива

Описать функцию F (a, min, max ) определяющую значение максимального max и минимального min элементов этого массива
Помогите с задачкой! плиз! Для вещественного массива а, описать функцию F (a, min, max ) определяющую значение максимального max и...

17
 Аватар для morgann55
1365 / 207 / 37
Регистрация: 09.02.2012
Сообщений: 745
18.03.2013, 15:14
Совсем ВСЁ забыл ?? Как перебрать элементы массива хоть помнишь ??
Поиск по разделу знаешь где находится ??
0
0 / 0 / 0
Регистрация: 28.11.2012
Сообщений: 45
18.03.2013, 16:06  [ТС]
Вообще все забыл, долго не практиковался, можешь код написать?

Добавлено через 51 минуту
Уже искал, как видишь
0
 Аватар для morgann55
1365 / 207 / 37
Регистрация: 09.02.2012
Сообщений: 745
18.03.2013, 16:30
Ну ты хоть ЭТО видел ?? Там находят min и max....
https://www.cyberforum.ru/post3899654.html
0
0 / 0 / 0
Регистрация: 28.11.2012
Сообщений: 45
18.03.2013, 18:03  [ТС]
Да мне там половину кода убирать придется

Добавлено через 1 минуту
И мне мало найти min и max, мне их еще исключить надо, препод му*ак редкостный, под конец учебы решил нагадить нам

Добавлено через 58 секунд
Дан массив R из N элементов. Исключить максимальный и минимальный элементы
вот то что мне нужно, но это QB, а не VB
0
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
18.03.2013, 19:55
Цитата Сообщение от Overdrive Посмотреть сообщение
вот то что мне нужно, но это QB, а не VB
На VB то же самое
Можно добавить после 22 строки
Visual Basic
1
redim preserve R(k)
, а 24 строка
Visual Basic
1
FOR i = 1 TO k
0
0 / 0 / 0
Регистрация: 28.11.2012
Сообщений: 45
18.03.2013, 21:59  [ТС]
А можно код под VB скинуть? У меня мозг уже отказывается работать
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38173 / 21108 / 4307
Регистрация: 12.02.2012
Сообщений: 34,706
Записей в блоге: 14
20.03.2013, 12:14
Я посмотрел этот код на QB... Он неполон - там исключается один минимум и один максимум, но эти числа могут встречаться в массиве многократно...Правильнее так:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
Sub Fill_Arr(A() As Integer)
    n% = UBound(A, 1)
    Randomize
    For i% = 1 To n%
        A(i%) = 10 * Rnd
    Next i%
End Sub
 
Sub Del_max_min(A() As Integer, n As Integer)
    n = UBound(A, 1)
    mi% = A(1)
    ma% = A(1)
    For i% = 2 To n%
        If A(i%) < mi% Then mi% = A(i%)
        If A(i%) > ma% Then ma% = A(i%)
    Next i%
    i% = 1
    Do
      If A(i%) = mi% Or A(i%) = ma% Then del_el A(), n, i%
      i% = i% + 1
      If i% > n Then Exit Do
    Loop
End Sub
 
Sub del_el(A() As Integer, n As Integer, k As Integer)
    If n = k Then
       n = n - 1
       Exit Sub
    Else
       For i% = k To n - 1
           A(i%) = A(i% + 1)
       Next i%
       n = n - 1
    End If
End Sub
 
Sub Test()
Dim A(1 To 20) As Integer
    n% = 20
    Fill_Arr A()
    Debug.Print "Исходный массив:"
    For i% = 1 To 20
        Debug.Print "A("; i%; ")="; A(i%)
    Next i%
    Del_max_min A(), n%
    Debug.Print "После удаления:"
    For i% = 1 To n%
        Debug.Print "A("; i%; ")="; A(i%)
    Next i%
End Sub
Можно это сделать и за один просмотр...
1
0 / 0 / 0
Регистрация: 28.11.2012
Сообщений: 45
20.03.2013, 12:22  [ТС]
Благодарю за решение, но мне препод не поверит что я это я делал
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18031 / 7734 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
20.03.2013, 19:46
Catstail,
Строки 27-30 - можно и без защиты. VB ведь не вызывает ошибки, если 2-й параметр цикла меньше при Step +1.
Строка 40 - лишняя или привычка C++ стиля инициализации. Ах, видно как рука набита писать на одном дыхании
Все хотел спросить у Вас: Вы не пользуетесь Loop Until, Loop While - это привычка?

P.S. красивый код.
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38173 / 21108 / 4307
Регистрация: 12.02.2012
Сообщений: 34,706
Записей в блоге: 14
20.03.2013, 19:59
Цитата Сообщение от Dragokas Посмотреть сообщение
Вы не пользуетесь Loop Until, Loop While - это привычка?
- увы, да... На что мне неоднократно указывали.

Добавлено через 2 минуты
Цитата Сообщение от Dragokas Посмотреть сообщение
Ах, видно как рука набита писать на одном дыхании
- да ладно... ПерехвАлите.
0
6644 / 1511 / 169
Регистрация: 09.01.2010
Сообщений: 4,298
20.03.2013, 20:32
Catstail,
хотел спросить
что делает стока 40 в коде
и как быть, например, при
Visual Basic
1
2
3
4
5
6
Sub Fill_Arr(A() As Integer)
n% = UBound(A, 1)
    'Randomize
    For i% = 1 To n%
        A(i%) = 10
    Next i%
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38173 / 21108 / 4307
Регистрация: 12.02.2012
Сообщений: 34,706
Записей в блоге: 14
20.03.2013, 20:48
Про строку 40... Вероятно, без нее можно обойтись. Что же случая одинаковых значений, то да, Вы правы. Нужно вот так:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Sub Del_max_min(A() As Integer, n As Integer)
    n = UBound(A, 1)
    mi% = A(1)
    ma% = A(1)
    For i% = 2 To n%
        If A(i%) < mi% Then mi% = A(i%)
        If A(i%) > ma% Then ma% = A(i%)
    Next i%
    i% = 1
    Do
      If A(i%) = mi% Or A(i%) = ma% Then
         del_el A(), n, i%
         i% = i% - 1
      End If
      i% = i% + 1
      If i% > n Then Exit Do
    Loop
End Sub
Добавлено через 1 минуту
Цитата Сообщение от Catstail Посмотреть сообщение
да ладно... ПерехвАлите.
- что я говорил...
1
6644 / 1511 / 169
Регистрация: 09.01.2010
Сообщений: 4,298
20.03.2013, 21:49
эти ошибки я называю, 7х8=48 и все тут
на счет стр 40, как бы затруднительно задать размер массива не 20
рискну альтернативный вариант показать /не уверен, что все ситуации учтены/
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
Function max_min(A(), pr%)
Dim i%
    max_min = A(1)
    For i = 2 To UBound(A)
        If max_min * pr < A(i) * pr Then max_min = A(i)
    Next i
End Function
 
Sub del_el(A(), b)
Dim i%, j%, k%
 
       For i = 1 To UBound(A)
          Do While A(i) = b
             k = k + 1
              If UBound(A) - k < i Then
                 Exit For
              End If
               For j = i To UBound(A) - k
                  A(j) = A(j + 1)
               Next j
          Loop
       Next i
 ReDim Preserve A(UBound(A) - k)
End Sub
 
 
 
Private Sub Command1_Click()
Dim i%, n%
    Cls
    n = 3
    ReDim A(n)
    Randomize (Timer)
    For i = 1 To n
        A(i) = Int(Rnd * 10) - 5
        'A(i) = 10
        Print A(i); vbTab;
    Next i
    Print: Print
    Max = max_min(A(), 1)
    Min = max_min(A(), -1)
    Print "Max="; Max; vbTab; "Min="; Min
       Call del_el(A(), Min)
       Call del_el(A(), Max)
          If UBound(A) = 0 Then
             MsgBox "Null": Exit Sub
          Else
             Print: Print
             For i = 1 To UBound(A)
                 Print A(i); vbTab;
             Next i
          End If
End Sub
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18031 / 7734 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
20.03.2013, 23:40
Еще вариант:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
Option Explicit
Declare Function SafeArrayGetDim Lib "oleaut32.dll" (ByRef saArray() As Any) As Long
 
Private Sub Fill_Array(ByRef A() As Long, ByVal Bound As Long, _
    ByVal nFrom As Long, ByVal nTo As Long, _
    ByRef min As Long, ByRef max As Long)
    'Bound 'кол-во эл-тов
    'nFrom 'диапазон - от
    'nTo 'диапазон - до (включительно)
    'min 'буфер для получения мин. числа
    'max 'буфер для получения макс. числа
    Dim n As Long
    ReDim A(Bound)
    min = nFrom: max = nTo
    
    For n = 0 To Bound
        A(n) = Int(Rnd * (nTo - nFrom + 1)) + nFrom
        If A(n) > max Then max = A(n)
        If A(n) < min Then min = A(n)
    Next
End Sub
 
Private Function Del_min_max(ByRef A() As Long, ByVal min As Long, ByVal max As Long)
    Dim B() As Long
    Dim n As Long
    Dim c As Long
    ReDim B(UBound(A))
    
    For n = 0 To UBound(A)
        If A(n) <> max And A(n) <> min Then
            B(c) = A(n)
            c = c + 1
        End If
    Next
    
    If c = 0 Then Erase B() Else ReDim Preserve B(c - 1)
    Del_min_max = B()
End Function
 
Public Sub main()
    Dim A() As Long
    Dim min As Long 'буфер для получения мин. числа
    Dim max As Long 'буфер для получения макс. числа
    Dim n As Long
    
    Call Fill_Array(A(), 20, 0, 9, min, max)
    
    Debug.Print "Исходный массив:"
    For n = 0 To UBound(A)
        Debug.Print "A("; n; ")="; A(n)
    Next
    
    A() = Del_min_max(A(), min, max)
    
    Debug.Print "После удаления:"
    If SafeArrayGetDim(A) <> 0 Then
        For n = 0 To UBound(A)
            Debug.Print "A("; n; ")="; A(n)
        Next
    End If
End Sub
0
6644 / 1511 / 169
Регистрация: 09.01.2010
Сообщений: 4,298
20.03.2013, 23:52
Dragokas, это я что то не так делаю
1) A(n) = n \ 10 ' Int(Rnd * (nTo - nFrom + 1)) + nFrom
2) Call Fill_Array(A(), 5, 0, 9, min, max)
1
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18031 / 7734 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
21.03.2013, 00:19
gaw, спасибо.

Да, ошибся. Строки 14-15 нужно заменить на это:
Visual Basic
14
15
    min = nTo: max = nFrom
    Randomize
0
6644 / 1511 / 169
Регистрация: 09.01.2010
Сообщений: 4,298
21.03.2013, 01:02
при отрицательных знач мб ошибочный вывод
особенно для Call Fill_Array(A(), 2, 0, 9, min, max)

Добавлено через 27 минут
и у себя нашел недочет
казалось бы простенькая задачка
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
Function max_min(a(), pr%)
Dim i%
    If UBound(a) > 0 Then
    max_min = a(1)
    For i = 2 To UBound(a)
        If max_min * pr < a(i) * pr Then max_min = a(i)
    Next i
    End If
End Function
 
Sub del_el(a(), b)
Dim i%, j%, k%
       For i = 1 To UBound(a)
          Do While a(i) = b
             k = k + 1
              If UBound(a) - k < i Then Exit For
               For j = i To UBound(a) - k
                  a(j) = a(j + 1)
               Next j
          Loop
       Next i
 ReDim Preserve a(UBound(a) - k)
End Sub
Sub prt(a(), g As Boolean)
Print IIf(g, "Inp", "Result")
For i = 1 To UBound(a)
If g Then a(i) = Int(Rnd * 10) - 5  'A(i) = 10
        Print a(i); vbTab;
Next i
    Print: Print
End Sub
 
 
Private Sub Command1_Click()
Dim i%, n%
    Me.Cls: n = 3: Randomize (Timer)
    ReDim a(n)
Call prt(a, True)
    Call del_el(a(), max_min(a(), -1))
    Call del_el(a(), max_min(a(), 1))
Call prt(a, False)
End Sub
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.03.2013, 01:02
Помогаю со студенческими работами здесь

Процедура: Даны три числа a,b,c. Вычислить (max(a,b)+min(a,c))/(max(b,c)*min(a,b))+max(min(a,b),min(b,c))
Даны три числа a,b,c. Вычислить (max(a,b)+min(a,c))/(max(b,c)*min(a,b))+max(min(a,b),min(b,c)) с помощью использования процедур.

Найти max и min элементы массива y и сформировать массив z из элементов массива y, находящихся между max и min y. Записать массив z в обратном порядке
Дан массив Х{80 элементов}. Вычислить {y}_{i}=sin\sqrt{{x}_{i}}+{cos}^{2}{{x}_{1}}^{2} Найти max и min элементы массива y и...

Вычислить Z=(X[max]-Y[min])/2, где Х[max] - максимальный элемент массива Х(50), Y[min] - минимальный элемент массива Y(40)
помогите пожалуйста: Вычислить Z=(X-Y)/2, где Х - максимальный элемент массива Х(50), Y - минимальный элемент массива Y(40). X и Y...

Найти min элемент одномерного массива описав процедуры ввода элементов массива, процедура нахождения min элемента массива.
Можете глянуть две задачки на pascale ? 1)Определить сумму элементов, массива целых чисел размерностью 15, элементов с 1 по 12 и с 8 по...

Как определить Min и Max значения массива?
Имеется некий одномерный массив, к примеру ArrMain(1 To 100). Как определить в пределах данной процедуры максимальное (и минимальное)...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru