Поиск:

Ответ в темуСоздание новой темы Создание опроса
> отнять 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   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

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


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

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


 




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


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

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