Гродненский Форум

Компьютеры => Программирование => Тема начата: -LONE_WOLF- от 07 Май 2010, 12:48:22



Название: С++ (вопросы по синтаксесу)
Отправлено: -LONE_WOLF- от 07 Май 2010, 12:48:22
В последнее время начали появляться сложности с пониманием некоторых вещей. Если кто-то может обьяснить, то был бы очень признателен.

1. Задача состояла в том, чтоб написать программу которая после введения года и номера месяца будет выводить количество дней в этом месяце. Учтя при этом существование високосных годов и используя команду switch. В общем-то программа до безобразия проста. Но пару моментов которые не дают ей компилироваться. А именно определения параметров високосного года (делиться на цело на 4-е и не делиться на 100 и 400):
Код:
int r,m
..........
if(r%4==0 && r!%100 || r!%400)
.......
else
.........
system("pause")
return 0
 

Как правильно записать условие делиться на 4-е и не делиться на 100 и 400?

2. Может кто-нибудь популярно объяснить или дать линк о принципе работы for и TAB?

Заранее благодарю за помощь!  :)


Название: Re: С++ (вопросы по синтаксесу)
Отправлено: Ave от 07 Май 2010, 13:01:24
http://lib.ru/CPPHB/cpptut.txt

популярнее не найдешь

та и про использование операторов и составления логических выражений глянь еще ))

кста - неправильно високосный год определяешь:
год является високосным, если он кратен 4 и при этом не кратен 100, либо кратен 400.

исходный код пока не патентовал - можешь юзать

if (year%4==0 && year%100!=0 || year%400==0)
  std::cout << "leap year" << std::endl;
else
  std::cout << "not a leap year" << std::endl;

ps: хе-хе.. спецэффекты несинхронного доступа.. внизу вариант написали раньше :D


Название: Re: С++ (вопросы по синтаксесу)
Отправлено: Sven4uk от 07 Май 2010, 14:14:34
Цитировать
А именно определения параметров високосного года (делиться на цело на 4-е и не делиться на 100 и 400):
високосный год делится на 4 and не делится на 100 or делится на 400...
if ((year % 4 == 0) && ((year % 100 != 0) || (year % 400 == 0)))
либо же:
if (!year%4 && (!year%400 || year%100))
никогда не стоит экономить на скобках, от них программа медленней работать не станет... и код должен быть понятным. так что первый вариант, на мой взгляд правильней.

Добавлено: [time]Fri May  7 12:28:21 2010[/time]
2) например:
     for (int i = 0; i < N; i++) {
            /*do smth*/
    }
    
вначале проверяется, меньше ли i чем N. если меньше, то заходит в блок. в конце блока i увеличивается, и заново происходит проверка и т.д.
можно писать также несколько условий, либо прибавлять к i не 1:
for (;(arr[ i] != '\0') && (i < N); i += 2)

Добавлено: [time]Fri May  7 13:30:32 2010[/time]
про tab не понял..


Название: Re: С++ (вопросы по синтаксесу)
Отправлено: RILLey_ELf от 07 Май 2010, 14:30:39
2. Может кто-нибудь популярно объяснить или дать линк о принципе работы for и TAB?

http://www.kuzbass.ru:8086/docs/isocpp/stmt.html
а что такое TAB ?


а вот причина твоей ошибки написана тут
http://www.kuzbass.ru:8086/docs/isocpp/expr.html

хотя конечно ответ Sven4uk тебе должен помочь


а ещё используй codepad.org чтобы показывать свой исходный код. а то у тебя точек с запятыми нет функции main нет ничего нет. такое не компилируется

ах да ещё "синтаксИс  ;D


Название: Re: С++ (вопросы по синтаксесу)
Отправлено: Sven4uk от 07 Май 2010, 14:34:26
tab это \t???????? какие могут быть по нему вопросы?)))))


Название: Re: С++ (вопросы по синтаксесу)
Отправлено: coolasm от 07 Май 2010, 21:24:23
if(r%4==0 && r!%100 || r!%400) - это еще и откомпилировалось!?

if (( r%4 == 0 )&&( r%100 !=0 )&&( r%400 != 0)) - вот и все...


Название: Re: С++ (вопросы по синтаксесу)
Отправлено: Sven4uk от 07 Май 2010, 22:11:49
if(r%4==0 && r!%100 || r!%400) - это еще и откомпилировалось!?

if (( r%4 == 0 )&&( r%100 !=0 )&&( r%400 != 0)) - вот и все...

;Dппц. почитай, что выше писали, прежде чем ерунду постить..
зы: если число не делится на 100, то на 400 оно ну никак не поделится. так что условие (r%100 != 0) && (r%400 != 0) не имеет смысла... элементарная математика.......


Название: Re: С++ (вопросы по синтаксесу)
Отправлено: coolasm от 08 Май 2010, 01:43:49
if(r%4==0 && r!%100 || r!%400) - это еще и откомпилировалось!?

if (( r%4 == 0 )&&( r%100 !=0 )&&( r%400 != 0)) - вот и все...

;Dппц. почитай, что выше писали, прежде чем ерунду постить..
зы: если число не делится на 100, то на 400 оно ну никак не поделится. так что условие (r%100 != 0) && (r%400 != 0) не имеет смысла... элементарная математика.......
ну да, писал в спешке (пятницо, на пиво хочется), писал по написанному "(делиться на цело на 4-е и не делиться на 100 и 400):", и это вроде && (я понимаю, что число делиться на 100, если делиться на 400, дошло через минут 5, но я уже был далеко от компа), лан, какнить потом посмотрю про високосные года.
Не знаю как воспринимать "и не делиться на 100 и 400", че было написано, то и написал, возможно в условии ошибка (вот эти "не делиться на 100 и на 400" ).
может
if (( r%4 == 0 )&&!(( r%100 ==0 )||(r%400 == 0))) - но это после 2.5л пива (хотя наверное хрень, возможно даже правильная хрень).


Название: Re: С++ (вопросы по синтаксесу)
Отправлено: Sven4uk от 08 Май 2010, 02:25:14
ошибка в условии. и товарищу автору это уже сообщили))) такое ощущение, что тут 10 страниц написано.... нельзя пару постов прочитать, прежде чем  постить что-то?