URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 9930
[ Назад ]

Исходное сообщение
"Знатокам С"

Отправлено RedD , 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;


Содержание

Сообщения в этом обсуждении
"Знатокам С"
Отправлено Led , 29-Окт-14 18:14 
А, может, лучше не надо? Может, заняться тем, к чему есть призвание: двор мести, или, там, с хоругвами ходить?


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

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


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

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


"Знатокам С"
Отправлено RedD , 29-Окт-14 19:06 
> А, может, лучше не надо? Может, заняться тем, к чему есть призвание:
> двор мести, или, там, с хоругвами ходить?

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


"Знатокам С"
Отправлено pavlinux , 29-Окт-14 19:47 
> и как оптимизировать

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


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

OK,


"Знатокам С"
Отправлено Andrey Mitrofanov , 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 ошибок ты сделал в одной строке! Позорник!!


"Знатокам С"
Отправлено RedD , 29-Окт-14 20:41 
Если оформить в виде функции то так ? Правильно ?
boolean year_atribute(year)
{
return ((year) % 4 == 0 && ((year) % 100 != 0 || (year) % 400 == 0));
}

"Знатокам С"
Отправлено RedD , 29-Окт-14 22:17 
CVAVR не хочет её компилить, пишет что ожидалась `(`.
Видимо для него это непонятно.

"Знатокам С"
Отправлено RedD , 29-Окт-14 22:19 
Попробую WinAVR он на GCC ...

"Знатокам С"
Отправлено RedD , 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 не признаёт ?



"Знатокам С"
Отправлено Сумасшедшая Кофеварка , 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 .


"Знатокам С"
Отправлено RedD , 30-Окт-14 07:44 
Для сумашедшей кофеварки )))

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


"Знатокам С"
Отправлено pavlinux , 31-Окт-14 03:26 
>> Только почему то тип данных bool не признаёт ?
> Потому что нет такого типа,

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

#include <stdbool.h>


"Знатокам С"
Отправлено Сумасшедшая Кофеварка , 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, если мне зрение не изменяет.


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

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

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

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

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

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

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


"Знатокам С"
Отправлено RedD , 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 байт всего)


"Знатокам С"
Отправлено pavlinux , 04-Ноя-14 00:12 
>  Usignet char занимает 1 байт озу
> Bool один бит

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

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


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

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



"Знатокам С"
Отправлено pavlinux , 04-Ноя-14 20:46 
> ассемблер рулит, на нем даже в один бит регистра RAX залезть можно

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


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

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


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

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


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

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


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

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


"Знатокам С"
Отправлено pavlinux , 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));
}


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


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

"Знатокам С"
Отправлено pavlinux , 02-Ноя-14 15:20 
> Вобщем Х его знаит

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

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



"Знатокам С"
Отправлено RedD , 02-Ноя-14 19:09 
Павлину линуксу)

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



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

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

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

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


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

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


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

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


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

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

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


"Знатокам С"
Отправлено RedD , 03-Ноя-14 12:57 
>> А теперь  http://repo.or.cz/w/glibc.git/blob/HEAD:/time/time.h#l308

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


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

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

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

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


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

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


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

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