Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: помогите найти ошибку с++(чётное или нет )  (Прочитано 10056 раз)
0 Пользователей и 4 Гостей смотрят эту тему.
pokk
Помогающий

ru
Offline Offline

« : 08-12-2008 11:30 » 

дан массив требуется  найти все чётные элименты массива (Фокусы булевой алгебры и знание двоичной системы счисления не предлогать  Улыбаюсь   )


вот что  я придумал
Код:

 for (b=0;b<6; b++){

  c=(a[b])/2;
if (c-int(c) == 0 )
{
четное 
   
}
else
{     
не чётное
   
}


смысл такой   берётся элимент массива к примеру 3  делится на 2   получается 1.5    потом выделяем целую часть т е 1   и отнимаем от 1.5   получается    1 что не равно 0 и  должно выдатся что (3) нечётное число   а не получается в чём причина Не понялНе понял

 

Записан
Вад
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 08-12-2008 11:33 » 

Потому что float нулю будет равен очень приблизительно. Равенство float (double) нулю проверять бессмысленно.
Предлагаю проверять чётность получением остатка от деления на 2 Улыбаюсь
Записан
pokk
Помогающий

ru
Offline Offline

« Ответ #2 : 08-12-2008 11:45 » 

Потому что float нулю будет равен очень приблизительно. Равенство float (double) нулю проверять бессмысленно.
Предлагаю проверять чётность получением остатка от деления на 2 Улыбаюсь

т.е.  так  ?

Код:
 for (b=0;b<6; b++){

  c=a[b]/2;
if (c-int(c)==0.5  )
{
printf("ne chetnoe%d\t",a[b]);
   
}
else
{     

 printf("chethoe %d\t",a[b]);     
}

Записан
Вад
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 08-12-2008 11:51 » 

То есть,
Код:
int c = int(a[b]) % 2;
if (c ==0)
{
чётное
}
Записан
pokk
Помогающий

ru
Offline Offline

« Ответ #4 : 08-12-2008 11:58 » 

То есть,
Код:
int c = int(a[b]) % 2;
if (c ==0)
{
чётное
}

а что %2 делает?    и чем моё предложение не подходит  ??
Записан
Вад
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 08-12-2008 12:02 » 

а что %2 делает?    и чем моё предложение не подходит  ??
оператор % - остаток от деления.
Можно даже ещё короче:
Код:
if ( int(a[b]) % 2 == 0 )
{
чётное
}

Твой вариант, возможно, будет работать, если деление будет происходить точно надвое и над целыми числами. Хотя лично я не могу за это поручиться Улыбаюсь Куда проще использовать для таких целей целочисленные операции, которые вполне точны.
Записан
pokk
Помогающий

ru
Offline Offline

« Ответ #6 : 08-12-2008 12:24 » new


Код:
if ( int(a[b]) % 2 == 0 )
{
чётное
}


а int(..)  что в данном случае делает ?  я знаю что он выделает целое число но тут его значение непонятно



Записан
Вад
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #7 : 08-12-2008 12:31 » 

Ну, я не знаю, какого типа у тебя a[ b ] - если целого, то оно не надо.
Записан
pokk
Помогающий

ru
Offline Offline

« Ответ #8 : 08-12-2008 12:48 » 

Ну, я не знаю, какого типа у тебя a[ b ] - если целого, то оно не надо.

ура всё заработало =)))   СПАСИБО
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines