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

    −130

    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
    'Вычисление сумм эл-тов матрицы по столбцам(создание одномерного
                     'массива) 
        Public Sub m3(ByRef a(,) As Integer, ByRef stolb() As Integer)
            Dim RawCount, ColumnCount As Integer
            Dim i, j, nn, mm As Integer
            RawCount = a.GetLength(0) : ColumnCount = a.GetLength(1)
            mm = RawCount - 1 : nn = ColumnCount - 1
            ReDim stolb(0 To nn)
            For j = 0 To nn
                stolb(j) = 0
                For i = 0 To mm
                    stolb(j) = stolb(j) + a(i, j)
                Next i
            Next j
        End Sub
    
        ' Вычисление сумм эл-тов матрицы по строкам (создание одномерного
                      массива) 
        Public Sub m2(ByRef a(,) As Integer, ByRef strok() As Integer)
            Dim RawCount, ColumnCount As Integer
            Dim i, j, mm, nn As Integer
            RawCount = a.GetLength(0) : ColumnCount = a.GetLength(1)
            mm = RawCount - 1 : nn = ColumnCount - 1
            ReDim strok(0 To mm)
            For i = 0 To mm
                strok(i) = 0
                For j = 0 To nn
                    strok(i) = strok(i) + a(i, j)
                Next j
            Next i
        End Sub

    Из пособия по лабам. Люблю свой универ.

    Запостил: RaZeR, 14 Февраля 2013

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

    • (,) - вся суть бейсика.

      P.S. А в чем говно кроме пары лишних переменных, неудачного именования и, возможно, не очень эффективного суммирования в элемент массива вместо временной переменной.
      Ответить
      • Это можно было свернуть в одну функцию, добавив флаг и соответствующие тернарные операции в нужных местах. А сейчас это выглядит как копипаста.
        Ответить
        • Нуу... для "пользователя" данной "библиотеки" две функции, имхо, будут удобней чем одна с флагом. Т.к. b = sumByRows(a), имхо, читается интуитивней чем b = sum(a, true). Если так делать - то лучше заюзать не флаг а enum, если он конечно есть в баське.

          Да и реализацию эти тернарники усложнят и немного запутают.

          Не стоит делать из DRY кумира, иногда небольшое количество копипасты может оказаться наглядней...
          Ответить
          • Одна функция и два "фасада" сделают свое дело.
            Ответить
            • В данном случае, имхо, небольшая копипаста читается и поддерживается лучше, нежели одна чуть более запутанная функция (потребуются или 3 тернарника, или 1 тернарник, но потеряем в производительности из-за суммирования прямо в массив (как у ОП'а)).
              Ответить
            • Кресты, т.к. на ideone баська не пашет, а на память я ее не знаю:
              // копипаста
              std::vector<T> matrix::sum_by_columns() {
                  std::vector<T> result;
                  result.resize(width);
                  for (size_t x=0; x<width; x++) {
                      T sum = 0;
                      for (size_t y=0; y<height; y++)
                          sum += get(x, y);
                      result[x] = sum;
                  }
                  return result;
              }
              
              std::vector<T> matrix::sum_by_rows() {
                  std::vector<T> result;
                  result.resize(height);
                  for (size_t y=0; y<height; y++) {
                      T sum = 0;
                      for (size_t x=0; x<width; x++)
                          sum += get(x, y);
                      result[y] = sum;
                  }
                  return result;
              }
              
              // фасад
              std::vector<T> matrix::sum_by_columns() {
                  return sum(false);
              }
              
              std::vector<T> matrix::sum_by_rows() {
                  return sum(true);
              }
              
              // реализация без пасты (флаг вместо енума юзается намеренно)
              std::vector<T> matrix::sum(bool by_rows) {
                  size_t n = by_rows ? height : width;
                  size_t m = by_rows ? width : height;
                  std::vector<T> result;
                  result.resize(n);
                  for (size_t i=0; i<n; i++) {
                      T sum = 0;
                      for (size_t j=0; j<m; j++)
                          sum += by_rows ? get(j, i) : get(i, j);
                      result[i] = sum;
                  }
                  return result;
              }
              
              // реализация покороче но помедленней
              std::vector<T> matrix::sum(bool by_rows) {
                  std::vector<T> result;
                  result.resize(by_rows ? height : width);
                  for (size_t x=0; x<width; x++)
                      for (size_t y=0; y<height; y++)
                          result[by_rows ? y : x] += get(x, y);
                  return result;
              }
              Что из этого понятней - решать вам ;)
              Ответить
          • >Не стоит делать из DRY кумира
            Правильно. Вот
            https://raw.github.com/DarkShikari/x264-devel/master/encoder/me.c
            https://raw.github.com/DarkShikari/x264-devel/master/encoder/analyse.c

            Полезность такой библиотеки на бейсике - сомнительна.
            Разве что лабы делать.
            Ответить
            • Эм, а что должен доказать этот лютый, оптимизированый на скорость, хардкор? Просто мне в него вникать страшно...
              Ответить
              • То что обоснованное нарушение практически любых законов хорошего стиля допустимо в библиотечном коде, который используется на практике
                Ответить
                • > То что обоснованное нарушение практически любых законов хорошего стиля допустимо в библиотечном коде
                  Ну да. По сути лишь бы интерфейс был стабильный и удобный.
                  Ответить

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