The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Знатокам С"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (C/C++)
Изначальное сообщение [ Отслеживать ]

"Знатокам С"  +/
Сообщение от RedD on 29-Окт-14, 16:17 
Вот так правильно ? если нет то как правильно, и как оптимизировать ...

Год високосный, если делится на 4 без остатка.
Замечание 1: если год делится на 100 без остатка - он не високосный.
Замечание 2: если год делится на 400 без остатка - он високосный.


int year=2014;
int year_atribute=false;
if ((year/4)%!)
           {
                if ((year/100)%!)
                                {
                                 year_atribute=false;
                                 }
                                 if ((year/400)%!)
                                                 {            
                                                  year_atribute=true;
                                                  }
retun year_atribute;

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Знатокам С"  –1 +/
Сообщение от Led (ok) on 29-Окт-14, 18:14 
А, может, лучше не надо? Может, заняться тем, к чему есть призвание: двор мести, или, там, с хоругвами ходить?

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Знатокам С"  +/
Сообщение от RedD on 29-Окт-14, 18:51 
> А, может, лучше не надо? Может, заняться тем, к чему есть призвание:
> двор мести, или, там, с хоругвами ходить?

Может и так, спасибо, я не обидчевый)

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "Знатокам С"  +/
Сообщение от RedD on 29-Окт-14, 18:53 
>> А, может, лучше не надо? Может, заняться тем, к чему есть призвание:
>> двор мести, или, там, с хоругвами ходить?
> Может и так, спасибо, я не обидчевый)

Правильно человека на место поставить тожь талант нужно)

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

4. "Знатокам С"  +/
Сообщение от RedD (ok) on 29-Окт-14, 19:06 
> А, может, лучше не надо? Может, заняться тем, к чему есть призвание:
> двор мести, или, там, с хоругвами ходить?

Я зарегился, да не спец, ну вот нужно стало

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

5. "Знатокам С"  –2 +/
Сообщение от pavlinux (ok) on 29-Окт-14, 19:47 
> и как оптимизировать

retun (!(year % 4) && year % 100||year % 400: true ? false);

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

6. "Знатокам С"  +/
Сообщение от RedD (ok) on 29-Окт-14, 20:13 
>> и как оптимизировать
> retun (!(year % 4) && year % 100||year % 400: true ?
> false);

OK,

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

7. "Знатокам С"  +/
Сообщение от Andrey Mitrofanov on 29-Окт-14, 20:19 
> retun (!(year % 4) && year % 100||year % 400: true ?
> false);

А теперь посчитай, сколько http://repo.or.cz/w/glibc.git/blob/HEAD:/time/time.h#l308 ошибок ты сделал в одной строке! Позорник!!

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

8. "Знатокам С"  +/
Сообщение от RedD (ok) on 29-Окт-14, 20:41 
Если оформить в виде функции то так ? Правильно ?
boolean year_atribute(year)
{
return ((year) % 4 == 0 && ((year) % 100 != 0 || (year) % 400 == 0));
}
Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

9. "Знатокам С"  +/
Сообщение от RedD (ok) on 29-Окт-14, 22:17 
CVAVR не хочет её компилить, пишет что ожидалась `(`.
Видимо для него это непонятно.
Ответить | Правка | ^ к родителю #8 | Наверх | Cообщить модератору

10. "Знатокам С"  +/
Сообщение от RedD (ok) on 29-Окт-14, 22:19 
Попробую WinAVR он на GCC ...
Ответить | Правка | ^ к родителю #9 | Наверх | Cообщить модератору

11. "Знатокам С"  +/
Сообщение от RedD (ok) on 30-Окт-14, 02:50 
> Попробую WinAVR он на GCC ...

GCC собирает ...


#include <avr/io.h>
void main(void)
{
int  fun(int year)
{
return ((year) % 4 == 0 && ((year) % 100 != 0 || (year) % 400 == 0));
}
while(1)
{
}
}


Только почему то тип данных bool не признаёт ?


Ответить | Правка | ^ к родителю #10 | Наверх | Cообщить модератору

12. "Знатокам С"  +/
Сообщение от Сумасшедшая Кофеварка on 30-Окт-14, 07:32 
>[оверквотинг удален]
> int  fun(int year)
> {
> return ((year) % 4 == 0 && ((year) % 100 != 0
> || (year) % 400 == 0));
> }
> while(1)
> {
> }
> }
> Только почему то тип данных bool не признаёт ?

Потому что нет такого типа, пользуйте вместо него uint8_t / unsinged char .

Ответить | Правка | ^ к родителю #11 | Наверх | Cообщить модератору

13. "Знатокам С"  +/
Сообщение от RedD (ok) on 30-Окт-14, 07:44 
Для сумашедшей кофеварки )))

Понято, исправил )

Ответить | Правка | ^ к родителю #12 | Наверх | Cообщить модератору

15. "Знатокам С"  +/
Сообщение от pavlinux (ok) on 31-Окт-14, 03:26 
>> Только почему то тип данных bool не признаёт ?
> Потому что нет такого типа,

~Кэп, с 99 года оно в стандарте.

#include <stdbool.h>

Ответить | Правка | ^ к родителю #12 | Наверх | Cообщить модератору

17. "Знатокам С"  +/
Сообщение от Сумасшедшая Кофеварка on 02-Ноя-14, 11:12 
>>> Только почему то тип данных bool не признаёт ?
>> Потому что нет такого типа,
> ~Кэп, с 99 года оно в стандарте.
> #include <stdbool.h>

Не юзал никогда, всега по старинке uint_8t/uchar/unsigned char пользовал.

>> stdbool.h — заголовочный файл стандартной библиотеки языка программирования С, который >> содержит четыре макроса для работы с типом данных bool. Данный заголовочный файл появился в стандарте C99.
>>
>> Определение макросов согласно стандарту IEEE Std 1003.1-2001:
>>
>>     bool определяется как _Bool
>>     true определяется как 1
>>     false определяется как 0
>>     __bool_true_false_are_defined расширяется до 1
>>
>> Программы, использующие эти макросы, могут отменять и переопределять bool, true, и false.

По сути один и тот же *еръ только в другой руке, только названо по-другому. C#/C++/Java там таки да, есть отдельный bool /Boolean тип к которому с int скастовать напрямую не получится. А тут обычный int, если мне зрение не изменяет.

Ответить | Правка | ^ к родителю #15 | Наверх | Cообщить модератору

18. "Знатокам С"  +/
Сообщение от pavlinux (ok) on 02-Ноя-14, 14:35 
> Не юзал никогда, всега по старинке uint_8t/uchar/unsigned char пользовал.

не у всех - тру == 1, а фалсе == 0;

Особо учитывая, что большинство библиотечных функций возвращают 0 в случае успеха.
У новичков башню сносит от таких флуктуаций.

> По сути один и тот же *еръ только в другой руке, только
> названо по-другому. C#/C++/Java там таки да, есть отдельный bool /Boolean тип
> к которому с int скастовать напрямую не получится.

Настоящий тип - это _Bool, дефайны как раз для совместимости с прошлым  

> А тут обычный int, если мне зрение не изменяет.

Грубо говоря, в C, все типы есть int  

Ответить | Правка | ^ к родителю #17 | Наверх | Cообщить модератору

21. "Знатокам С"  +/
Сообщение от RedD (ok) on 02-Ноя-14, 21:17 
>[оверквотинг удален]
>>> stdbool.h — заголовочный файл стандартной библиотеки языка программирования С, который >> содержит четыре макроса для работы с типом данных bool. Данный заголовочный файл появился в стандарте C99.
>>>
>>> Определение макросов согласно стандарту IEEE Std 1003.1-2001:
>>>
>>>     bool определяется как _Bool
>>>     true определяется как 1
>>>     false определяется как 0
>>>     __bool_true_false_are_defined расширяется до 1
>>>
>>> Программы, использующие эти макросы, могут отменять и переопределять bool, true, и false.

Почти да, кроме того что ...
Usignet char занимает 1 байт озу

Bool один бит
в МК это важно
Там озу к примеру может быть 512 байт всего)

Ответить | Правка | ^ к родителю #17 | Наверх | Cообщить модератору

23. "Знатокам С"  +/
Сообщение от pavlinux (ok) on 04-Ноя-14, 00:12 
>  Usignet char занимает 1 байт озу
> Bool один бит

В курсе, что на 64-битных системах даже short расширяется до int?
Ибо залезть в четверть регистра RAX, скажем AL или AH низя!  
А ваще, мы от логики языка уходим в реализацию компиляторов.

Как по мне, так булевый тип - вредный тип. Интересен только как обучающий.

Ответить | Правка | ^ к родителю #21 | Наверх | Cообщить модератору

27. "Знатокам С"  +/
Сообщение от RedD (ok) on 04-Ноя-14, 08:22 
>>  Usignet char занимает 1 байт озу
>> Bool один бит
> В курсе, что на 64-битных системах даже short расширяется до int?
> Ибо залезть в четверть регистра RAX, скажем AL или AH низя!
> А ваще, мы от логики языка уходим в реализацию компиляторов.
> Как по мне, так булевый тип - вредный тип. Интересен только как
> обучающий.

)))))))))))
ассемблер рулит, на нем даже в один бит регистра RAX залезть можно при желании,
я и на асме тож пишу, для МК (это будет оптимизация по памяти, в ущерб скорости немного)
Но повторяю я инженер, я сделал и забыл, я это в башке постоянно не держу )
Поэтому и сайт завел, пишу туда чтоб не потерялось, а то все записи постоянно теряю,
а сейчас забыл зашел на свой же сайт и посмотрел, типа записная книжка моя
http://redd.dxham.ru


Ответить | Правка | ^ к родителю #23 | Наверх | Cообщить модератору

28. "Знатокам С"  +/
Сообщение от pavlinux (ok) on 04-Ноя-14, 20:46 
> ассемблер рулит, на нем даже в один бит регистра RAX залезть можно

Ога, в сегменте кода будет терабайт, зато в сегменте данных один бит. :)

Ответить | Правка | ^ к родителю #27 | Наверх | Cообщить модератору

29. "Знатокам С"  +/
Сообщение от RedD (ok) on 04-Ноя-14, 20:52 
>> ассемблер рулит, на нем даже в один бит регистра RAX залезть можно
> Ога, в сегменте кода будет терабайт, зато в сегменте данных один бит.
> :)

Но можно же, а иногда и нужно)

Ответить | Правка | ^ к родителю #28 | Наверх | Cообщить модератору

30. "Знатокам С"  +/
Сообщение от RedD (ok) on 04-Ноя-14, 22:03 
>> ассемблер рулит, на нем даже в один бит регистра RAX залезть можно
> Ога, в сегменте кода будет терабайт, зато в сегменте данных один бит.
> :)

Завел 486dx2 133MHz ,  на нем буду пробовать, )

Ответить | Правка | ^ к родителю #28 | Наверх | Cообщить модератору

31. "Знатокам С"  +/
Сообщение от RedD (ok) on 04-Ноя-14, 23:35 
>>> ассемблер рулит, на нем даже в один бит регистра RAX залезть можно
>> Ога, в сегменте кода будет терабайт, зато в сегменте данных один бит.
>> :)
> Завел 486dx2 133MHz ,  на нем буду пробовать, )

Вот твоюзаногу, ниче поставить не могу пишет неизвестный cpu.
Лана скачаю старую добрую слакварю да подревне подревней

Ответить | Правка | ^ к родителю #30 | Наверх | Cообщить модератору

32. "Знатокам С"  +/
Сообщение от RedD (ok) on 04-Ноя-14, 23:40 
>>  Usignet char занимает 1 байт озу
>> Bool один бит
> В курсе, что на 64-битных системах даже short расширяется до int?
> Ибо залезть в четверть регистра RAX, скажем AL или AH низя!
> А ваще, мы от логики языка уходим в реализацию компиляторов.
> Как по мне, так булевый тип - вредный тип. Интересен только как
> обучающий.

А то что булевый тип вредный согласен,

Ответить | Правка | ^ к родителю #23 | Наверх | Cообщить модератору

14. "Знатокам С"  +/
Сообщение от pavlinux (ok) on 31-Окт-14, 02:35 
> А теперь  http://repo.or.cz/w/glibc.git/blob/HEAD:/time/time.h#l308

и нахер там три раза сравнение  


#include <stdbool.h>
#include <stdlib.h>

bool bissex(size_t year)
{
        return (!(year % 4) && (year % 100 || year % 400));
}


Задание на зимние каникулы: Сделать проверку на високосность за одну операцию
(точнее одна операция и одно сравнение) За две операции тоже бонусы в карму!

Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

16. "Знатокам С"  +/
Сообщение от RedD (ok) on 01-Ноя-14, 19:08 
Не ради кармы и очков,
((year) % 4 == 0 && ((year) % 100 != 0));
Одно условие избыточно ...хотя можь я и не прав, не зря ж time.h прописано полное условие. Вобщем Х его знаит )
Ответить | Правка | ^ к родителю #14 | Наверх | Cообщить модератору

19. "Знатокам С"  +/
Сообщение от pavlinux (ok) on 02-Ноя-14, 15:20 
> Вобщем Х его знаит

Там так:  year ^ MAGIC_1 != MAGIC_2

Вариант: year ^ MAGIC_1 ^ MAGIC_2 ^ MAGIC_3;  


Ответить | Правка | ^ к родителю #16 | Наверх | Cообщить модератору

20. "Знатокам С"  +/
Сообщение от RedD (ok) on 02-Ноя-14, 19:09 
Павлину линуксу)

Return(((year/400)%2)%! равно 0);
хз вроде работает, проверка
1992 вис
2000 вис
1900 не вис


