Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Вопросы начинающих программистов
Перезагрузить страницу Проектирование программы. с проверкой числа на четность
Закрытая тема
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Anonymous
Guest
 
Сообщений: n/a
По умолчанию Проектирование программы. с проверкой числа на четность - 22.12.2002, 15:10

Как написать прогу проверяющая число на четность
напишите мне пожалуйста s89@mail.ru
  (#2 (permalink)) Старый
Garik Garik вне форума
Member
 
Сообщений: 6,201
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Регистрация: 07.06.2002
По умолчанию 22.12.2002, 16:27

Куда докатился этот форум, раз тут задаюсь такие вопросы!
Отвечаю:
1. Ставишь Visual C++
2. Пишешь программу
3. Компилируешь и запускаешь

В чем проблема-то? Проверка на четность - остаток от деления на 2.
number % 2 == 0 - четное, 1 - нечетное
  (#3 (permalink)) Старый
SH@DOW SH@DOW вне форума
Member
 
Сообщений: 2,085
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 18.09.2002
По умолчанию 23.12.2002, 18:29

Просто нет слов
  (#4 (permalink)) Старый
Влад Влад вне форума
Специалист
 
Сообщений: 3,884
Сказал(а) спасибо: 1
Поблагодарили 25 раз(а) в 25 сообщениях
Регистрация: 27.06.2002
Адрес: Санкт-Петербург
По умолчанию 23.12.2002, 20:13

<MODERATOR>
2 SH@DOW: Убедительная просьба использовать умеренное число смайликов.
</MODERATOR>
  (#5 (permalink)) Старый
SH@DOW SH@DOW вне форума
Member
 
Сообщений: 2,085
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 18.09.2002
По умолчанию 24.12.2002, 11:12

А что 2-е штуки енто много по твоему?
Ads.
  (#6 (permalink)) Старый
Garik Garik вне форума
Member
 
Сообщений: 6,201
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Регистрация: 07.06.2002
По умолчанию 25.12.2002, 03:08

Коллеги!
Чтобы тема не умерла совсем, предлагаю небольшую гимнастику для ума: кто сможет написать самый короткий код проверки четности.
Я думал долго, но короче 2х операторов - никак. С 2мя - несколько вариантов.

Итак, условия:
Пишем на C++. Никаких макросов и компиляторских фичей, никаких библиотечных функций.
Входные значения:
Код:
int i = number;
BOOL par = ...
Здесь number - это то самое число, у которого надо установить точность. par == true - число четное, false - нечетное.

Мои варианты:
Код:
BOOL par = !(i%2);
BOOL par = !(i&1);
Кто найдет вариант короче?
  (#7 (permalink)) Старый
Влад Влад вне форума
Специалист
 
Сообщений: 3,884
Сказал(а) спасибо: 1
Поблагодарили 25 раз(а) в 25 сообщениях
Регистрация: 27.06.2002
Адрес: Санкт-Петербург
По умолчанию 25.12.2002, 12:28

Вот еще вариант:
Код:
   BOOL par = ~i&1;
  (#8 (permalink)) Старый
AssAsin AssAsin вне форума
Member
 
Сообщений: 383
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Регистрация: 02.11.2002
По умолчанию 26.12.2002, 01:11

Цитата:
Originally posted by Garik
[b]Чтобы тема не умерла совсем...
Как в анекдоте про ковбоя: "Мужик, я знал, тебе понравится!"
  (#9 (permalink)) Старый
Maugly Maugly вне форума
Member
 
Сообщений: 78
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 23.09.2002
По умолчанию 27.12.2002, 20:41

Цитата:
Originally posted by Влад
[b]Вот еще вариант:
Код:
   BOOL par = ~i&1;
А если проверять на нечетность, то можно и без ~
  (#10 (permalink)) Старый
Garik Garik вне форума
Member
 
Сообщений: 6,201
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Регистрация: 07.06.2002
По умолчанию 29.12.2002, 02:59

Цитата:
Originally posted by Maugly
[b]А если проверять на нечетность, то можно и без ~
В этом вся соль! Если проверять на нечетность, то легко можно обойтись 1й операцией. А можно ли 1й операцией проверить на четнось?
  (#11 (permalink)) Старый
ivanyan ivanyan вне форума
Member
 
Сообщений: 305
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 06.06.2002
По умолчанию 10.01.2003, 16:02

А как насчет такого?

BOOL:=i mod 2;

(Это конечно же паскаль)

Аааа, понял хитрость тут наоборот получается приходится and 1 делать
Тогда лучше ассемблер использовать, всяк меньше операций получится
  (#12 (permalink)) Старый
SH@DOW SH@DOW вне форума
Member
 
Сообщений: 2,085
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 18.09.2002
По умолчанию 10.01.2003, 16:11

2 Garik Типа чобы тема не умерла! Кто придумает, типа, самый длинный код, а, во как!!!
Ads
  (#13 (permalink)) Старый
Maugly Maugly вне форума
Member
 
Сообщений: 78
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 23.09.2002
По умолчанию 10.01.2003, 21:43

Цитата:
Originally posted by Garik
[b]В этом вся соль! Если проверять на нечетность, то легко можно обойтись 1й операцией. А можно ли 1й операцией проверить на четнось? :wink:
Я имел ввиду практическое применение. То, что ниже конечно не очень отвечает задаче, но все-таки...
Смотрите что делает компилятор:

if (~i&1)
mov eax,dword ptr [i]
not eax
and eax,1
test eax,eax
je do_if_even+3Ah (48422Ah)
{
int do_something = 0;
do_something ++;
}

а теперь проверяем на нечетность, но заставляем прыгать в обратном случае

if (!(i&1))
mov eax,dword ptr [i]
and eax,1
test eax,eax
jne do_if_even+38h (484228h)
{
int do_something = 0;
do_something ++;
}

- на одну иснтрукцию меньше.
  (#14 (permalink)) Старый
Влад Влад вне форума
Специалист
 
Сообщений: 3,884
Сказал(а) спасибо: 1
Поблагодарили 25 раз(а) в 25 сообщениях
Регистрация: 27.06.2002
Адрес: Санкт-Петербург
По умолчанию 10.01.2003, 22:46

А какой компилятор ты использовал? Вот что генерирует Intel C++ :
Код:
if(~i&1)
mov     eax, [i]
xor     eax, 0FFFFFFFFh
test    al, 1
jz      short do_if_even
{
}

if(!(i%2))
mov     eax, [i]
and     eax, 1
test    eax, eax
jnz     short do_if_even
{
}

if(!(i&1))
mov     eax, [i]
test    al, 1
jnz     short do_if_even
{
}
  (#15 (permalink)) Старый
Maugly Maugly вне форума
Member
 
Сообщений: 78
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 23.09.2002
По умолчанию 11.01.2003, 17:05

Visual C++ 7.0 без оптимизации.

если ставить оптимизацию (любую) получается так:

Код:
if (~i&1)
mov         eax,dword ptr [esp+4] 
not         eax  
test        al,1 
je          do_if_even+17h (401017h)
{...

if (!(i%2))
mov         eax,dword ptr [esp+4] 
and         eax,80000001h 
jns         do_if_even+10h (401010h) 
dec         eax  
or          eax,0FFFFFFFEh 
inc         eax  
(401010h): jne         do_if_even+1Fh (40101Fh) 
{...

if (!(i&1))
test        byte ptr [esp+4],1 
jne         do_if_even+14h (401014h) 
{...
в if (!(i%2)) лажанулся

есть один нюанс во всех случаях: 0 будет считаться четным.
Ads
Закрытая тема

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверка числа на четность Network22 С/С++ 12 29.01.2010 14:44
Проблема с проверкой совпадений alexnike DHTML, JavaScript, VBScript 10 07.04.2008 16:36
Программа, проверяющая число на четность в С++ Charlie Rat Вопросы начинающих программистов 15 09.11.2007 17:04
Алгоритм расшифровки BMP с проверкой на 'BM' MAKTECYMA Visual C++ 6 26.04.2007 17:11
Проблема с проверкой совпадений HellFire PHP 5 07.03.2007 16:25
Программа с проверкой ввода цифр pEANUT wOLF Вопросы начинающих программистов 5 09.12.2006 11:36
Проектирование программы T_Volkova_81 Общие вопросы создания ПО 2 11.10.2006 07:53
Создание программы на поиск всех натуральных чисел не превосходящих числа m FARA Вопросы начинающих программистов 2 07.12.2005 12:58
Четность списка ValeryVo Prolog 4 02.11.2005 21:45
Создание таблицы с проверкой polecat SQL 4 26.10.2005 14:53
как сделать проверку на четность в Delphi Anonymous Вопросы начинающих программистов 1 17.12.2003 16:30
Создание программы на Pascale, внедрение натурального числа Boombastik Вопросы начинающих программистов 7 15.01.2003 18:44



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов