Вот так правильно ? если нет то как правильно, и как оптимизировать ...Год високосный, если делится на 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;
А, может, лучше не надо? Может, заняться тем, к чему есть призвание: двор мести, или, там, с хоругвами ходить?
> А, может, лучше не надо? Может, заняться тем, к чему есть призвание:
> двор мести, или, там, с хоругвами ходить?Может и так, спасибо, я не обидчевый)
>> А, может, лучше не надо? Может, заняться тем, к чему есть призвание:
>> двор мести, или, там, с хоругвами ходить?
> Может и так, спасибо, я не обидчевый)Правильно человека на место поставить тожь талант нужно)
> А, может, лучше не надо? Может, заняться тем, к чему есть призвание:
> двор мести, или, там, с хоругвами ходить?Я зарегился, да не спец, ну вот нужно стало
> и как оптимизироватьretun (!(year % 4) && year % 100||year % 400: true ? false);
>> и как оптимизировать
> retun (!(year % 4) && year % 100||year % 400: true ?
> false);OK,
> retun (!(year % 4) && year % 100||year % 400: true ?
> false);А теперь посчитай, сколько http://repo.or.cz/w/glibc.git/blob/HEAD:/time/time.h#l308 ошибок ты сделал в одной строке! Позорник!!
Если оформить в виде функции то так ? Правильно ?
boolean year_atribute(year)
{
return ((year) % 4 == 0 && ((year) % 100 != 0 || (year) % 400 == 0));
}
CVAVR не хочет её компилить, пишет что ожидалась `(`.
Видимо для него это непонятно.
Попробую WinAVR он на GCC ...
> Попробую 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 не признаёт ?
>[оверквотинг удален]
> int fun(int year)
> {
> return ((year) % 4 == 0 && ((year) % 100 != 0
> || (year) % 400 == 0));
> }
> while(1)
> {
> }
> }
> Только почему то тип данных bool не признаёт ?Потому что нет такого типа, пользуйте вместо него uint8_t / unsinged char .
Для сумашедшей кофеварки )))Понято, исправил )
>> Только почему то тип данных bool не признаёт ?
> Потому что нет такого типа,~Кэп, с 99 года оно в стандарте.
#include <stdbool.h>
>>> Только почему то тип данных 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, если мне зрение не изменяет.
> Не юзал никогда, всега по старинке uint_8t/uchar/unsigned char пользовал.не у всех - тру == 1, а фалсе == 0;
Особо учитывая, что большинство библиотечных функций возвращают 0 в случае успеха.
У новичков башню сносит от таких флуктуаций.
> По сути один и тот же *еръ только в другой руке, только
> названо по-другому. C#/C++/Java там таки да, есть отдельный bool /Boolean тип
> к которому с int скастовать напрямую не получится.Настоящий тип - это _Bool, дефайны как раз для совместимости с прошлым
> А тут обычный int, если мне зрение не изменяет.
Грубо говоря, в C, все типы есть int
>[оверквотинг удален]
>>> 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 байт всего)
> Usignet char занимает 1 байт озу
> Bool один битВ курсе, что на 64-битных системах даже short расширяется до int?
Ибо залезть в четверть регистра RAX, скажем AL или AH низя!
А ваще, мы от логики языка уходим в реализацию компиляторов.Как по мне, так булевый тип - вредный тип. Интересен только как обучающий.
>> Usignet char занимает 1 байт озу
>> Bool один бит
> В курсе, что на 64-битных системах даже short расширяется до int?
> Ибо залезть в четверть регистра RAX, скажем AL или AH низя!
> А ваще, мы от логики языка уходим в реализацию компиляторов.
> Как по мне, так булевый тип - вредный тип. Интересен только как
> обучающий.)))))))))))
ассемблер рулит, на нем даже в один бит регистра RAX залезть можно при желании,
я и на асме тож пишу, для МК (это будет оптимизация по памяти, в ущерб скорости немного)
Но повторяю я инженер, я сделал и забыл, я это в башке постоянно не держу )
Поэтому и сайт завел, пишу туда чтоб не потерялось, а то все записи постоянно теряю,
а сейчас забыл зашел на свой же сайт и посмотрел, типа записная книжка моя
http://redd.dxham.ru
> ассемблер рулит, на нем даже в один бит регистра RAX залезть можноОга, в сегменте кода будет терабайт, зато в сегменте данных один бит. :)
>> ассемблер рулит, на нем даже в один бит регистра RAX залезть можно
> Ога, в сегменте кода будет терабайт, зато в сегменте данных один бит.
> :)Но можно же, а иногда и нужно)
>> ассемблер рулит, на нем даже в один бит регистра RAX залезть можно
> Ога, в сегменте кода будет терабайт, зато в сегменте данных один бит.
> :)Завел 486dx2 133MHz , на нем буду пробовать, )
>>> ассемблер рулит, на нем даже в один бит регистра RAX залезть можно
>> Ога, в сегменте кода будет терабайт, зато в сегменте данных один бит.
>> :)
> Завел 486dx2 133MHz , на нем буду пробовать, )Вот твоюзаногу, ниче поставить не могу пишет неизвестный cpu.
Лана скачаю старую добрую слакварю да подревне подревней
>> Usignet char занимает 1 байт озу
>> Bool один бит
> В курсе, что на 64-битных системах даже short расширяется до int?
> Ибо залезть в четверть регистра RAX, скажем AL или AH низя!
> А ваще, мы от логики языка уходим в реализацию компиляторов.
> Как по мне, так булевый тип - вредный тип. Интересен только как
> обучающий.А то что булевый тип вредный согласен,
> А теперь 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));
}
Задание на зимние каникулы: Сделать проверку на високосность за одну операцию
(точнее одна операция и одно сравнение) За две операции тоже бонусы в карму!
Не ради кармы и очков,
((year) % 4 == 0 && ((year) % 100 != 0));
Одно условие избыточно ...хотя можь я и не прав, не зря ж time.h прописано полное условие. Вобщем Х его знаит )
> Вобщем Х его знаитТам так: year ^ MAGIC_1 != MAGIC_2
Вариант: year ^ MAGIC_1 ^ MAGIC_2 ^ MAGIC_3;
Павлину линуксу)Return(((year/400)%2)%! равно 0);
хз вроде работает, проверка
1992 вис
2000 вис
1900 не вис
> Павлину линуксу)
> Return(((year/400)%2)%! равно 0);
> хз вроде работает, проверка
> 1992 вис
> 2000 вис
> 1900 не висВернее вот так
return(((year/400)%/2)%!=0);Знак / забыл )))))))))))
Два деления, одно сравнение, не считая взятия остатков )
только CVAVR не понимает %, ему нужно явно указать значность остатка что вроде %10У меня работает
>[оверквотинг удален]
>> 1992 вис
>> 2000 вис
>> 1900 не вис
> Вернее вот так
> return(((year/400)%/2)%!=0);
> Знак / забыл )))))))))))
> Два деления, одно сравнение, не считая взятия остатков )
> только CVAVR не понимает %, ему нужно явно указать значность остатка что
> вроде %10
> У меня работаетЕще вернее )))
return(((year/400)%/2)%!==0);
>[оверквотинг удален]
>>> 1900 не вис
>> Вернее вот так
>> return(((year/400)%/2)%!=0);
>> Знак / забыл )))))))))))
>> Два деления, одно сравнение, не считая взятия остатков )
>> только CVAVR не понимает %, ему нужно явно указать значность остатка что
>> вроде %10
>> У меня работает
> Еще вернее )))
> return(((year/400)%/2)%!==0);Не не работает) ))
математик их меня никакой) )
Зато понял как оно работает...
>[оверквотинг удален]
>>> Знак / забыл )))))))))))
>>> Два деления, одно сравнение, не считая взятия остатков )
>>> только CVAVR не понимает %, ему нужно явно указать значность остатка что
>>> вроде %10
>>> У меня работает
>> Еще вернее )))
>> return(((year/400)%/2)%!==0);
> Не не работает) ))
> математик их меня никакой) )
> Зато понял как оно работает...Применительно к часам достаточно, работать будет, )))
return((year/4)%!равно0);100 и 400 эт заморочки григорианского календаря, т.е. на 400 лет 97 високосов
иными словами каждый сотый невис, если он не 400 сотый, цыклами по 400 лет
>> А теперь http://repo.or.cz/w/glibc.git/blob/HEAD:/time/time.h#l308Павлинулинуксу онли.
Обьясни что по этой ссылке и для чего
Я не про time.h, а в общем что это за ресурс и для чего
>>> А теперь http://repo.or.cz/w/glibc.git/blob/HEAD:/time/time.h#l308
> Павлинулинуксу онли.Это ни я, это Митрофаныч нашёл.
> что это за ресурс и для чего
glibc.git - Исходники Glibc
Общий совет: что касается вопросов программирования -- гуглите на английском языке:
http://bit.ly/1qmAjoaПрямая ссылка содержащая ответ на ваш вопрос:
http://stackoverflow.com/questions/3220163/how-to-find-leap-...
> Общий совет: что касается вопросов программирования -- гуглите на английском языке:
> http://bit.ly/1qmAjoa
> Прямая ссылка содержащая ответ на ваш вопрос:
> http://stackoverflow.com/questions/3220163/how-to-find-leap-...Спасибо, будем пробовать )