Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 08.01.2013, 14:21
Nevil_White Nevil_White вне форума
Прохожий
 
Регистрация: 28.10.2012
Адрес: Киев
Сообщения: 27
Версия Delphi: 7
Репутация: 10
По умолчанию Как узнать парное число или нет?

Дали задание, последовательность чисел. Нужно узнать количество парных.
Как бы все просто это цикл, а как узнать парное число или нет?
Ответить с цитированием
  #2  
Старый 08.01.2013, 14:30
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Цитата:
Определение: Два простых числа N1 и N2, где N2> N1 называются парными, если N2 - N1 = 2.
как-то так...
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #3  
Старый 08.01.2013, 14:32
Nevil_White Nevil_White вне форума
Прохожий
 
Регистрация: 28.10.2012
Адрес: Киев
Сообщения: 27
Версия Delphi: 7
Репутация: 10
По умолчанию

Мм, уже сам догадался.
программно это будет так:
Код:
if (a mod 2 =0)
Ответить с цитированием
  #4  
Старый 08.01.2013, 14:35
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

через mod можно узнать четное число или нет, а не парные числа.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #5  
Старый 11.01.2013, 05:05
Nevil_White Nevil_White вне форума
Прохожий
 
Регистрация: 28.10.2012
Адрес: Киев
Сообщения: 27
Версия Delphi: 7
Репутация: 10
По умолчанию

Продолжаем по теме:
Код:
program zadanie9;
type charset=set of byte;

var set1:set of 1..30;
j,i,res:integer;

begin
    j:=0;

    set1:=[15,4,5,7,9,6,4,8,5,2,3,19,13,13,17,19,15,11,3,22,27,26,24,27,25,29,14,9,13,21];
    
    
    for i:=1 to 30 do
    begin
        if i in set1 then j:=i;

        begin
   
        if (j mod 2=0) then res:=res+1;
        end;
    end;
    writeln('Четных чисел: ', res);

end.
Проблема в том что в результат не правильный, а массив использовать нельзя
Ответить с цитированием
  #6  
Старый 11.01.2013, 07:36
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,096
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от Nevil_White
Продолжаем по теме:
Код:
program zadanie9;
type charset=set of byte;

var set1:set of 1..30;
j,i,res:integer;

begin
    j:=0;

    set1:=[15,4,5,7,9,6,4,8,5,2,3,19,13,13,17,19,15,11,3,22,27,26,24,27,25,29,14,9,13,21];
    
    
    for i:=1 to 30 do
    begin
        if i in set1 then j:=i;

        begin
   
        if (j mod 2=0) then res:=res+1;
        end;
    end;
    writeln('Четных чисел: ', res);

end.
Проблема в том что в результат не правильный, а массив использовать нельзя

Что занчит "нельзя использовать массив"? А откуда ты будешь брать числа? С консоли?

Да, и еще, а кто будет res инициализировать?

ЗЫ. Вроде ты хотел парные числа, или все-таки четные нужны?
Ответить с цитированием
  #7  
Старый 12.01.2013, 18:19
Аватар для D_E_N_
D_E_N_ D_E_N_ вне форума
Прохожий
 
Регистрация: 27.06.2012
Сообщения: 15
Репутация: 10
По умолчанию

"парные" и "четные" - одно и то же.

Самый быстрый способ определения четности:

Код:
if N or 1 = N then writeln('Число N нечетное') else writeln('число N четное');
Ответить с цитированием
  #8  
Старый 13.01.2013, 10:41
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Цитата:
Сообщение от D_E_N_
"парные" и "четные" - одно и то же.
читай 2-ой пост.

Цитата:
Сообщение от D_E_N_
Самый быстрый способ определения четности:
Код:
if N or 1 = N then writeln('Число N нечетное') else writeln('число N четное');
если б еще рабочим был)))
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #9  
Старый 13.01.2013, 11:36
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,096
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от NumLock
если б еще рабочим был)))

Угу. Хотя поправить легко
Код:
if N or 1 = 1 then writeln('Число N нечетное') else writeln('число N четное');

Видимо, описка.
Ответить с цитированием
  #10  
Старый 13.01.2013, 12:21
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

N and 1 = 1 вроде так должно быть?
01010111
and
00000001
=
00000001
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #11  
Старый 13.01.2013, 14:08
Аватар для D_E_N_
D_E_N_ D_E_N_ вне форума
Прохожий
 
Регистрация: 27.06.2012
Сообщения: 15
Репутация: 10
По умолчанию

Цитата:
Сообщение от NumLock
если б еще рабочим был)))

А он рабочий. Пусть N=1010110 - четное число, тогда
N: 1010110
or
1: 0000001
=
1010111

1010111<>1010110, так что N изменилось, значит у него изначально не стоял самый младший бит нечетности, значит число четное.

Ну, и наоборот, если оно изначально нечетное.
Ответить с цитированием
  #12  
Старый 13.01.2013, 14:10
Аватар для D_E_N_
D_E_N_ D_E_N_ вне форума
Прохожий
 
Регистрация: 27.06.2012
Сообщения: 15
Репутация: 10
По умолчанию

Цитата:
Сообщение от M.A.D.M.A.N.
N and 1 = 1 вроде так должно быть?
01010111
and
00000001
=
00000001

тоже вариант, но работает слегка медленней, так как сбрасываются все биты, кроме одного. но ничего, это заметно разве что на аппаратном уровне.
Ответить с цитированием
  #13  
Старый 13.01.2013, 15:43
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Цитата:
тоже вариант, но работает слегка медленней, так как сбрасываются все биты, кроме одного. но ничего, это заметно разве что на аппаратном уровне
Мда. Вообще-то оба числа загружаются в АЛУ, после чего выполняется операция и считывается результат. Даже если число не изменилось вообще, оно будет перезаписано. При этом в АЛУ все операции (логические и +/-) выполняются одновременно над всеми битами. Поэтому скорость абсолютно одинаковая с этой точки зрения.
А вот с другой стороны скорость примера D_E_N_ гораздо ниже. Потому что все логические операции меняют флаги, в т.ч. флаг нуля. Если делать and 1
Код:
mov eax, [N]
and eax, 1
jz ...
; или даже
test [N], 1
jz ...
то в результате будет либо 0, либо 1. В первом случае установится флаг нуля, во втором - сбросится. То есть сравнение производится в 1 команду. А если делать вариант с N or 1 <> N, то надо сначала применить or, а потом еще и сравнить с N (в то время как сравнение гораздо дольше логических операций). И добавляется еще копирование числа между регистрами.
Код:
mov eax, [N]
mov ebx, eax
or eax, 1
cmp eax, ebx
jz ....
Именно поэтому делфийский ODD компилится в первый вариант.
Вопрос только в том, почему мы уже 7 постов подряд обсуждаем четные/нечетные, в то время как парные - совсем другое. Для неверующих - 2 пост в помощь.
Чтобы проверить парность чисел, одно число должно быть на 2 меньше другого, то есть надо их вычесть и результат сравнить с 2.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.

Последний раз редактировалось Bargest, 13.01.2013 в 16:03.
Ответить с цитированием
  #14  
Старый 13.01.2013, 17:20
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
Смех

Цитата:
Сообщение от D_E_N_
А он рабочий.
он не отвечает на вопрос парные числа или нет.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #15  
Старый 14.01.2013, 00:16
Nevil_White Nevil_White вне форума
Прохожий
 
Регистрация: 28.10.2012
Адрес: Киев
Сообщения: 27
Версия Delphi: 7
Репутация: 10
По умолчанию

На самом деле число которое делиться на 2 без остатка.
А то парное, четное, люди, я в этом не сильно, с массивом легко воплотить, уже даже знаю как.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 09:58.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025