Форум программистов, компьютерный форум, киберфорум
Наши страницы
Visual Basic
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
Daniel_8101
0 / 0 / 0
Регистрация: 31.10.2013
Сообщений: 22
1

Как определить порядковый номер максимальной цифры числа

08.11.2013, 15:58. Просмотров 1691. Ответов 14

Дано натуральное число в котором все цифры различны. Определить:

а) порядковый номер его максимальной цифры считая номера:
-от конца числа
-от начала числа

б)порядковый номер его минимальной цифры, считая номера:
-от конца числа
-от начала числа

заранее от всей души благодарю!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.11.2013, 15:58
Ответы с готовыми решениями:

Определить порядковый номер дня по заданной дате
Здравствуйте, вот само условие задачи: Определить порядковый номер дня по заданной дате....

Определить максимальный элемент массива и его порядковый номер
Господа-знатоки! Очень прошу помочь со следующей задачей: Определить максимальный элемент массива...

Вычислить порядковый номер числа, наиболее приближённого к среднему арифметическому
Помогите решить задачки 1."Одномерные массивы": Задана последовательность из N вещественных...

Определить количество и порядковый номер рабочих которые выполнили задание на 100%
здравствуйте ув. пользователи форума я новичок в этом деле, и прошу помочь мне решить такую...

Определить порядковый номер его максимальной цифры, считая цифры от начала числа
дано натуральное число N, в котором все цифры различны. Определить порядковый номер его...

14
JoraVoenyjHaker
Заблокирован
09.11.2013, 19:51 2
вот глянь, специально для тебя написал )))

Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Sub main()
    Const pr = " "
    Dim min&, max&, j$(), f&, s$, l&
    Randomize Timer
    min = 2 ^ 31 - 1: max = 0
    For f = 1 To 1000
        l = Fix(Rnd * 2 ^ 30)
        If l < min Then min = l
        If l > max Then max = l
        s = s & pr & l
    Next
     j = Split(s) 'Список этих чисел
    MsgBox ("Обнаружено = " & f - 1 & " элементов" & vbNewLine & _
    "Минимальное = " & min & vbNewLine & _
    "Максимальное = " & max)
 
End Sub



только помни для Long максимальное значение 2^31-1
иначе будет переполнение (Overflow)

Добавлено через 9 минут
прогеры!
Fix быстрее работает чем Int
во всяком случае у меня опережает на пару квантов )))
1
Апострофф
Заблокирован
09.11.2013, 20:07 3
JoraVoenyjHaker, Вы о чём?
Цитата Сообщение от Daniel_8101 Посмотреть сообщение
Определить ... порядковый номер ... максимальной цифры
числа, а не максимальное (минимальное) число в массиве
0
JoraVoenyjHaker
Заблокирован
09.11.2013, 20:26 4
Да ладно, если ТС захочет сам поправит как надо
мой глобальный пример это допускает
0
SoftIce
es geht mir gut
10798 / 4260 / 1075
Регистрация: 27.07.2011
Сообщений: 10,452
Завершенные тесты: 1
09.11.2013, 21:39 5
Лучший ответ Сообщение было отмечено как решение

Решение

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Private Sub Command1_Click()
    Dim S As String, min As Integer, max As Integer, i As Integer
    'Будем работать со строкой
     S = CStr(InputBox("Введите число", "Ввод данных", "34543198432345743234565"))
     min = CInt(Mid(S, 1, 1)): max = min
     For i = 1 To Len(S)
          If min > CInt(Mid(S, i, 1)) Then min = CInt(Mid(S, i, 1))
          If max < CInt(Mid(S, i, 1)) Then max = CInt(Mid(S, i, 1))
     Next i
     MsgBox "Число:   " & S & vbCrLf & vbCrLf & _
     "Минимальная цифра числа :   " & min & vbCrLf & _
     "Максимальная цифра числа:   " & max & vbCrLf & vbCrLf & _
     "Порядковый номер максимальной цифры считая номера:" & vbCrLf & _
     "   -от конца числа :   " & InStr(1, StrReverse(S), CStr(max)) & vbCrLf & _
     "   -от начала числа:   " & InStr(1, S, CStr(max)) & vbCrLf & vbCrLf & _
     "Порядковый номер минимальной цифры, считая номера:" & "" & vbCrLf & _
     "   -от конца числа :   " & InStr(1, StrReverse(S), CStr(min)) & vbCrLf & _
     "   -от начала числа:   " & InStr(1, S, CStr(min))
 