Ответить | Правка | ^ к родителю #19 | Наверх | Cообщить модератору

33. "Знатокам С"  +/
Сообщение от RedD (ok) on 06-Ноя-14, 09:57 
> Павлину линуксу)
> Return(((year/400)%2)%! равно 0);
> хз вроде работает, проверка
> 1992 вис
> 2000 вис
> 1900 не вис

Вернее вот так
return(((year/400)%/2)%!=0);

Знак / забыл )))))))))))
Два деления, одно сравнение, не считая взятия остатков )
только CVAVR не понимает %, ему нужно явно указать значность остатка что вроде %10

У меня работает

Ответить | Правка | ^ к родителю #20 | Наверх | Cообщить модератору

34. "Знатокам С"  +/
Сообщение от RedD (ok) on 06-Ноя-14, 16:05 
>[оверквотинг удален]
>> 1992 вис
>> 2000 вис
>> 1900 не вис
> Вернее вот так
> return(((year/400)%/2)%!=0);
> Знак / забыл )))))))))))
> Два деления, одно сравнение, не считая взятия остатков )
> только CVAVR не понимает %, ему нужно явно указать значность остатка что
> вроде %10
> У меня работает

Еще вернее )))
return(((year/400)%/2)%!==0);

Ответить | Правка | ^ к родителю #33 | Наверх | Cообщить модератору

35. "Знатокам С"  +/
Сообщение от RedD (ok) on 11-Ноя-14, 11:02 
>[оверквотинг удален]
>>> 1900 не вис
>> Вернее вот так
>> return(((year/400)%/2)%!=0);
>> Знак / забыл )))))))))))
>> Два деления, одно сравнение, не считая взятия остатков )
>> только CVAVR не понимает %, ему нужно явно указать значность остатка что
>> вроде %10
>> У меня работает
> Еще вернее )))
> return(((year/400)%/2)%!==0);

Не не работает) ))
математик их меня никакой) )
Зато понял как оно работает...

Ответить | Правка | ^ к родителю #34 | Наверх | Cообщить модератору

36. "Знатокам С"  +/
Сообщение от RedD (ok) on 12-Ноя-14, 03:56 
>[оверквотинг удален]
>>> Знак / забыл )))))))))))
>>> Два деления, одно сравнение, не считая взятия остатков )
>>> только CVAVR не понимает %, ему нужно явно указать значность остатка что
>>> вроде %10
>>> У меня работает
>> Еще вернее )))
>> return(((year/400)%/2)%!==0);
> Не не работает) ))
> математик их меня никакой) )
> Зато понял как оно работает...

Применительно к часам  достаточно, работать будет, )))
return((year/4)%!равно0);

100 и 400 эт заморочки григорианского календаря, т.е. на 400 лет 97 високосов
иными словами каждый сотый невис, если он не 400 сотый, цыклами по 400 лет

Ответить | Правка | ^ к родителю #35 | Наверх | Cообщить модератору

22. "Знатокам С"  +/
Сообщение от RedD (ok) on 03-Ноя-14, 12:57 
>> А теперь  http://repo.or.cz/w/glibc.git/blob/HEAD:/time/time.h#l308

Павлинулинуксу онли.
Обьясни что по этой ссылке и для чего
Я не про time.h, а в общем что это за ресурс и для чего

Ответить | Правка | ^ к родителю #14 | Наверх | Cообщить модератору

24. "Знатокам С"  +/
Сообщение от pavlinux (ok) on 04-Ноя-14, 00:13 
>>> А теперь  http://repo.or.cz/w/glibc.git/blob/HEAD:/time/time.h#l308
> Павлинулинуксу онли.

Это ни я, это Митрофаныч нашёл.

> что это за ресурс и для чего

glibc.git - Исходники Glibc  

Ответить | Правка | ^ к родителю #22 | Наверх | Cообщить модератору

25. "Знатокам С"  +/
Сообщение от skb7 (ok) on 04-Ноя-14, 00:31 
Общий совет: что касается вопросов программирования -- гуглите на английском языке:
http://bit.ly/1qmAjoa

Прямая ссылка содержащая ответ на ваш вопрос:
http://stackoverflow.com/questions/3220163/how-to-find-leap-...

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

26. "Знатокам С"  +/
Сообщение от RedD (ok) on 04-Ноя-14, 07:15 
> Общий совет: что касается вопросов программирования -- гуглите на английском языке:
> http://bit.ly/1qmAjoa
> Прямая ссылка содержащая ответ на ваш вопрос:
> http://stackoverflow.com/questions/3220163/how-to-find-leap-...

Спасибо, будем пробовать )

Ответить | Правка | ^ к родителю #25 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Спонсоры:
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2022 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру