Поиск:

Ответ в темуСоздание новой темы Создание опроса
> отнять 1 от переменной, не используя практически ничего 
:(
    Опции темы
Darksquall
  Дата 1.4.2004, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 326
Регистрация: 22.1.2004
Где: Москва

Репутация: нет
Всего: 4



Как отнять 1 от переменной,не используя ни + ни -ни = ни отрицательные числа ,есть только inc,loop и обнуление переменной.
Я так понимаю цикл от 1 до значения переменнной на единицу меньше самой переменной. но учитывая что нет минуса,то .... :-(
P.S. Кошмар


--------------------
PM WWW ICQ   Вверх
oleg1973
Дата 1.4.2004, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


asm fanat
****


Профиль
Группа: Экс. модератор
Сообщений: 3283
Регистрация: 16.7.2003
Где: Italy

Репутация: нет
Всего: 34



ну если есть inc значит есть и dec
dec eax к примеру


--------------------
SST 465555
icq 200-512-712
PM MAIL WWW ICQ   Вверх
maxim1000
Дата 1.4.2004, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 33
Всего: 110



если переменная 16-битная (к примеру), то можно попробовать 65535 раз прибавить 1
а вообще, если бы мне кто-то рассказал, как точно работает loop, можно было бы еще подумать (а то этого ассемблера я не знаю)


--------------------
qqq
PM WWW   Вверх
cardinal
Дата 1.4.2004, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 5
Всего: 99



В ecx число, от которого надо отнять 1, а в eax результат
Код
_asm
{
       mov ecx, 0x0A
       xor eax, eax; обнуление

       loop L
   L:
       inc eax
       loop L
}



--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Darksquall
Дата 1.4.2004, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 326
Регистрация: 22.1.2004
Где: Москва

Репутация: нет
Всего: 4



Ребят вы не так поняли :-),это не асм.А задачка,считается что в языке всего 3 команды inc(x) ,zero(x) и loop(x) при чем если в цикле меняется х то количество оборотов цикла не изменится.Во как.Мучаюсь и никак.Есть процедура нахождения разницы
все что в {} это внутренность цикла.

function raznica(v1,v2)
loop(v2) {dec(v1)}

результат сохраняется в v1
но нет самого Dec. :-(


--------------------
PM WWW ICQ   Вверх
cardinal
Дата 1.4.2004, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 5
Всего: 99



v1 - число для декрементации
v2 - результат

Код
zero(v2)
loop(v1)
{
   loop(v1)
   {
       inc(v2)
   }
}



--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
p0s0l
Дата 1.4.2004, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: нет
Всего: 112



Цитата
В ecx число, от которого надо отнять 1, а в eax результат

Код 
_asm
{
       mov ecx, 0x0A
       xor eax, eax; обнуление

       loop L
   L:
       inc eax
       loop L
}

В таком случае (на асме) проще было бы так, без цикла:
Код
mov ecx, 0x0A
loop L
L: // ecx содержит результат


Код
Введем функцию (или макрос) для присвоения:
function assign(v2, v1) // v2 станет равно v1
{
 zero(v2);
 zero(v3); // v3 - временная переменная
 loop(v1){ inc(v2); inc(v3); } // v2 := v1; v3 := v1; v1 := 0
 loop(v3){ inv(v1) } // v1 := v3
}

Теперь так:
function dec(a) // a уменьшится на 1
{
 zero(c);
 loop(a) { assign(b, c); inc(c) }
 assign(a, b); // a := b
}

Правда, если декрементировать 0, то ничего не продекрементируется...

ЗЫ: если loop(x) не обнуляет x, то assign будет таким:
function assign(v2, v1)
{ zero(v2);
loop(v1) { inc(v2) } }


Это сообщение отредактировал(а) p0s0l - 1.4.2004, 20:03


--------------------
С уважением, г-н Посол.
PM   Вверх
cardinal
Дата 1.4.2004, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 5
Всего: 99



Цитата
В таком случае (на асме) проще было бы так, без цикла...

Даааа... Видимо мне очень захотелось inc сделать smile.gif




--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
p0s0l
Дата 1.4.2004, 20:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: нет
Всего: 112



Не обратил внимания на
Цитата
при чем если в цикле меняется х то количество оборотов цикла не изменится

Тогда можно проще (с учетом что loop(x) не обнуляет x):
Код
zero(v2);
loop(v1)
{
  zero(v1);
  loop(v2) { inc(v1) }
  inc(v2);
}

Чем-то даже походит на пост cardinal smile.gif, правда побольше... Хотя, как понимаю, он вычислил не декремент, а квадрат числа...
Что еще можно тут сбацать? Синус поди кто-нить сделает?




--------------------
С уважением, г-н Посол.
PM   Вверх
Sardar
Дата 1.4.2004, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 1
Всего: 317



Было бы инвертирование, тогда запросто:
Код

invert(v)
inc(v)
invert(v)



--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
cardinal
Дата 1.4.2004, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 5
Всего: 99



Цитата
при чем если в цикле меняется х то количество оборотов цикла не изменится

Да я этого тоже не видел withstupid.gif

Цитата
Чем-то даже походит на пост cardinal , правда побольше...

Да я тебе просто идею хотел подкинуть wink.gif. Да не, на самом деле если бы я внимательней читал и получше бы мог это... без компилятора... бацать smile.gif

А так для отмазки smile.gif:
loop'ы бывают разные и если бы число в этих менялось, то моя фишка кавадрат бы не высчитывала. Объясняю ход моих мыслей:
Код
void loop1(int x, int& y);
void loop2(int& x, int& y);

int result;
result = 0;
loop1(5, result); // первый loop

void loop1(int x, int& y)
{
   if (x==0) return;
       x--;

   loop2(x, y); // второй loop

   loop1(x, y);
}

void loop2(int& x, int& y)
{
   if (x==0) return;
   x--;

   y++; // inc(v2)

   loop2(x, y);
}

Это был ход моих мыслей... smile.gif


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Darksquall
Дата 2.4.2004, 09:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 326
Регистрация: 22.1.2004
Где: Москва

Репутация: нет
Всего: 4



Цитата(p0s0l @ 1.4.2004, 20:37)
Код
zero(v2);
loop(v1)
{
  zero(v1);
  loop(v2) { inc(v1) }
  inc(v2);
}


Огромное спасибище :-),смотрю и не понимаю как до меня не дошло.
Вообще есть еще одна проблема теперь нужно raznicey и Decom разделить одно число на другое,при наличии if я и сам могу,вот: funccion divs (v1,v2)
zero(v4)
loop (v1)
{raznica(v1,v2)
if v1>=0 then inc(v4)
}
а вот без if чето не получается,там же как,деление это вычитание из делимого делителя n раз, и n и есть то что получилось


--------------------
PM WWW ICQ   Вверх
Arush
Дата 2.4.2004, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 10.11.2003

Репутация: нет
Всего: 1



Так какая задача-то стоит?
Может там и деление не требуется ?
PM MAIL   Вверх
Arush
Дата 2.4.2004, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 10.11.2003

Репутация: нет
Всего: 1



И кстати, сколько раз выполнится loop(х) если х отрицательное?
И есть ли вообще отрицательные числа?

PM MAIL   Вверх
cardinal
Дата 2.4.2004, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 5
Всего: 99



Попробуй так:

v1 - делимое
v2 - делитель
v3 - результат

Код
delenie(v1, v2)
{
   zero(v3)
   inc(v1)
   loop(v1)
   {
       raznica(v1,v2)
       loop(v1) { inc(v3) }
       dec(v1)
       loop(v1) { dec(v3) }
       inc(v1)
   }
}



--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
LSD
Дата 3.4.2004, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: нет
Всего: 538



числа считаются целыми и положительными
x - начальное значение
y - результат

y := 0; // можно использовать y * 0.(9) округленное вниз для уменьшения количества итераций
while ( (y+1) mod x ) <> 0 do
inc(y);


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
cardinal
Дата 4.4.2004, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 5
Всего: 99



mod то напиши smile.gif,
а так я тот же принцип описал.


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Darksquall
Дата 5.4.2004, 09:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 326
Регистрация: 22.1.2004
Где: Москва

Репутация: нет
Всего: 4



О то что надо.Big big big thanks :-))))


--------------------
PM WWW ICQ   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0619 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.