End Sub
3
Daniel_8101
0 / 0 / 0
Регистрация: 31.10.2013
Сообщений: 22
10.11.2013, 11:00  [ТС] 6
Большое спасибо, SoftIce!))
0
Pro_grammer
Модератор
6182 / 2266 / 443
Регистрация: 24.04.2011
Сообщений: 4,020
Записей в блоге: 10
11.11.2013, 20:55 7
Цитата Сообщение от JoraVoenyjHaker Посмотреть сообщение
прогеры!
Fix быстрее работает чем Int
На счет скорости не скажу, но Fix<>Int!!!
Кто не верит, может запустить это код
Visual Basic
1
2
3
4
Private Sub Command1_Click()
Print Int(-99.8)  ' Returns -100.
Print Fix(-99.8)  ' Returns -99.
End Sub
1
JoraVoenyjHaker
Заблокирован
11.11.2013, 21:18 8
вот именно !
что мне надо только 99 получить а не 100
100 это уже не-точность !
0
The trick
Модератор
7730 / 2748 / 769
Регистрация: 22.02.2013
Сообщений: 3,887
Записей в блоге: 77
11.11.2013, 22:06 9
Цитата Сообщение от Pro_grammer Посмотреть сообщение
На счет скорости не скажу, но Fix<>Int!!!
Конечно, зачем дублировать функции? Fix отбрасывает дробную часть, а Int округляет к целому числу, которое меньше или равно заданному десятичному.
0
The trick
Модератор
7730 / 2748 / 769
Регистрация: 22.02.2013
Сообщений: 3,887
Записей в блоге: 77
11.11.2013, 23:23 10
Лучший ответ Сообщение было отмечено The trick как решение

Решение

Цитата Сообщение от JoraVoenyjHaker Посмотреть сообщение
Fix быстрее работает чем Int
Это зависит, во-первых от кода, в котором используются эти функции, во-вторых от процессора (арифметического сопроцессора), если посмотреть в отладчике код функций Fix и Int (__vbaR8FixI4, __vbaR8IntI4 для преобразования в Long), то можно увидеть что эти функции практически идентичны, округление выполняет и там и там команда FRNDINT, отличие только в режиме округления. В функции Fix в поле RC регистра CW загружается 11, что означает округление к нулю; в функции Int в поле RC регистра CW загружается 01, что означает округление к минус бесконечности. Так что эти функции должны выполняться примерно одинаково, так на моем компьютере они выполняются одинаково (есть различия, но они имеют случайный характер).
2
Миниатюры
Как определить порядковый номер максимальной цифры числа  
JoraVoenyjHaker
Заблокирован
12.11.2013, 00:02 11
привет !
спасибо что не поленился показать ассемблер )))
0
Pro_grammer
Модератор
6182 / 2266 / 443
Регистрация: 24.04.2011
Сообщений: 4,020
Записей в блоге: 10
12.11.2013, 05:50 12
Цитата Сообщение от JoraVoenyjHaker Посмотреть сообщение
не поленился показать ассемблер
Это да, молодец. Когда мне надо сравнить по скорости 2 функции, то я обычно в цикле повторяю их по очереди раз эдак 1 000 000 и по GetTickCount засекаю, какая дольше.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Private Declare Function GetTickCount& Lib "kernel32" ()
 
Private Sub Command1_Click()
start& = GetTickCount&
 
For i = 1 To 3000000
  x = Int(-99.8)
Next
endStart& = GetTickCount& - start&
MsgBox "Int = " & endStart& & "mc"
 
start& = GetTickCount&
 
For i = 1 To 3000000
  x = Fix(-99.8)
Next
endStart& = GetTickCount& - start&
MsgBox "Fix = " & endStart& & "mc"
End Sub
Цитата Сообщение от The trick Посмотреть сообщение
на моем компьютере они выполняются одинаково (есть различия, но они имеют случайный характер).
Подписываюсь под каждым словом!
2
JoraVoenyjHaker
Заблокирован
12.11.2013, 07:37 13
очень позновательно )))

а вот тогда уж и моя поделка в стиле SoftIce
где те дополнения которые нужны....

доделанный код !
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
Sub main()
    Const pr = " ", ml = 2 ^ 31 - 1
    Dim min&, max&, j$(), f&, s$, l&, s1$, s2$
    Randomize Timer
    min = ml: max = 0
    For f = 0 To 999
        l = Fix(Rnd * ml)
        If l < min Then min = l: s1 = f
        If l > max Then max = l: s2 = f
        s = s & pr & l
    Next
     j = Split(Mid(s, 2)) 'Список этих чисел
    MsgBox ("Обнаружено = " & f & " элементов" & vbNewLine & _
    "Минимальное = " & min & vbNewLine & _
    "Максимальное = " & max & vbNewLine & _
    "--------------------------------------------------" & vbNewLine & _
    "Позиция Min в массиве снизу вверх=" & s1 & vbNewLine & _
    "Позиция Min в массиве сверху вниз=" & 999 - s1 & vbNewLine & _
    "--------------------------------------------------" & vbNewLine & _
    "Позиция Max в массиве снизу вверх=" & s2 & vbNewLine & _
    "Позиция Max в массиве сверху вниз=" & 999 - s2 & vbNewLine & _
    "")
End Sub
2
The trick
Модератор
7730 / 2748 / 769
Регистрация: 22.02.2013
Сообщений: 3,887
Записей в блоге: 77
12.11.2013, 09:28 14
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от Pro_grammer Посмотреть сообщение
Когда мне надо сравнить по скорости 2 функции, то я обычно в цикле повторяю их по очереди раз эдак 1 000 000 и по GetTickCount засекаю, какая дольше.
Ну и мой тест. Я использую QueryPerformanceCounter т.к. у него выше разрешение.
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
Private Declare Function QueryPerformanceFrequencyAny Lib "kernel32" Alias "QueryPerformanceFrequency" (lpFrequency As Any) As Long
Private Declare Function QueryPerformanceCounterAny Lib "kernel32" Alias "QueryPerformanceCounter" (lpPerformanceCount As Any) As Long
 
Sub Main()
    Dim frequency As Currency
    Dim startTime As Currency
    Dim endTime As Currency
    Dim resInt As Double, resFix As Double, resCycle As Double
    Dim i As Long, z As Single, q As Long
    
    If QueryPerformanceFrequencyAny(frequency) = 0 Then Stop
    
    QueryPerformanceCounterAny startTime
    For i = 0 To 100000000
    Next
    QueryPerformanceCounterAny endTime
    resCycle = (endTime - startTime) / frequency
    
    z = 9.8
    
    QueryPerformanceCounterAny startTime
    For i = 0 To 100000000
        q = Int(z)
    Next
    QueryPerformanceCounterAny endTime
    resInt = (endTime - startTime) / frequency - resCycle
 
    QueryPerformanceCounterAny startTime
    For i = 0 To 100000000
        q = Fix(z)
    Next
    QueryPerformanceCounterAny endTime
    resFix = (endTime - startTime) / frequency - resCycle
    
    MsgBox "Int: " & Format(resInt, "#0.000000s") & vbNewLine & _
           "Fix: " & Format(resFix, "#0.000000s") & vbNewLine & _
           "Cyc: " & Format(resCycle, "#0.000000s") & vbNewLine & _
           "Res: " & Format(1000000 / frequency, "####0.0000ns")
End Sub
4
JoraVoenyjHaker
Заблокирован
13.11.2013, 03:42 15
ну куда там мне, с вами тягаться.....
0
13.11.2013, 03:42
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.11.2013, 03:42

Определить порядковый номер максимальной цифры числа
Ввести целое беззнаковое число(0..65535), в котором все цифры различны. Определить порядковый номер...

Определить порядковый номер максимальной цифры данного числа
дано вещественное число в котором все цифры различны.определить порядковый номер его первой...

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


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru