1. VisualBasic / Говнокод #14089

    −125

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    Dim zn(10) As String, txt As String ' объявляем переменные zn для хранение знаков
    Private Sub Command1_Click()
    Dim raz As Byte ' эта переменная для того что бы происходили действие сначало * / а потом + -
    raz = 0
    For i = 1 To Len(Text1) Step 1 ' читаем текст
    DoEvents
    If Mid(Text1, i, 1) = " " Then 'ищем пробелы
    Text1.SetFocus: Text1.SelStart = i - 1: Text1.SelLength = 1: Text1.SelText = "" ' если есть то убираем
    End If
    Next i
    Text1 = "(" & Text1 & ")" ' ставим в скобки они мне нужны
    txt = "" ' чистим переменную
    For i = 1 To Len(Text1) Step 1 'читаем текст
    For zn1 = 1 To 6 Step 1 ' перечисляем знаки
    If Mid(Text1, i, 1) = zn(zn1) Then txt = txt & " " & zn(zn1) & " ": GoTo qw ' если есть то ставим пробелы возле знаков
    Next zn1
    txt = txt & Mid(Text1, i, 1) ' если нету то просто записывает символ
    qw:
    Next i
    Text1 = txt ' записываем в text переменную txt
    razz:
    zad:
    For i = 1 To Len(Text1) Step 1 ' читаем текст
    DoEvents ' чтобы не зацикливался
    If raz = 0 Then 'если первый раз проходит
    If Mid(Text1, i, 1) = zn(1) Then Call mn(i, "*"): GoTo zad ' то делаем действие *
    If Mid(Text1, i, 1) = zn(2) Then Call mn(i, "/"): GoTo zad ' и /
    Else ' иначе
    If Mid(Text1, i, 1) = zn(3) Then Call mn(i, "+"): GoTo zad 'делаем действие +
    If Mid(Text1, i, 1) = zn(4) Then Call mn(i, "-"): GoTo zad ' и -
    End If
    Next i
    If raz = 0 Then raz = 1: GoTo razz ' если первый раз то делаем второй круг
    Text1 = Mid(Text1, 4, Len(Text1) - 6) ' убираем скобки
    End Sub
    Function mn(ByVal i1 As Integer, znak As String) ' что бы воспользоваться функцией надо указать позицию в тексте и у казать знак действие например mn(3,"*")
    Dim ss1 As Double, ss2 As Double, sn As Integer, sk As Integer ' записываем переменные ss1 число перед знаком, sn её позиция то есть начало ,ss2 второе число после знака , sk позиция второго числа то есть конец
    ss1 = 0: ss2 = 0 ' онулируем переменные чисел
    For s1 = i1 - 1 To 1 Step -1 ' читаем текст от знака до начало
    For zn1 = 1 To 6 Step 1 'ищем знаки( * / + - ( ) )
    If Mid(Text1, s1, 1) = zn(zn1) Then ' сравниваем знаки с символом
    'если символ это один из знаков то
    sn = s1 ' записываем позицию
    If Mid(Text1, s1, 1) = "(" Then s1 = s1 + 1 ' тут была ошибка когда была скобка я её избежал
    ss1 = Val(Mid(Text1, s1, i1 - s1)) ' записываем число в переменную
    GoTo выход1 ' выходим из цикла (я не использую exit for потому что тут не один цик )
    End If
    Next zn1
    Next s1
    выход1:
    For s2 = i1 + 1 To Len(Text1) Step 1 'тут анологично только ищет и записывает второе число после знака
    For zn1 = 1 To 6 Step 1
    If Mid(Text1, s2, 1) = zn(zn1) Then
    ss2 = Val(Mid(Text1, i1 + 1, s2 - i1))
    sk = s2
    GoTo выход2
    End If
    Next zn1
    Next s2
    выход2:
    Text1.SetFocus: Text1.SelStart = sn + 1: Text1.SelLength = sk - sn - 3 ' выделяем число перед знаком знак и число после знака
    Select Case znak
    Case "*": Text1.SelText = ss1 * ss2: Case "/": Text1.SelText = ss1 / ss2: Case "+": Text1.SelText = ss1 + ss2: Case "-": Text1.SelText = ss1 - ss2 ' делаем действие между двумя числами от зависимости знака и записываем в это выделенное место число
    End Select
    i = i1
    End Function
    
    Private Sub Form_Load()
    zn(1) = "*": zn(2) = "/": zn(3) = "+": zn(4) = "-": zn(5) = "(": zn(6) = ")" 'записываем в переменную знаки переменная с индексом"
    End Sub

    Исходник программы для пространственно-временного искажения.
    В действии

    http://www.demotivationalinc.com/files/photo/1/devide-by-zero-congratulations-your-math-just-destroyed-a-city-demotivational-poster-640.jpg

    Запостил: Stertor, 10 Ноября 2013

    Комментарии (15) RSS

    • Взято с
      http://vbbook.ru/visual-basic/syper-kalkylyator-s-odnim-tekstovum-polem/
      Ответить
      • Комментарии волшебны:
        > ВНИМАНИЕ!!!!!!!!!!!
        > только не пиши отрицательные числа , а то прога за циклится и комп повиснет
        > я просто забыл в цикле написать doevents

        или

        > не фига се ты делавой а тебе какая разниц может я не хочу показывать свой личный код я перво начальный код показал базовый мысль расказал смысал кал тоже написал а дальше пошли доработки
        Ответить
        • онулируем переменные чисел
          Это просто, пиздец. Аннулируем, бля. *megafacepalm*
          Ответить
          • Там если тред почитать, от грамотности автора программы, можно себе тяжкие телесные нанести фэйспалмами.
            Ответить
    • Отформатируй, чтоли, а то этот пиздец читать невозможно.
      Ответить
      • Если я отформатирую, тогда уже сюда не будет смысла постить, потому, что при форматировании я автоматически удаляю мусорный код.
        Ответить
        • Если хорошо полазить по менюшкам ide, обычно можно найти автоформат...
          Ответить
          • Нет в VB 6 автоформата. Есть отступ - но сдвигает весь блок кода и он не автоматический.
            Ответить
            • >VB 6
              Но зачем?
              Ответить
              • Затем, что...
                ... представленный образец кода является ничем иным, как код Visual Basic и может быть скомпилирован только в VB 5/6;
                ...в этом посте мы говорим о Visual Basic.


                с уважением, Ваш кэп.
                Ответить
    • If Mid(Text1, s1, 1) = "(" Then s1 = s1 + 1 ' тут была ошибка когда была скобка я её избежал
      костыли-костылики
      Ответить

    Добавить комментарий