Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / MAX функция в VB6 / 13 сообщений из 13, страница 1 из 1
08.09.2009, 18:42
    #36184875
h7h2vC
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MAX функция в VB6
День добрый.
Подскажите пожлста быстрый алгоритм MAX функции для vb6. Аргументы - целые числа

Спасибо.
...
Рейтинг: 0 / 0
08.09.2009, 18:45
    #36184885
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MAX функция в VB6
> Автор: h7h2vC
> День добрый.
> Подскажите пожлста быстрый алгоритм MAX функции для vb6. Аргументы - целые числа

А что старый, добрый IF уже не поддерживается? :-o


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
09.09.2009, 08:49
    #36185411
h7h2vC
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MAX функция в VB6
Игорь Горбонос, требуется функция для произвольного числа аргументов. Если это можно сделать старым добрым IF`ом - подскажите пож-лста как
...
Рейтинг: 0 / 0
09.09.2009, 10:15
    #36185571
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MAX функция в VB6
> Автор: h7h2vC
> Игорь Горбонос, требуется функция для произвольного числа аргументов. Если это можно сделать старым добрым
> IF`ом - подскажите пож-лста как

Что значит для произвольного? Или ты умеешь "дописывать" на лету работающую программу?
В любом случае данные будут в массиве/рекордсете/коллекции делаешь полный цикл по набору данных и простым IF'ом находишь
минимум/максимум/среднее( ну что нужно ). Это если набор данных не отсортирован, а если сортирован - тогда в зависимости
от сортировки максимум будет или первое или последнее число в отсортированном наборе.


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
09.09.2009, 10:32
    #36185608
h7h2vC
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MAX функция в VB6
Игорь ГорбоносЧто значит для произвольного? Или ты умеешь "дописывать" на лету работающую программу?
В любом случае данные будут в массиве/рекордсете/коллекции делаешь полный цикл по набору данных и простым IF'ом находишь
минимум/максимум/среднее( ну что нужно ).Только честно - Вы действительно считаете что сделали доброе (или хотя бы полезное кому-то) дело, написав это сообщение?

"Дописывать на лету" - я задачи себе не ставлю.
"Для произвольного" значит функция должна брать массив аргументов и среди них находить максимальный (MAX=MYFUNC(3,2,5,0))
Нашел такую функцию:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Function Max(ParamArray avValues() As Variant) As Variant
    Dim vThisItem As Variant, vThisElement As Variant
    
    On Error Resume Next
    For Each vThisItem In avValues
        If IsArray(vThisItem) Then
            For Each vThisElement In vThisItem
                Max = Max(vThisElement, Max)
            Next
        Else
            If vThisItem > Max Then
                If Not IsEmpty(vThisItem) Then
                    Max = vThisItem
                End If
            ElseIf IsEmpty(Max) Then
                Max = vThisItem
            End If
        End If
    Next
    On Error GoTo  0 
End Function
В ней повсеместно используются переменные типа Variant. Что мне было интересно - можно ли оптимизировать алгоритм, зная что аргументы - это исключительно целые числа.
...
Рейтинг: 0 / 0
09.09.2009, 10:47
    #36185659
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MAX функция в VB6
Код: plaintext
1.
2.
3.
4.
5.
6.
Function Max(ParamArray avValues() As Variant) As Long
dim x as long, vThisItem as long
For x =  0  to ubound(avValues)
    vThisItem = avValues(x)
    If vThisItem > Max Then Max = vThisItem
Next
end Function

Jah loves you.
...
Рейтинг: 0 / 0
09.09.2009, 10:52
    #36185675
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MAX функция в VB6
> Автор: h7h2vC
> Игорь Горбонос
> Что значит для произвольного? Или ты умеешь "дописывать" на лету работающую программу?
> В любом случае данные будут в массиве/рекордсете/коллекции делаешь полный цикл по набору данных и простым
> IF'ом находишь
> минимум/максимум/среднее( ну что нужно ).
> Только честно - Вы действительно считаете что сделали доброе (или хотя бы полезное кому-то) дело, написав это
> сообщение?

А разве это не так? Ты нашел функцию, которая берет массив аргуметнов и потом делает полный цикл по
массиву
и простым IF'ом находит максимум Где я ошибся?

> "Для произвольного" значит функция должна брать массив аргументов и среди них находить максимальный
> (MAX=MYFUNC(3,2,5,0))

тогда уж лучше так записывать:
Код: plaintext
MAX=MYFUNC(Array( 3 , 2 , 5 , 0 ))

> Нашел такую функцию:

Хорошая универсальная функция

> Что мне было интересно - можно ли оптимизировать алгоритм, зная что аргументы - это исключительно целые числа.

Можно, потому, что в функции есть возможность находить максимум при передаче в неё массива массивов, а при целых числах
такого уже не получится.


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
09.09.2009, 11:03
    #36185704
h7h2vC
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MAX функция в VB6
Antonariy, спасибо
...
Рейтинг: 0 / 0
09.09.2009, 11:12
    #36185738
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MAX функция в VB6
Игорь Горбонос
Хорошая универсальная функция
Узкоспециализированная (для источников разнородных данных, например рекордсетов), тормозная (For Each, Variant и тьма его проверок) и бессмысленная (не представляю, что больше, "кирпич" или второе февраля) функция. Даже ради массива массивов я бы не стал юзать эту жуть.
...
Рейтинг: 0 / 0
09.09.2009, 11:27
    #36185798
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MAX функция в VB6
> Автор: Antonariy
> Узкоспециализированная (для источников разнородных данных, например рекордсетов), тормозная (For Each, Variant и
> тьма его проверок) и бессмысленная (не представляю, что больше, "кирпич" или второе февраля) функция. Даже ради
> массива массивов я бы не стал юзать эту жуть.

Как раз очень даже универсальная, но из-за этой универсальности, согласен с тобой, жуть


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
06.03.2012, 16:08
    #37693765
veronicavvl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MAX функция в VB6
Подскажите, пожалуйста.
У меня есть файл CSV (2 колонки). (ConsumerID, ConsumerName)
И таблица данных Consumer.mdb (DB "Card"), где колонок намного больше. Мне надо прочитать данные из файла CSV и занести данные только в две колонки таблицы. Читать и выдавать сообщение с данными (целой строкой и по полям) у меня получается, а как внести информацию в колонки, до меня не доходит. Навроде, в интернете все перерыла на предмет примеров, а "мое" не получается.

Код: vbnet
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.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
Imports System.IO

Public Class Form1

      Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim textFileStream As New IO.FileStream("Z:\Control\vb\spisok.csv", IO.FileMode.OpenOrCreate,
                       IO.FileAccess.ReadWrite, IO.FileShare.None)
        Dim myFileWriter As New IO.StreamWriter(textFileStream)
        Dim myFileReader As New IO.StreamReader(textFileStream)
        Dim intCounter As Integer
        Dim strFileContents As String
        Dim separator As String

            While Not myFileReader.EndOfStream()
            strFileContents = myFileReader.ReadLine()
                                  MessageBox.Show(strFileContents)
                ''strFileContents = myFileReader.ReadToEnd()
            End While
                     myFileWriter.Close()
            myFileReader.Close()
            textFileStream.Close()

    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim strFileContents As String

        Dim dsNewRow As DataRow = CardDataSet.Tables("Consumer").NewRow()
        'Dim x As DataColumn = CardDataSet.Tables("Consumer").NewRow()


        Using parser As New Microsoft.VisualBasic.FileIO.TextFieldParser("Z:\Control\vb\spisok.csv")
            parser.SetDelimiters(";")
            Dim i As Integer
            i = 0

            While Not parser.EndOfData

                            MessageBox.Show(parser.ReadFields(i + 1))
                dsNewRow("f_ConsumerName") = "fffff"    'не работает
              
            End While
        End Using

    End Sub

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        Dim dsNewRow As DataRow = CardDataSet.Tables("Consumer").NewRow()

        Using MyReader As New Microsoft.VisualBasic.
                             FileIO.TextFieldParser(
                               "Z:\Control\vb\spisok.csv")


            MyReader.TextFieldType = FileIO.FieldType.Delimited
            MyReader.SetDelimiters(";")

            Dim currentRow As String()
            Dim i As Integer
            i = 0
            While Not MyReader.EndOfData
                Try


                    currentRow = MyReader.ReadFields()
                    Dim currentField As String
                    For Each currentField In currentRow
                        i = i + 1
                        If i > 2 Then
                            MsgBox(currentField)
                     
                        End If
                        Next
                Catch ex As Microsoft.VisualBasic.
                            FileIO.MalformedLineException
                    MsgBox("Line " & ex.Message &
                    "is not valid and will be skipped.")
                End Try


            End While
        End Using
    End Sub

    Private Sub ConsumerBindingNavigatorSaveItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ConsumerBindingNavigatorSaveItem.Click
        Me.Validate()
        Me.ConsumerBindingSource.EndEdit()
        Me.TableAdapterManager.UpdateAll(Me.CardDataSet)

    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
               Me.ConsumerTableAdapter.Fill(Me.CardDataSet.Consumer)

    End Sub

    End Class



Т.е., если я избавляюсь от сепараторов, то не знаю, как без них определить, в какой я, вообще, колонне в CSV.
Мне кажется, что проще разбить текущую строку "читать до сепаратора", но не знаю, как ето правильно сделать.

В данном случае оставила три кнопки которые делают чтение из файла и вывод на екран.
Кнопка 3 выводит информацию по полям.
Кнопка 2 выводит информацию по полям без первой колонки в CSV.
Кнопка 1 выводит информацию построчно из CSV, вместе с разделителем.
...
Рейтинг: 0 / 0
06.03.2012, 16:11
    #37693775
veronicavvl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MAX функция в VB6
Ой, забыла подправить ету строчку (меняла названия полей для публикации и ето забыла подправить).
Код: vbnet
1.
      dsNewRow("ConsumerName") = "fffff"    'не работает
...
Рейтинг: 0 / 0
06.03.2012, 16:52
    #37693894
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MAX функция в VB6
Какое отношение имеет ваш вопрос к теме топика "MAX функция в VB6"???
Прошу создать новую тему, причем там, где нужно, а именно в .NET
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / MAX функция в VB6 / 13 сообщений из 13, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]