1. Pascal / Говнокод #1844

    +112.2

    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
    procedure TForm1.Button2Click(Sender: TObject);
    var
    result  : Tdatetime;
    begin
    Result := EncodeDate(1970, 1, 1) + ((strtofloat(edit26.Text)+(strtofloat(edit2.Text)*3600)) / 86400); {86400=No. of secs. per day}
    
    edit23.Text := formatdatetime('d', Result);
    edit24.Text := formatdatetime('m', Result);
    edit25.Text := formatdatetime('yyyy', Result);
    edit27.Text := formatdatetime('h', Result);
    edit28.Text := formatdatetime('n', Result);
    edit29.Text := formatdatetime('s', Result);
    edit30.text := datetimetostr(result);
    form1.ActiveControl := edit30;
    end;
    
    
    procedure TForm1.Button3Click(Sender: TObject);
    var
      x,y      : extended;
    begin
    edit12.Text := formatdatetime('d', datetimepicker2.date);
    edit17.Text := formatdatetime('m', datetimepicker2.date);
    edit18.Text := formatdatetime('yyyy', datetimepicker2.date);
    x := (EncodeDate(strtoint(edit18.text), strtoint(edit17.text), strtoint(edit12.text)) - EncodeDate(1970, 1, 1)) * 86400 ;
    y := (strtoint(edit20.text)*3600) + (strtoint(edit21.text)*60) + strtoint(edit22.text);
    x := x+y-(strtofloat(edit1.Text)*3600);
    edit19.Text := floattostr(x);
    form1.ActiveControl := edit19;
    end;

    Особенно старательный ковнокодер, умудрился растянуть на 30 строк то, что реально заняло у меня 8.
    ну я не говорю еще про большую описательную часть его кода.

    Запостил: gorky, 15 Сентября 2009

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

    • и как же записать это все в 8 строк? поделись
      Ответить
      • const UnixStartDate:TDateTime=25569.0;
        function unixtimestamp(ConvDate:TDateTime):intege r;
        begin
        Result:=trunc((ConvDate-UnixStartDate)*86400);//example: unixtimestamp(now);
        end;
        function UnixToDateTime(USec:integer):TDateTime;
        begin
        Result:=(Usec/86400)+UnixStartDate;//Example: UnixToDateTime(1003187418);
        end;

        Прости, 9 строк =)
        Ответить
        • простите но
          1. UnixToDateTime есть стандартная функция в DateUtils Unit.
          2. В unix дата хранится не в Integer, а в Int64 иначе 19 января 2038 года, ваша система отправится в 1 января 1970 года.
          Ответить
          • 1. действительно, есть такая. только незачем мне весь юнит из-за 2 функций прилеплять
            2. ну до 2038 года еще как до Москвы раком. ну можно переписать в принципе.
            Ответить
            • > только незачем мне весь юнит из-за 2 функций прилеплять
              тяжёлый случай
              Ответить
    • как обычно говнокодеры радуют именами и форматированием
      Ответить
    • В визуальном редакторе налепил эдитов, и поехало... По-хорошему, там массив надо, но разве формошлепка умеет делать массивы?
      Ответить
      • на самом деле формошлепка не так и плоха, если умеючи юзать. что в принципе относится ко многим языкам/средам. зависит от условий и задач.

        в вышеприведенном примере надо было просто в TDateTime всё хранить, а не куячить по Edit'ам.
        Ответить
    • Код в посте и вариант автора не имеют ничего общего.
      Я так и не понял, Edit'ы вообще нужны или нет?
      30 строк там, т.к. идет еще раскладывание по Edit'ам.
      Еще посчитаем пустые строки и переносы var.
      В варианте gorky их нет вообще.
      Короче, gorky за такой пост -1
      Ответить

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